void test_equal_indexed(void) { grn_obj *v; prepare_data(); cut_assert_not_null((cond = grn_expr_create(&context, NULL, 0))); v = grn_expr_add_var(&context, cond, NULL, 0); GRN_RECORD_INIT(v, 0, grn_obj_id(&context, docs)); grn_expr_append_obj(&context, cond, v, GRN_OP_PUSH, 1); GRN_TEXT_SETS(&context, &text_buf, "body"); grn_expr_append_const(&context, cond, &text_buf, GRN_OP_GET_VALUE, 1); GRN_TEXT_SETS(&context, &text_buf, "hoge"); grn_expr_append_const(&context, cond, &text_buf, GRN_OP_PUSH, 1); grn_expr_append_op(&context, cond, GRN_OP_EQUAL, 2); grn_expr_compile(&context, cond); res = grn_table_create(&context, NULL, 0, NULL, GRN_TABLE_HASH_KEY|GRN_OBJ_WITH_SUBREC, docs, NULL); cut_assert_not_null(res); cut_assert_not_null(grn_table_select(&context, docs, cond, res, GRN_OP_OR)); grn_test_assert_select(&context, gcut_take_new_list_string("hoge", NULL), res, "body"); }
void test_japanese_parenthesis(void) { cut_assert_not_null(grn_table_select(context, comments, query("content:@)は"), result, GRN_OP_OR)); grn_test_assert_select(context, gcut_take_new_list_string("ボロ", NULL), result, "_key"); }
void test_set_value(void) { grn_obj *v; prepare_data(); GRN_EXPR_CREATE_FOR_QUERY(&context, docs, cond, v); cut_assert_not_null(cond); cut_assert_not_null(v); PARSE(cond, "size:14", GRN_EXPR_SYNTAX_QUERY|GRN_EXPR_ALLOW_PRAGMA|GRN_EXPR_ALLOW_COLUMN); res = grn_table_select(&context, docs, cond, NULL, GRN_OP_OR); cut_assert_not_null(res); grn_test_assert_select(&context, gcut_take_new_list_string("moge moge moge", "hoge fuga fuga", "moge hoge hoge", NULL), res, "body"); grn_test_assert(grn_obj_close(&context, res)); res = NULL; GRN_EXPR_CREATE_FOR_QUERY(&context, docs, expr, v); grn_expr_append_obj(&context, expr, v, GRN_OP_PUSH, 1); GRN_TEXT_SETS(&context, &textbuf, "size"); grn_expr_append_const(&context, expr, &textbuf, GRN_OP_PUSH, 1); grn_expr_append_op(&context, expr, GRN_OP_GET_VALUE, 2); GRN_UINT32_SET(&context, &intbuf, 14); grn_expr_append_const(&context, expr, &intbuf, GRN_OP_PUSH, 1); grn_expr_append_op(&context, expr, GRN_OP_ASSIGN, 2); { grn_id id; grn_table_cursor *tc; tc = grn_table_cursor_open(&context, docs, NULL, 0, NULL, 0, 0, -1, 0); cut_assert_not_null(tc); while ((id = grn_table_cursor_next(&context, tc))) { GRN_RECORD_SET(&context, v, id); grn_expr_exec(&context, expr, 0); } grn_test_assert(grn_table_cursor_close(&context, tc)); } res = grn_table_select(&context, docs, cond, NULL, GRN_OP_OR); cut_assert_not_null(res); grn_test_assert_select_all(res); }
void test_proc_call(void) { grn_obj *v; prepare_data(); GRN_EXPR_CREATE_FOR_QUERY(&context, docs, cond, v); cut_assert_not_null(cond); cut_assert_not_null(v); PARSE(cond, "size:>14", GRN_EXPR_SYNTAX_QUERY|GRN_EXPR_ALLOW_PRAGMA|GRN_EXPR_ALLOW_COLUMN); res = grn_table_select(&context, docs, cond, NULL, GRN_OP_OR); cut_assert_not_null(res); grn_test_assert_select(&context, gcut_take_new_list_string("hoge moge moge moge", "moge hoge fuga fuga", "moge hoge moge moge moge", "poyo moge hoge " "moge moge moge", NULL), res, "body"); grn_test_assert(grn_obj_close(&context, res)); res = NULL; GRN_EXPR_CREATE_FOR_QUERY(&context, docs, expr, v); PARSE(expr, "size = rand(14)", GRN_EXPR_SYNTAX_SCRIPT|GRN_EXPR_ALLOW_UPDATE); { grn_id id; grn_table_cursor *tc; tc = grn_table_cursor_open(&context, docs, NULL, 0, NULL, 0, 0, -1, 0); cut_assert_not_null(tc); while ((id = grn_table_cursor_next(&context, tc))) { GRN_RECORD_SET(&context, v, id); grn_expr_exec(&context, expr, 0); } grn_test_assert(grn_table_cursor_close(&context, tc)); } res = grn_table_select(&context, docs, cond, NULL, GRN_OP_OR); cut_assert_not_null(res); grn_test_assert_select_none(res); }
void test_equal_by_nonexistent_reference_key(void) { grn_obj *v; prepare_data(); GRN_EXPR_CREATE_FOR_QUERY(&context, docs, cond, v); cut_assert_not_null(cond); cut_assert_not_null(v); PARSE(cond, "author == \"nonexistent\"", GRN_EXPR_SYNTAX_SCRIPT); res = grn_table_select(&context, docs, cond, NULL, GRN_OP_OR); cut_assert_not_null(res); grn_test_assert_select(&context, NULL, res, "body"); }
static void grn_test_assert_select_all(grn_obj *result) { grn_test_assert_select(&context, gcut_take_new_list_string("hoge", "fuga fuga", "moge moge moge", "hoge hoge", "hoge fuga fuga", "hoge moge moge moge", "moge hoge hoge", "moge hoge fuga fuga", "moge hoge moge moge moge", "poyo moge hoge " "moge moge moge", NULL), result, "body"); }
void test_match_without_index(void) { grn_obj *v; create_properties_table(); create_documents_table(); insert_data(); cut_assert_not_null((cond = grn_expr_create(&context, NULL, 0))); v = grn_expr_add_var(&context, cond, NULL, 0); GRN_RECORD_INIT(v, 0, grn_obj_id(&context, docs)); grn_expr_append_obj(&context, cond, v, GRN_OP_PUSH, 1); GRN_TEXT_SETS(&context, &text_buf, "body"); grn_expr_append_const(&context, cond, &text_buf, GRN_OP_PUSH, 1); grn_expr_append_op(&context, cond, GRN_OP_GET_VALUE, 1); GRN_TEXT_SETS(&context, &text_buf, "moge"); grn_expr_append_const(&context, cond, &text_buf, GRN_OP_PUSH, 1); grn_expr_append_op(&context, cond, GRN_OP_MATCH, 2); grn_expr_compile(&context, cond); res = grn_table_create(&context, NULL, 0, NULL, GRN_TABLE_HASH_KEY|GRN_OBJ_WITH_SUBREC, docs, NULL); cut_assert_not_null(res); cut_assert_not_null(grn_table_select(&context, docs, cond, res, GRN_OP_OR)); grn_test_assert_select( &context, gcut_take_new_list_string("moge moge moge", "hoge moge moge moge", "moge hoge hoge", "moge hoge fuga fuga", "moge hoge moge moge moge", "poyo moge hoge moge moge moge", NULL), res, "body"); }
void test_select(void) { grn_obj *v; prepare_data(); cut_assert_not_null((cond = grn_expr_create(&context, NULL, 0))); v = grn_expr_add_var(&context, cond, NULL, 0); GRN_RECORD_INIT(v, 0, grn_obj_id(&context, docs)); grn_expr_append_obj(&context, cond, v, GRN_OP_PUSH, 1); GRN_TEXT_SETS(&context, &text_buf, "size"); grn_expr_append_const(&context, cond, &text_buf, GRN_OP_PUSH, 1); grn_expr_append_op(&context, cond, GRN_OP_GET_VALUE, 2); GRN_UINT32_SET(&context, &int_buf, 14); grn_expr_append_const(&context, cond, &int_buf, GRN_OP_PUSH, 1); grn_expr_append_op(&context, cond, GRN_OP_EQUAL, 2); grn_expr_compile(&context, cond); res = grn_table_create(&context, NULL, 0, NULL, GRN_TABLE_HASH_KEY|GRN_OBJ_WITH_SUBREC, docs, NULL); cut_assert_not_null(res); cut_assert_not_null((expr = grn_expr_create(&context, NULL, 0))); grn_expr_append_obj(&context, expr, docs, GRN_OP_PUSH, 1); grn_expr_append_obj(&context, expr, cond, GRN_OP_PUSH, 1); grn_expr_append_obj(&context, expr, res, GRN_OP_PUSH, 1); GRN_UINT32_SET(&context, &int_buf, GRN_OP_OR); grn_expr_append_const(&context, expr, &int_buf, GRN_OP_PUSH, 1); grn_expr_append_op(&context, expr, GRN_OP_TABLE_SELECT, 4); grn_expr_exec(&context, expr, 0); grn_test_assert_select(&context, gcut_take_new_list_string("moge moge moge", "hoge fuga fuga", "moge hoge hoge", NULL), res, "body"); }
void test_equal_by_existent_reference_key(void) { grn_obj *v; prepare_data(); GRN_EXPR_CREATE_FOR_QUERY(&context, docs, cond, v); cut_assert_not_null(cond); cut_assert_not_null(v); PARSE(cond, "author == \"morita\"", GRN_EXPR_SYNTAX_SCRIPT); res = grn_table_select(&context, docs, cond, NULL, GRN_OP_OR); cut_assert_not_null(res); grn_test_assert_select(&context, gcut_take_new_list_string( "fuga fuga", "hoge", "poyo moge hoge moge moge moge", NULL), res, "body"); }
void test_allow_update(gconstpointer data) { grn_obj *v; prepare_data(); expr = grn_expr_create(&context, NULL, 0); cut_assert_not_null(expr); v = grn_expr_add_var(&context, expr, NULL, 0); cut_assert_not_null(v); GRN_RECORD_INIT(v, 0, grn_obj_id(&context, docs)); PARSE(expr, gcut_data_get_string(data, "query"), GRN_EXPR_SYNTAX_QUERY | GRN_EXPR_ALLOW_COLUMN | GRN_EXPR_ALLOW_UPDATE); res = grn_table_select(&context, docs, expr, NULL, GRN_OP_OR); cut_assert_not_null(res); grn_test_assert_select(&context, gcut_data_get_pointer(data, "expected_keys"), res, "body"); }
void test_parse(gconstpointer data) { grn_obj *v; prepare_data(); cond = grn_expr_create(&context, NULL, 0); cut_assert_not_null(cond); v = grn_expr_add_var(&context, cond, NULL, 0); cut_assert_not_null(v); GRN_RECORD_INIT(v, 0, grn_obj_id(&context, docs)); PARSE(cond, gcut_data_get_string(data, "query_hoge_moge"), gcut_data_get_int(data, "query_hoge_moge_parse_level")); PARSE(cond, gcut_data_get_string(data, "query_poyo"), gcut_data_get_int(data, "query_poyo_parse_level")); grn_expr_append_op(&context, cond, GRN_OP_AND, 2); grn_test_assert_expr(&context, "noname($1:0){2body GET_VALUE,0\"hoge\",4MATCH," "2body GET_VALUE,0\"moge\",0MATCH,4AND," "2body GET_VALUE,0\"poyo\",0MATCH,0AND}", cond); res = grn_table_create(&context, NULL, 0, NULL, GRN_TABLE_HASH_KEY|GRN_OBJ_WITH_SUBREC, docs, NULL); cut_assert_not_null(res); cut_assert_not_null(grn_table_select(&context, docs, cond, res, GRN_OP_OR)); grn_test_assert_select(&context, gcut_take_new_list_string("poyo moge hoge " "moge moge moge", NULL), res, "body"); grn_test_assert(grn_obj_close(&context, res)); res = NULL; grn_test_assert(grn_obj_close(&context, cond)); cond = NULL; cond = grn_expr_create(&context, NULL, 0); cut_assert_not_null(cond); v = grn_expr_add_var(&context, cond, NULL, 0); cut_assert_not_null(v); GRN_RECORD_INIT(v, 0, grn_obj_id(&context, docs)); PARSE(cond, gcut_data_get_string(data, "query_size"), gcut_data_get_int(data, "query_size_parse_level")); grn_test_assert_expr(&context, "noname($1:0){2size GET_VALUE,014,0EQUAL}", cond); res = grn_table_create(&context, NULL, 0, NULL, GRN_TABLE_HASH_KEY|GRN_OBJ_WITH_SUBREC, docs, NULL); cut_assert_not_null(res); cut_assert_not_null(grn_table_select(&context, docs, cond, res, GRN_OP_OR)); grn_test_assert_select(&context, gcut_take_new_list_string("moge moge moge", "hoge fuga fuga", "moge hoge hoge", NULL), res, "body"); }
void test_parse(gconstpointer data) { grn_obj *v; prepare_data(); cond = grn_expr_create(&context, NULL, 0); cut_assert_not_null(cond); v = grn_expr_add_var(&context, cond, NULL, 0); cut_assert_not_null(v); GRN_RECORD_INIT(v, 0, grn_obj_id(&context, docs)); PARSE(cond, gcut_data_get_string(data, "query_hoge_moge"), gcut_data_get_int(data, "query_hoge_moge_parse_level")); PARSE(cond, gcut_data_get_string(data, "query_poyo"), gcut_data_get_int(data, "query_poyo_parse_level")); grn_expr_append_op(&context, cond, GRN_OP_AND, 2); grn_test_assert_expr( &context, "#<expr\n" " vars:{\n" " $1:#<record:no_key:docs id:0(nonexistent)>\n" " },\n" " codes:{\n" " 0:<get_value(), modify:2, " "value:#<column:var_size docs.body range:Text type:scalar compress:none>>,\n" " 1:<push(), modify:0, value:\"hoge\">,\n" " 2:<match(), modify:4, value:(NULL)>,\n" " 3:<get_value(), modify:2, " "value:#<column:var_size docs.body range:Text type:scalar compress:none>>,\n" " 4:<push(), modify:0, value:\"moge\">,\n" " 5:<match(), modify:0, value:(NULL)>,\n" " 6:<and(), modify:4, value:(NULL)>,\n" " 7:<get_value(), modify:2, " "value:#<column:var_size docs.body range:Text type:scalar compress:none>>,\n" " 8:<push(), modify:0, value:\"poyo\">,\n" " 9:<match(), modify:0, value:(NULL)>,\n" " 10:<and(), modify:0, value:(NULL)>\n" " }\n" ">", cond); res = grn_table_create(&context, NULL, 0, NULL, GRN_TABLE_HASH_KEY|GRN_OBJ_WITH_SUBREC, docs, NULL); cut_assert_not_null(res); cut_assert_not_null(grn_table_select(&context, docs, cond, res, GRN_OP_OR)); grn_test_assert_select(&context, gcut_take_new_list_string("poyo moge hoge " "moge moge moge", NULL), res, "body"); grn_test_assert(grn_obj_close(&context, res)); res = NULL; grn_test_assert(grn_obj_close(&context, cond)); cond = NULL; cond = grn_expr_create(&context, NULL, 0); cut_assert_not_null(cond); v = grn_expr_add_var(&context, cond, NULL, 0); cut_assert_not_null(v); GRN_RECORD_INIT(v, 0, grn_obj_id(&context, docs)); PARSE(cond, gcut_data_get_string(data, "query_size"), gcut_data_get_int(data, "query_size_parse_level")); grn_test_assert_expr( &context, "#<expr\n" " vars:{\n" " $1:#<record:no_key:docs id:0(nonexistent)>\n" " },\n" " codes:{\n" " 0:<get_value(), modify:2, " "value:#<column:fix_size docs.size range:UInt32 type:scalar compress:none>>,\n" " 1:<push(), modify:0, value:14>,\n" " 2:<equal(), modify:0, value:(NULL)>\n" " }\n" ">", cond); res = grn_table_create(&context, NULL, 0, NULL, GRN_TABLE_HASH_KEY|GRN_OBJ_WITH_SUBREC, docs, NULL); cut_assert_not_null(res); cut_assert_not_null(grn_table_select(&context, docs, cond, res, GRN_OP_OR)); grn_test_assert_select(&context, gcut_take_new_list_string("moge moge moge", "hoge fuga fuga", "moge hoge hoge", NULL), res, "body"); }