null+****@clear*****
null+****@clear*****
2012年 6月 25日 (月) 15:19:42 JST
Daijiro MORI 2012-06-25 15:19:42 +0900 (Mon, 25 Jun 2012) New Revision: b4a757c5d95f30bd130af4b311e02d01c2287460 https://github.com/groonga/groonga/commit/b4a757c5d95f30bd130af4b311e02d01c2287460 Log: table: rename find into filter_by_script. Modified files: plugins/table/table.c Renamed files: test/function/suite/table/filter_by_script.expected (from test/function/suite/table/find.expected) test/function/suite/table/filter_by_script.test (from test/function/suite/table/find.test) Modified: plugins/table/table.c (+32 -56) =================================================================== --- plugins/table/table.c 2012-06-25 13:08:31 +0900 (221c963) +++ plugins/table/table.c 2012-06-25 15:19:42 +0900 (a99b81a) @@ -140,60 +140,37 @@ command_match(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) } static grn_obj * -command_find(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) +command_filter_by_script(grn_ctx *ctx, int nargs, + grn_obj **args, grn_user_data *user_data) { - const char *table = GRN_TEXT_VALUE(VAR(0)); - unsigned int table_len = GRN_TEXT_LEN(VAR(0)); - const char *columns = GRN_TEXT_VALUE(VAR(1)); - unsigned int columns_len = GRN_TEXT_LEN(VAR(1)); - const char *operator = GRN_TEXT_VALUE(VAR(2)); - unsigned int operator_len = GRN_TEXT_LEN(VAR(2)); - const char *query = GRN_TEXT_VALUE(VAR(3)); - unsigned int query_len = GRN_TEXT_LEN(VAR(3)); - const char *set = GRN_TEXT_VALUE(VAR(4)); - unsigned int set_len = GRN_TEXT_LEN(VAR(4)); - /* TODO: support them. - const char *set_op = GRN_TEXT_VALUE(VAR(5)); - unsigned int set_op_len = GRN_TEXT_LEN(VAR(5)); - */ - grn_obj *set_ = NULL; - grn_obj *table_ = grn_ctx_get_table_by_name_or_id(ctx, table, table_len); - if (table_) { - if (columns_len) { - grn_obj *v, *cond, *columns_; - GRN_EXPR_CREATE_FOR_QUERY(ctx, table_, cond, v); - if (cond) { - GRN_EXPR_CREATE_FOR_QUERY(ctx, table_, columns_, v); - if (columns_) { - grn_expr_parse(ctx, columns_, columns, columns_len, - NULL, GRN_OP_MATCH, GRN_OP_AND, - GRN_EXPR_SYNTAX_SCRIPT); - } - if (operator && operator_len) { - /* parse operator */ - } - - { - grn_expr_flags flags; - flags = GRN_EXPR_SYNTAX_QUERY|GRN_EXPR_ALLOW_PRAGMA|GRN_EXPR_ALLOW_COLUMN; - grn_expr_parse(ctx, cond, query, query_len, - columns_, GRN_OP_MATCH, GRN_OP_AND, flags); - } - if (set_len) { - set_ = grn_ctx_get_table_by_name_or_id(ctx, set, set_len); - } else { - set_ = grn_table_create(ctx, NULL, 0, NULL, - GRN_TABLE_HASH_KEY| - GRN_OBJ_WITH_SUBREC, - table_, NULL); - } - if (set_) { - grn_table_select(ctx, table_, cond, set_, GRN_OP_OR); - } + grn_obj *result_set = NULL; + grn_obj *table = grn_ctx_get_table_by_name_or_id(ctx, TEXT_VALUE_LEN(VAR(0))); + if (table) { + grn_expr_flags flags = GRN_EXPR_SYNTAX_SCRIPT; + grn_obj *v, *query; + GRN_EXPR_CREATE_FOR_QUERY(ctx, table, query, v); + if (query) { + if (parse_bool_value(ctx, VAR(4))) { + flags |= GRN_EXPR_ALLOW_UPDATE; + } + grn_expr_parse(ctx, query, TEXT_VALUE_LEN(VAR(1)), + NULL, GRN_OP_MATCH, GRN_OP_AND, flags); + if (GRN_TEXT_LEN(VAR(2))) { + result_set = grn_ctx_get_table_by_name_or_id(ctx, TEXT_VALUE_LEN(VAR(2))); + } else { + result_set = grn_table_create(ctx, NULL, 0, NULL, + GRN_TABLE_HASH_KEY| + GRN_OBJ_WITH_SUBREC, + table, NULL); } + if (result_set) { + grn_table_select(ctx, table, query, result_set, + parse_set_operator_value(ctx, VAR(3))); + } + grn_obj_unlink(ctx, query); } } - grn_output_table_name_or_id(ctx, set_); + grn_output_table_name_or_id(ctx, result_set); return NULL; } @@ -559,12 +536,11 @@ GRN_PLUGIN_REGISTER(grn_ctx *ctx) grn_expr_var vars[18]; DEF_VAR(vars[0], "table"); - DEF_VAR(vars[1], "columns"); - DEF_VAR(vars[2], "operator"); - DEF_VAR(vars[3], "value"); - DEF_VAR(vars[4], "result_set"); - DEF_VAR(vars[5], "set_operation"); - DEF_COMMAND("find", command_find, 6, vars); + DEF_VAR(vars[1], "expression"); + DEF_VAR(vars[2], "result_set"); + DEF_VAR(vars[3], "set_operation"); + DEF_VAR(vars[4], "allow_update"); + DEF_COMMAND("filter_by_script", command_filter_by_script, 5, vars); DEF_VAR(vars[0], "table"); DEF_VAR(vars[1], "key"); Renamed: test/function/suite/table/filter_by_script.expected (+4 -4) 92% =================================================================== --- test/function/suite/table/find.expected 2012-06-25 13:08:31 +0900 (1e17bf2) +++ test/function/suite/table/filter_by_script.expected 2012-06-25 15:19:42 +0900 (938ea99) @@ -26,9 +26,9 @@ add Shops '{"_key":"ひづめ","tags":["とんかつ"]}' [[0,0.0,0.0],true] add Shops '{"_key":"和互","tags":["魚"]}' [[0,0.0,0.0],true] -find Shops tags match 季節料理 -[[0,0.0,0.0],2147483651] -output 2147483651 _id,_key +filter_by_script Shops 'tags @ "季節料理"' +[[0,0.0,0.0],2147483650] +output 2147483650 _id,_key [ [ 0, @@ -59,7 +59,7 @@ output 2147483651 _id,_key ] ] ] -output 2147483651 _id,tags +output 2147483650 _id,tags [ [ 0, Renamed: test/function/suite/table/filter_by_script.test (+3 -3) 87% =================================================================== --- test/function/suite/table/find.test 2012-06-25 13:08:31 +0900 (8086192) +++ test/function/suite/table/filter_by_script.test 2012-06-25 15:19:42 +0900 (a790e5b) @@ -13,6 +13,6 @@ add Shops '{"_key":"beanDaisy","tags":["caffe","カプチーノ"]}' add Shops '{"_key":"維新","tags":["麺や"]}' add Shops '{"_key":"ひづめ","tags":["とんかつ"]}' add Shops '{"_key":"和互","tags":["魚"]}' -find Shops tags match 季節料理 -output 2147483651 _id,_key -output 2147483651 _id,tags +filter_by_script Shops 'tags @ "季節料理"' +output 2147483650 _id,_key +output 2147483650 _id,tags -------------- next part -------------- HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...Download