diff --git a/deps/Makefile b/deps/Makefile index 2a9fa65bf..04d76a24f 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -177,7 +177,8 @@ prometheus-cpp/prometheus-cpp/lib/libprometheus-cpp-core.a: prometheus-cpp: prometheus-cpp/prometheus-cpp/lib/libprometheus-cpp-core.a re2/re2/obj/libre2.a: - cd re2 && rm -rf re2-2018-07-01 +# cd re2 && rm -rf re2-2018-07-01 + cd re2 && rm -rf re2-2020-07-06 # cd re2 && tar -zxf re2-20140304.tgz cd re2 && tar -zxf re2.tar.gz # cd re2/re2 && sed -i -e 's/-O3 -g /-O3 -fPIC /' Makefile @@ -188,8 +189,8 @@ re2/re2/obj/libre2.a: re2: re2/re2/obj/libre2.a pcre/pcre/.libs/libpcre.a: - cd pcre && rm -rf pcre-8.39 - cd pcre && tar -zxf pcre-8.39.tar.gz + cd pcre && rm -rf pcre-8.44 + cd pcre && tar -zxf pcre-8.44.tar.gz cd pcre/pcre && ./configure cd pcre/pcre && CC=${CC} CXX=${CXX} ${MAKE} pcre: pcre/pcre/.libs/libpcre.a @@ -212,8 +213,8 @@ cleanall: cd mariadb-client-library && rm -rf mariadb-connector-c-3.0.2-src cd mariadb-client-library && rm -rf mariadb-connector-c-3.1.4-src cd libconfig && rm -rf libconfig-1.4.9 - cd re2 && rm -rf re2-2018-07-01 - cd pcre && rm -rf pcre-8.39 + cd re2 && rm -rf re2-2020-07-06 + cd pcre && rm -rf pcre-8.44 cd sqlite3/sqlite3 && rm -rf * || true cd clickhouse-cpp/clickhouse-cpp && rm -rf * || true cd lz4 && rm -rf lz4-1.7.5 || true diff --git a/deps/pcre/pcre b/deps/pcre/pcre index c836fdec1..cc0cdaac8 120000 --- a/deps/pcre/pcre +++ b/deps/pcre/pcre @@ -1 +1 @@ -pcre-8.39 \ No newline at end of file +pcre-8.44 \ No newline at end of file diff --git a/deps/pcre/pcre-8.44.tar.gz b/deps/pcre/pcre-8.44.tar.gz new file mode 100644 index 000000000..a8529764e Binary files /dev/null and b/deps/pcre/pcre-8.44.tar.gz differ diff --git a/deps/re2/2020-07-06.tar.gz b/deps/re2/2020-07-06.tar.gz new file mode 100644 index 000000000..a7d6c9f81 Binary files /dev/null and b/deps/re2/2020-07-06.tar.gz differ diff --git a/deps/re2/re2 b/deps/re2/re2 index 2cf410851..1b6a3a2da 120000 --- a/deps/re2/re2 +++ b/deps/re2/re2 @@ -1 +1 @@ -re2-2018-07-01 \ No newline at end of file +re2-2020-07-06 \ No newline at end of file diff --git a/deps/re2/re2.tar.gz b/deps/re2/re2.tar.gz index 113533de6..783f50823 120000 --- a/deps/re2/re2.tar.gz +++ b/deps/re2/re2.tar.gz @@ -1 +1 @@ -2018-07-01.tar.gz \ No newline at end of file +2020-07-06.tar.gz \ No newline at end of file diff --git a/lib/set_parser.cpp b/lib/set_parser.cpp index ce2197b30..5c1af1023 100644 --- a/lib/set_parser.cpp +++ b/lib/set_parser.cpp @@ -12,7 +12,7 @@ SetParser::SetParser(std::string nq) { memcpy(query_no_space,nq.c_str(),query_no_space_length); query_no_space[query_no_space_length]='\0'; query_no_space_length=remove_spaces(query_no_space); - query = string(query_no_space); + query = std::string(query_no_space); free(query_no_space); } @@ -21,7 +21,7 @@ SetParser::SetParser(std::string nq) { #define NAMES "(NAMES)" #define NAME_VALUE "((?:\\w|\\d)+)" -std::map> SetParser::parse1() { +std::map> SetParser::parse1() { proxy_debug(PROXY_DEBUG_MYSQL_QUERY_PROCESSOR, 4, "Parsing query %s\n", query.c_str()); re2::RE2::Options *opt2=new re2::RE2::Options(RE2::Quiet); @@ -31,7 +31,7 @@ std::map> SetParser::parse1() { re2::RE2 re0("^\\s*SET\\s+", *opt2); re2::RE2::Replace(&query, re0, ""); - std::map> result; + std::map> result; #define SESSION_P1 "(?:|SESSION +|@@|@@session.)" #define VAR_P1 "(\\w+)" @@ -39,19 +39,19 @@ std::map> SetParser::parse1() { //#define VAR_VALUE "((?:CONCAT\\((?:(REPLACE|CONCAT)\\()+@@sql_mode,(?:(?:'|\\w|,| |\"|\\))+(?:\\)))|(?:[@\\w/\\d:\\+\\-]|,)+|(?:)))" #define VAR_VALUE_P1 "(((?:CONCAT\\()*(?:((?: )*REPLACE|IFNULL|CONCAT)\\()+(?: )*(?:NULL|@OLD_SQL_MODE|@@sql_mode),(?:(?:'|\\w|,| |\"|\\))+(?:\\))*)|(?:[@\\w/\\d:\\+\\-]|,)+|(?:)))" - const string pattern="(?:" NAMES SPACES QUOTES NAME_VALUE QUOTES "(?: +COLLATE +" QUOTES NAME_VALUE QUOTES "|)" "|" SESSION_P1 VAR_P1 SPACES "(?:|:)=" SPACES QUOTES VAR_VALUE_P1 QUOTES ") *,? *"; + const std::string pattern="(?:" NAMES SPACES QUOTES NAME_VALUE QUOTES "(?: +COLLATE +" QUOTES NAME_VALUE QUOTES "|)" "|" SESSION_P1 VAR_P1 SPACES "(?:|:)=" SPACES QUOTES VAR_VALUE_P1 QUOTES ") *,? *"; VALGRIND_DISABLE_ERROR_REPORTING; re2::RE2 re(pattern, *opt2); VALGRIND_ENABLE_ERROR_REPORTING; - string var; - string value1, value2, value3, value4, value5; + std::string var; + std::string value1, value2, value3, value4, value5; re2::StringPiece input(query); while (re2::RE2::Consume(&input, re, &value1, &value2, &value3, &value4, &value5)) { std::vector op; #ifdef DEBUG proxy_debug(PROXY_DEBUG_MYSQL_QUERY_PROCESSOR, 4, "SET parsing: v1='%s' , v2='%s' , v3='%s' , v4='%s' , v5='%s'\n", value1.c_str(), value2.c_str(), value3.c_str(), value4.c_str(), value5.c_str()); #endif // DEBUG - string key; + std::string key; if (value1 != "") { // NAMES key = value1; @@ -74,7 +74,7 @@ VALGRIND_ENABLE_ERROR_REPORTING; } -std::map> SetParser::parse2() { +std::map> SetParser::parse2() { proxy_debug(PROXY_DEBUG_MYSQL_QUERY_PROCESSOR, 4, "Parsing query %s\n", query.c_str()); re2::RE2::Options *opt2=new re2::RE2::Options(RE2::Quiet); @@ -84,7 +84,7 @@ std::map> SetParser::parse2() { re2::RE2 re0("^\\s*SET\\s+", *opt2); re2::RE2::Replace(&query, re0, ""); - std::map> result; + std::map> result; // regex used: // SET(?: +)(|SESSION +)TRANSACTION(?: +)(?:(?:(ISOLATION(?: +)LEVEL)(?: +)(REPEATABLE(?: +)READ|READ(?: +)COMMITTED|READ(?: +)UNCOMMITTED|SERIALIZABLE))|(?:(READ)(?: +)(WRITE|ONLY))) @@ -95,18 +95,18 @@ std::map> SetParser::parse2() { //#define VAR_VALUE "((?:CONCAT\\((?:(REPLACE|CONCAT)\\()+@@sql_mode,(?:(?:'|\\w|,| |\"|\\))+(?:\\)))|(?:[@\\w/\\d:\\+\\-]|,)+|(?:)))" #define VAR_VALUE_P2 "(((?:CONCAT\\()*(?:((?: )*REPLACE|IFNULL|CONCAT)\\()+(?: )*(?:NULL|@OLD_SQL_MODE|@@sql_mode),(?:(?:'|\\w|,| |\"|\\))+(?:\\))*)|(?:[@\\w/\\d:\\+\\-]|,)+|(?:)))" */ - //const string pattern="(?:" NAMES SPACES QUOTES NAME_VALUE QUOTES "(?: +COLLATE +" QUOTES NAME_VALUE QUOTES "|)" "|" SESSION_P1 VAR_P1 SPACES "(?:|:)=" SPACES QUOTES VAR_VALUE_P1 QUOTES ") *,? *"; - const string pattern="(|SESSION) *TRANSACTION(?: +)(?:(?:(ISOLATION(?: +)LEVEL)(?: +)(REPEATABLE(?: +)READ|READ(?: +)COMMITTED|READ(?: +)UNCOMMITTED|SERIALIZABLE))|(?:(READ)(?: +)(WRITE|ONLY)))"; + //const std::string pattern="(?:" NAMES SPACES QUOTES NAME_VALUE QUOTES "(?: +COLLATE +" QUOTES NAME_VALUE QUOTES "|)" "|" SESSION_P1 VAR_P1 SPACES "(?:|:)=" SPACES QUOTES VAR_VALUE_P1 QUOTES ") *,? *"; + const std::string pattern="(|SESSION) *TRANSACTION(?: +)(?:(?:(ISOLATION(?: +)LEVEL)(?: +)(REPEATABLE(?: +)READ|READ(?: +)COMMITTED|READ(?: +)UNCOMMITTED|SERIALIZABLE))|(?:(READ)(?: +)(WRITE|ONLY)))"; re2::RE2 re(pattern, *opt2); - string var; - string value1, value2, value3, value4, value5; + std::string var; + std::string value1, value2, value3, value4, value5; re2::StringPiece input(query); while (re2::RE2::Consume(&input, re, &value1, &value2, &value3, &value4, &value5)) { std::vector op; #ifdef DEBUG proxy_debug(PROXY_DEBUG_MYSQL_QUERY_PROCESSOR, 4, "SET parsing: v1='%s' , v2='%s' , v3='%s' , v4='%s' , v5='%s'\n", value1.c_str(), value2.c_str(), value3.c_str(), value4.c_str(), value5.c_str()); #endif // DEBUG - string key; + std::string key; if (value1 != "") { // session is specified if (value2 != "") { // isolation level key = value2; @@ -135,12 +135,12 @@ std::string SetParser::parse_character_set() { re2::RE2 re0("^\\s*SET\\s+", *opt2); re2::RE2::Replace(&query, re0, ""); - std::map> result; + std::map> result; - const string pattern="((charset)|(character +set))(?: )(?:'?)([^'|\\s]*)(?:'?)"; + const std::string pattern="((charset)|(character +set))(?: )(?:'?)([^'|\\s]*)(?:'?)"; re2::RE2 re(pattern, *opt2); - string var; - string value1, value2, value3, value4; + std::string var; + std::string value1, value2, value3, value4; re2::StringPiece input(query); re2::RE2::Consume(&input, re, &value1, &value2, &value3, &value4);