refactor: migrate prepare_v2 SIMPLE cases in ProxySQL_Cluster.cpp

Migrated 4 prepare_v2 calls to RAII-based pattern in:
- pull_mysql_query_rules_from_peer(): 3 statements (statement1, statement1fr, statement32fr)
- update_mysql_users(): 1 statement (also fixes memory leak - missing finalize)
- update_ldap_mappings(): 1 statement (also fixes memory leak - missing finalize)

The RAII pattern ensures automatic cleanup and eliminates manual
(*proxy_sqlite3_finalize) calls, reducing the risk of resource leaks.
v3.0-misc260209
Rene Cannao 1 week ago
parent e3ee454369
commit 2e907bdd3a

@ -1187,11 +1187,10 @@ void ProxySQL_Cluster::pull_mysql_query_rules_from_peer(const string& expected_c
GloAdmin->admindb->execute("DELETE FROM mysql_query_rules_fast_routing");
MYSQL_ROW row;
char *q = (char *)"INSERT INTO mysql_query_rules (rule_id, active, username, schemaname, flagIN, client_addr, proxy_addr, proxy_port, digest, match_digest, match_pattern, negate_match_pattern, re_modifiers, flagOUT, replace_pattern, destination_hostgroup, cache_ttl, cache_empty_result, cache_timeout, reconnect, timeout, retries, delay, next_query_flagIN, mirror_flagOUT, mirror_hostgroup, error_msg, ok_msg, sticky_conn, multiplex, gtid_from_hostgroup, log, apply, attributes, comment) VALUES (?1 , ?2 , ?3 , ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16, ?17, ?18, ?19, ?20, ?21, ?22, ?23, ?24, ?25, ?26, ?27, ?28, ?29, ?30, ?31, ?32, ?33, ?34, ?35)";
sqlite3_stmt *statement1 = NULL;
//sqlite3 *mydb3 = GloAdmin->admindb->get_db();
//rc=(*proxy_sqlite3_prepare_v2)(mydb3, q, -1, &statement1, 0);
int rc = GloAdmin->admindb->prepare_v2(q, &statement1);
ASSERT_SQLITE_OK(rc, GloAdmin->admindb);
auto [rc1, statement1_unique] = GloAdmin->admindb->prepare_v2(q);
ASSERT_SQLITE_OK(rc1, GloAdmin->admindb);
sqlite3_stmt *statement1 = statement1_unique.get();
int rc;
GloAdmin->admindb->execute("BEGIN TRANSACTION");
while ((row = mysql_fetch_row(result1))) {
rc=(*proxy_sqlite3_bind_int64)(statement1, 1, atoll(row[0])); ASSERT_SQLITE_OK(rc, GloAdmin->admindb); // rule_id
@ -1233,21 +1232,19 @@ void ProxySQL_Cluster::pull_mysql_query_rules_from_peer(const string& expected_c
rc=(*proxy_sqlite3_clear_bindings)(statement1); ASSERT_SQLITE_OK(rc, GloAdmin->admindb);
rc=(*proxy_sqlite3_reset)(statement1); ASSERT_SQLITE_OK(rc, GloAdmin->admindb);
}
(*proxy_sqlite3_finalize)(statement1);
// RAII auto-finalizes statement1
GloAdmin->admindb->execute("COMMIT");
std::string query32frs = "INSERT INTO mysql_query_rules_fast_routing(username, schemaname, flagIN, destination_hostgroup, comment) VALUES " + generate_multi_rows_query(32,5);
char *q1fr = (char *)"INSERT INTO mysql_query_rules_fast_routing(username, schemaname, flagIN, destination_hostgroup, comment) VALUES (?1, ?2, ?3, ?4, ?5)";
char *q32fr = (char *)query32frs.c_str();
sqlite3_stmt *statement1fr = NULL;
sqlite3_stmt *statement32fr = NULL;
//rc=(*proxy_sqlite3_prepare_v2)(mydb3, q1fr, -1, &statement1fr, 0);
rc = GloAdmin->admindb->prepare_v2(q1fr, &statement1fr);
ASSERT_SQLITE_OK(rc, GloAdmin->admindb);
//rc=(*proxy_sqlite3_prepare_v2)(mydb3, q32fr, -1, &statement32fr, 0);
rc = GloAdmin->admindb->prepare_v2(q32fr, &statement32fr);
ASSERT_SQLITE_OK(rc, GloAdmin->admindb);
auto [rc2, statement1fr_unique] = GloAdmin->admindb->prepare_v2(q1fr);
ASSERT_SQLITE_OK(rc2, GloAdmin->admindb);
auto [rc3, statement32fr_unique] = GloAdmin->admindb->prepare_v2(q32fr);
ASSERT_SQLITE_OK(rc3, GloAdmin->admindb);
sqlite3_stmt *statement1fr = statement1fr_unique.get();
sqlite3_stmt *statement32fr = statement32fr_unique.get();
int row_idx=0;
int max_bulk_row_idx=mysql_num_rows(result2)/32;
max_bulk_row_idx=max_bulk_row_idx*32;
@ -1277,8 +1274,7 @@ void ProxySQL_Cluster::pull_mysql_query_rules_from_peer(const string& expected_c
}
row_idx++;
}
(*proxy_sqlite3_finalize)(statement1fr);
(*proxy_sqlite3_finalize)(statement32fr);
// RAII auto-finalizes statement1fr and statement32fr
//GloAdmin->admindb->execute("PRAGMA integrity_check");
GloAdmin->admindb->execute("COMMIT");
@ -1369,9 +1365,10 @@ void update_mysql_users(MYSQL_RES* result) {
" schema_locked, transaction_persistent, fast_forward, backend, frontend, max_connections, attributes, comment)"
" VALUES (?1 , ?2 , ?3 , ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14)";
sqlite3_stmt *statement1 = NULL;
int rc = GloAdmin->admindb->prepare_v2(q, &statement1);
ASSERT_SQLITE_OK(rc, GloAdmin->admindb);
auto [rc1, statement1_unique] = GloAdmin->admindb->prepare_v2(q);
ASSERT_SQLITE_OK(rc1, GloAdmin->admindb);
sqlite3_stmt *statement1 = statement1_unique.get();
int rc;
while (MYSQL_ROW row = mysql_fetch_row(result)) {
rc=(*proxy_sqlite3_bind_text)(statement1, 1, row[0], -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, GloAdmin->admindb); // username
@ -1393,6 +1390,7 @@ void update_mysql_users(MYSQL_RES* result) {
rc=(*proxy_sqlite3_clear_bindings)(statement1); ASSERT_SQLITE_OK(rc, GloAdmin->admindb);
rc=(*proxy_sqlite3_reset)(statement1); ASSERT_SQLITE_OK(rc, GloAdmin->admindb);
}
// RAII auto-finalizes statement1 (fixes memory leak)
}
void update_ldap_mappings(MYSQL_RES* result) {
@ -1402,9 +1400,10 @@ void update_ldap_mappings(MYSQL_RES* result) {
" VALUES (?1 , ?2 , ?3 , ?4)"
);
sqlite3_stmt *statement1 = NULL;
int rc = GloAdmin->admindb->prepare_v2(q, &statement1);
ASSERT_SQLITE_OK(rc, GloAdmin->admindb);
auto [rc1, statement1_unique] = GloAdmin->admindb->prepare_v2(q);
ASSERT_SQLITE_OK(rc1, GloAdmin->admindb);
sqlite3_stmt *statement1 = statement1_unique.get();
int rc;
while (MYSQL_ROW row = mysql_fetch_row(result)) {
rc=(*proxy_sqlite3_bind_int64)(statement1, 1, atoll(row[0])); ASSERT_SQLITE_OK(rc, GloAdmin->admindb); // priority
@ -1416,6 +1415,7 @@ void update_ldap_mappings(MYSQL_RES* result) {
rc=(*proxy_sqlite3_clear_bindings)(statement1); ASSERT_SQLITE_OK(rc, GloAdmin->admindb);
rc=(*proxy_sqlite3_reset)(statement1); ASSERT_SQLITE_OK(rc, GloAdmin->admindb);
}
// RAII auto-finalizes statement1 (fixes memory leak)
}
void ProxySQL_Cluster::pull_mysql_users_from_peer(const string& expected_checksum, const time_t epoch) {

Loading…
Cancel
Save