null+****@clear*****
null+****@clear*****
2011年 11月 7日 (月) 15:51:55 JST
Kouhei Sutou 2011-11-07 06:51:55 +0000 (Mon, 07 Nov 2011)
New Revision: 3f2a3faae7a0292d3b82d0d25dd3845c8537f2f4
Log:
[test][truncate] add tests for truncating named tables. refs #892
Modified files:
test/unit/core/test-table.c
Modified: test/unit/core/test-table.c (+92 -1)
===================================================================
--- test/unit/core/test-table.c 2011-11-07 06:19:17 +0000 (7ce86c0)
+++ test/unit/core/test-table.c 2011-11-07 06:51:55 +0000 (41e5e37)
@@ -39,12 +39,14 @@ void data_create_with_invalid_name(void);
void test_create_with_invalid_name(gpointer data);
void data_truncate_anonymous(void);
void test_truncate_anonymous(gconstpointer data);
+void data_truncate_named(void);
+void test_truncate_named(gconstpointer data);
static gchar *tmp_directory;
static grn_logger_info *logger;
static grn_ctx *context;
-static grn_obj *database, *table;
+static grn_obj *database, *table, *column, buffer;
void
cut_startup(void)
@@ -83,11 +85,17 @@ cut_setup(void)
NULL);
table = NULL;
+ column = NULL;
+ GRN_VOID_INIT(&buffer);
}
void
cut_teardown(void)
{
+ grn_obj_unlink(context, &buffer);
+ if (column) {
+ grn_obj_unlink(context, column);
+ }
if (table) {
grn_obj_unlink(context, table);
}
@@ -518,3 +526,86 @@ test_truncate_anonymous(gconstpointer data)
grn_test_assert(grn_table_truncate(context, table));
cut_assert_equal_uint(0, grn_table_size(context, table));
}
+
+void
+data_truncate_named(void)
+{
+#define ADD_DATA(label, flags) \
+ gcut_add_datum(label, \
+ "flags", G_TYPE_INT, flags, \
+ NULL)
+
+ ADD_DATA("array", GRN_OBJ_TABLE_NO_KEY);
+ ADD_DATA("hash", GRN_OBJ_TABLE_HASH_KEY);
+ ADD_DATA("patricia trie", GRN_OBJ_TABLE_PAT_KEY);
+
+#undef ADD_DATA
+}
+
+void
+test_truncate_named(gconstpointer data)
+{
+ grn_obj_flags flags;
+ const gchar *table_name = "SearchEngines";
+ const gchar *key;
+ grn_obj *key_type;
+ unsigned key_size;
+ const gchar *column_name = "description";
+ grn_obj *column_type;
+ const gchar *column_value = "An open-source fulltext search engine";
+ grn_bool array_p;
+ grn_id record_id;
+ int added;
+
+ flags = gcut_data_get_int(data, "flags");
+ array_p = ((flags & GRN_OBJ_TABLE_TYPE_MASK) == GRN_OBJ_TABLE_NO_KEY);
+
+ if (array_p) {
+ key = NULL;
+ key_size = 0;
+ key_type = NULL;
+ } else {
+ key = "groonga";
+ key_size = strlen(key);
+ key_type = grn_ctx_at(context, GRN_DB_SHORT_TEXT);
+ }
+ table = grn_table_create(context,
+ table_name, strlen(table_name), NULL,
+ flags | GRN_OBJ_PERSISTENT,
+ key_type, NULL);
+ if (key_type) {
+ grn_obj_unlink(context, key_type);
+ }
+ grn_test_assert_context(context);
+
+ column_type = grn_ctx_at(context, GRN_DB_SHORT_TEXT);
+ column = grn_column_create(context, table, column_name, strlen(column_name),
+ NULL,
+ GRN_OBJ_COLUMN_SCALAR | GRN_OBJ_PERSISTENT,
+ column_type);
+ grn_obj_unlink(context, column_type);
+ grn_test_assert_context(context);
+
+ record_id = grn_table_add(context, table, key, key_size, &added);
+ grn_test_assert_not_nil(record_id);
+ cut_assert_true(added);
+
+ grn_obj_reinit(context, &buffer, GRN_DB_SHORT_TEXT, 0);
+ GRN_TEXT_PUTS(context, &buffer, column_value);
+ grn_test_assert(grn_obj_set_value(context, column, record_id,
+ &buffer, GRN_OBJ_SET));
+
+ GRN_BULK_REWIND(&buffer);
+ grn_obj_get_value(context, column, record_id, &buffer);
+ GRN_TEXT_PUTC(context, &buffer, '\0');
+ cut_assert_equal_string(column_value, GRN_TEXT_VALUE(&buffer));
+ cut_assert_equal_uint(1, grn_table_size(context, table));
+
+ grn_test_assert(grn_table_truncate(context, table));
+
+ GRN_BULK_REWIND(&buffer);
+ grn_obj_get_value(context, column, record_id, &buffer);
+ GRN_TEXT_PUTC(context, &buffer, '\0');
+ cut_assert_equal_string("", GRN_TEXT_VALUE(&buffer));
+ cut_assert_equal_uint(0, grn_table_size(context, table));
+}