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/)