* Updated code to use pgsql_tracked_variables[idx] consistently, removing

direct usage of pgsql_tracked_variables[idx].idx. This change improves
consistency and reduces potential human error.
* Fixed some warning
v3.0_refactor_connection_info_param
Rahim Kanji 11 months ago
parent 4c918490a4
commit c2f2ae5aa4

@ -244,7 +244,7 @@ enum mysql_variable_name {
};
/* NOTE:
make special ATTENTION that the order in mysql_variable_name
make special ATTENTION that the order in pgsql_variable_name
and pgsql_tracked_variables[] is THE SAME
*/
enum pgsql_variable_name {
@ -337,8 +337,6 @@ struct pgsql_variable_st {
enum session_status status; // what status should be changed after setting this variables
const char* set_variable_name; // what variable name (or string) will be used when setting it to backend
const char* internal_variable_name; // variable name as displayed in admin , WITHOUT "default_"
// Also used in INTERNAL SESSION
// if NULL , MySQL_Variables::MySQL_Variables will set it to set_variable_name during initialization
const char* default_value; // default value
uint8_t options; // options
const pgsql_variable_validator* validator; // validate value
@ -1814,6 +1812,7 @@ pgsql_variable_st pgsql_tracked_variables[]{
{ PGSQL_MAINTENANCE_WORK_MEM, SETTING_VARIABLE, "maintenance_work_mem", "maintenance_work_mem", "64MB", (PGTRACKED_VAR_OPT_QUOTE), &pgsql_variable_validator_maintenance_work_mem, nullptr },
{ PGSQL_SYNCHRONOUS_COMMIT, SETTING_VARIABLE, "synchronous_commit", "synchronous_commit", "on", (PGTRACKED_VAR_OPT_QUOTE), &pgsql_variable_validator_synchronous_commit, nullptr},
};
#endif //EXCLUDE_TRACKING_VARAIABLES
#else

@ -403,7 +403,7 @@ bool PgSQL_Protocol::generate_pkt_initial_handshake(bool send, void** _ptr, unsi
if (RAND_bytes((*myds)->tmp_login_salt, sizeof((*myds)->tmp_login_salt)) != 1) {
// Fallback method: using a basic pseudo-random generator
srand((unsigned int)time(NULL));
for (int i = 0; i < sizeof((*myds)->tmp_login_salt); i++) {
for (size_t i = 0; i < sizeof((*myds)->tmp_login_salt); i++) {
(*myds)->tmp_login_salt[i] = rand() % 256;
}
}
@ -632,11 +632,11 @@ unsigned int get_string(const char* data, unsigned int len, const char** dst_p)
bool PgSQL_Protocol::load_conn_parameters(pgsql_hdr* pkt)
{
int32_t offset = 0;
uint32_t offset = 0;
while (offset < pkt->data.size) {
char* nameptr = (char*)pkt->data.ptr + offset;
int32_t valoffset;
uint32_t valoffset;
char* valptr;
if (*nameptr == '\0')

@ -4201,7 +4201,7 @@ bool PgSQL_Session::handler___status_WAITING_CLIENT_DATA___STATE_SLEEP___MYSQL_C
int idx = PGSQL_NAME_LAST_HIGH_WM;
for (int i = 0; i < PGSQL_NAME_LAST_HIGH_WM; i++) {
if (variable_name_exists(pgsql_tracked_variables[i], var.c_str()) == true) {
idx = pgsql_tracked_variables[i].idx;
idx = i;
break;
}
}
@ -4252,8 +4252,8 @@ bool PgSQL_Session::handler___status_WAITING_CLIENT_DATA___STATE_SLEEP___MYSQL_C
proxy_debug(PROXY_DEBUG_MYSQL_COM, 8, "Changing connection %s to %s\n", var.c_str(), value1.c_str());
uint32_t var_hash_int = SpookyHash::Hash32(value1.c_str(), value1.length(), 10);
if (pgsql_variables.client_get_hash(this, pgsql_tracked_variables[idx].idx) != var_hash_int) {
if (!pgsql_variables.client_set_value(this, pgsql_tracked_variables[idx].idx, value1.c_str(), true)) {
if (pgsql_variables.client_get_hash(this, idx) != var_hash_int) {
if (!pgsql_variables.client_set_value(this, idx, value1.c_str(), true)) {
return false;
}
if (idx == PGSQL_DATESTYLE) {
@ -4631,8 +4631,8 @@ bool PgSQL_Session::handler___status_WAITING_CLIENT_DATA___STATE_SLEEP___MYSQL_C
proxy_debug(PROXY_DEBUG_MYSQL_COM, 8, "Changing connection %s to %s\n", name, value);
uint32_t var_hash_int = SpookyHash::Hash32(value, strlen(value), 10);
if (pgsql_variables.client_get_hash(this, pgsql_tracked_variables[idx].idx) != var_hash_int) {
if (!pgsql_variables.client_set_value(this, pgsql_tracked_variables[idx].idx, value, false)) {
if (pgsql_variables.client_get_hash(this, idx) != var_hash_int) {
if (!pgsql_variables.client_set_value(this, idx, value, false)) {
return false;
}
if (IS_PGTRACKED_VAR_OPTION_SET_PARAM_STATUS(pgsql_tracked_variables[idx])) {
@ -4647,8 +4647,8 @@ bool PgSQL_Session::handler___status_WAITING_CLIENT_DATA___STATE_SLEEP___MYSQL_C
const char* value = get_default_session_variable((enum pgsql_variable_name)idx);
proxy_debug(PROXY_DEBUG_MYSQL_COM, 8, "Changing connection %s to %s\n", name, value);
uint32_t var_hash_int = SpookyHash::Hash32(value, strlen(value), 10);
if (pgsql_variables.client_get_hash(this, pgsql_tracked_variables[idx].idx) != var_hash_int) {
if (!pgsql_variables.client_set_value(this, pgsql_tracked_variables[idx].idx, value, false)) {
if (pgsql_variables.client_get_hash(this, idx) != var_hash_int) {
if (!pgsql_variables.client_set_value(this, idx, value, false)) {
return false;
}
if (IS_PGTRACKED_VAR_OPTION_SET_PARAM_STATUS(pgsql_tracked_variables[idx])) {
@ -4683,8 +4683,8 @@ bool PgSQL_Session::handler___status_WAITING_CLIENT_DATA___STATE_SLEEP___MYSQL_C
const char* value = get_default_session_variable((enum pgsql_variable_name)idx);
uint32_t var_hash_int = SpookyHash::Hash32(value, strlen(value), 10);
if (pgsql_variables.client_get_hash(this, pgsql_tracked_variables[idx].idx) != var_hash_int) {
if (!pgsql_variables.client_set_value(this, pgsql_tracked_variables[idx].idx, value, true)) {
if (pgsql_variables.client_get_hash(this, idx) != var_hash_int) {
if (!pgsql_variables.client_set_value(this, idx, value, true)) {
return false;
}
if (IS_PGTRACKED_VAR_OPTION_SET_PARAM_STATUS(pgsql_tracked_variables[idx])) {

@ -19,32 +19,32 @@ PgSQL_Variables::PgSQL_Variables() {
// NOTE: This variable has been temporarily ignored. Check issues #3442 and #3441.
//ignore_vars.push_back("session_track_schema");
variables_regexp = "";
/*
NOTE:
make special ATTENTION that the order in pgsql_variable_name
and pgsqll_tracked_variables[] is THE SAME
NOTE:
PgSQL_Variables::PgSQL_Variables() has a built-in check to make sure that the order is correct,
and that variables are in alphabetical order
*/
for (auto i = 0; i < PGSQL_NAME_LAST_HIGH_WM; i++) {
//Array index and enum value (idx) should be same
assert(i == pgsql_tracked_variables[i].idx);
if (i > PGSQL_NAME_LAST_LOW_WM + 1) {
assert(strcmp(pgsql_tracked_variables[i].set_variable_name, pgsql_tracked_variables[i - 1].set_variable_name) > 0);
}
// we initialized all the internal_variable_name if set to NULL
if (pgsql_tracked_variables[i].internal_variable_name == NULL) {
pgsql_tracked_variables[i].internal_variable_name = pgsql_tracked_variables[i].set_variable_name;
}
}
/*
NOTE:
make special ATTENTION that the order in pgsql_variable_name
and pgsqll_tracked_variables[] is THE SAME
NOTE:
PgSQL_Variables::PgSQL_Variables() has a built-in check to make sure that the order is correct,
and that variables are in alphabetical order
*/
for (int i = PGSQL_NAME_LAST_LOW_WM; i < PGSQL_NAME_LAST_HIGH_WM; i++) {
assert(i == pgsql_tracked_variables[i].idx);
if (i > PGSQL_NAME_LAST_LOW_WM+1) {
assert(strcmp(pgsql_tracked_variables[i].set_variable_name, pgsql_tracked_variables[i-1].set_variable_name) > 0);
}
}
for (auto i = 0; i < PGSQL_NAME_LAST_HIGH_WM; i++) {
PgSQL_Variables::verifiers[i] = verify_server_variable;
PgSQL_Variables::updaters[i] = update_server_variable;
if (pgsql_tracked_variables[i].status == SETTING_VARIABLE) {
if (pgsql_tracked_variables[i].status == SETTING_VARIABLE) {
variables_regexp += pgsql_tracked_variables[i].set_variable_name;
variables_regexp += "|";
@ -56,6 +56,7 @@ PgSQL_Variables::PgSQL_Variables() {
}
}
}
for (std::vector<std::string>::iterator it=ignore_vars.begin(); it != ignore_vars.end(); it++) {
variables_regexp += *it;
variables_regexp += "|";

Loading…
Cancel
Save