susumu.yata
null+****@clear*****
Tue Nov 10 11:41:42 JST 2015
susumu.yata 2015-11-10 11:41:42 +0900 (Tue, 10 Nov 2015) New Revision: 405cceb0881594dc49b453b86a29a5fe72d8a10f https://github.com/groonga/groonga/commit/405cceb0881594dc49b453b86a29a5fe72d8a10f Message: grn_ts: fix a bug of parsing an operator as a part of a literal Modified files: lib/ts/ts_expr.c Modified: lib/ts/ts_expr.c (+21 -1) =================================================================== --- lib/ts/ts_expr.c 2015-11-10 11:11:49 +0900 (70ac9ea) +++ lib/ts/ts_expr.c 2015-11-10 11:41:42 +0900 (1c231dd) @@ -5563,7 +5563,27 @@ grn_ts_expr_parser_tokenize_next(grn_ctx *ctx, grn_ts_expr_parser *parser, return grn_ts_expr_parser_tokenize_end(ctx, parser, rest, token); } if (grn_ts_str_has_number_prefix(rest)) { - return grn_ts_expr_parser_tokenize_number(ctx, parser, rest, token); + grn_ts_expr_token *prev_token; + if ((rest.ptr[0] != '+') && (rest.ptr[0] != '-')) { + return grn_ts_expr_parser_tokenize_number(ctx, parser, rest, token); + } + prev_token = parser->tokens[parser->n_tokens - 1]; + switch (prev_token->type) { + case GRN_TS_EXPR_START_TOKEN: + case GRN_TS_EXPR_OP_TOKEN: { + return grn_ts_expr_parser_tokenize_number(ctx, parser, rest, token); + } + case GRN_TS_EXPR_BRACKET_TOKEN: { + if ((prev_token->src.ptr[0] == '(') || + (prev_token->src.ptr[0] == '[')) { + return grn_ts_expr_parser_tokenize_number(ctx, parser, rest, token); + } + break; + } + default: { + break; + } + } } if (rest.ptr[0] == '"') { return grn_ts_expr_parser_tokenize_text(ctx, parser, rest, token); -------------- next part -------------- HTML����������������������������...下載