[Groonga-commit] groonga/groonga at 709fa89 [master] Support getting token filters

Back to archive index

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 



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