From 5a33e9763d73499ae6803e701d97b34c8bf7e44f Mon Sep 17 00:00:00 2001 From: val Date: Thu, 9 Apr 2020 09:53:00 +0000 Subject: [PATCH] call getters just once --- lib/MySQL_Variables.cpp | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/lib/MySQL_Variables.cpp b/lib/MySQL_Variables.cpp index f714d64e4..2c3ca0de9 100644 --- a/lib/MySQL_Variables.cpp +++ b/lib/MySQL_Variables.cpp @@ -60,11 +60,18 @@ bool MySQL_Variables::on_connect_to_backend(MySQL_Session* session) { bool MySQL_Variables::client_set_hash_and_value(MySQL_Session* session, int idx, const std::string& value, uint32_t hash) { + if (!session || !session->client_myds || !session->client_myds->myconn) { + proxy_warning("Session validation failed\n"); + return false; + } + session->client_myds->myconn->var_hash[idx] = hash; if (session->client_myds->myconn->variables[idx].value) { free(session->client_myds->myconn->variables[idx].value); } session->client_myds->myconn->variables[idx].value = strdup(value.c_str()); + + return true; } bool MySQL_Variables::client_set_value(MySQL_Session* session, int idx, const std::string& value) { @@ -83,17 +90,23 @@ bool MySQL_Variables::client_set_value(MySQL_Session* session, int idx, const st // SET NAMES command from client if (value == "1") { if (mysql_variables.client_get_value(session, SQL_CHARACTER_SET)) { - mysql_variables.client_set_hash_and_value(session, SQL_CHARACTER_SET_RESULTS, mysql_variables.client_get_value(session, SQL_CHARACTER_SET), mysql_variables.client_get_hash(session, SQL_CHARACTER_SET)); - mysql_variables.client_set_hash_and_value(session, SQL_CHARACTER_SET_CLIENT, mysql_variables.client_get_value(session, SQL_CHARACTER_SET), mysql_variables.client_get_hash(session, SQL_CHARACTER_SET)); - mysql_variables.client_set_hash_and_value(session, SQL_CHARACTER_SET_CONNECTION, mysql_variables.client_get_value(session, SQL_CHARACTER_SET), mysql_variables.client_get_hash(session, SQL_CHARACTER_SET)); - mysql_variables.client_set_hash_and_value(session, SQL_COLLATION_CONNECTION, mysql_variables.client_get_value(session, SQL_CHARACTER_SET), mysql_variables.client_get_hash(session, SQL_CHARACTER_SET)); + const char* value = mysql_variables.client_get_value(session, SQL_CHARACTER_SET); + uint32_t hash = mysql_variables.client_get_hash(session, SQL_CHARACTER_SET); + + mysql_variables.client_set_hash_and_value(session, SQL_CHARACTER_SET_RESULTS, value, hash); + mysql_variables.client_set_hash_and_value(session, SQL_CHARACTER_SET_CLIENT, value, hash); + mysql_variables.client_set_hash_and_value(session, SQL_CHARACTER_SET_CONNECTION, value, hash); + mysql_variables.client_set_hash_and_value(session, SQL_COLLATION_CONNECTION, value, hash); } } // SET CHARSET command from client else if (value == "2") { if (mysql_variables.client_get_value(session, SQL_CHARACTER_SET)) { - mysql_variables.client_set_hash_and_value(session, SQL_CHARACTER_SET_RESULTS, mysql_variables.client_get_value(session, SQL_CHARACTER_SET), mysql_variables.client_get_hash(session, SQL_CHARACTER_SET)); - mysql_variables.client_set_hash_and_value(session, SQL_CHARACTER_SET_CLIENT, mysql_variables.client_get_value(session, SQL_CHARACTER_SET), mysql_variables.client_get_hash(session, SQL_CHARACTER_SET)); + const char* value = mysql_variables.client_get_value(session, SQL_CHARACTER_SET); + uint32_t hash = mysql_variables.client_get_hash(session, SQL_CHARACTER_SET); + + mysql_variables.client_set_hash_and_value(session, SQL_CHARACTER_SET_RESULTS, value, hash); + mysql_variables.client_set_hash_and_value(session, SQL_CHARACTER_SET_CLIENT, value, hash); } if (mysql_variables.client_get_value(session, SQL_CHARACTER_SET_DATABASE)) { const MARIADB_CHARSET_INFO *ci = NULL;