[Groonga-commit] groonga/groonga at 0bd76bc [master] select: extract applying adjuster code

アーカイブの一覧に戻る

Kouhei Sutou null+****@clear*****
Sat May 21 17:11:50 JST 2016


Kouhei Sutou	2016-05-21 17:11:50 +0900 (Sat, 21 May 2016)

  New Revision: 0bd76bcaf323b5edbe341027b440741b3ac6c14d
  https://github.com/groonga/groonga/commit/0bd76bcaf323b5edbe341027b440741b3ac6c14d

  Message:
    select: extract applying adjuster code

  Modified files:
    lib/proc/proc_select.c

  Modified: lib/proc/proc_select.c (+55 -29)
===================================================================
--- lib/proc/proc_select.c    2016-05-21 17:06:07 +0900 (0fab902)
+++ lib/proc/proc_select.c    2016-05-21 17:11:50 +0900 (1735535)
@@ -756,9 +756,11 @@ grn_select_apply_adjuster_ensure_factor(grn_ctx *ctx, grn_obj *factor_object)
 }
 
 static void
-grn_select_apply_adjuster_adjust(grn_ctx *ctx, grn_obj *table,
-                                 grn_obj *column, grn_obj *value,
-                                 grn_obj *factor)
+grn_select_apply_adjuster_execute_adjust(grn_ctx *ctx,
+                                         grn_obj *table,
+                                         grn_obj *column,
+                                         grn_obj *value,
+                                         grn_obj *factor)
 {
   grn_obj *index;
   unsigned int n_indexes;
@@ -796,8 +798,9 @@ grn_select_apply_adjuster_adjust(grn_ctx *ctx, grn_obj *table,
 }
 
 static void
-grn_select_apply_adjuster(grn_ctx *ctx, grn_obj *table,
-                          grn_obj *adjuster)
+grn_select_apply_adjuster_execute(grn_ctx *ctx,
+                                  grn_obj *table,
+                                  grn_obj *adjuster)
 {
   grn_expr *expr = (grn_expr *)adjuster;
   grn_expr_code *code, *code_end;
@@ -824,7 +827,7 @@ grn_select_apply_adjuster(grn_ctx *ctx, grn_obj *table,
     } else {
       factor = NULL;
     }
-    grn_select_apply_adjuster_adjust(ctx, table, column, value, factor);
+    grn_select_apply_adjuster_execute_adjust(ctx, table, column, value, factor);
   }
 }
 
@@ -1247,6 +1250,50 @@ grn_select_apply_filtered_columns(grn_ctx *ctx,
 }
 
 static grn_bool
+grn_select_apply_adjuster(grn_ctx *ctx,
+                          grn_select_data *data)
+{
+  grn_obj *adjuster;
+  grn_obj *record;
+  grn_rc rc;
+
+  if (data->adjuster.length == 0) {
+    return GRN_TRUE;
+  }
+
+  GRN_EXPR_CREATE_FOR_QUERY(ctx, data->tables.target, adjuster, record);
+  if (!adjuster) {
+      GRN_PLUGIN_ERROR(ctx,
+                       GRN_INVALID_ARGUMENT,
+                       "[select][adjuster] "
+                       "failed to create expression: %s",
+                       ctx->errbuf);
+      return GRN_FALSE;
+  }
+
+  rc = grn_expr_parse(ctx, adjuster,
+                      data->adjuster.value,
+                      data->adjuster.length,
+                      NULL,
+                      GRN_OP_MATCH, GRN_OP_ADJUST,
+                      GRN_EXPR_SYNTAX_ADJUSTER);
+  if (rc != GRN_SUCCESS) {
+    grn_obj_unlink(ctx, adjuster);
+    return GRN_FALSE;
+  }
+
+  data->cacheable *= ((grn_expr *)adjuster)->cacheable;
+  data->taintable += ((grn_expr *)adjuster)->taintable;
+  grn_select_apply_adjuster_execute(ctx, data->tables.result, adjuster);
+  grn_obj_unlink(ctx, adjuster);
+
+  GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_SIZE,
+                ":", "adjust(%d)", grn_table_size(ctx, data->tables.result));
+
+  return GRN_TRUE;
+}
+
+static grn_bool
 grn_select_prepare_slices(grn_ctx *ctx,
                           grn_select_data *data)
 {
@@ -2238,29 +2285,8 @@ grn_select(grn_ctx *ctx, grn_select_data *data)
         goto exit;
       }
 
-      if (data->adjuster.length > 0) {
-        grn_obj *adjuster;
-        grn_obj *v;
-        GRN_EXPR_CREATE_FOR_QUERY(ctx, data->tables.target, adjuster, v);
-        if (adjuster && v) {
-          grn_rc rc;
-          rc = grn_expr_parse(ctx, adjuster,
-                              data->adjuster.value,
-                              data->adjuster.length,
-                              NULL,
-                              GRN_OP_MATCH, GRN_OP_ADJUST,
-                              GRN_EXPR_SYNTAX_ADJUSTER);
-          if (rc) {
-            grn_obj_unlink(ctx, adjuster);
-            goto exit;
-          }
-          data->cacheable *= ((grn_expr *)adjuster)->cacheable;
-          data->taintable += ((grn_expr *)adjuster)->taintable;
-          grn_select_apply_adjuster(ctx, data->tables.result, adjuster);
-          grn_obj_unlink(ctx, adjuster);
-        }
-        GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_SIZE,
-                      ":", "adjust(%d)", nhits);
+      if (!grn_select_apply_adjuster(ctx, data)) {
+        goto exit;
       }
 
       if (data->scorer.length > 0) {
-------------- next part --------------
HTML����������������������������...
ダウンロード 



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