[Groonga-commit] groonga/groonga at c024b91 [master] Add grn_expr_dump_plan() for test

Back to archive index

Kouhei Sutou null+****@clear*****
Mon Nov 3 15:26:00 JST 2014


Kouhei Sutou	2014-11-03 15:26:00 +0900 (Mon, 03 Nov 2014)

  New Revision: c024b911ac6af2207c3f201f4b3b6b3a6eb7b304
  https://github.com/groonga/groonga/commit/c024b911ac6af2207c3f201f4b3b6b3a6eb7b304

  Message:
    Add grn_expr_dump_plan() for test

  Modified files:
    include/groonga/expr.h
    lib/expr.c

  Modified: include/groonga/expr.h (+1 -0)
===================================================================
--- include/groonga/expr.h    2014-11-03 15:12:17 +0900 (7855c44)
+++ include/groonga/expr.h    2014-11-03 15:26:00 +0900 (cf8fb35)
@@ -55,6 +55,7 @@ GRN_API grn_rc grn_expr_syntax_escape_query(grn_ctx *ctx,
                                             grn_obj *escaped_query);
 
 GRN_API grn_rc grn_expr_compile(grn_ctx *ctx, grn_obj *expr);
+GRN_API grn_rc grn_expr_dump_plan(grn_ctx *ctx, grn_obj *expr, grn_obj *buffer);
 GRN_API grn_obj *grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs);
 
 GRN_API grn_obj *grn_expr_alloc(grn_ctx *ctx, grn_obj *expr,

  Modified: lib/expr.c (+45 -11)
===================================================================
--- lib/expr.c    2014-11-03 15:12:17 +0900 (742ea9e)
+++ lib/expr.c    2014-11-03 15:26:00 +0900 (7665e28)
@@ -4697,27 +4697,40 @@ scan_info_build(grn_ctx *ctx, grn_obj *expr, int *n,
 }
 
 void
-grn_p_scan_info_list(grn_ctx *ctx, scan_info **sis, int n)
+grn_inspect_scan_info_list(grn_ctx *ctx, grn_obj *buffer, scan_info **sis, int n)
 {
   int i;
-  grn_obj inspected;
 
-  GRN_TEXT_INIT(&inspected, 0);
   for (i = 0; i < n; i++) {
     scan_info *si = sis[i];
 
-    printf("[%d]\n", i);
-    printf("  op:         <%s>\n", grn_operator_to_string(si->op));
-    printf("  logical_op: <%s>\n", grn_operator_to_string(si->logical_op));
+    grn_text_printf(ctx, buffer, "[%d]\n", i);
+    grn_text_printf(ctx, buffer,
+                    "  op:         <%s>\n",
+                    grn_operator_to_string(si->op));
+    grn_text_printf(ctx, buffer,
+                    "  logical_op: <%s>\n",
+                    grn_operator_to_string(si->logical_op));
 
-    GRN_BULK_REWIND(&inspected);
     grn_inspect(ctx, &inspected, si->query);
-    printf("  query:      <%.*s>\n",
-           (int)GRN_TEXT_LEN(&inspected),
-           GRN_TEXT_VALUE(&inspected));
+    GRN_TEXT_PUTS(ctx, buffer, "  query:      <");
+    grn_inspect(ctx, buffer, si->query);
+    GRN_TEXT_PUTS(ctx, buffer, ">\n");
 
-    printf("  expr:       <%d..%d>\n", si->start, si->end);
+    grn_text_printf(ctx, buffer,
+                    "  expr:       <%d..%d>\n", si->start, si->end);
   }
+}
+
+void
+grn_p_scan_info_list(grn_ctx *ctx, scan_info **sis, int n)
+{
+  grn_obj inspected;
+  GRN_TEXT_INIT(&inspected, 0);
+  grn_inspect_scan_info_lsit(ctx, &inspected, sis, n);
+  printf("%.*s\n",
+         (int)GRN_TEXT_LEN(&inspected),
+         GRN_TEXT_VALUE(&inspected));
   GRN_OBJ_FIN(ctx, &inspected);
 }
 
@@ -7183,3 +7196,24 @@ grn_expr_syntax_escape_query(grn_ctx *ctx, const char *query, int query_size,
                                 target_characters, GRN_QUERY_ESCAPE,
                                 escaped_query);
 }
+
+grn_rc
+grn_expr_dump_plan(grn_ctx *ctx, grn_obj *expr, grn_obj *buffer)
+{
+  int n;
+  scan_info **sis;
+
+  GRN_API_ENTER;
+  sis = scan_info_build(ctx, expr, &n, GRN_OP_OR, 0);
+  if (sis) {
+    int i;
+    grn_inspect_scan_info_list(ctx, buffer, sis, n);
+    for (i = 0; i < n; i++) {
+      SI_FREE(sis[i]);
+    }
+    GRN_FREE(sis);
+  } else {
+    GRN_TEXT_PUTS(ctx, buffer, "sequential search\n");
+  }
+  GRN_API_RETURN(GRN_SUCCESS);
+}
-------------- next part --------------
HTML����������������������������...
下載 



More information about the Groonga-commit mailing list
Back to archive index