[Groonga-commit] groonga/groonga [master] grn_expr_inspect() follows hash based vars in grn_expr

Back to archive index

null+****@clear***** null+****@clear*****
2010年 6月 16日 (水) 12:03:08 JST


Daijiro MORI	2010-06-16 03:03:08 +0000 (Wed, 16 Jun 2010)

  New Revision: af8a4cc795d37ce768c24dc8e5bec189adebb1bb

  Log:
    grn_expr_inspect() follows hash based vars in grn_expr

  Modified files:
    lib/expr.c
    test/unit/core/test-expr-parse.c

  Modified: lib/expr.c (+12 -10)
===================================================================
--- lib/expr.c    2010-06-15 23:48:20 +0000 (7d88b78)
+++ lib/expr.c    2010-06-16 03:03:08 +0000 (81a2643)
@@ -231,18 +231,20 @@ grn_expr_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *expr)
   grn_expr_var *var;
   grn_expr_code *code;
   grn_expr *e = (grn_expr *)expr;
+  grn_hash *vars = grn_expr_get_vars(ctx, expr, &i);
   GRN_TEXT_PUTS(ctx, buf, "noname");
   GRN_TEXT_PUTC(ctx, buf, '(');
-  for (i = 0, var = e->vars; i < e->nvars; i++, var++) {
-    if (i) { GRN_TEXT_PUTC(ctx, buf, ','); }
-    GRN_TEXT_PUTC(ctx, buf, '?');
-    if (var->name_size) {
-      GRN_TEXT_PUT(ctx, buf, var->name, var->name_size);
-    } else {
-      grn_text_itoa(ctx, buf, (int)i);
-    }
-    GRN_TEXT_PUTC(ctx, buf, ':');
-    put_value(ctx, buf, &var->value);
+  {
+    int i = 0;
+    grn_obj *value;
+    const char *name;
+    uint32_t name_len;
+    GRN_HASH_EACH(ctx, vars, id, &name, &name_len, &value, {
+      if (i++) { GRN_TEXT_PUTC(ctx, buf, ','); }
+      GRN_TEXT_PUT(ctx, buf, name, name_len);
+      GRN_TEXT_PUTC(ctx, buf, ':');
+      put_value(ctx, buf, value);
+    });
   }
   GRN_TEXT_PUTC(ctx, buf, ')');
   GRN_TEXT_PUTC(ctx, buf, '{');

  Modified: test/unit/core/test-expr-parse.c (+3 -3)
===================================================================
--- test/unit/core/test-expr-parse.c    2010-06-15 23:48:20 +0000 (4dbddc8)
+++ test/unit/core/test-expr-parse.c    2010-06-16 03:03:08 +0000 (32bc44b)
@@ -289,7 +289,7 @@ test_parse(gconstpointer data)
               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(?0:0){2body GET_VALUE,0\"hoge\",4MATCH,"
+                       "noname($1:0){2body GET_VALUE,0\"hoge\",4MATCH,"
                                     "2body GET_VALUE,0\"moge\",0MATCH,4AND,"
                                     "2body GET_VALUE,0\"poyo\",0MATCH,0AND}",
                        cond);
@@ -317,7 +317,7 @@ test_parse(gconstpointer data)
   PARSE(cond, gcut_data_get_string(data, "query_size"),
               gcut_data_get_int(data, "query_size_parse_level"));
   grn_test_assert_expr(&context,
-                       "noname(?0:0){2size GET_VALUE,014,0EQUAL}",
+                       "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);
@@ -869,6 +869,6 @@ test_syntax_equal_string_reference_key(void)
   cut_assert_not_null(v);
   PARSE(cond, "author == \"morita\"", GRN_EXPR_SYNTAX_SCRIPT);
   grn_test_assert_expr(&context,
-                       "noname(?0:0){2author GET_VALUE,0\"morita\",0EQUAL}",
+                       "noname($1:0){2author GET_VALUE,0\"morita\",0EQUAL}",
                        cond);
 }




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