26 #include "../lib/grn-assertions.h"
41 static gchar *tmp_directory;
57 g_free(tmp_directory);
61 remove_tmp_directory(
void)
63 cut_remove_path(tmp_directory, NULL);
69 const gchar *database_path;
71 remove_tmp_directory();
72 g_mkdir_with_parents(tmp_directory, 0700);
77 database_path = cut_build_path(tmp_directory,
"dump.db", NULL);
90 remove_tmp_directory();
95 const gchar *key_type_name,
const gchar *value_type_name)
98 grn_obj *key_type = NULL, *value_type = NULL;
109 key_type, value_type);
115 column_create(
const gchar *table_name,
const gchar *name,
grn_obj_flags flags,
116 const gchar *type_name,
const gchar *sources)
136 #define ADD_DATA(label, expected, name, flags, \
137 key_type_name, value_type_name) \
138 gcut_add_datum(label, \
139 "expected", G_TYPE_STRING, expected, \
140 "name", G_TYPE_STRING, name, \
141 "flags", G_TYPE_UINT, flags, \
142 "key_type_name", G_TYPE_STRING, key_type_name, \
143 "value_type_name", G_TYPE_STRING, value_type_name, \
147 data_hash_table_create(
void)
150 "table_create Blog TABLE_HASH_KEY ShortText",
156 "table_create Blog TABLE_HASH_KEY",
162 "table_create Blog TABLE_HASH_KEY ShortText --normalizer NormalizerAuto",
167 ADD_DATA(
"hash - key normalize - value",
168 "table_create Blog TABLE_HASH_KEY ShortText Int32 --normalizer NormalizerAuto",
176 data_patricia_trie_create(
void)
179 "table_create Blog TABLE_PAT_KEY ShortText",
187 data_double_array_trie_create(
void)
190 "table_create Blog TABLE_DAT_KEY ShortText",
198 data_array_create(
void)
201 "table_create Blog TABLE_NO_KEY",
207 "table_create Blog TABLE_NO_KEY --value_type Int32",
217 data_hash_table_create();
218 data_patricia_trie_create();
219 data_double_array_trie_create();
227 table_create(gcut_data_get_string(data,
"name"),
228 gcut_data_get_uint(data,
"flags"),
229 gcut_data_get_string(data,
"key_type_name"),
230 gcut_data_get_string(data,
"value_type_name"));
231 cut_assert_equal_string(gcut_data_get_string(data,
"expected"),
235 #define ADD_DATA(label, expected, table, name, flags, type_name, source)\
236 gcut_add_datum(label, \
237 "expected", G_TYPE_STRING, expected, \
238 "table", G_TYPE_STRING, table, \
239 "name", G_TYPE_STRING, name, \
240 "flags", G_TYPE_UINT, flags, \
241 "type_name", G_TYPE_STRING, type_name, \
242 "source", G_TYPE_STRING, source, \
249 "column_create Blog body COLUMN_SCALAR Text",
256 "column_create Blog body COLUMN_VECTOR Text",
268 const gchar *expected;
269 table_create(
"Blog", 0, NULL, NULL);
270 column_create(gcut_data_get_string(data,
"table"),
271 gcut_data_get_string(data,
"name"),
272 gcut_data_get_uint(data,
"flags"),
273 gcut_data_get_string(data,
"type_name"),
274 gcut_data_get_string(data,
"source"));
275 expected = gcut_data_get_string(data,
"expected");
276 cut_assert_equal_string(
277 cut_take_printf(
"table_create Blog TABLE_HASH_KEY\n%s", expected),
281 #define ADD_DATA(label, expected, type_name, element_type, \
282 first_element, second_element, third_element) do { \
283 gcut_add_datum(label, \
284 "expected", G_TYPE_STRING, expected, \
285 "type_name", G_TYPE_STRING, type_name, \
286 "first_element", element_type, first_element, \
287 "second_element", element_type, second_element, \
288 "third_element", element_type, third_element, \
295 ADD_DATA(
"int32",
"[-322,7,9270]",
"Int32",
296 G_TYPE_INT, -322, 7, 9270);
297 ADD_DATA(
"float",
"[0.5,12.5,-1.0]",
"Float",
298 G_TYPE_DOUBLE, 0.5, 12.5, -1.0);
299 ADD_DATA(
"bool",
"[true,false,true]",
"Bool",
306 ADD_DATA(
"text",
"[\"groonga\",\"is\",\"cool\"]",
"Text",
307 G_TYPE_STRING,
"groonga",
"is",
"cool");
313 construct_elements(gconstpointer data)
315 const int n_of_elements = 3;
317 const gchar *type_name;
319 elements = g_new0(
grn_obj, n_of_elements);
320 type_name = gcut_data_get_string(data,
"type_name");
322 #define SET_VALUE(index, name) \
323 if (g_str_equal(type_name, "Int32")) { \
324 GRN_INT32_INIT(&elements[index], 0); \
325 GRN_INT32_SET(context, &elements[index], \
326 gcut_data_get_int(data, name)); \
327 } if (g_str_equal(type_name, "Float")) { \
328 GRN_FLOAT_INIT(&elements[index], 0); \
329 GRN_FLOAT_SET(context, &elements[index], \
330 gcut_data_get_double(data, name)); \
331 } if (g_str_equal(type_name, "Bool")) { \
332 GRN_BOOL_INIT(&elements[index], 0); \
333 GRN_BOOL_SET(context, &elements[index], \
334 gcut_data_get_boolean(data, name)); \
335 } if (g_str_equal(type_name, "Text")) { \
336 GRN_TEXT_INIT(&elements[index], 0); \
337 GRN_TEXT_SETS(context, &elements[index], \
338 gcut_data_get_string(data, name)); \
347 cut_take_memory(elements);
355 const gchar *expected;
360 const gchar *type_name;
361 type_name = gcut_data_get_string(data,
"type_name");
371 cut_assert_equal_int(1,
id);
372 elements = construct_elements(data);
383 expected = cut_take_printf(
"table_create Table TABLE_NO_KEY\n"
384 "column_create Table Column COLUMN_VECTOR %s\n"
385 "load --table Table\n"
387 "[\"_id\",\"Column\"],\n"
391 gcut_data_get_string(data,
"expected"));
392 cut_assert_equal_string(expected,
send_command(
"dump"));
399 const gchar *expected;
404 const gchar *type_name;
405 type_name = gcut_data_get_string(data,
"type_name");
415 cut_assert_equal_int(1,
id);
416 elements = construct_elements(data);
430 expected = cut_take_printf(
"table_create Table TABLE_NO_KEY\n"
431 "column_create Table Column COLUMN_VECTOR %s\n"
432 "load --table Table\n"
434 "[\"_id\",\"Column\"],\n"
438 gcut_data_get_string(data,
"expected"));
439 cut_assert_equal_string(expected,
send_command(
"dump"));
447 grn_id id, expected_id = 1;
448 const gchar *keys[] = {
"Sun",
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat"};
449 int i, n_keys =
sizeof(keys) /
sizeof(keys[0]);
454 for (i = 0; i < n_keys; ++
i) {
455 id =
grn_table_add(context, table, keys[i], strlen(keys[i]), NULL);
456 cut_assert_equal_int(expected_id++,
id);
463 cut_assert_equal_string(
"table_create Weekdays TABLE_HASH_KEY ShortText\n"
464 "load --table Weekdays\n"
483 cut_assert_equal_string(
490 cut_assert_equal_string(
497 cut_assert_equal_string(
"table_create Users TABLE_HASH_KEY ShortText\n"
498 "table_create Initials TABLE_PAT_KEY ShortText\n"
499 "column_create Users initial COLUMN_SCALAR Initials\n"
500 "load --table Users\n"
502 "[\"_key\",\"initial\"],\n"
505 "load --table Initials\n"
517 const gchar *commands =
518 "table_create users TABLE_HASH_KEY Int32\n"
519 "column_create users name COLUMN_SCALAR ShortText\n"
520 "table_create comments TABLE_PAT_KEY ShortText\n"
521 "column_create comments text COLUMN_SCALAR ShortText\n"
522 "column_create comments author COLUMN_VECTOR users\n"
523 "load --table users\n"
525 "[\"_key\",\"name\"],\n"
526 "[1000,\"ryoqun\"],\n"
527 "[1001,\"hayamiz\"]\n"
529 "load --table comments\n"
531 "[\"_key\",\"author\",\"text\"],\n"
532 "[\"groonga\",[1000,1001],\"it is fast\"]\n"
536 cut_assert_equal_string(commands,
send_command(
"dump"));
542 const gchar *define_schema_commands =
543 "table_create users TABLE_HASH_KEY Int32\n"
544 "column_create users name COLUMN_SCALAR ShortText\n"
545 "table_create comments TABLE_PAT_KEY ShortText\n"
546 "column_create comments text COLUMN_SCALAR ShortText\n"
547 "table_create sites TABLE_NO_KEY\n"
548 "column_create sites url COLUMN_SCALAR ShortText\n"
549 "column_create comments author COLUMN_VECTOR users";
550 const gchar *load_users_commands =
551 "load --table users\n"
553 "[\"_key\",\"name\"],\n"
554 "[1000,\"ryoqun\"],\n"
555 "[1001,\"hayamiz\"]\n"
557 const gchar *load_comments_commands =
558 "load --table comments\n"
560 "[\"_key\",\"text\",\"author\"],\n"
561 "[\"groonga\",\"it is fast\",[1000,1001]]\n"
563 const gchar *load_sites_commands =
564 "load --table sites\n"
566 "[\"_id\",\"url\"],\n"
567 "[1,\"http://groonga.org/\"],\n"
568 "[2,\"http://qwik.jp/senna/\"]\n"
575 cut_assert_equal_string(cut_take_printf(
"%s\n"
578 define_schema_commands,
580 load_sites_commands),