[Groonga-commit] groonga/groonga at 94e5adb [master] select drilldown[].output_columns: support getting each grouped value by _key[N]

Back to archive index

Kouhei Sutou null+****@clear*****
Mon Nov 24 14:40:21 JST 2014


Kouhei Sutou	2014-11-24 14:40:21 +0900 (Mon, 24 Nov 2014)

  New Revision: 94e5adbc3d2836e7668336f667537e59e89b2780
  https://github.com/groonga/groonga/commit/94e5adbc3d2836e7668336f667537e59e89b2780

  Message:
    select drilldown[].output_columns: support getting each grouped value by _key[N]

  Modified files:
    lib/db.c
    lib/expr.c
    test/command/suite/select/drilldown/labeled/keys/multiple.expected
    test/command/suite/select/drilldown/labeled/keys/multiple.test
    test/command/suite/select/drilldown/labeled/keys/vector.expected
    test/command/suite/select/drilldown/labeled/keys/vector.test
    test/command/suite/select/drilldown/labeled/sortby/sub_record_column/multiple.expected
    test/command/suite/select/drilldown/labeled/sortby/sub_record_column/multiple.test

  Modified: lib/db.c (+17 -4)
===================================================================
--- lib/db.c    2014-11-24 14:39:26 +0900 (a617352)
+++ lib/db.c    2014-11-24 14:40:21 +0900 (03475e1)
@@ -5372,10 +5372,23 @@ grn_accessor_get_value(grn_ctx *ctx, grn_accessor *a, grn_id id, grn_obj *value)
       vs = GRN_BULK_VSIZE(value) - size0;
       break;
     case GRN_ACCESSOR_GET_KEY :
-      grn_table_get_key2(ctx, a->obj, id, value);
-      value->header.domain = a->obj->header.domain;
-      vp = GRN_BULK_HEAD(value) + size0;
-      vs = GRN_BULK_VSIZE(value) - size0;
+      if (!a->next && GRN_TABLE_IS_GROUPED(a->obj)) {
+        grn_obj raw_vector;
+        GRN_TEXT_INIT(&raw_vector, 0);
+        grn_table_get_key2(ctx, a->obj, id, &raw_vector);
+        grn_obj_ensure_vector(ctx, value);
+        grn_vector_decode(ctx, value,
+                          GRN_BULK_HEAD(&raw_vector),
+                          GRN_BULK_VSIZE(&raw_vector));
+        GRN_OBJ_FIN(ctx, &raw_vector);
+        vp = NULL;
+        vs = 0;
+      } else {
+        grn_table_get_key2(ctx, a->obj, id, value);
+        value->header.domain = a->obj->header.domain;
+        vp = GRN_BULK_HEAD(value) + size0;
+        vs = GRN_BULK_VSIZE(value) - size0;
+      }
       break;
     case GRN_ACCESSOR_GET_VALUE :
       grn_obj_get_value(ctx, a->obj, id, value);

  Modified: lib/expr.c (+9 -6)
===================================================================
--- lib/expr.c    2014-11-24 14:39:26 +0900 (87614a5)
+++ lib/expr.c    2014-11-24 14:40:21 +0900 (9285de0)
@@ -2922,10 +2922,10 @@ grn_expr_exec_get_member(grn_ctx *ctx,
   GRN_TEXT_INIT(&values, 0);
   grn_obj_get_value(ctx, column, record_id, &values);
 
-  grn_obj_reinit(ctx, result, DB_OBJ(column)->range, 0);
   i = GRN_UINT32_VALUE(index);
   if (values.header.type == GRN_UVECTOR) {
     int n_elements;
+    grn_obj_reinit(ctx, result, DB_OBJ(column)->range, 0);
     n_elements = GRN_BULK_VSIZE(&values) / sizeof(grn_id);
     if (n_elements > i) {
       grn_id value;
@@ -2934,11 +2934,14 @@ grn_expr_exec_get_member(grn_ctx *ctx,
     }
   } else {
     if (values.u.v.n_sections > i) {
-      grn_section *section = &(values.u.v.sections[i]);
-      grn_obj *body = values.u.v.body;
-      const char *value;
-      value = GRN_BULK_HEAD(body) + section->offset;
-      grn_bulk_write(ctx, result, value, section->length);
+      const char *content;
+      unsigned int content_length;
+      grn_id domain;
+
+      content_length = grn_vector_get_element(ctx, &values, i,
+                                              &content, NULL, &domain);
+      grn_obj_reinit(ctx, result, domain, 0);
+      grn_bulk_write(ctx, result, content, content_length);
     }
   }
 

  Modified: test/command/suite/select/drilldown/labeled/keys/multiple.expected (+5 -5)
===================================================================
--- test/command/suite/select/drilldown/labeled/keys/multiple.expected    2014-11-24 14:39:26 +0900 (862ac7c)
+++ test/command/suite/select/drilldown/labeled/keys/multiple.expected    2014-11-24 14:40:21 +0900 (cae9bb8)
@@ -15,7 +15,7 @@ load --table Memos
 {"_key": "Groonga is good!", "tag": "Groonga", "date": "2014-11-17 00:00:00"}
 ]
 [[0,0.0,0.0],5]
-select Memos   --drilldown[tag].keys tag,date   --drilldown[tag].output_columns _value.tag,_value.date,_nsubrecs
+select Memos   --command_version 2   --drilldown[tag].keys tag,date   --drilldown[tag].output_columns _key[0],_key[1],_nsubrecs
 [
   [
     0,
@@ -83,12 +83,12 @@ select Memos   --drilldown[tag].keys tag,date   --drilldown[tag].output_columns
         ],
         [
           [
-            "tag",
-            "Tags"
+            "_key",
+            "ShortText"
           ],
           [
-            "date",
-            "Time"
+            "_key",
+            "ShortText"
           ],
           [
             "_nsubrecs",

  Modified: test/command/suite/select/drilldown/labeled/keys/multiple.test (+2 -1)
===================================================================
--- test/command/suite/select/drilldown/labeled/keys/multiple.test    2014-11-24 14:39:26 +0900 (3495239)
+++ test/command/suite/select/drilldown/labeled/keys/multiple.test    2014-11-24 14:40:21 +0900 (5c1b828)
@@ -14,5 +14,6 @@ load --table Memos
 ]
 
 select Memos \
+  --command_version 2 \
   --drilldown[tag].keys tag,date \
-  --drilldown[tag].output_columns _value.tag,_value.date,_nsubrecs
+  --drilldown[tag].output_columns _key[0],_key[1],_nsubrecs

  Modified: test/command/suite/select/drilldown/labeled/keys/vector.expected (+10 -92)
===================================================================
--- test/command/suite/select/drilldown/labeled/keys/vector.expected    2014-11-24 14:39:26 +0900 (84dce28)
+++ test/command/suite/select/drilldown/labeled/keys/vector.expected    2014-11-24 14:40:21 +0900 (067e8df)
@@ -22,7 +22,7 @@ load --table Memos
  "tags": ["Groonga"]}
 ]
 [[0,0.0,0.0],5]
-select Memos   --drilldown[vector].keys user,tags,date   --drilldown[vector].output_columns _value._id,_value.user,_value.tags,_value.date,_nsubrecs   --drilldown[vector].sortby -_nsubrecs,_id
+select Memos   --limit 0   --output_columns _id   --command_version 2   --drilldown[vector].keys user,tags,date   --drilldown[vector].output_columns _key[0],_key[1],_key[2],_nsubrecs   --drilldown[vector].sortby -_nsubrecs,_id
 [
   [
     0,
@@ -38,70 +38,7 @@ select Memos   --drilldown[vector].keys user,tags,date   --drilldown[vector].out
         [
           "_id",
           "UInt32"
-        ],
-        [
-          "_key",
-          "ShortText"
-        ],
-        [
-          "date",
-          "Time"
-        ],
-        [
-          "tags",
-          "ShortText"
-        ],
-        [
-          "user",
-          "Users"
         ]
-      ],
-      [
-        1,
-        "Groonga is fast!",
-        1416063600.0,
-        [
-          "Groonga"
-        ],
-        "alice"
-      ],
-      [
-        2,
-        "Mroonga is fast!",
-        1416063600.0,
-        [
-          "Mroonga",
-          "Groonga"
-        ],
-        "alice"
-      ],
-      [
-        3,
-        "Groonga sticker!",
-        1416063600.0,
-        [
-          "Groonga"
-        ],
-        "alice"
-      ],
-      [
-        4,
-        "Rroonga is fast!",
-        1416150000.0,
-        [
-          "Rroonga",
-          "Groonga"
-        ],
-        "alice"
-      ],
-      [
-        5,
-        "Groonga is good!",
-        1416150000.0,
-        [
-          "Groonga"
-        ],
-        "alice"
       ]
     ],
     {
@@ -111,20 +48,16 @@ select Memos   --drilldown[vector].keys user,tags,date   --drilldown[vector].out
         ],
         [
           [
-            "_id",
-            "UInt32"
-          ],
-          [
-            "user",
-            "Users"
+            "_key",
+            "ShortText"
           ],
           [
-            "tags",
+            "_key",
             "ShortText"
           ],
           [
-            "date",
-            "Time"
+            "_key",
+            "ShortText"
           ],
           [
             "_nsubrecs",
@@ -132,41 +65,26 @@ select Memos   --drilldown[vector].keys user,tags,date   --drilldown[vector].out
           ]
         ],
         [
-          1,
           "alice",
-          [
-            "Groonga"
-          ],
+          "Groonga",
           1416063600.0,
           3
         ],
         [
-          4,
           "alice",
-          [
-            "Rroonga",
-            "Groonga"
-          ],
+          "Groonga",
           1416150000.0,
           2
         ],
         [
-          2,
           "alice",
-          [
-            "Mroonga",
-            "Groonga"
-          ],
+          "Mroonga",
           1416063600.0,
           1
         ],
         [
-          4,
           "alice",
-          [
-            "Rroonga",
-            "Groonga"
-          ],
+          "Rroonga",
           1416150000.0,
           1
         ]

  Modified: test/command/suite/select/drilldown/labeled/keys/vector.test (+4 -1)
===================================================================
--- test/command/suite/select/drilldown/labeled/keys/vector.test    2014-11-24 14:39:26 +0900 (ec2f6a4)
+++ test/command/suite/select/drilldown/labeled/keys/vector.test    2014-11-24 14:40:21 +0900 (7d3c051)
@@ -20,6 +20,9 @@ load --table Memos
 ]
 
 select Memos \
+  --limit 0 \
+  --output_columns _id \
+  --command_version 2 \
   --drilldown[vector].keys user,tags,date \
-  --drilldown[vector].output_columns _value._id,_value.user,_value.tags,_value.date,_nsubrecs \
+  --drilldown[vector].output_columns _key[0],_key[1],_key[2],_nsubrecs \
   --drilldown[vector].sortby -_nsubrecs,_id

  Modified: test/command/suite/select/drilldown/labeled/sortby/sub_record_column/multiple.expected (+5 -5)
===================================================================
--- test/command/suite/select/drilldown/labeled/sortby/sub_record_column/multiple.expected    2014-11-24 14:39:26 +0900 (3e22e32)
+++ test/command/suite/select/drilldown/labeled/sortby/sub_record_column/multiple.expected    2014-11-24 14:40:21 +0900 (4ad89de)
@@ -15,7 +15,7 @@ load --table Memos
 {"_key": "Groonga is good!", "tag": "Groonga", "date": "2014-11-17 00:00:00"}
 ]
 [[0,0.0,0.0],5]
-select Memos   --filter true   --drilldown[tag].keys tag,date   --drilldown[tag].output_columns _value.tag,_value.date,_nsubrecs   --drilldown[tag].sortby _value.tag._key,_value.date
+select Memos   --command_version 2   --filter true   --drilldown[tag].keys tag,date   --drilldown[tag].output_columns _key[0],_key[1],_nsubrecs   --drilldown[tag].sortby _value.tag._key,_value.date
 [
   [
     0,
@@ -83,12 +83,12 @@ select Memos   --filter true   --drilldown[tag].keys tag,date   --drilldown[tag]
         ],
         [
           [
-            "tag",
-            "Tags"
+            "_key",
+            "ShortText"
           ],
           [
-            "date",
-            "Time"
+            "_key",
+            "ShortText"
           ],
           [
             "_nsubrecs",

  Modified: test/command/suite/select/drilldown/labeled/sortby/sub_record_column/multiple.test (+2 -1)
===================================================================
--- test/command/suite/select/drilldown/labeled/sortby/sub_record_column/multiple.test    2014-11-24 14:39:26 +0900 (be75861)
+++ test/command/suite/select/drilldown/labeled/sortby/sub_record_column/multiple.test    2014-11-24 14:40:21 +0900 (e30598b)
@@ -14,7 +14,8 @@ load --table Memos
 ]
 
 select Memos \
+  --command_version 2 \
   --filter true \
   --drilldown[tag].keys tag,date \
-  --drilldown[tag].output_columns _value.tag,_value.date,_nsubrecs \
+  --drilldown[tag].output_columns _key[0],_key[1],_nsubrecs \
   --drilldown[tag].sortby _value.tag._key,_value.date
-------------- next part --------------
HTML����������������������������...
Download 



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