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);