diff --git a/lib/Standard_ProxySQL_Admin.cpp b/lib/Standard_ProxySQL_Admin.cpp index 806f5c5d3..83de6c72a 100644 --- a/lib/Standard_ProxySQL_Admin.cpp +++ b/lib/Standard_ProxySQL_Admin.cpp @@ -174,7 +174,7 @@ class Standard_ProxySQL_Admin: public ProxySQL_Admin { void flush_mysql_query_rules__from_disk_to_memory(); void load_mysql_servers_to_runtime(); void save_mysql_servers_from_runtime(); - void load_mysql_query_rules_to_runtime(); + char * load_mysql_query_rules_to_runtime(); }; static Standard_ProxySQL_Admin *SPA=NULL; @@ -496,9 +496,13 @@ bool admin_handler_command_load_or_save(char *query_no_space, unsigned int query ) { proxy_debug(PROXY_DEBUG_ADMIN, 4, "Received %s command\n", query_no_space); Standard_ProxySQL_Admin *SPA=(Standard_ProxySQL_Admin *)pa; - SPA->load_mysql_query_rules_to_runtime(); - proxy_debug(PROXY_DEBUG_ADMIN, 4, "Loaded mysql query rules to RUNTIME\n"); - SPA->send_MySQL_OK(&sess->myprot_client, NULL); + char *err=SPA->load_mysql_query_rules_to_runtime(); + if (err==NULL) { + proxy_debug(PROXY_DEBUG_ADMIN, 4, "Loaded mysql query rules to RUNTIME\n"); + SPA->send_MySQL_OK(&sess->myprot_client, NULL); + } else { + SPA->send_MySQL_ERR(&sess->myprot_client, err); + } return false; } @@ -1364,10 +1368,11 @@ void Standard_ProxySQL_Admin::load_mysql_servers_to_runtime() { } -void Standard_ProxySQL_Admin::load_mysql_query_rules_to_runtime() { +char * Standard_ProxySQL_Admin::load_mysql_query_rules_to_runtime() { char *error=NULL; int cols=0; int affected_rows=0; + if (GloQPro==NULL) return (char *)"Global Query Processor not started: command impossible to run"; SQLite3_result *resultset=NULL; char *query=(char *)"SELECT rule_id, username, schemaname, flagIN, match_pattern, negate_match_pattern, flagOUT, replace_pattern, destination_hostgroup, cache_ttl, apply FROM main.mysql_query_rules WHERE active=1"; admindb->execute_statement(query, &error , &cols , &affected_rows , &resultset); @@ -1381,12 +1386,13 @@ void Standard_ProxySQL_Admin::load_mysql_query_rules_to_runtime() { nqpr=GloQPro->new_query_rule(atoi(r->fields[0]), true, r->fields[1], r->fields[2], atoi(r->fields[3]), r->fields[4], (atoi(r->fields[5])==1 ? true : false), (r->fields[6]==NULL ? -1 : atol(r->fields[6])), r->fields[7], (r->fields[8]==NULL ? -1 : atoi(r->fields[8])), (r->fields[9]==NULL ? -1 : atol(r->fields[9])), (atoi(r->fields[10])==1 ? true : false)); GloQPro->insert(nqpr); } - GloQPro->sort(); + GloQPro->sort(false); } GloQPro->wrunlock(); GloQPro->commit(); // if (error) free(error); if (resultset) delete resultset; + return NULL; }