[Groonga-commit] groonga/groonga at 444915d [master] Use UInt32 for reinited domain

Back to archive index

Kouhei Sutou null+****@clear*****
Sun Nov 9 00:13:15 JST 2014


Kouhei Sutou	2014-11-09 00:13:15 +0900 (Sun, 09 Nov 2014)

  New Revision: 444915dfadc0af50a35b7d5dc85e30d6104abaeb
  https://github.com/groonga/groonga/commit/444915dfadc0af50a35b7d5dc85e30d6104abaeb

  Message:
    Use UInt32 for reinited domain
    
    Because grn_obj_reinit_for() is for grn_obj_get_value(). It should set
    the same type as grn_obj_get_value(). (grn_obj_get_value() sets domain,
    so we don't need to set correct the valid domain before calling
    grn_obj_get_value().)

  Modified files:
    lib/db.c

  Modified: lib/db.c (+35 -4)
===================================================================
--- lib/db.c    2014-11-09 00:07:06 +0900 (d4282a4)
+++ lib/db.c    2014-11-09 00:13:15 +0900 (a902ffa)
@@ -4527,6 +4527,33 @@ grn_column_is_vector(grn_ctx *ctx, grn_obj *column)
   return type == GRN_OBJ_COLUMN_VECTOR;
 }
 
+inline static grn_bool
+grn_column_is_index(grn_ctx *ctx, grn_obj *column)
+{
+  grn_obj_flags type;
+
+  if (column->header.type == GRN_ACCESSOR) {
+    grn_accessor *a;
+    for (a = (grn_accessor *)column; a; a = a->next) {
+      if (a->next) {
+        continue;
+      }
+      if (a->action != GRN_ACCESSOR_GET_COLUMN_VALUE) {
+        return GRN_FALSE;
+      }
+
+      column = a->obj;
+    }
+  }
+
+  if (column->header.type != GRN_COLUMN_INDEX) {
+    return GRN_FALSE;
+  }
+
+  type = column->header.flags & GRN_OBJ_COLUMN_TYPE_MASK;
+  return type == GRN_OBJ_COLUMN_INDEX;
+}
+
 inline static void
 grn_obj_get_range_info(grn_ctx *ctx, grn_obj *obj,
                        grn_id *range_id, grn_obj_flags *range_flags)
@@ -8433,10 +8460,14 @@ grn_obj_reinit_for(grn_ctx *ctx, grn_obj *obj, grn_obj *domain_obj)
     return ctx->rc;
   }
 
-  grn_obj_get_range_info(ctx, domain_obj, &domain, &flags);
-  if (GRN_OBJ_TABLEP(domain_obj) &&
-      domain_obj->header.type != GRN_TABLE_NO_KEY) {
-    domain = domain_obj->header.domain;
+  if (grn_column_is_index(ctx, domain_obj)) {
+    domain = GRN_DB_UINT32;
+  } else {
+    grn_obj_get_range_info(ctx, domain_obj, &domain, &flags);
+    if (GRN_OBJ_TABLEP(domain_obj) &&
+        domain_obj->header.type != GRN_TABLE_NO_KEY) {
+      domain = domain_obj->header.domain;
+    }
   }
   return grn_obj_reinit(ctx, obj, domain, flags);
 }
-------------- next part --------------
HTML����������������������������...
下載 



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