Kouhei Sutou
null+****@clear*****
Thu Oct 2 22:40:17 JST 2014
Kouhei Sutou 2014-10-02 22:40:17 +0900 (Thu, 02 Oct 2014) New Revision: 709fa897d57a3ccf03b68c148af7b5b4be17d2fc https://github.com/groonga/groonga/commit/709fa897d57a3ccf03b68c148af7b5b4be17d2fc Merged fec9865: Merge pull request #209 from groonga/support-token-filters Message: Support getting token filters Modified files: lib/db.c lib/db.h lib/ii.c lib/token.c Modified: lib/db.c (+16 -6) =================================================================== --- lib/db.c 2014-10-02 22:36:01 +0900 (9c01f67) +++ lib/db.c 2014-10-02 22:40:17 +0900 (2f1f8e0) @@ -1854,6 +1854,7 @@ grn_table_truncate(grn_ctx *ctx, grn_obj *table) grn_hash *cols; grn_obj *tokenizer; grn_obj *normalizer; + grn_obj token_filters; if ((cols = grn_hash_create(ctx, NULL, sizeof(grn_id), 0, GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY))) { if (grn_table_columns(ctx, table, "", 0, (grn_obj *)cols)) { @@ -1865,7 +1866,9 @@ grn_table_truncate(grn_ctx *ctx, grn_obj *table) } grn_hash_close(ctx, cols); } - grn_table_get_info(ctx, table, NULL, NULL, &tokenizer, &normalizer); + grn_table_get_info(ctx, table, NULL, NULL, &tokenizer, &normalizer, NULL); + GRN_PTR_INIT(&token_filters, GRN_OBJ_VECTOR, GRN_ID_NIL); + grn_obj_get_info(ctx, table, GRN_INFO_TOKEN_FILTERS, &token_filters); switch (table->header.type) { case GRN_TABLE_PAT_KEY : for (hooks = DB_OBJ(table)->hooks[GRN_HOOK_INSERT]; hooks; hooks = hooks->next) { @@ -1900,6 +1903,8 @@ grn_table_truncate(grn_ctx *ctx, grn_obj *table) } grn_obj_set_info(ctx, table, GRN_INFO_DEFAULT_TOKENIZER, tokenizer); grn_obj_set_info(ctx, table, GRN_INFO_NORMALIZER, normalizer); + grn_obj_set_info(ctx, table, GRN_INFO_TOKEN_FILTERS, &token_filters); + GRN_OBJ_FIN(ctx, &token_filters); grn_obj_touch(ctx, table, NULL); } exit : @@ -1909,7 +1914,8 @@ exit : grn_rc grn_table_get_info(grn_ctx *ctx, grn_obj *table, grn_obj_flags *flags, grn_encoding *encoding, grn_obj **tokenizer, - grn_obj **normalizer) + grn_obj **normalizer, + grn_obj **token_filters) { grn_rc rc = GRN_INVALID_ARGUMENT; GRN_API_ENTER; @@ -1920,6 +1926,7 @@ grn_table_get_info(grn_ctx *ctx, grn_obj *table, grn_obj_flags *flags, if (encoding) { *encoding = ((grn_pat *)table)->encoding; } if (tokenizer) { *tokenizer = ((grn_pat *)table)->tokenizer; } if (normalizer) { *normalizer = ((grn_pat *)table)->normalizer; } + if (token_filters) { *token_filters = &(((grn_pat *)table)->token_filters); } rc = GRN_SUCCESS; break; case GRN_TABLE_DAT_KEY : @@ -1927,6 +1934,7 @@ grn_table_get_info(grn_ctx *ctx, grn_obj *table, grn_obj_flags *flags, if (encoding) { *encoding = ((grn_dat *)table)->encoding; } if (tokenizer) { *tokenizer = ((grn_dat *)table)->tokenizer; } if (normalizer) { *normalizer = ((grn_dat *)table)->normalizer; } + if (token_filters) { *token_filters = &(((grn_dat *)table)->token_filters); } rc = GRN_SUCCESS; break; case GRN_TABLE_HASH_KEY : @@ -1934,6 +1942,7 @@ grn_table_get_info(grn_ctx *ctx, grn_obj *table, grn_obj_flags *flags, if (encoding) { *encoding = ((grn_hash *)table)->encoding; } if (tokenizer) { *tokenizer = ((grn_hash *)table)->tokenizer; } if (normalizer) { *normalizer = ((grn_hash *)table)->normalizer; } + if (token_filters) { *token_filters = &(((grn_hash *)table)->token_filters); } rc = GRN_SUCCESS; break; case GRN_TABLE_NO_KEY : @@ -1941,6 +1950,7 @@ grn_table_get_info(grn_ctx *ctx, grn_obj *table, grn_obj_flags *flags, if (encoding) { *encoding = GRN_ENC_NONE; } if (tokenizer) { *tokenizer = grn_token_uvector; } if (normalizer) { *normalizer = NULL; } + if (token_filters) { *token_filters = NULL; } rc = GRN_SUCCESS; break; } @@ -6356,7 +6366,7 @@ build_index(grn_ctx *ctx, grn_obj *obj) grn_obj_flags flags; grn_ii *ii = (grn_ii *)obj; grn_bool use_grn_ii_build; - grn_table_get_info(ctx, ii->lexicon, &flags, NULL, NULL, NULL); + grn_table_get_info(ctx, ii->lexicon, &flags, NULL, NULL, NULL, NULL); switch (flags & GRN_OBJ_TABLE_TYPE_MASK) { case GRN_OBJ_TABLE_PAT_KEY : case GRN_OBJ_TABLE_DAT_KEY : @@ -9255,7 +9265,7 @@ grn_column_index_column_equal(grn_ctx *ctx, grn_obj *obj, grn_operator op, if (obj->header.type != GRN_COLUMN_FIX_SIZE) { grn_obj *tokenizer, *lexicon = grn_ctx_at(ctx, target->header.domain); if (!lexicon) { continue; } - grn_table_get_info(ctx, lexicon, NULL, NULL, &tokenizer, NULL); + grn_table_get_info(ctx, lexicon, NULL, NULL, &tokenizer, NULL, NULL); if (tokenizer) { continue; } } if (n < buf_size) { @@ -9320,7 +9330,7 @@ grn_column_index_column_range(grn_ctx *ctx, grn_obj *obj, grn_operator op, if (!lexicon) { continue; } if (lexicon->header.type != GRN_TABLE_PAT_KEY) { continue; } /* FIXME: GRN_TABLE_DAT_KEY should be supported */ - grn_table_get_info(ctx, lexicon, NULL, NULL, &tokenizer, NULL); + grn_table_get_info(ctx, lexicon, NULL, NULL, &tokenizer, NULL, NULL); if (tokenizer) { continue; } } if (n < buf_size) { @@ -9352,7 +9362,7 @@ is_valid_range_index(grn_ctx *ctx, grn_obj *index_column) return GRN_FALSE; } - grn_table_get_info(ctx, lexicon, NULL, NULL, &tokenizer, NULL); + grn_table_get_info(ctx, lexicon, NULL, NULL, &tokenizer, NULL, NULL); grn_obj_unlink(ctx, lexicon); if (tokenizer) { return GRN_FALSE; } Modified: lib/db.h (+2 -1) =================================================================== --- lib/db.h 2014-10-02 22:36:01 +0900 (d48a625) +++ lib/db.h 2014-10-02 22:40:17 +0900 (e9d2278) @@ -96,7 +96,8 @@ grn_id grn_table_add_v(grn_ctx *ctx, grn_obj *table, const void *key, int key_si void **value, int *added); GRN_API grn_rc grn_table_get_info(grn_ctx *ctx, grn_obj *table, grn_obj_flags *flags, grn_encoding *encoding, grn_obj **tokenizer, - grn_obj **normalizer); + grn_obj **normalizer, + grn_obj **token_filters); const char *_grn_table_key(grn_ctx *ctx, grn_obj *table, grn_id id, uint32_t *key_size); grn_rc grn_table_search(grn_ctx *ctx, grn_obj *table, Modified: lib/ii.c (+7 -5) =================================================================== --- lib/ii.c 2014-10-02 22:36:01 +0900 (d10b84d) +++ lib/ii.c 2014-10-02 22:40:17 +0900 (67e5f28) @@ -3467,7 +3467,8 @@ _grn_ii_create(grn_ctx *ctx, grn_ii *ii, const char *path, grn_obj *lexicon, uin free_histogram[i] = 0; } */ - if (grn_table_get_info(ctx, lexicon, &lflags, &encoding, &tokenizer, NULL)) { + if (grn_table_get_info(ctx, lexicon, &lflags, &encoding, &tokenizer, + NULL, NULL)) { return NULL; } if (path && strlen(path) + 6 >= PATH_MAX) { return NULL; } @@ -3589,7 +3590,8 @@ grn_ii_open(grn_ctx *ctx, const char *path, grn_obj *lexicon) grn_obj_flags lflags; grn_encoding encoding; grn_obj *tokenizer; - if (grn_table_get_info(ctx, lexicon, &lflags, &encoding, &tokenizer, NULL)) { + if (grn_table_get_info(ctx, lexicon, &lflags, &encoding, &tokenizer, + NULL, NULL)) { return NULL; } if (strlen(path) + 6 >= PATH_MAX) { return NULL; } @@ -6706,7 +6708,7 @@ get_tmp_lexicon(grn_ctx *ctx, grn_ii_buffer *ii_buffer) grn_obj *normalizer; grn_obj_flags flags; grn_table_get_info(ctx, ii_buffer->lexicon, &flags, NULL, - &tokenizer, &normalizer); + &tokenizer, &normalizer, NULL); flags &= ~GRN_OBJ_PERSISTENT; tmp_lexicon = grn_table_create(ctx, NULL, 0, NULL, flags, domain, range); if (tmp_lexicon) { @@ -7157,7 +7159,7 @@ grn_ii_buffer_open(grn_ctx *ctx, grn_ii *ii, S_IRUSR|S_IWUSR); if (ii_buffer->tmpfd != -1) { grn_obj_flags flags; - grn_table_get_info(ctx, ii->lexicon, &flags, NULL, NULL, NULL); + grn_table_get_info(ctx, ii->lexicon, &flags, NULL, NULL, NULL, NULL); if ((flags & GRN_OBJ_TABLE_TYPE_MASK) == GRN_OBJ_TABLE_PAT_KEY) { grn_pat_cache_enable(ctx, (grn_pat *)ii->lexicon, PAT_CACHE_SIZE); @@ -7280,7 +7282,7 @@ grn_ii_buffer_close(grn_ctx *ctx, grn_ii_buffer *ii_buffer) { uint32_t i; grn_obj_flags flags; - grn_table_get_info(ctx, ii_buffer->ii->lexicon, &flags, NULL, NULL, NULL); + grn_table_get_info(ctx, ii_buffer->ii->lexicon, &flags, NULL, NULL, NULL, NULL); if ((flags & GRN_OBJ_TABLE_TYPE_MASK) == GRN_OBJ_TABLE_PAT_KEY) { grn_pat_cache_disable(ctx, (grn_pat *)ii_buffer->ii->lexicon); } Modified: lib/token.c (+3 -1) =================================================================== --- lib/token.c 2014-10-02 22:36:01 +0900 (edce2ed) +++ lib/token.c 2014-10-02 22:40:17 +0900 (3056980) @@ -503,9 +503,10 @@ grn_token_open(grn_ctx *ctx, grn_obj *table, const char *str, size_t str_len, grn_encoding encoding; grn_obj *tokenizer; grn_obj *normalizer; + grn_obj *token_filters; grn_obj_flags table_flags; if (grn_table_get_info(ctx, table, &table_flags, &encoding, &tokenizer, - &normalizer)) { + &normalizer, &token_filters)) { return NULL; } if (!(token = GRN_MALLOC(sizeof(grn_token)))) { return NULL; } @@ -513,6 +514,7 @@ grn_token_open(grn_ctx *ctx, grn_obj *table, const char *str, size_t str_len, token->mode = mode; token->encoding = encoding; token->tokenizer = tokenizer; + token->token_filters = token_filters; token->orig = (const unsigned char *)str; token->orig_blen = str_len; token->curr = NULL; -------------- next part -------------- HTML����������������������������...Télécharger