[Groonga-commit] groonga/groonga at 181b257 [master] Make grn_expr inspection more descriptive

アーカイブの一覧に戻る

Kouhei Sutou null+****@clear*****
Sun Nov 2 16:36:35 JST 2014


Kouhei Sutou	2014-11-02 16:36:35 +0900 (Sun, 02 Nov 2014)

  New Revision: 181b25727a3b230fd9fba5bafd0ff1b2611191d4
  https://github.com/groonga/groonga/commit/181b25727a3b230fd9fba5bafd0ff1b2611191d4

  Message:
    Make grn_expr inspection more descriptive
    
    The old implementation still exists.

  Modified files:
    lib/expr.c
    lib/util.c

  Modified: lib/expr.c (+4 -4)
===================================================================
--- lib/expr.c    2014-11-02 16:35:47 +0900 (0276691)
+++ lib/expr.c    2014-11-02 16:36:35 +0900 (742ea9e)
@@ -270,8 +270,8 @@ put_value(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
   }
 }
 
-grn_rc
-grn_expr_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *expr)
+static grn_rc
+grn_expr_inspect_internal(grn_ctx *ctx, grn_obj *buf, grn_obj *expr)
 {
   uint32_t i, j;
   grn_expr_var *var;
@@ -4174,7 +4174,7 @@ put_logical_op(grn_ctx *ctx, scan_info **sis, int *ip, grn_operator op, int star
 #define EXPRLOG(name,expr) do {\
   grn_obj strbuf;\
   GRN_TEXT_INIT(&strbuf, 0);\
-  grn_expr_inspect(ctx, &strbuf, (expr));\
+  grn_expr_inspect_internal(ctx, &strbuf, (expr));\
   GRN_TEXT_PUTC(ctx, &strbuf, '\0');\
   GRN_LOG(ctx, GRN_LOG_NOTICE, "%s=(%s)", (name), GRN_TEXT_VALUE(&strbuf));\
   GRN_OBJ_FIN(ctx, &strbuf);\
@@ -6939,7 +6939,7 @@ grn_expr_parse(grn_ctx *ctx, grn_obj *expr,
     /*
         grn_obj strbuf;
         GRN_TEXT_INIT(&strbuf, 0);
-        grn_expr_inspect(ctx, &strbuf, expr);
+        grn_expr_inspect_internal(ctx, &strbuf, expr);
         GRN_TEXT_PUTC(ctx, &strbuf, '\0');
         GRN_LOG(ctx, GRN_LOG_NOTICE, "query=(%s)", GRN_TEXT_VALUE(&strbuf));
         GRN_OBJ_FIN(ctx, &strbuf);

  Modified: lib/util.c (+63 -0)
===================================================================
--- lib/util.c    2014-11-02 16:35:47 +0900 (1430a58)
+++ lib/util.c    2014-11-02 16:36:35 +0900 (84e8e6f)
@@ -275,6 +275,69 @@ grn_proc_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
   return GRN_SUCCESS;
 }
 
+grn_rc
+grn_expr_inspect(grn_ctx *ctx, grn_obj *buffer, grn_obj *expr)
+{
+  grn_expr *e = (grn_expr *)expr;
+
+  GRN_TEXT_PUTS(ctx, buffer, "#<expr\n");
+  {
+    int i = 0;
+    grn_obj *value;
+    const char *name;
+    uint32_t name_len;
+    unsigned int n_vars;
+    grn_hash *vars = grn_expr_get_vars(ctx, expr, &n_vars);
+    GRN_TEXT_PUTS(ctx, buffer, "  vars:{");
+    GRN_HASH_EACH(ctx, vars, id, &name, &name_len, &value, {
+      if (i++) {
+        GRN_TEXT_PUTC(ctx, buffer, ',');
+      }
+      GRN_TEXT_PUTS(ctx, buffer, "\n    ");
+      GRN_TEXT_PUT(ctx, buffer, name, name_len);
+      GRN_TEXT_PUTC(ctx, buffer, ':');
+      grn_inspect_indented(ctx, buffer, value, "    ");
+    });
+    GRN_TEXT_PUTS(ctx, buffer, "\n  },");
+  }
+
+  {
+    uint32_t i, j;
+    grn_expr_var *var;
+    grn_expr_code *code;
+    GRN_TEXT_PUTS(ctx, buffer, "\n  codes:{");
+    for (j = 0, code = e->codes; j < e->codes_curr; j++, code++) {
+      if (j) { GRN_TEXT_PUTC(ctx, buffer, ','); }
+      GRN_TEXT_PUTS(ctx, buffer, "\n    ");
+      grn_text_itoa(ctx, buffer, j);
+      GRN_TEXT_PUTS(ctx, buffer, ":<");
+      GRN_TEXT_PUTS(ctx, buffer, grn_operator_to_string(code->op));
+      GRN_TEXT_PUTS(ctx, buffer, "(");
+      for (i = 0, var = e->vars; i < e->nvars; i++, var++) {
+        if (i) { GRN_TEXT_PUTC(ctx, buffer, ','); }
+        GRN_TEXT_PUTC(ctx, buffer, '?');
+        if (var->name_size) {
+          GRN_TEXT_PUT(ctx, buffer, var->name, var->name_size);
+        } else {
+          grn_text_itoa(ctx, buffer, (int)i);
+        }
+      }
+      GRN_TEXT_PUTS(ctx, buffer, "), ");
+      GRN_TEXT_PUTS(ctx, buffer, "modify:");
+      grn_text_itoa(ctx, buffer, code->modify);
+      GRN_TEXT_PUTS(ctx, buffer, ", ");
+      GRN_TEXT_PUTS(ctx, buffer, "value:");
+      grn_inspect_indented(ctx, buffer, code->value, "      ");
+      GRN_TEXT_PUTS(ctx, buffer, ">");
+    }
+    GRN_TEXT_PUTS(ctx, buffer, "\n  }");
+  }
+
+  GRN_TEXT_PUTS(ctx, buffer, "\n>");
+
+  return GRN_SUCCESS;
+}
+
 static grn_rc
 grn_vector_inspect(grn_ctx *ctx, grn_obj *buffer, grn_obj *vector)
 {
-------------- next part --------------
HTML����������������������������...
ダウンロード 



More information about the Groonga-commit mailing list
アーカイブの一覧に戻る