From 7249f006cc0a41458e79feff57398f0a1efa37bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Sat, 29 Sep 2018 01:43:31 +1000 Subject: [PATCH] Further improvement on SET parser #1528 `SET` is not case sensitive Handle `time_zone` with numeric time offset --- lib/set_parser.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/set_parser.cpp b/lib/set_parser.cpp index 4d5e76755..bbfa20d5f 100644 --- a/lib/set_parser.cpp +++ b/lib/set_parser.cpp @@ -17,12 +17,14 @@ SetParser::SetParser(std::string nq) { } std::map> SetParser::parse() { - re2::RE2::Replace(&query, "^\\s*SET\\s+", ""); re2::RE2::Options *opt2=new re2::RE2::Options(RE2::Quiet); opt2->set_case_sensitive(false); opt2->set_longest_match(false); + re2::RE2 re0("^\\s*SET\\s+", *opt2); + re2::RE2::Replace(&query, re0, ""); + std::map> result; #define NAMES "(NAMES)" @@ -31,7 +33,7 @@ std::map> SetParser::parse() { #define SESSION "(?:|SESSION +|@@|@@session.)" #define VAR "(\\w+)" #define SPACES " *" -#define VAR_VALUE "((?:[\\w/]|,)+)" +#define VAR_VALUE "((?:[\\w/\\d:\\+\\-]|,)+)" const string pattern="(?:" NAMES SPACES QUOTES NAME_VALUE QUOTES "(?: +COLLATE +" QUOTES NAME_VALUE QUOTES "|)" "|" SESSION VAR SPACES "(?:|:)=" SPACES QUOTES VAR_VALUE QUOTES ") *,? *"; re2::RE2 re(pattern, *opt2);