generate regexp for mysql variables

pull/2745/head
Valentin Rakush 6 years ago
parent f56a9429fc
commit b3beb35ae1

@ -28,6 +28,9 @@ class MySQL_Variables {
static verify_var verifiers[SQL_NAME_LAST];
static update_var updaters[SQL_NAME_LAST];
public:
std::string variables_regexp;
public:
MySQL_Variables();

@ -3373,7 +3373,11 @@ bool MySQL_Thread::init() {
match_regexes=(Session_Regex **)malloc(sizeof(Session_Regex *)*4);
match_regexes[0]=new Session_Regex((char *)"^SET (|SESSION |@@|@@session.)SQL_LOG_BIN( *)(:|)=( *)");
match_regexes[1]=new Session_Regex((char *)"^SET (|SESSION |@@|@@session.)(SQL_MODE|TIME_ZONE|CHARACTER_SET_RESULTS|CHARACTER_SET_CLIENT|CHARACTER_SET_DATABASE|SESSION_TRACK_GTIDS|SQL_AUTO_IS_NULL|SQL_SELECT_LIMIT|SQL_SAFE_UPDATES|COLLATION_CONNECTION|CHARACTER_SET_CONNECTION|NET_WRITE_TIMEOUT|WSREP_SYNC_WAIT|TX_ISOLATION|GROUP_CONCAT_MAX_LEN|MAX_JOIN_SIZE( *)(:|)=( *))");
std::stringstream ss;
ss << "^SET (|SESSION |@@|@@session.)(" << mysql_variables.variables_regexp << "SESSION_TRACK_GTIDS|TX_ISOLATION( *)(:|)=( *))";
match_regexes[1]=new Session_Regex((char *)ss.str().c_str());
match_regexes[2]=new Session_Regex((char *)"^SET(?: +)(|SESSION +)TRANSACTION(?: +)(?:(?:(ISOLATION(?: +)LEVEL)(?: +)(REPEATABLE(?: +)READ|READ(?: +)COMMITTED|READ(?: +)UNCOMMITTED|SERIALIZABLE))|(?:(READ)(?: +)(WRITE|ONLY)))");
match_regexes[3]=new Session_Regex((char *)"^(set)(?: +)((charset)|(character +set))(?: )");

@ -20,33 +20,22 @@ update_var MySQL_Variables::updaters[SQL_NAME_LAST];
MySQL_Variables::MySQL_Variables() {
variables_regexp = "";
for (auto i = 0; i < SQL_NAME_LAST; i++) {
switch(i) {
case SQL_SAFE_UPDATES:
case SQL_SELECT_LIMIT:
case SQL_SQL_MODE:
case SQL_TIME_ZONE:
case SQL_CHARACTER_SET_RESULTS:
case SQL_CHARACTER_SET_CONNECTION:
case SQL_CHARACTER_SET_CLIENT:
case SQL_CHARACTER_SET_DATABASE:
case SQL_ISOLATION_LEVEL:
case SQL_TRANSACTION_READ:
case SQL_SQL_AUTO_IS_NULL:
case SQL_COLLATION_CONNECTION:
case SQL_NET_WRITE_TIMEOUT:
case SQL_MAX_JOIN_SIZE:
case SQL_WSREP_SYNC_WAIT:
case SQL_GROUP_CONCAT_MAX_LEN:
MySQL_Variables::verifiers[i] = verify_server_variable;
MySQL_Variables::updaters[i] = update_server_variable;
break;
case SQL_LOG_BIN:
MySQL_Variables::verifiers[i] = verify_server_variable;
MySQL_Variables::updaters[i] = logbin_update_server_variable;
break;
default:
MySQL_Variables::updaters[i] = NULL;
if (i == SQL_CHARACTER_SET || i == SQL_CHARACTER_ACTION || i == SQL_SET_NAMES) {
MySQL_Variables::updaters[i] = NULL;
MySQL_Variables::verifiers[i] = NULL;
}
else if (i == SQL_LOG_BIN) {
MySQL_Variables::verifiers[i] = verify_server_variable;
MySQL_Variables::updaters[i] = logbin_update_server_variable;
} else {
MySQL_Variables::verifiers[i] = verify_server_variable;
MySQL_Variables::updaters[i] = update_server_variable;
}
if (mysql_tracked_variables[i].status == SETTING_VARIABLE) {
variables_regexp += mysql_tracked_variables[i].set_variable_name;
variables_regexp += "|";
}
}
}
@ -535,3 +524,4 @@ bool MySQL_Variables::parse_variable_number(MySQL_Session *sess, int idx, string
}
return true;
}

Loading…
Cancel
Save