Kouhei Sutou
null+****@clear*****
Thu Nov 19 15:31:24 JST 2015
Kouhei Sutou 2015-11-19 15:31:24 +0900 (Thu, 19 Nov 2015) New Revision: 53e0816fa7db6c9b35b4f52353a8832ed7abc36c https://github.com/pgroonga/pgroonga/commit/53e0816fa7db6c9b35b4f52353a8832ed7abc36c Message: Accept 'none' as none value for tokenizer and normalizer Because pg_dump outputs empty value as 'WITH (normalizer=)'. It's invalid SQL. [groonga-dev,03664] Reported by Naoki Takami. Thanks!!! Copied files: expected/full-text-search/text/options/normalizer/empty.out (from expected/full-text-search/text/options/normalizer/none.out) expected/full-text-search/text/options/tokenizer/empty.out (from expected/full-text-search/text/options/tokenizer/none.out) sql/full-text-search/text/options/normalizer/empty.sql (from sql/full-text-search/text/options/normalizer/none.sql) sql/full-text-search/text/options/tokenizer/empty.sql (from sql/full-text-search/text/options/tokenizer/none.sql) Modified files: expected/full-text-search/text/options/normalizer/none.out expected/full-text-search/text/options/tokenizer/none.out pgroonga.c sql/full-text-search/text/options/normalizer/none.sql sql/full-text-search/text/options/tokenizer/none.sql Copied: expected/full-text-search/text/options/normalizer/empty.out (+0 -0) 100% =================================================================== Modified: expected/full-text-search/text/options/normalizer/none.out (+1 -1) =================================================================== --- expected/full-text-search/text/options/normalizer/none.out 2015-10-30 09:43:54 +0900 (26b4ca6) +++ expected/full-text-search/text/options/normalizer/none.out 2015-11-19 15:31:24 +0900 (cad877d) @@ -7,7 +7,7 @@ INSERT INTO memos VALUES (2, 'Groonga is fast full text search engine.'); INSERT INTO memos VALUES (3, 'PGroonga is a PostgreSQL extension that uses Groonga.'); CREATE INDEX grnindex ON memos USING pgroonga (content) - WITH (normalizer = ''); + WITH (normalizer = 'none'); SET enable_seqscan = off; SET enable_indexscan = on; SET enable_bitmapscan = off; Copied: expected/full-text-search/text/options/tokenizer/empty.out (+0 -0) 100% =================================================================== Modified: expected/full-text-search/text/options/tokenizer/none.out (+1 -1) =================================================================== --- expected/full-text-search/text/options/tokenizer/none.out 2015-10-30 09:43:54 +0900 (9888bc5) +++ expected/full-text-search/text/options/tokenizer/none.out 2015-11-19 15:31:24 +0900 (bb5eeb1) @@ -7,7 +7,7 @@ INSERT INTO memos VALUES (2, 'PostgreSQL Groonga'); INSERT INTO memos VALUES (3, 'Groonga'); CREATE INDEX grnindex ON memos USING pgroonga (tag) - WITH (tokenizer = ''); + WITH (tokenizer = 'none'); SET enable_seqscan = off; SET enable_indexscan = on; SET enable_bitmapscan = off; Modified: pgroonga.c (+26 -13) =================================================================== --- pgroonga.c 2015-10-30 09:43:54 +0900 (9c3715b) +++ pgroonga.c 2015-11-19 15:31:24 +0900 (59e0418) @@ -51,6 +51,8 @@ typedef struct stat pgrn_stat_buffer; #define VARCHARARRAYOID 1015 +#define PGRN_NONE_VALUE "none" + PG_MODULE_MAGIC; static bool PGrnInitialized = false; @@ -305,7 +307,7 @@ static void PGrnLogPathAssign(const char *new_value, void *extra) { if (new_value) { - if (strcmp(new_value, "none") == 0) { + if (strcmp(new_value, PGRN_NONE_VALUE) == 0) { grn_default_logger_set_path(NULL); } else { grn_default_logger_set_path(new_value); @@ -487,17 +489,30 @@ PGrnIsTokenizer(grn_obj *object) return true; } +static bool +PGrnIsNoneValue(const char *value) +{ + if (!value) + return true; + + if (!value[0]) + return true; + + if (strcmp(value, PGRN_NONE_VALUE) == 0) + return true; + + return false; +} + static void PGrnOptionValidateTokenizer(char *name) { grn_obj *tokenizer; - size_t name_length; - name_length = strlen(name); - if (name_length == 0) + if (PGrnIsNoneValue(name)) return; - tokenizer = grn_ctx_get(ctx, name, name_length); + tokenizer = grn_ctx_get(ctx, name, -1); if (!tokenizer) { ereport(ERROR, @@ -531,13 +546,11 @@ static void PGrnOptionValidateNormalizer(char *name) { grn_obj *normalizer; - size_t name_length; - name_length = strlen(name); - if (name_length == 0) + if (PGrnIsNoneValue(name)) return; - normalizer = grn_ctx_get(ctx, name, name_length); + normalizer = grn_ctx_get(ctx, name, -1); if (!normalizer) { ereport(ERROR, @@ -1380,7 +1393,7 @@ PGrnCreateFullTextSearchIndexColumnForJSON(PGrnCreateData *data) normalizerName = (const char *) (options) + options->normalizerOffset; } - if (!tokenizerName || tokenizerName[0] == '\0') + if (PGrnIsNoneValue(tokenizerName)) return; snprintf(lexiconName, sizeof(lexiconName), @@ -1393,7 +1406,7 @@ PGrnCreateFullTextSearchIndexColumnForJSON(PGrnCreateData *data) grn_obj_set_info(ctx, lexicon, GRN_INFO_DEFAULT_TOKENIZER, PGrnLookup(tokenizerName, ERROR)); - if (normalizerName && normalizerName[0]) + if (!PGrnIsNoneValue(normalizerName)) { grn_obj_set_info(ctx, lexicon, GRN_INFO_NORMALIZER, PGrnLookup(normalizerName, ERROR)); @@ -1534,12 +1547,12 @@ PGrnCreateIndexColumn(PGrnCreateData *data) tokenizerName = (const char *) (options) + options->tokenizerOffset; normalizerName = (const char *) (options) + options->normalizerOffset; } - if (tokenizerName && tokenizerName[0]) + if (!PGrnIsNoneValue(tokenizerName)) { grn_obj_set_info(ctx, lexicon, GRN_INFO_DEFAULT_TOKENIZER, PGrnLookup(tokenizerName, ERROR)); } - if (normalizerName && normalizerName[0]) + if (!PGrnIsNoneValue(normalizerName)) { grn_obj_set_info(ctx, lexicon, GRN_INFO_NORMALIZER, PGrnLookup(normalizerName, ERROR)); Copied: sql/full-text-search/text/options/normalizer/empty.sql (+0 -0) 100% =================================================================== Modified: sql/full-text-search/text/options/normalizer/none.sql (+1 -1) =================================================================== --- sql/full-text-search/text/options/normalizer/none.sql 2015-10-30 09:43:54 +0900 (70faf85) +++ sql/full-text-search/text/options/normalizer/none.sql 2015-11-19 15:31:24 +0900 (e76c75c) @@ -9,7 +9,7 @@ INSERT INTO memos VALUES (3, 'PGroonga is a PostgreSQL extension that uses Groon CREATE INDEX grnindex ON memos USING pgroonga (content) - WITH (normalizer = ''); + WITH (normalizer = 'none'); SET enable_seqscan = off; SET enable_indexscan = on; Copied: sql/full-text-search/text/options/tokenizer/empty.sql (+0 -0) 100% =================================================================== Modified: sql/full-text-search/text/options/tokenizer/none.sql (+1 -1) =================================================================== --- sql/full-text-search/text/options/tokenizer/none.sql 2015-10-30 09:43:54 +0900 (5984d8f) +++ sql/full-text-search/text/options/tokenizer/none.sql 2015-11-19 15:31:24 +0900 (b8e3cbc) @@ -9,7 +9,7 @@ INSERT INTO memos VALUES (3, 'Groonga'); CREATE INDEX grnindex ON memos USING pgroonga (tag) - WITH (tokenizer = ''); + WITH (tokenizer = 'none'); SET enable_seqscan = off; SET enable_indexscan = on; -------------- next part -------------- HTML����������������������������...Download