[Groonga-commit] groonga/groonga [master] Support cast with INCR/DECR grn_obj_set_value() for VAR_SIZE SCALAR column

Back to archive index

Kouhei Sutou null+****@clear*****
Tue Feb 19 21:53:06 JST 2013


Kouhei Sutou	2013-02-19 21:53:06 +0900 (Tue, 19 Feb 2013)

  New Revision: 1b1e1a25712c84a0fc96459195d4c1f84a092d83
  https://github.com/groonga/groonga/commit/1b1e1a25712c84a0fc96459195d4c1f84a092d83

  Log:
    Support cast with INCR/DECR grn_obj_set_value() for VAR_SIZE SCALAR column
    
    They are used memcached protocol.

  Modified files:
    lib/db.c

  Modified: lib/db.c (+26 -3)
===================================================================
--- lib/db.c    2013-02-19 21:38:15 +0900 (9b553ec)
+++ lib/db.c    2013-02-19 21:53:06 +0900 (15fb098)
@@ -5026,16 +5026,39 @@ grn_obj_set_value_var_size_scalar(grn_ctx *ctx, grn_obj *obj, grn_id id,
   void *v = GRN_BULK_HEAD(value);
   unsigned int s = grn_obj_size(ctx, value);
   grn_obj buf;
+  grn_id buf_domain = GRN_DB_VOID;
+
+  switch (flags & GRN_OBJ_SET_MASK) {
+  case GRN_OBJ_INCR :
+  case GRN_OBJ_DECR :
+    if (value->header.domain == GRN_DB_INT32 ||
+        value->header.domain == GRN_DB_INT64) {
+      /* do nothing */
+    } else if (GRN_DB_INT8 <= value->header.domain &&
+               value->header.domain < GRN_DB_INT32) {
+      buf_domain = GRN_DB_INT32;
+    } else {
+      buf_domain = GRN_DB_INT64;
+    }
+    break;
+  default :
+    if (range != value->header.domain) {
+      buf_domain = range;
+    }
+    break;
+  }
 
-  if (range != value->header.domain) {
-    GRN_OBJ_INIT(&buf, GRN_BULK, 0, range);
+  if (buf_domain != GRN_DB_VOID) {
+    GRN_OBJ_INIT(&buf, GRN_BULK, 0, buf_domain);
     if (grn_obj_cast(ctx, value, &buf, GRN_TRUE) == GRN_SUCCESS) {
       v = GRN_BULK_HEAD(&buf);
       s = GRN_BULK_VSIZE(&buf);
     }
   }
+
   rc = grn_ja_put(ctx, (grn_ja *)obj, id, v, s, flags, NULL);
-  if (range != value->header.domain) {
+
+  if (buf_domain != GRN_DB_VOID) {
     grn_obj_close(ctx, &buf);
   }
 
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index