[Groonga-commit] groonga/groonga [master] grn_ii_build() is used only when "USE_OFFLINE_INDEXER" environment variable is set "yes"

Back to archive index

null+****@clear***** null+****@clear*****
2012年 1月 19日 (木) 20:16:13 JST


Daijiro MORI	2012-01-19 20:16:13 +0900 (Thu, 19 Jan 2012)

  New Revision: f5eb3417a05b63b388764cad1528e67502dafe15

  Log:
    grn_ii_build() is used only when "USE_OFFLINE_INDEXER" environment variable is set "yes"

  Modified files:
    lib/db.c
    lib/ii.c

  Modified: lib/db.c (+27 -21)
===================================================================
--- lib/db.c    2012-01-19 19:56:19 +0900 (16ca5d6)
+++ lib/db.c    2012-01-19 20:16:13 +0900 (0c84f06)
@@ -5726,32 +5726,38 @@ build_index(grn_ctx *ctx, grn_obj *obj)
   if ((src = grn_ctx_at(ctx, *s))) {
     if ((target = GRN_OBJ_TABLEP(src) ? src : grn_ctx_at(ctx, src->header.domain))) {
       int i, ncol = DB_OBJ(obj)->source_size / sizeof(grn_id);
-      if ((col = GRN_MALLOC(ncol * sizeof(grn_obj *)))) {
-        for (cp = col, i = ncol; i; s++, cp++, i--) {
-          if (!(*cp = grn_ctx_at(ctx, *s))) {
-            ERR(GRN_INVALID_ARGUMENT, "source invalid, n=%d",i);
-            GRN_FREE(col);
-            return;
+      if (ncol == 1 && !GRN_OBJ_TABLEP(src) &&
+          getenv("USE_OFFLINE_INDEXER") &&
+          (!strcmp(getenv("USE_OFFLINE_INDEXER"), "yes"))) {
+        grn_ii_build(ctx, (grn_ii *)obj);
+      } else {
+        if ((col = GRN_MALLOC(ncol * sizeof(grn_obj *)))) {
+          for (cp = col, i = ncol; i; s++, cp++, i--) {
+            if (!(*cp = grn_ctx_at(ctx, *s))) {
+              ERR(GRN_INVALID_ARGUMENT, "source invalid, n=%d",i);
+              GRN_FREE(col);
+              return;
+            }
           }
-        }
-        if ((tc = grn_table_cursor_open(ctx, target, NULL, 0, NULL, 0,
-                                        0, -1, GRN_CURSOR_BY_ID))) {
-          GRN_TEXT_INIT(&rv, 0);
-          while ((id = grn_table_cursor_next_inline(ctx, tc)) != GRN_ID_NIL) {
-            for (cp = col, i = ncol; i; i--, cp++) {
-              GRN_BULK_REWIND(&rv);
-              if (GRN_OBJ_TABLEP(*cp)) {
-                grn_table_get_key2(ctx, *cp, id, &rv);
-              } else {
-                grn_obj_get_value(ctx, *cp, id, &rv);
+          if ((tc = grn_table_cursor_open(ctx, target, NULL, 0, NULL, 0,
+                                          0, -1, GRN_CURSOR_BY_ID))) {
+            GRN_TEXT_INIT(&rv, 0);
+            while ((id = grn_table_cursor_next_inline(ctx, tc)) != GRN_ID_NIL) {
+              for (cp = col, i = ncol; i; i--, cp++) {
+                GRN_BULK_REWIND(&rv);
+                if (GRN_OBJ_TABLEP(*cp)) {
+                  grn_table_get_key2(ctx, *cp, id, &rv);
+                } else {
+                  grn_obj_get_value(ctx, *cp, id, &rv);
+                }
+                call_hook_for_build(ctx, *cp, id, &rv, 0);
               }
-              call_hook_for_build(ctx, *cp, id, &rv, 0);
             }
+            GRN_OBJ_FIN(ctx, &rv);
+            grn_table_cursor_close(ctx, tc);
           }
-          GRN_OBJ_FIN(ctx, &rv);
-          grn_table_cursor_close(ctx, tc);
+          GRN_FREE(col);
         }
-        GRN_FREE(col);
       }
     } else {
       ERR(GRN_INVALID_ARGUMENT, "invalid target");

  Modified: lib/ii.c (+1 -0)
===================================================================
--- lib/ii.c    2012-01-19 19:56:19 +0900 (a1be7c6)
+++ lib/ii.c    2012-01-19 20:16:13 +0900 (280cbc5)
@@ -6828,6 +6828,7 @@ grn_ii_build(grn_ctx *ctx, grn_ii *ii)
     }
   }
   GRN_FREE(builder.blocks);
+  rc = GRN_SUCCESS; /* FIXME */
 exit :
   return rc;
 }




Groonga-commit メーリングリストの案内
Back to archive index