[Groonga-commit] groonga/groonga [master] table: rename find into filter_by_script.

Back to archive index

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 



Groonga-commit メーリングリストの案内
Back to archive index