[Groonga-commit] groonga/groonga at 299733d [master] select: keep anonymous drilldown keys in grn_select_data

Back to archive index

Kouhei Sutou null+****@clear*****
Fri May 20 17:59:23 JST 2016


Kouhei Sutou	2016-05-20 17:59:23 +0900 (Fri, 20 May 2016)

  New Revision: 299733d8ea6096c4f88012890eff930bf10eb694
  https://github.com/groonga/groonga/commit/299733d8ea6096c4f88012890eff930bf10eb694

  Message:
    select: keep anonymous drilldown keys in grn_select_data

  Modified files:
    lib/proc/proc_select.c

  Modified: lib/proc/proc_select.c (+27 -15)
===================================================================
--- lib/proc/proc_select.c    2016-05-20 17:49:07 +0900 (181c9ec)
+++ lib/proc/proc_select.c    2016-05-20 17:59:23 +0900 (44c1c81)
@@ -101,6 +101,7 @@ typedef struct {
 } grn_drilldown_data;
 
 typedef struct {
+  /* inputs */
   grn_select_string table;
   grn_select_string match_columns;
   grn_select_string query;
@@ -118,6 +119,8 @@ typedef struct {
   grn_select_string query_flags;
   grn_select_string adjuster;
   grn_columns columns;
+
+  /* for processing */
   struct {
     grn_obj *target;
     grn_obj *initial;
@@ -129,6 +132,10 @@ typedef struct {
   } condition;
   uint16_t cacheable;
   uint16_t taintable;
+  struct {
+    grn_table_sort_key *keys;
+    uint32_t n_keys;
+  } drilldown;
 } grn_select_data;
 
 grn_rc
@@ -1959,6 +1966,9 @@ grn_select(grn_ctx *ctx, grn_select_data *data)
   data->cacheable = 1;
   data->taintable = 0;
 
+  data->drilldown.keys = NULL;
+  data->drilldown.n_keys = 0;
+
   {
     const char *query_end = data->query.value + data->query.length;
     int space_len;
@@ -2160,8 +2170,6 @@ grn_select(grn_ctx *ctx, grn_select_data *data)
     }
 
     {
-      uint32_t ngkeys;
-      grn_table_sort_key *gkeys = NULL;
       int result_size = 1;
 
       if (data->slices) {
@@ -2184,13 +2192,14 @@ grn_select(grn_ctx *ctx, grn_select_data *data)
           }
         }
         if (anonymous_drilldown) {
-          gkeys = grn_table_sort_key_from_str(ctx,
-                                              anonymous_drilldown->keys.value,
-                                              anonymous_drilldown->keys.length,
-                                              data->tables.result,
-                                              &ngkeys);
-          if (gkeys) {
-            result_size += ngkeys;
+          data->drilldown.keys =
+            grn_table_sort_key_from_str(ctx,
+                                        anonymous_drilldown->keys.value,
+                                        anonymous_drilldown->keys.length,
+                                        data->tables.result,
+                                        &(data->drilldown.n_keys));
+          if (data->drilldown.keys) {
+            result_size += data->drilldown.n_keys;
           }
         } else {
           result_size += 1;
@@ -2289,12 +2298,12 @@ grn_select(grn_ctx *ctx, grn_select_data *data)
         if (data->slices) {
           grn_select_slices(ctx, data, data->tables.result, data->slices);
         }
-        if (gkeys) {
+        if (data->drilldown.keys) {
           grn_select_drilldown(ctx,
                                data,
                                data->tables.result,
-                               gkeys,
-                               ngkeys,
+                               data->drilldown.keys,
+                               data->drilldown.n_keys,
                                data->drilldowns);
         } else if (data->drilldowns) {
           grn_select_drilldowns(ctx,
@@ -2303,9 +2312,6 @@ grn_select(grn_ctx *ctx, grn_select_data *data)
                                 data->drilldowns);
         }
       }
-      if (gkeys) {
-        grn_table_sort_key_close(ctx, gkeys, ngkeys);
-      }
     }
     GRN_OUTPUT_ARRAY_CLOSE();
     if (!ctx->rc &&
@@ -2323,6 +2329,12 @@ grn_select(grn_ctx *ctx, grn_select_data *data)
   }
 
 exit :
+  if (data->drilldown.keys) {
+    grn_table_sort_key_close(ctx,
+                             data->drilldown.keys,
+                             data->drilldown.n_keys);
+  }
+
   if (data->tables.result &&
       data->tables.result != data->tables.initial &&
       data->tables.result != data->tables.target) {
-------------- next part --------------
HTML����������������������������...
다운로드 



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