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����������������������������... ダウンロード