Further improvement on SET parser #1528

`SET` is not case sensitive
Handle `time_zone` with numeric time offset
pull/1721/head
René Cannaò 8 years ago
parent fccef7f64e
commit 7249f006cc

@ -17,12 +17,14 @@ SetParser::SetParser(std::string nq) {
}
std::map<std::string,std::vector<string>> 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<std::string,std::vector<string>> result;
#define NAMES "(NAMES)"
@ -31,7 +33,7 @@ std::map<std::string,std::vector<string>> 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);

Loading…
Cancel
Save