[groonga-dev,00035] 一時テーブルが作成できない

アーカイブの一覧に戻る

Kouhei Sutou kou****@clear*****
2009年 4月 15日 (水) 10:35:51 JST


須藤です。

GRN_OBJ_PERSISTENTを指定せずにgrn_table_create()でテーブルを
作成しても永続テーブルになってしまいます。

GRN_{ARRAY,HASH}_TINYをGRN_OBJ_TEMPORARYにする方がよい気もし
ますが、とりあえず、grn_table_create()でごにょごにょするパッ
チです。

diff --git a/lib/db.c b/lib/db.c
index 0c1f05e..6711aee 100644
--- a/lib/db.c
+++ b/lib/db.c
@@ -509,12 +509,16 @@ grn_table_create(grn_ctx *ctx, const char *name, unsigned name_size,
                 &subrec_offset, &key_size, &value_size);
   switch (flags & GRN_OBJ_TABLE_TYPE_MASK) {
   case GRN_OBJ_TABLE_HASH_KEY :
+    if (!(flags & GRN_OBJ_PERSISTENT))
+      flags |= GRN_HASH_TINY;
     res = (grn_obj *)grn_hash_create(ctx, path, key_size, value_size, flags, encoding);
     break;
   case GRN_OBJ_TABLE_PAT_KEY :
     res = (grn_obj *)grn_pat_create(ctx, path, key_size, value_size, flags, encoding);
     break;
   case GRN_OBJ_TABLE_NO_KEY :
+    if (!(flags & GRN_OBJ_PERSISTENT))
+      flags |= GRN_ARRAY_TINY;
     res = (grn_obj *)grn_array_create(ctx, path, value_size, flags);
     break;
   }
diff --git a/test/unit/core/test-table.c b/test/unit/core/test-table.c
index c58786f..19c9374 100644
--- a/test/unit/core/test-table.c
+++ b/test/unit/core/test-table.c
@@ -24,6 +24,8 @@
 #include "../lib/grn-assertions.h"
 
 void test_array_set_data(void);
+void test_array_create_temporary(void);
+void test_hash_create_temporary(void);
 
 static grn_logger_info *logger;
 static grn_ctx context;
@@ -66,3 +68,25 @@ test_array_set_data(void)
   retrieved_record_value = grn_obj_get_value(&context, table, record_id, NULL);
   cut_assert_equal_string(value, GRN_BULK_HEAD(retrieved_record_value));
 }
+
+void
+test_array_create_temporary(void)
+{
+  grn_obj *table;
+
+  table = grn_table_create(&context, NULL, 0, NULL,
+                           GRN_OBJ_TABLE_NO_KEY,
+                           NULL, sizeof(grn_id), GRN_ENC_DEFAULT);
+  cut_assert_equal_string(NULL, grn_obj_path(&context, table));
+}
+
+void
+test_hash_create_temporary(void)
+{
+  grn_obj *table;
+
+  table = grn_table_create(&context, NULL, 0, NULL,
+                           GRN_OBJ_TABLE_HASH_KEY,
+                           NULL, sizeof(grn_id), GRN_ENC_DEFAULT);
+  cut_assert_equal_string(NULL, grn_obj_path(&context, table));
+}

--
須藤 功平 <kou****@clear*****>

株式会社クリアコード (http://www.clear-code.com/)




groonga-dev メーリングリストの案内
アーカイブの一覧に戻る