Kouhei Sutou
null+****@clear*****
Sat Nov 7 22:15:08 JST 2015
Kouhei Sutou 2015-11-07 22:15:08 +0900 (Sat, 07 Nov 2015) New Revision: 656c1e7bf05edc3196aa1b81d1b15d7ee65659a9 https://github.com/groonga/groonga/commit/656c1e7bf05edc3196aa1b81d1b15d7ee65659a9 Message: grn_obj_reindex: support data column Added files: test/command/suite/reindex/data_column.expected test/command/suite/reindex/data_column.test Modified files: lib/grn_db.h lib/obj.c Modified: lib/grn_db.h (+5 -0) =================================================================== --- lib/grn_db.h 2015-11-07 22:14:40 +0900 (38a2292) +++ lib/grn_db.h 2015-11-07 22:15:08 +0900 (5aad617) @@ -426,6 +426,11 @@ grn_rc grn_accessor_resolve(grn_ctx *ctx, grn_obj *accessor, int deep, grn_obj *base_res, grn_obj **res, grn_search_optarg *optarg); +typedef struct { + grn_id target; + unsigned int section; +} grn_obj_default_set_value_hook_data; + grn_obj *grn_obj_default_set_value_hook(grn_ctx *ctx, int nargs, grn_obj **args, Modified: lib/obj.c (+24 -0) =================================================================== --- lib/obj.c 2015-11-07 22:14:40 +0900 (a460dc0) +++ lib/obj.c 2015-11-07 22:15:08 +0900 (55fe4d7) @@ -246,6 +246,26 @@ grn_table_reindex(grn_ctx *ctx, grn_obj *table) grn_hash_close(ctx, columns); } +static void +grn_data_column_reindex(grn_ctx *ctx, grn_obj *data_column) +{ + grn_hook *hooks; + + for (hooks = DB_OBJ(data_column)->hooks[GRN_HOOK_SET]; + hooks; + hooks = hooks->next) { + grn_obj_default_set_value_hook_data *data = (void *)GRN_NEXT_ADDR(hooks); + grn_obj *target = grn_ctx_at(ctx, data->target); + if (target->header.type != GRN_COLUMN_INDEX) { + continue; + } + grn_obj_reindex(ctx, target); + if (ctx->rc != GRN_SUCCESS) { + break; + } + } +} + grn_rc grn_obj_reindex(grn_ctx *ctx, grn_obj *obj) { @@ -265,6 +285,10 @@ grn_obj_reindex(grn_ctx *ctx, grn_obj *obj) case GRN_TABLE_DAT_KEY : grn_table_reindex(ctx, obj); break; + case GRN_COLUMN_FIX_SIZE : + case GRN_COLUMN_VAR_SIZE : + grn_data_column_reindex(ctx, obj); + break; case GRN_COLUMN_INDEX : grn_index_column_rebuild(ctx, obj); break; Added: test/command/suite/reindex/data_column.expected (+21 -0) 100644 =================================================================== --- /dev/null +++ test/command/suite/reindex/data_column.expected 2015-11-07 22:15:08 +0900 (13eb656) @@ -0,0 +1,21 @@ +table_create Memos TABLE_NO_KEY +[[0,0.0,0.0],true] +column_create Memos content COLUMN_SCALAR Text +[[0,0.0,0.0],true] +table_create Terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto +[[0,0.0,0.0],true] +column_create Terms index COLUMN_INDEX|WITH_POSITION Memos content +[[0,0.0,0.0],true] +load --table Memos +[ +{"content": "This is a memo"} +] +[[0,0.0,0.0],1] +delete Terms --key this +[[0,0.0,0.0],true] +select Terms --output_columns _key, --sortby _key +[[0,0.0,0.0],[[[3],[["_key","ShortText"]],["a"],["is"],["memo"]]]] +reindex Memos.content +[[0,0.0,0.0],true] +select Terms --output_columns _key, --sortby _key +[[0,0.0,0.0],[[[4],[["_key","ShortText"]],["a"],["is"],["memo"],["this"]]]] Added: test/command/suite/reindex/data_column.test (+19 -0) 100644 =================================================================== --- /dev/null +++ test/command/suite/reindex/data_column.test 2015-11-07 22:15:08 +0900 (7b7972e) @@ -0,0 +1,19 @@ +table_create Memos TABLE_NO_KEY +column_create Memos content COLUMN_SCALAR Text + +table_create Terms TABLE_PAT_KEY ShortText \ + --default_tokenizer TokenBigram \ + --normalizer NormalizerAuto +column_create Terms index COLUMN_INDEX|WITH_POSITION Memos content + +load --table Memos +[ +{"content": "This is a memo"} +] + +delete Terms --key this +select Terms --output_columns _key, --sortby _key + +reindex Memos.content + +select Terms --output_columns _key, --sortby _key -------------- next part -------------- HTML����������������������������...다운로드