do not set variables on connect

pull/2650/head
val 6 years ago
parent 08c6622eb0
commit 056366ea6b

@ -3331,36 +3331,6 @@ MySQL_Session * MySQL_Thread::create_new_session_and_client_data_stream(int _fd)
}
sess->client_myds->myconn->options.session_track_gtids=strdup(mysql_thread___default_session_track_gtids);
for (int i=0; i<SQL_NAME_LAST; i++) {
if (i == SQL_CHARACTER_SET || i == SQL_CHARACTER_SET_RESULTS ||
i == SQL_CHARACTER_SET_CONNECTION || i == SQL_CHARACTER_SET_CLIENT ||
i == SQL_CHARACTER_SET_DATABASE) {
const MARIADB_CHARSET_INFO *ci = NULL;
ci = proxysql_find_charset_name(mysql_thread___default_variables[i]);
if (!ci) {
proxy_error("Cannot find character set for name [%s]. Configuration error. Check [%s] global variable. Using character set 33.\n",
mysql_thread___default_variables[i], mysql_tracked_variables[i].internal_variable_name);
assert(0);
}
std::stringstream ss;
ss << ci->nr;
mysql_variables.client_set_value(sess, i, ss.str());
} else if (i == SQL_COLLATION_CONNECTION) {
const MARIADB_CHARSET_INFO *ci = NULL;
ci = proxysql_find_charset_collate(mysql_thread___default_variables[i]);
if (!ci) {
proxy_error("Cannot find character set for name [%s]. Configuration error. Check [%s] global variable. Using character set 33.\n",
mysql_thread___default_variables[SQL_COLLATION_CONNECTION], mysql_tracked_variables[SQL_COLLATION_CONNECTION].internal_variable_name);
assert(0);
}
std::stringstream ss;
ss << ci->nr;
mysql_variables.client_set_value(sess, i, ss.str());
} else {
mysql_variables.client_set_value(sess, i, mysql_thread___default_variables[i]);
}
}
return sess;
}

@ -343,6 +343,9 @@ bool update_server_variable(MySQL_Session* session, int idx, int &_rc) {
bool verify_set_names(MySQL_Session* session) {
uint32_t client_charset_hash = mysql_variables.client_get_hash(session, SQL_CHARACTER_SET_CLIENT);
if (client_charset_hash == 0)
return false;
uint32_t results_charset_hash = mysql_variables.client_get_hash(session, SQL_CHARACTER_SET_RESULTS);
if (client_charset_hash != results_charset_hash)
return false;
@ -391,7 +394,7 @@ bool verify_set_names(MySQL_Session* session) {
}
inline bool verify_server_variable(MySQL_Session* session, int idx, uint32_t client_hash, uint32_t server_hash) {
if (client_hash != server_hash) {
if (client_hash && client_hash != server_hash) {
// Edge case for set charset command, because we do not know database character set
// for now we are setting connection and collation to empty
if (idx == SQL_CHARACTER_SET_CONNECTION || idx == SQL_COLLATION_CONNECTION ) {

@ -48,8 +48,9 @@ void Variable::fill_server_internal_session(json &j, int conn_num, int idx) {
j["backends"][conn_num]["conn"][mysql_tracked_variables[idx].internal_variable_name] = std::string((ci && ci->name)?ci->name:"");
} else if (idx == SQL_LOG_BIN) {
if (!value)
value = mysql_tracked_variables[idx].default_value;
j["backends"][conn_num]["conn"][mysql_tracked_variables[idx].internal_variable_name] = std::string(!strcmp("1",value)?"ON":"OFF");
j["backends"][conn_num]["conn"][mysql_tracked_variables[idx].internal_variable_name] = mysql_tracked_variables[idx].default_value;
else
j["backends"][conn_num]["conn"][mysql_tracked_variables[idx].internal_variable_name] = std::string(!strcmp("1",value)?"ON":"OFF");
} else {
j["backends"][conn_num]["conn"][mysql_tracked_variables[idx].internal_variable_name] = std::string(value?value:"");
}
@ -58,7 +59,10 @@ void Variable::fill_server_internal_session(json &j, int conn_num, int idx) {
void Variable::fill_client_internal_session(json &j, int idx) {
if (idx == SQL_CHARACTER_SET_RESULTS || idx == SQL_CHARACTER_SET_CLIENT || idx == SQL_CHARACTER_SET_DATABASE) {
const MARIADB_CHARSET_INFO *ci = NULL;
ci = proxysql_find_charset_nr(atoi(value));
if (!value)
ci = proxysql_find_charset_name(mysql_tracked_variables[idx].default_value);
else
ci = proxysql_find_charset_nr(atoi(value));
if (!ci) {
if (idx == SQL_CHARACTER_SET_RESULTS && (!strcasecmp("NULL", value) || !strcasecmp("binary", value))) {
j["conn"][mysql_tracked_variables[idx].internal_variable_name] = (ci && ci->csname)?ci->csname:"";
@ -77,10 +81,16 @@ void Variable::fill_client_internal_session(json &j, int idx) {
j["conn"][mysql_tracked_variables[idx].internal_variable_name] = (ci && ci->csname)?ci->csname:"";
} else if (idx == SQL_COLLATION_CONNECTION) {
const MARIADB_CHARSET_INFO *ci = NULL;
ci = proxysql_find_charset_nr(atoi(value));
if (!value)
ci = proxysql_find_charset_collate(mysql_tracked_variables[idx].default_value);
else
ci = proxysql_find_charset_nr(atoi(value));
j["conn"][mysql_tracked_variables[idx].internal_variable_name] = (ci && ci->name)?ci->name:"";
} else if (idx == SQL_LOG_BIN) {
j["conn"][mysql_tracked_variables[idx].internal_variable_name] = !strcmp("1", value)?"ON":"OFF";
if (!value)
j["conn"][mysql_tracked_variables[idx].internal_variable_name] = mysql_tracked_variables[idx].default_value;
else
j["conn"][mysql_tracked_variables[idx].internal_variable_name] = !strcmp("1", value)?"ON":"OFF";
} else {
j["conn"][mysql_tracked_variables[idx].internal_variable_name] = value?value:"";
}

Loading…
Cancel
Save