20 #include <glib/gstdio.h>
22 #include "../lib/grn-assertions.h"
46 static gchar *tmp_directory;
47 static const gchar *database_path;
63 g_free(tmp_directory);
67 remove_tmp_directory(
void)
69 cut_remove_path(tmp_directory, NULL);
75 remove_tmp_directory();
76 g_mkdir_with_parents(tmp_directory, 0700);
81 database_path = cut_build_path(tmp_directory,
"database.groonga", NULL);
94 remove_tmp_directory();
103 cut_assert_equal_string(
105 send_command(
"load --table Users --columns '_key,name,desc'\n"
107 " [\"mori\", \"モリ\", \"タポ\"],\n"
108 " [\"tapo\", \"タポ\", \"モリモリモリタポ\"]\n"
110 cut_assert_equal_string(
"[[[2],"
112 "[\"_id\",\"UInt32\"],"
113 "[\"_key\",\"ShortText\"],"
114 "[\"desc\",\"ShortText\"],"
115 "[\"name\",\"ShortText\"]"
117 "[1,\"mori\",\"タポ\",\"モリ\"],"
118 "[2,\"tapo\",\"モリモリモリタポ\",\"タポ\"]"
126 cut_set_attributes(
"bug",
"123, 304",
133 #define ADD_DATUM(label, load_command) \
134 gcut_add_datum(label, \
135 "load-command", G_TYPE_STRING, load_command, \
139 "load --table Users --columns '_key,enabled'\n"
141 " [\"mori\",true],\n"
142 " [\"tapo\",false]\n"
145 "load --table Users --columns '_key,enabled'\n"
151 "load --table Users --columns '_key,enabled'\n"
153 " [\"mori\",\"1\"],\n"
157 "load --table Users --columns '_key,enabled'\n"
159 " [\"mori\",\"0\"],\n"
171 cut_assert_equal_string(
"2",
174 cut_assert_equal_string(
"[[[2],"
176 "[\"_id\",\"UInt32\"],"
177 "[\"_key\",\"ShortText\"],"
178 "[\"enabled\",\"Bool\"]"
191 cut_assert_equal_string(
194 "[{\"_key\": 1, \"name\": \"morita\"}]"));
195 cut_assert_equal_string(
"[[[1],"
197 "[\"_id\",\"UInt32\"],"
198 "[\"_key\",\"Int32\"],"
199 "[\"name\",\"ShortText\"]"
211 cut_assert_equal_string(
"1",
213 "[{\"time_stamp\": 1295851581.41798}]"));
214 cut_assert_equal_string(
"[[[1],"
216 "[\"_id\",\"UInt32\"],"
217 "[\"time_stamp\",\"Time\"]"
219 "[1,1295851581.41798]"
227 #define ADD_DATUM(label, expected, load) \
228 gcut_add_datum(label, \
229 "expected", G_TYPE_STRING, expected, \
230 "load", G_TYPE_STRING, load, \
235 "[[\"_id\",\"UInt32\"],"
236 "[\"_key\",\"ShortText\"],"
237 "[\"nick\",\"ShortText\"],"
238 "[\"scores\",\"Int32\"]],"
239 "[1,\"Daijiro MORI\",\"\",[5,5,5]]]]",
240 "load --table Students --columns '_key, nick'\n"
242 " [\"Daijiro MORI\", null]\n"
246 "[[\"_id\",\"UInt32\"],"
247 "[\"_key\",\"ShortText\"],"
248 "[\"nick\",\"ShortText\"],"
249 "[\"scores\",\"Int32\"]],"
250 "[1,\"Daijiro MORI\",\"\",[5,5,5]]]]",
251 "load --table Students --columns '_key, nick'\n"
253 " [\"Daijiro MORI\", \"\"]\n"
258 "[[\"_id\",\"UInt32\"],"
259 "[\"_key\",\"ShortText\"],"
260 "[\"nick\",\"ShortText\"],"
261 "[\"scores\",\"Int32\"]],"
262 "[1,\"Daijiro MORI\",\"morita\",[]]]]",
263 "load --table Students --columns '_key, scores'\n"
265 " [\"Daijiro MORI\", null]\n"
269 "[[\"_id\",\"UInt32\"],"
270 "[\"_key\",\"ShortText\"],"
271 "[\"nick\",\"ShortText\"],"
272 "[\"scores\",\"Int32\"]],"
273 "[1,\"Daijiro MORI\",\"morita\",[]]]]",
274 "load --table Students --columns '_key, scores'\n"
276 " [\"Daijiro MORI\", \"\"]\n"
280 "[[\"_id\",\"UInt32\"],"
281 "[\"_key\",\"ShortText\"],"
282 "[\"nick\",\"ShortText\"],"
283 "[\"scores\",\"Int32\"]],"
284 "[1,\"Daijiro MORI\",\"morita\",[]]]]",
285 "load --table Students --columns '_key, scores'\n"
287 " [\"Daijiro MORI\", []]\n"
300 cut_assert_equal_string(
"1",
302 "[{\"_key\": \"Daijiro MORI\", "
303 "\"nick\": \"morita\", "
304 "\"scores\": [5, 5, 5]}]"));
305 cut_assert_equal_string(
"1",
307 cut_assert_equal_string(gcut_data_get_string(data,
"expected"),
317 cut_assert_equal_string(
"2",
320 "--columns 'name, desc' "
322 "'[[\"mori\", \"the author of groonga\"],"
323 "[\"gunyara-kun\", \"co-author\"]]'"));
329 cut_omit(
"crashed!!!");
333 "TABLE_PAT_KEY|KEY_NORMALIZE ShortText "
334 "--default_tokenizer TokenBigram");
336 "TABLE_PAT_KEY|KEY_NORMALIZE ShortText "
337 "--default_tokenizer TokenBigramIgnoreBlankSplitSymbolAlphaDigit");
340 "COLUMN_INDEX|WITH_POSITION Authors _key");
342 "COLUMN_INDEX|WITH_POSITION Authors _key");
343 cut_assert_equal_string(
347 "--columns '_key, author' "
350 "[\"The groonga book\", \"mori\"],"
351 "[\"The first groonga\", \"morita\"]"
353 cut_assert_equal_string(
355 "[[\"_key\",\"ShortText\"],"
356 "[\"author\",\"Authors\"],"
357 "[\"_score\",\"Int32\"]],"
358 "[\"The groonga book\",\"mori\",11],"
359 "[\"The first groonga\",\"morita\",1]]]",
362 "'Bigram.author * 10 || BigramLoose.author * 1' "
364 "--output_columns '_key, author, _score'"));
370 const gchar *table_list_result;
374 "[[\"id\",\"UInt32\"],"
375 "[\"name\",\"ShortText\"],"
376 "[\"path\",\"ShortText\"],"
377 "[\"flags\",\"ShortText\"],"
378 "[\"domain\",\"ShortText\"],"
379 "[\"range\",\"ShortText\"],"
380 "[\"default_tokenizer\",\"ShortText\"],"
381 "[\"normalizer\",\"ShortText\"]],"
385 "\"TABLE_PAT_KEY|PERSISTENT\","
393 cut_assert_equal_string(table_list_result,
send_command(
"table_list"));
396 "JSON must start with '[' or '{': <invalid>",
400 "--values 'invalid'");
401 cut_assert_equal_string(table_list_result,
send_command(
"table_list"));
410 "column name must be string: <1>",
411 "load --table Numbers\n"
424 "nonexistent table: <Users>",
425 "load --table Users\n"
427 "[\"_key\": \"alice\"]\n"
437 "[table][load] name can't start with '_' "
438 "and contains only 0-9, A-Z, a-z, #, @, - or _: <_Users>",
439 "load --table _Users\n"
441 "{\"_key\": \"alice\"}\n"
450 "--default_tokenizer TokenDelimit");
453 cut_assert_equal_string(
458 "--values '[{\"_key\": \"mori\", \"tags\": \"groonga search engine\"}]'"));
459 cut_assert_equal_string(
461 "[[\"_id\",\"UInt32\"],"
462 "[\"_key\",\"ShortText\"],"
463 "[\"tags\",\"Tags\"]],"
464 "[1,\"mori\",[\"groonga\",\"search\",\"engine\"]]]]",
473 cut_assert_equal_string(
478 "--values '[{\"tags\": [\"groonga\", \"search engine\"]}]'"));
486 tags_column =
grn_ctx_get(context,
"Posts.tags", strlen(
"Posts.tags"));