Naoya Murakami
null+****@clear*****
Fri Jul 14 07:04:51 JST 2017
Naoya Murakami 2017-07-14 07:04:51 +0900 (Fri, 14 Jul 2017) New Revision: 4ab29e28b490df5c6af67d691e90be96c5f0e905 https://github.com/groonga/groonga/commit/4ab29e28b490df5c6af67d691e90be96c5f0e905 Merged a0a4637: Merge pull request #740 from naoa/between-index-column Message: between: support specifying index column Added files: test/command/suite/select/function/between/with_index/index_column.expected test/command/suite/select/function/between/with_index/index_column.test Modified files: lib/proc.c Modified: lib/proc.c (+20 -2) =================================================================== --- lib/proc.c 2017-07-12 10:41:15 +0900 (29add30) +++ lib/proc.c 2017-07-14 07:04:51 +0900 (0833911) @@ -2394,10 +2394,20 @@ between_parse_args(grn_ctx *ctx, int nargs, grn_obj **args, between_data *data) { grn_id value_type; - if (data->value->header.type == GRN_BULK) { + switch (data->value->header.type) { + case GRN_BULK : value_type = data->value->header.domain; - } else { + break; + case GRN_COLUMN_INDEX : + { + grn_obj *domain_object; + domain_object = grn_ctx_at(ctx, data->value->header.domain); + value_type = domain_object->header.domain; + } + break; + default : value_type = grn_obj_get_range(ctx, data->value); + break; } if (value_type != data->min->header.domain) { rc = between_cast(ctx, data->min, &data->casted_min, value_type, "min"); @@ -2547,6 +2557,10 @@ selector_between_sequential_search_should_use(grn_ctx *ctx, return GRN_FALSE; } + if (data->value->header.type == GRN_COLUMN_INDEX) { + return GRN_FALSE; + } + n_index_keys = grn_table_size(ctx, index_table); if (n_index_keys == 0) { return GRN_FALSE; @@ -2771,6 +2785,10 @@ selector_between(grn_ctx *ctx, flags |= GRN_CURSOR_LT; } + if (data.value->header.type == GRN_COLUMN_INDEX) { + index = data.value; + } + if (index) { switch (index->header.type) { case GRN_TABLE_NO_KEY : Added: test/command/suite/select/function/between/with_index/index_column.expected (+61 -0) 100644 =================================================================== --- /dev/null +++ test/command/suite/select/function/between/with_index/index_column.expected 2017-07-14 07:04:51 +0900 (a105502) @@ -0,0 +1,61 @@ +table_create Users TABLE_HASH_KEY ShortText +[[0,0.0,0.0],true] +column_create Users age COLUMN_SCALAR Int32 +[[0,0.0,0.0],true] +table_create Ages TABLE_PAT_KEY Int32 +[[0,0.0,0.0],true] +column_create Ages users_age COLUMN_INDEX Users age +[[0,0.0,0.0],true] +load --table Users +[ +{"_key": "alice", "age": 17}, +{"_key": "bob", "age": 18}, +{"_key": "calros", "age": 19}, +{"_key": "dave", "age": 20}, +{"_key": "eric", "age": 21} +] +[[0,0.0,0.0],5] +select Users --filter 'between(Ages.users_age, "18", "include", 20, "include")' +[ + [ + 0, + 0.0, + 0.0 + ], + [ + [ + [ + 3 + ], + [ + [ + "_id", + "UInt32" + ], + [ + "_key", + "ShortText" + ], + [ + "age", + "Int32" + ] + ], + [ + 2, + "bob", + 18 + ], + [ + 3, + "calros", + 19 + ], + [ + 4, + "dave", + 20 + ] + ] + ] +] Added: test/command/suite/select/function/between/with_index/index_column.test (+16 -0) 100644 =================================================================== --- /dev/null +++ test/command/suite/select/function/between/with_index/index_column.test 2017-07-14 07:04:51 +0900 (a365681) @@ -0,0 +1,16 @@ +table_create Users TABLE_HASH_KEY ShortText +column_create Users age COLUMN_SCALAR Int32 + +table_create Ages TABLE_PAT_KEY Int32 +column_create Ages users_age COLUMN_INDEX Users age + +load --table Users +[ +{"_key": "alice", "age": 17}, +{"_key": "bob", "age": 18}, +{"_key": "calros", "age": 19}, +{"_key": "dave", "age": 20}, +{"_key": "eric", "age": 21} +] + +select Users --filter 'between(Ages.users_age, "18", "include", 20, "include")' -------------- next part -------------- HTML����������������������������... ダウンロード