[Groonga-commit] groonga/groonga at 405cceb [master] grn_ts: fix a bug of parsing an operator as a part of a literal

Back to archive index

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����������������������������...
下載 



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