[Groonga-commit] groonga/groonga [master] substituted grn_table_columns() for grn_obj_columns() in grn_table_truncate()

Back to archive index

null+****@clear***** null+****@clear*****
2011年 11月 7日 (月) 15:58:22 JST


Daijiro MORI	2011-11-07 06:58:22 +0000 (Mon, 07 Nov 2011)

  New Revision: fdd6810bcb9918c7c2f0050a7419e028cdf21b0c

  Log:
    substituted grn_table_columns() for grn_obj_columns() in grn_table_truncate()

  Modified files:
    lib/db.c

  Modified: lib/db.c (+10 -13)
===================================================================
--- lib/db.c    2011-11-07 02:34:00 +0000 (1c7ca2b)
+++ lib/db.c    2011-11-07 06:58:22 +0000 (7efe474)
@@ -1506,21 +1506,18 @@ grn_table_truncate(grn_ctx *ctx, grn_obj *table)
   GRN_API_ENTER;
   if (table) {
     grn_hook *hooks;
-    grn_obj cols, **p, **pe;
-    GRN_PTR_INIT(&cols, GRN_OBJ_VECTOR, GRN_ID_NIL);
-    if ((rc = grn_obj_columns(ctx, table, "", 0, &cols))) {
-      GRN_OBJ_FIN(ctx, &cols);
-      goto exit;
-    }
-    p = (grn_obj **)GRN_BULK_HEAD(&cols);
-    pe = (grn_obj **)GRN_BULK_CURR(&cols);
-    for (; p < pe; p++) {
-      if ((rc = grn_column_truncate(ctx, *p))) {
-        GRN_OBJ_FIN(ctx, &cols);
-        goto exit;
+    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, table, "", 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) { grn_column_truncate(ctx, col); }
+        });
       }
+      grn_hash_close(ctx, cols);
     }
-    GRN_OBJ_FIN(ctx, &cols);
     switch (table->header.type) {
     case GRN_TABLE_PAT_KEY :
       for (hooks = DB_OBJ(table)->hooks[GRN_HOOK_INSERT]; hooks; hooks = hooks->next) {




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