[Groonga-commit] groonga/groonga at c845d17 [master] mrb: support Bulk#value for record

Back to archive index

Kouhei Sutou null+****@clear*****
Tue Apr 28 15:24:59 JST 2015


Kouhei Sutou	2015-04-28 15:24:59 +0900 (Tue, 28 Apr 2015)

  New Revision: c845d17a4638989a8178c3d411ae93372ffede36
  https://github.com/groonga/groonga/commit/c845d17a4638989a8178c3d411ae93372ffede36

  Message:
    mrb: support Bulk#value for record

  Modified files:
    lib/mrb/mrb_bulk.c

  Modified: lib/mrb/mrb_bulk.c (+34 -14)
===================================================================
--- lib/mrb/mrb_bulk.c    2015-04-28 15:02:51 +0900 (0fa7472)
+++ lib/mrb/mrb_bulk.c    2015-04-28 15:24:59 +0900 (84cfb8d)
@@ -137,27 +137,47 @@ grn_mrb_value_from_bulk(mrb_state *mrb, grn_obj *bulk)
     break;
   default :
     {
-#define MESSAGE_SIZE 4096
-      char message[MESSAGE_SIZE];
       grn_obj *domain;
-      char domain_name[GRN_TABLE_MAX_KEY_SIZE];
-      int domain_name_size;
+      grn_bool is_record = GRN_FALSE;
 
       domain = grn_ctx_at(ctx, bulk->header.domain);
       if (domain) {
-        domain_name_size = grn_obj_name(ctx, domain,
-                                        domain_name, GRN_TABLE_MAX_KEY_SIZE);
+        switch (domain->header.type) {
+        case GRN_TABLE_HASH_KEY :
+        case GRN_TABLE_PAT_KEY :
+        case GRN_TABLE_DAT_KEY :
+        case GRN_TABLE_NO_KEY :
+          is_record = GRN_TRUE;
+          break;
+        default :
+          break;
+        }
+      }
+
+      if (is_record) {
+        mrb_value_ = mrb_fixnum_value(GRN_RECORD_VALUE(bulk));
         grn_obj_unlink(ctx, domain);
       } else {
-        grn_strcpy(domain_name, GRN_TABLE_MAX_KEY_SIZE, "unknown");
-        domain_name_size = strlen(domain_name);
+#define MESSAGE_SIZE 4096
+        char message[MESSAGE_SIZE];
+        char domain_name[GRN_TABLE_MAX_KEY_SIZE];
+        int domain_name_size;
+
+        if (domain) {
+          domain_name_size = grn_obj_name(ctx, domain,
+                                          domain_name, GRN_TABLE_MAX_KEY_SIZE);
+          grn_obj_unlink(ctx, domain);
+        } else {
+          grn_strcpy(domain_name, GRN_TABLE_MAX_KEY_SIZE, "unknown");
+          domain_name_size = strlen(domain_name);
+        }
+        grn_snprintf(message, MESSAGE_SIZE, MESSAGE_SIZE,
+                     "unsupported bulk value type: <%d>(%.*s)",
+                     bulk->header.domain,
+                     domain_name_size,
+                     domain_name);
+        mrb_raise(mrb, E_RANGE_ERROR, message);
       }
-      grn_snprintf(message, MESSAGE_SIZE, MESSAGE_SIZE,
-                   "unsupported bulk value type: <%d>(%.*s)",
-                   bulk->header.domain,
-                   domain_name_size,
-                   domain_name);
-      mrb_raise(mrb, E_RANGE_ERROR, message);
 #undef MESSAGE_SIZE
     }
     break;
-------------- next part --------------
HTML����������������������������...
下载 



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