[Groonga-commit] groonga/groonga at 1f64dcb [master] grn_ts: skip filtering if --filter is empty except '?'

Back to archive index

susumu.yata null+****@clear*****
Mon Nov 30 11:46:07 JST 2015


susumu.yata	2015-11-30 11:46:07 +0900 (Mon, 30 Nov 2015)

  New Revision: 1f64dcb16bfd0474bbc9408111b55b10d7a5b056
  https://github.com/groonga/groonga/commit/1f64dcb16bfd0474bbc9408111b55b10d7a5b056

  Message:
    grn_ts: skip filtering if --filter is empty except '?'

  Modified files:
    lib/ts.c

  Modified: lib/ts.c (+23 -12)
===================================================================
--- lib/ts.c    2015-11-28 23:51:33 +0900 (03da836)
+++ lib/ts.c    2015-11-30 11:46:07 +0900 (c7e2e72)
@@ -556,7 +556,7 @@ grn_ts_select_filter(grn_ctx *ctx, grn_obj *table, grn_ts_str str,
   grn_rc rc;
   grn_table_cursor *cursor_obj;
   grn_ts_cursor *cursor;
-  grn_ts_expr *expr;
+  grn_ts_expr *expr = NULL;
   grn_ts_record *buf = NULL;
   size_t buf_size = 0;
 
@@ -575,7 +575,9 @@ grn_ts_select_filter(grn_ctx *ctx, grn_obj *table, grn_ts_str str,
     return rc;
   }
 
-  rc = grn_ts_expr_parse(ctx, table, str, &expr);
+  if (str.size) {
+    rc = grn_ts_expr_parse(ctx, table, str, &expr);
+  }
   if (rc == GRN_SUCCESS) {
     for ( ; ; ) {
       size_t batch_size;
@@ -606,10 +608,12 @@ grn_ts_select_filter(grn_ctx *ctx, grn_obj *table, grn_ts_str str,
       }
 
       /* Apply the filter. */
-      rc = grn_ts_expr_filter(ctx, expr, batch, batch_size,
-                              batch, &batch_size);
-      if (rc != GRN_SUCCESS) {
-        break;
+      if (expr) {
+        rc = grn_ts_expr_filter(ctx, expr, batch, batch_size,
+                                batch, &batch_size);
+        if (rc != GRN_SUCCESS) {
+          break;
+        }
       }
       *n_hits += batch_size;
 
@@ -634,7 +638,9 @@ grn_ts_select_filter(grn_ctx *ctx, grn_obj *table, grn_ts_str str,
       *n_out += batch_size;
     }
     /* Ignore a failure of destruction. */
-    grn_ts_expr_close(ctx, expr);
+    if (expr) {
+      grn_ts_expr_close(ctx, expr);
+    }
   }
   /* Ignore a failure of  destruction. */
   grn_ts_cursor_close(ctx, cursor);
@@ -712,7 +718,9 @@ grn_ts_select_with_sortby(grn_ctx *ctx, grn_obj *table,
     grn_obj_close(ctx, cursor_obj);
     return rc;
   }
-  rc = grn_ts_expr_parse(ctx, table, filter, &filter_expr);
+  if (filter.size) {
+    rc = grn_ts_expr_parse(ctx, table, filter, &filter_expr);
+  }
   if (rc == GRN_SUCCESS) {
     scorer = grn_ts_str_trim_score_assignment(scorer);
     if (scorer.size) {
@@ -757,10 +765,12 @@ grn_ts_select_with_sortby(grn_ctx *ctx, grn_obj *table,
         break;
       }
       /* Apply a filter and a scorer. */
-      rc = grn_ts_expr_filter(ctx, filter_expr, batch, batch_size,
-                              batch, &batch_size);
-      if (rc != GRN_SUCCESS) {
-        break;
+      if (filter_expr) {
+        rc = grn_ts_expr_filter(ctx, filter_expr, batch, batch_size,
+                                batch, &batch_size);
+        if (rc != GRN_SUCCESS) {
+          break;
+        }
       }
       if (scorer_expr) {
         rc = grn_ts_expr_adjust(ctx, scorer_expr, batch, batch_size);
@@ -852,6 +862,7 @@ grn_ts_select(grn_ctx *ctx, grn_obj *table,
       (!output_columns_ptr && output_columns_len)) {
     GRN_TS_ERR_RETURN(GRN_INVALID_ARGUMENT, "invalid argument");
   }
+  filter = grn_ts_str_trim_left(filter);
   if (sortby_len) {
     rc = grn_ts_select_with_sortby(ctx, table, filter, scorer, sortby,
                                    output_columns, offset, limit);
-------------- next part --------------
HTML����������������������������...
Download 



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