diff --git a/lib/ProxySQL_Cluster.cpp b/lib/ProxySQL_Cluster.cpp index 70b2e2ae3..9ce46237b 100644 --- a/lib/ProxySQL_Cluster.cpp +++ b/lib/ProxySQL_Cluster.cpp @@ -1073,19 +1073,30 @@ void ProxySQL_Cluster::pull_mysql_servers_from_peer() { "writer_hostgroup, backup_writer_hostgroup, reader_hostgroup, offline_hostgroup, active, " "max_writers, writer_is_also_reader, max_transactions_behind, comment) " "VALUES (%s, %s, %s, %s, %s, %s, %s, %s, '%s')"; + char *error = NULL; + int cols = 0; + int affected_rows = 0; + SQLite3_result *resultset = NULL; while ((row = mysql_fetch_row(results[2]))) { int i; int l = 0; for (i = 0; i < 8; i++) { l += strlen(row[i]); } - char *o = escape_string_single_quotes(row[8], false); - char *query = (char *)malloc(strlen(q) + i + strlen(o) + 64); - sprintf(query, q, row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], o); - // free in case of 'o' being a copy - if (o != row[8]) { - free(o); + char* o = nullptr; + char* query = nullptr; + if (row[8] != nullptr) { + o = escape_string_single_quotes(row[8], false); + query = (char *)malloc(strlen(q) + i + strlen(o) + 64); + // free in case of 'o' being a copy + if (o != row[8]) { + free(o); + } + } else { + o = const_cast("NULL"); + query = (char *)malloc(strlen(q) + strlen("NULL") + i + 64); } + sprintf(query, q, row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], o); GloAdmin->admindb->execute(query); free(query); } @@ -1103,13 +1114,20 @@ void ProxySQL_Cluster::pull_mysql_servers_from_peer() { for (i = 0; i < 8; i++) { l += strlen(row[i]); } - char *o = escape_string_single_quotes(row[8], false); - char *query = (char *)malloc(strlen(q) + i + strlen(o) + 64); - sprintf(query, q, row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], o); - // free in case of 'o' being a copy - if (o != row[8]) { - free(o); + char* o = nullptr; + char* query = nullptr; + if (row[8] != nullptr) { + o = escape_string_single_quotes(row[8], false); + query = (char *)malloc(strlen(q) + i + strlen(o) + 64); + // free in case of 'o' being a copy + if (o != row[8]) { + free(o); + } + } else { + o = const_cast("NULL"); + query = (char *)malloc(strlen(q) + i + strlen("NULL") + 64); } + sprintf(query, q, row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], o); GloAdmin->admindb->execute(query); free(query); } @@ -1127,13 +1145,20 @@ void ProxySQL_Cluster::pull_mysql_servers_from_peer() { for (i = 0; i < 13; i++) { l += strlen(row[i]); } - char *o = escape_string_single_quotes(row[13], false); - char *query = (char *)malloc(strlen(q) + i + strlen(o) + 64); - sprintf(query, q, row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], o); - // free in case of 'o' being a copy - if (o != row[13]) { - free(o); + char* o = nullptr; + char* query = nullptr; + if (row[13] != nullptr) { + o = escape_string_single_quotes(row[13], false); + query = (char *)malloc(strlen(q) + i + strlen(o) + 64); + // free in case of 'o' being a copy + if (o != row[13]) { + free(o); + } + } else { + o = const_cast("NULL"); + query = (char *)malloc(strlen(q) + strlen("NULL") + i + 64); } + sprintf(query, q, row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], o); GloAdmin->admindb->execute(query); free(query); }