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