[Groonga-commit] groonga/groonga [master] grn_obj_defrag() accepts table. fixes #1175

Back to archive index

null+****@clear***** null+****@clear*****
2011年 11月 20日 (日) 13:27:50 JST


Kouhei Sutou	2011-11-20 04:27:50 +0000 (Sun, 20 Nov 2011)

  New Revision: a410a1141dde0a106246e37fb0069edc1ac89a9c

  Log:
    grn_obj_defrag() accepts table. fixes #1175

  Modified files:
    lib/db.c

  Modified: lib/db.c (+22 -0)
===================================================================
--- lib/db.c    2011-11-21 05:06:27 +0000 (f09f3e7)
+++ lib/db.c    2011-11-20 04:27:50 +0000 (9855a40)
@@ -7042,6 +7042,28 @@ grn_obj_defrag(grn_ctx *ctx, grn_obj *obj, int threshold)
       }
     }
     break;
+  case GRN_TABLE_HASH_KEY :
+  case GRN_TABLE_PAT_KEY :
+  case GRN_TABLE_DAT_KEY :
+  case GRN_TABLE_NO_KEY :
+    {
+      grn_hash *cols;
+      if ((cols = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+                                  GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY))) {
+        if (grn_table_columns(ctx, obj, "", 0, (grn_obj *)cols)) {
+          grn_id *key;
+          GRN_HASH_EACH(ctx, cols, id, &key, NULL, NULL, {
+            grn_obj *col = grn_ctx_at(ctx, *key);
+            if (col) {
+              r += grn_obj_defrag(ctx, col, threshold);
+              grn_obj_unlink(ctx, col);
+            }
+          });
+        }
+        grn_hash_close(ctx, cols);
+      }
+    }
+    break;
   case GRN_COLUMN_VAR_SIZE:
     r = grn_ja_defrag(ctx, (grn_ja *)obj, threshold);
     break;




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