You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
proxysql/lib/ProxySQL_Admin_Disk_Upgrade...

611 lines
44 KiB

#include "cpp.h"
#include "ProxySQL_Admin_Tables_Definitions.h"
void ProxySQL_Admin::disk_upgrade_mysql_query_rules() {
// this function is called only for configdb table
// it is responsible to upgrade table mysql_query_rules if its structure is from a previous version
int rci;
configdb->execute("PRAGMA foreign_keys = OFF");
rci=configdb->check_table_structure((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES_V1_1_0);
if (rci) {
// upgrade is required
proxy_warning("Detected version v1.1.0 of table mysql_query_rules\n");
proxy_warning("ONLINE UPGRADE of table mysql_query_rules in progress\n");
// drop any existing table with suffix _v110
configdb->execute("DROP TABLE IF EXISTS mysql_query_rules_v110");
// rename current table to add suffix _v110
configdb->execute("ALTER TABLE mysql_query_rules RENAME TO mysql_query_rules_v110");
// create new table
configdb->build_table((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES,false);
// copy fields from old table
configdb->execute("INSERT INTO mysql_query_rules (rule_id,active,username,schemaname,flagIN,match_digest,match_pattern,negate_match_pattern,flagOUT,replace_pattern,destination_hostgroup,cache_ttl,reconnect,timeout,delay,error_msg,apply) SELECT rule_id,active,username,schemaname,flagIN,match_digest,match_pattern,negate_match_pattern,flagOUT,replace_pattern,destination_hostgroup,cache_ttl,reconnect,timeout,delay,error_msg,apply FROM mysql_query_rules_v110");
}
rci=configdb->check_table_structure((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES_V1_2_0a);
if (rci) {
// upgrade is required
proxy_warning("Detected version v1.2.0a of table mysql_query_rules\n");
proxy_warning("ONLINE UPGRADE of table mysql_query_rules in progress\n");
// drop any existing table with suffix _v120a
configdb->execute("DROP TABLE IF EXISTS mysql_query_rules_v120a");
// rename current table to add suffix _v120a
configdb->execute("ALTER TABLE mysql_query_rules RENAME TO mysql_query_rules_v120a");
// create new table
configdb->build_table((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES,false);
// copy fields from old table
configdb->execute("INSERT INTO mysql_query_rules (rule_id,active,username,schemaname,flagIN,match_digest,match_pattern,negate_match_pattern,flagOUT,replace_pattern,destination_hostgroup,cache_ttl,reconnect,timeout,delay,error_msg,mirror_flagOUT,mirror_hostgroup,apply) SELECT rule_id,active,username,schemaname,flagIN,match_digest,match_pattern,negate_match_pattern,flagOUT,replace_pattern,destination_hostgroup,cache_ttl,reconnect,timeout,delay,error_msg,mirror_flagOUT,mirror_hostgroup,apply FROM mysql_query_rules_v120a");
}
// upgrade related to issue #643 , adding comment in mysql_query_rules table
rci=configdb->check_table_structure((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES_V1_2_0g);
if (rci) {
// upgrade is required
proxy_warning("Detected version v1.2.0g of table mysql_query_rules\n");
proxy_warning("ONLINE UPGRADE of table mysql_query_rules in progress\n");
// drop any existing table with suffix _v120g
configdb->execute("DROP TABLE IF EXISTS mysql_query_rules_v120g");
// rename current table to add suffix _v120g
configdb->execute("ALTER TABLE mysql_query_rules RENAME TO mysql_query_rules_v120g");
// create new table
configdb->build_table((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES,false);
// copy fields from old table
configdb->execute("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,flagOUT,replace_pattern,destination_hostgroup,cache_ttl,reconnect,timeout,retries,delay,mirror_flagOUT,mirror_hostgroup,error_msg,log,apply) SELECT rule_id,active,username,schemaname,flagIN,client_addr,proxy_addr,proxy_port,digest,match_digest,match_pattern,negate_match_pattern,flagOUT,replace_pattern,destination_hostgroup,cache_ttl,reconnect,timeout,retries,delay,mirror_flagOUT,mirror_hostgroup,error_msg,log,apply FROM mysql_query_rules_v120g");
}
// upgrade related to issue #643 , adding comment in mysql_query_rules table
rci=configdb->check_table_structure((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES_V1_2_2);
if (rci) {
// upgrade is required
proxy_warning("Detected version v1.2.2 of table mysql_query_rules\n");
proxy_warning("ONLINE UPGRADE of table mysql_query_rules in progress\n");
// drop any existing table with suffix _v122
configdb->execute("DROP TABLE IF EXISTS mysql_query_rules_v122");
// rename current table to add suffix _v122
configdb->execute("ALTER TABLE mysql_query_rules RENAME TO mysql_query_rules_v122");
// create new table
configdb->build_table((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES,false);
// copy fields from old table
configdb->execute("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,flagOUT,replace_pattern,destination_hostgroup,cache_ttl,reconnect,timeout,retries,delay,mirror_flagOUT,mirror_hostgroup,error_msg,log,apply,comment) SELECT rule_id,active,username,schemaname,flagIN,client_addr,proxy_addr,proxy_port,digest,match_digest,match_pattern,negate_match_pattern,flagOUT,replace_pattern,destination_hostgroup,cache_ttl,reconnect,timeout,retries,delay,mirror_flagOUT,mirror_hostgroup,error_msg,log,apply,comment FROM mysql_query_rules_v122");
}
// upgrade related to issue #643 , adding comment in mysql_query_rules table
rci=configdb->check_table_structure((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES_V1_3_1);
if (rci) {
// upgrade is required
proxy_warning("Detected version v1.3.1 of table mysql_query_rules\n");
proxy_warning("ONLINE UPGRADE of table mysql_query_rules in progress\n");
// drop any existing table with suffix _v131
configdb->execute("DROP TABLE IF EXISTS mysql_query_rules_v131");
// rename current table to add suffix _v131
configdb->execute("ALTER TABLE mysql_query_rules RENAME TO mysql_query_rules_v131");
// create new table
configdb->build_table((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES,false);
// copy fields from old table
configdb->execute("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,flagOUT,replace_pattern,destination_hostgroup,cache_ttl,reconnect,timeout,retries,delay,mirror_flagOUT,mirror_hostgroup,error_msg,sticky_conn,multiplex,log,apply,comment) SELECT rule_id,active,username,schemaname,flagIN,client_addr,proxy_addr,proxy_port,digest,match_digest,match_pattern,negate_match_pattern,flagOUT,replace_pattern,destination_hostgroup,cache_ttl,reconnect,timeout,retries,delay,mirror_flagOUT,mirror_hostgroup,error_msg,sticky_conn,multiplex,log,apply,comment FROM mysql_query_rules_v131");
}
rci=configdb->check_table_structure((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES_V1_4_0a);
if (rci) {
// upgrade is required
proxy_warning("Detected version v1.4.0a of table mysql_query_rules\n");
proxy_warning("ONLINE UPGRADE of table mysql_query_rules in progress\n");
// drop any existing table with suffix _v140a
configdb->execute("DROP TABLE IF EXISTS mysql_query_rules_v140a");
// rename current table to add suffix _v140a
configdb->execute("ALTER TABLE mysql_query_rules RENAME TO mysql_query_rules_v40a");
// create new table
configdb->build_table((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES,false);
// copy fields from old table
configdb->execute("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,reconnect,timeout,retries,delay,mirror_flagOUT,mirror_hostgroup,error_msg,sticky_conn,multiplex,log,apply,comment) SELECT 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,reconnect,timeout,retries,delay,mirror_flagOUT,mirror_hostgroup,error_msg,sticky_conn,multiplex,log,apply,comment FROM mysql_query_rules_v140a");
}
rci=configdb->check_table_structure((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES_V1_4_0b);
if (rci) { // note: upgrade from V1_4_0a or V1_4_0b is the same
// upgrade is required
proxy_warning("Detected version v1.4.0b of table mysql_query_rules\n");
proxy_warning("ONLINE UPGRADE of table mysql_query_rules in progress\n");
// drop any existing table with suffix _v140b
configdb->execute("DROP TABLE IF EXISTS mysql_query_rules_v140b");
// rename current table to add suffix _v140b
configdb->execute("ALTER TABLE mysql_query_rules RENAME TO mysql_query_rules_v140b");
// create new table
configdb->build_table((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES,false);
// copy fields from old table
configdb->execute("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,reconnect,timeout,retries,delay,mirror_flagOUT,mirror_hostgroup,error_msg,sticky_conn,multiplex,log,apply,comment) SELECT 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,reconnect,timeout,retries,delay,mirror_flagOUT,mirror_hostgroup,error_msg,sticky_conn,multiplex,log,apply,comment FROM mysql_query_rules_v140b");
}
rci=configdb->check_table_structure((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES_V1_4_1);
if (rci) {
// upgrade is required
proxy_warning("Detected version v1.4.1 of table mysql_query_rules\n");
proxy_warning("ONLINE UPGRADE of table mysql_query_rules in progress\n");
// drop any existing table with suffix _v141
configdb->execute("DROP TABLE IF EXISTS mysql_query_rules_v141");
// rename current table to add suffix _v141
configdb->execute("ALTER TABLE mysql_query_rules RENAME TO mysql_query_rules_v141");
// create new table
configdb->build_table((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES,false);
// copy fields from old table
configdb->execute("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,reconnect,timeout,retries,delay,mirror_flagOUT,mirror_hostgroup,error_msg,sticky_conn,multiplex,log,apply,comment) SELECT 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,reconnect,timeout,retries,delay,mirror_flagOUT,mirror_hostgroup,error_msg,sticky_conn,multiplex,log,apply,comment FROM mysql_query_rules_v141");
}
rci=configdb->check_table_structure((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES_V2_0_0a);
if (rci) {
// upgrade is required
proxy_warning("Detected version v2.0.0a of table mysql_query_rules\n");
proxy_warning("ONLINE UPGRADE of table mysql_query_rules in progress\n");
// drop any existing table with suffix _v200a
configdb->execute("DROP TABLE IF EXISTS mysql_query_rules_200a");
// rename current table to add suffix _v200a
configdb->execute("ALTER TABLE mysql_query_rules RENAME TO mysql_query_rules_v200a");
// create new table
configdb->build_table((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES,false);
// copy fields from old table
configdb->execute("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, reconnect, timeout, retries, delay, next_query_flagIN, mirror_flagOUT, mirror_hostgroup, error_msg, OK_msg, sticky_conn, multiplex, gtid_from_hostgroup, log, apply, comment) SELECT 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, reconnect, timeout, retries, delay, next_query_flagIN, mirror_flagOUT, mirror_hostgroup, error_msg, OK_msg, sticky_conn, multiplex, gtid_from_hostgroup, log, apply, comment FROM mysql_query_rules_v200a");
}
rci=configdb->check_table_structure((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES_V2_0_0b);
if (rci) {
// upgrade is required
proxy_warning("Detected version v2.0.0b of table mysql_query_rules\n");
proxy_warning("ONLINE UPGRADE of table mysql_query_rules in progress\n");
// drop any existing table with suffix _v200b
configdb->execute("DROP TABLE IF EXISTS mysql_query_rules_200b");
// rename current table to add suffix _v200b
configdb->execute("ALTER TABLE mysql_query_rules RENAME TO mysql_query_rules_v200b");
// create new table
configdb->build_table((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES,false);
// copy fields from old table
configdb->execute("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, reconnect, timeout, retries, delay, next_query_flagIN, mirror_flagOUT, mirror_hostgroup, error_msg, OK_msg, sticky_conn, multiplex, gtid_from_hostgroup, log, apply, comment) SELECT 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, reconnect, timeout, retries, delay, next_query_flagIN, mirror_flagOUT, mirror_hostgroup, error_msg, OK_msg, sticky_conn, multiplex, gtid_from_hostgroup, log, apply, comment FROM mysql_query_rules_v200b");
}
rci=configdb->check_table_structure((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES_V2_0_0c);
if (rci) {
// upgrade is required
proxy_warning("Detected version v2.0.0c of table mysql_query_rules\n");
proxy_warning("ONLINE UPGRADE of table mysql_query_rules in progress\n");
// drop any existing table with suffix _v200c
configdb->execute("DROP TABLE IF EXISTS mysql_query_rules_200c");
// rename current table to add suffix _v200c
configdb->execute("ALTER TABLE mysql_query_rules RENAME TO mysql_query_rules_v200c");
// create new table
configdb->build_table((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES,false);
// copy fields from old table
configdb->execute("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, reconnect, timeout, retries, delay, next_query_flagIN, mirror_flagOUT, mirror_hostgroup, error_msg, OK_msg, sticky_conn, multiplex, gtid_from_hostgroup, log, apply, comment) SELECT 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, reconnect, timeout, retries, delay, next_query_flagIN, mirror_flagOUT, mirror_hostgroup, error_msg, OK_msg, sticky_conn, multiplex, gtid_from_hostgroup, log, apply, comment FROM mysql_query_rules_v200c");
}
rci=configdb->check_table_structure((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES_V2_0_0d);
if (rci) {
// upgrade is required
proxy_warning("Detected version v2.0.0d of table mysql_query_rules\n");
proxy_warning("ONLINE UPGRADE of table mysql_query_rules in progress\n");
// drop any existing table with suffix _v200d
configdb->execute("DROP TABLE IF EXISTS mysql_query_rules_200d");
// rename current table to add suffix _v200d
configdb->execute("ALTER TABLE mysql_query_rules RENAME TO mysql_query_rules_v200d");
// create new table
configdb->build_table((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES,false);
// copy fields from old table
configdb->execute("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, reconnect, timeout, retries, delay, next_query_flagIN, mirror_flagOUT, mirror_hostgroup, error_msg, OK_msg, sticky_conn, multiplex, gtid_from_hostgroup, log, apply, comment) SELECT 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, reconnect, timeout, retries, delay, next_query_flagIN, mirror_flagOUT, mirror_hostgroup, error_msg, OK_msg, sticky_conn, multiplex, gtid_from_hostgroup, log, apply, comment FROM mysql_query_rules_v200d");
}
rci=configdb->check_table_structure((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES_V2_0_0e);
if (rci) {
// upgrade is required
proxy_warning("Detected version v2.1.0e of table mysql_query_rules\n");
proxy_warning("ONLINE UPGRADE of table mysql_query_rules in progress\n");
// drop any existing table with suffix _v200e
configdb->execute("DROP TABLE IF EXISTS mysql_query_rules_200e");
// rename current table to add suffix _v200e
configdb->execute("ALTER TABLE mysql_query_rules RENAME TO mysql_query_rules_v200e");
// create new table
configdb->build_table((char *)"mysql_query_rules",(char *)ADMIN_SQLITE_TABLE_MYSQL_QUERY_RULES,false);
// copy fields from old table
configdb->execute("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, reconnect, timeout, retries, delay, next_query_flagIN, mirror_flagOUT, mirror_hostgroup, error_msg, OK_msg, sticky_conn, multiplex, gtid_from_hostgroup, log, apply, comment) SELECT 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, reconnect, timeout, retries, delay, next_query_flagIN, mirror_flagOUT, mirror_hostgroup, error_msg, OK_msg, sticky_conn, multiplex, gtid_from_hostgroup, log, apply, comment FROM mysql_query_rules_v200e");
}
configdb->execute("PRAGMA foreign_keys = ON");
}
void ProxySQL_Admin::disk_upgrade_scheduler() {
// this function is called only for configdb table
// it is responsible to upgrade table scheduler if its structure is from a previous version
int rci;
configdb->execute("PRAGMA foreign_keys = OFF");
rci=configdb->check_table_structure((char *)"scheduler",(char *)ADMIN_SQLITE_TABLE_SCHEDULER_V1_2_0);
if (rci) {
// upgrade is required
proxy_warning("Detected version v1.2.0 of table scheduler\n");
proxy_warning("ONLINE UPGRADE of table scheduler in progress\n");
// drop any existing table with suffix _v120
configdb->execute("DROP TABLE IF EXISTS scheduler_v120");
// rename current table to add suffix _v120
configdb->execute("ALTER TABLE scheduler RENAME TO scheduler_v120");
// create new table
configdb->build_table((char *)"scheduler",(char *)ADMIN_SQLITE_TABLE_SCHEDULER,false);
// copy fields from old table
configdb->execute("INSERT INTO scheduler (id,interval_ms,filename,arg1,arg2,arg3,arg4,arg5) SELECT id,interval_ms,filename,arg1,arg2,arg3,arg4,arg5 FROM scheduler_v120");
}
rci=configdb->check_table_structure((char *)"scheduler",(char *)ADMIN_SQLITE_TABLE_SCHEDULER_V1_2_2a);
if (rci) {
// upgrade is required
proxy_warning("Detected version v1.2.2a of table scheduler\n");
proxy_warning("ONLINE UPGRADE of table scheduler in progress\n");
// drop any existing table with suffix _v122a
configdb->execute("DROP TABLE IF EXISTS scheduler_v122a");
// rename current table to add suffix _v122a
configdb->execute("ALTER TABLE scheduler RENAME TO scheduler_v122a");
// create new table
configdb->build_table((char *)"scheduler",(char *)ADMIN_SQLITE_TABLE_SCHEDULER,false);
// copy fields from old table
configdb->execute("INSERT INTO scheduler (id,interval_ms,filename,arg1,arg2,arg3,arg4,arg5,comment) SELECT id,interval_ms,filename,arg1,arg2,arg3,arg4,arg5,comment FROM scheduler_v122a");
}
rci=configdb->check_table_structure((char *)"scheduler",(char *)ADMIN_SQLITE_TABLE_SCHEDULER_V1_2_2b);
if (rci) {
// upgrade is required
proxy_warning("Detected version v1.2.2b of table scheduler\n");
proxy_warning("ONLINE UPGRADE of table scheduler in progress\n");
// drop any existing table with suffix _v122b
configdb->execute("DROP TABLE IF EXISTS scheduler_v122b");
// rename current table to add suffix _v122b
configdb->execute("ALTER TABLE scheduler RENAME TO scheduler_v122b");
// create new table
configdb->build_table((char *)"scheduler",(char *)ADMIN_SQLITE_TABLE_SCHEDULER,false);
// copy fields from old table
configdb->execute("INSERT INTO scheduler (id,active,interval_ms,filename,arg1,arg2,arg3,arg4,arg5,comment) SELECT id,active,interval_ms,filename,arg1,arg2,arg3,arg4,arg5,comment FROM scheduler_v122b");
}
configdb->execute("PRAGMA foreign_keys = ON");
}
void ProxySQL_Admin::disk_upgrade_mysql_servers() {
// this function is called only for configdb table
// it is responsible to upgrade table mysql_servers if its structure is from a previous version
int rci;
configdb->execute("PRAGMA foreign_keys = OFF");
rci=configdb->check_table_structure((char *)"mysql_servers",(char *)ADMIN_SQLITE_TABLE_MYSQL_SERVERS_V1_1_0);
if (rci) {
// upgrade is required
proxy_warning("Detected version v1.1.0 of table mysql_servers\n");
proxy_warning("ONLINE UPGRADE of table mysql_servers in progress\n");
// drop any existing table with suffix _v110
configdb->execute("DROP TABLE IF EXISTS mysql_servers_v110");
// rename current table to add suffix _v110
configdb->execute("ALTER TABLE mysql_servers RENAME TO mysql_servers_v110");
// create new table
configdb->build_table((char *)"mysql_servers",(char *)ADMIN_SQLITE_TABLE_MYSQL_SERVERS,false);
// fix bug #1224
configdb->execute("UPDATE mysql_servers_v110 SET weight = 10000000 WHERE weight > 10000000");
// fix bug #962
configdb->execute("UPDATE mysql_servers_v110 SET compression = 1 WHERE compression > 0");
// copy fields from old table
configdb->execute("INSERT INTO mysql_servers (hostgroup_id,hostname,port,status,weight,compression,max_connections,max_replication_lag) SELECT hostgroup_id,hostname,port,status,weight,compression,max_connections,max_replication_lag FROM mysql_servers_v110");
}
rci=configdb->check_table_structure((char *)"mysql_servers",(char *)ADMIN_SQLITE_TABLE_MYSQL_SERVERS_V1_2_0e);
if (rci) {
// upgrade is required
proxy_warning("Detected version v1.2.0 of table mysql_servers\n");
proxy_warning("ONLINE UPGRADE of table mysql_servers in progress\n");
// drop any existing table with suffix _v120
configdb->execute("DROP TABLE IF EXISTS mysql_servers_v120");
// rename current table to add suffix _v120
configdb->execute("ALTER TABLE mysql_servers RENAME TO mysql_servers_v120");
// create new table
configdb->build_table((char *)"mysql_servers",(char *)ADMIN_SQLITE_TABLE_MYSQL_SERVERS,false);
// fix bug #1224
configdb->execute("UPDATE mysql_servers_v120 SET weight = 10000000 WHERE weight > 10000000");
// fix bug #962
configdb->execute("UPDATE mysql_servers_v120 SET compression = 1 WHERE compression > 0");
// copy fields from old table
configdb->execute("INSERT INTO mysql_servers (hostgroup_id,hostname,port,status,weight,compression,max_connections,max_replication_lag,use_ssl,max_latency_ms) SELECT hostgroup_id,hostname,port,status,weight,compression,max_connections,max_replication_lag,use_ssl,max_latency_ms FROM mysql_servers_v120");
}
rci=configdb->check_table_structure((char *)"mysql_servers",(char *)ADMIN_SQLITE_TABLE_MYSQL_SERVERS_V1_2_2);
if (rci) {
// upgrade is required
proxy_warning("Detected version v1.2.2 of table mysql_servers\n");
proxy_warning("ONLINE UPGRADE of table mysql_servers in progress\n");
//drop any existing table with suffix _v122
configdb->execute("DROP TABLE IF EXISTS mysql_servers_v122");
// rename current table to add suffix _v122
configdb->execute("ALTER TABLE mysql_servers RENAME TO mysql_servers_v122");
// create new table
configdb->build_table((char *)"mysql_servers",(char *)ADMIN_SQLITE_TABLE_MYSQL_SERVERS,false);
// fix bug #1224
configdb->execute("UPDATE mysql_servers_v122 SET weight = 10000000 WHERE weight > 10000000");
// fix bug #962
configdb->execute("UPDATE mysql_servers_v122 SET compression = 1 WHERE compression > 0");
// copy fields from old table
configdb->execute("INSERT OR IGNORE INTO mysql_servers (hostgroup_id,hostname,port,status,weight,compression,max_connections,max_replication_lag,use_ssl,max_latency_ms,comment) SELECT hostgroup_id,hostname,port,status,weight,compression,max_connections,max_replication_lag,use_ssl,max_latency_ms,comment FROM mysql_servers_v122");
}
rci=configdb->check_table_structure((char *)"mysql_servers",(char *)ADMIN_SQLITE_TABLE_MYSQL_SERVERS_V1_4_4); // 1.4.4 has the same column of 1.2.2
if (rci) {
// upgrade is required
proxy_warning("Detected version v1.4.4 (pre-2.0.0) of table mysql_servers\n");
proxy_warning("ONLINE UPGRADE of table mysql_servers in progress\n");
//drop any existing table with suffix _v144
configdb->execute("DROP TABLE IF EXISTS mysql_servers_v144");
// rename current table to add suffix _v144
configdb->execute("ALTER TABLE mysql_servers RENAME TO mysql_servers_v144");
// create new table
configdb->build_table((char *)"mysql_servers",(char *)ADMIN_SQLITE_TABLE_MYSQL_SERVERS,false);
// fix bug #1224
configdb->execute("UPDATE mysql_servers_v144 SET weight = 10000000 WHERE weight > 10000000");
// fix bug #962
configdb->execute("UPDATE mysql_servers_v144 SET compression = 1 WHERE compression > 0");
// copy fields from old table
configdb->execute("INSERT OR IGNORE INTO mysql_servers (hostgroup_id,hostname,port,status,weight,compression,max_connections,max_replication_lag,use_ssl,max_latency_ms,comment) SELECT hostgroup_id,hostname,port,status,weight,compression,max_connections,max_replication_lag,use_ssl,max_latency_ms,comment FROM mysql_servers_v144");
}
rci=configdb->check_table_structure((char *)"mysql_servers",(char *)ADMIN_SQLITE_TABLE_MYSQL_SERVERS_V2_0_0a);
if (rci) {
// upgrade is required
proxy_warning("Detected version 2.0.0a of table mysql_servers\n");
proxy_warning("ONLINE UPGRADE of table mysql_servers in progress\n");
//drop any existing table with suffix _v200a
configdb->execute("DROP TABLE IF EXISTS mysql_servers_v200a");
// rename current table to add suffix _v200a
configdb->execute("ALTER TABLE mysql_servers RENAME TO mysql_servers_v200a");
// create new table
configdb->build_table((char *)"mysql_servers",(char *)ADMIN_SQLITE_TABLE_MYSQL_SERVERS,false);
// fix bug #1224
configdb->execute("UPDATE mysql_servers_v200a SET weight = 10000000 WHERE weight > 10000000");
// fix bug #962
configdb->execute("UPDATE mysql_servers_v200a SET compression = 1 WHERE compression > 0");
// copy fields from old table
configdb->execute("INSERT OR IGNORE INTO mysql_servers SELECT * FROM mysql_servers_v200a");
}
rci=configdb->check_table_structure((char *)"mysql_servers",(char *)ADMIN_SQLITE_TABLE_MYSQL_SERVERS_V2_0_0b);
if (rci) {
// upgrade is required
proxy_warning("Detected version 2.0.0b of table mysql_servers\n");
proxy_warning("ONLINE UPGRADE of table mysql_servers in progress\n");
//drop any existing table with suffix _v200b
configdb->execute("DROP TABLE IF EXISTS mysql_servers_v200b");
// rename current table to add suffix _v200b
configdb->execute("ALTER TABLE mysql_servers RENAME TO mysql_servers_v200b");
// create new table
configdb->build_table((char *)"mysql_servers",(char *)ADMIN_SQLITE_TABLE_MYSQL_SERVERS,false);
// fix bug #1224
configdb->execute("UPDATE mysql_servers_v200b SET weight = 10000000 WHERE weight > 10000000");
// fix bug #962
configdb->execute("UPDATE mysql_servers_v200b SET compression = 1 WHERE compression > 0");
// copy fields from old table
configdb->execute("INSERT OR IGNORE INTO mysql_servers SELECT * FROM mysql_servers_v200b");
}
rci=configdb->check_table_structure((char *)"mysql_servers",(char *)ADMIN_SQLITE_TABLE_MYSQL_SERVERS_V2_0_0c);
if (rci) {
// upgrade is required to fix issue #1923
proxy_warning("Detected version 2.0.0c (pre-2.0.11) of table mysql_servers\n");
proxy_warning("ONLINE UPGRADE of table mysql_servers in progress\n");
//drop any existing table with suffix _v200c
configdb->execute("DROP TABLE IF EXISTS mysql_servers_v200c");
// rename current table to add suffix _v200c
configdb->execute("ALTER TABLE mysql_servers RENAME TO mysql_servers_v200c");
// create new table
configdb->build_table((char *)"mysql_servers",(char *)ADMIN_SQLITE_TABLE_MYSQL_SERVERS,false);
configdb->execute("INSERT OR IGNORE INTO mysql_servers SELECT * FROM mysql_servers_v200c");
}
rci=configdb->check_table_structure((char *)"mysql_replication_hostgroups",(char *)ADMIN_SQLITE_TABLE_MYSQL_REPLICATION_HOSTGROUPS_V1_0); // issue #643
if (rci) {
// upgrade is required
proxy_warning("Detected version v1.0 of table mysql_replication_hostgroups\n");
proxy_warning("ONLINE UPGRADE of table mysql_replication_hostgroups in progress\n");
// drop any existing table with suffix _v100
configdb->execute("DROP TABLE IF EXISTS mysql_replication_hostgroups_v100");
// rename current table to add suffix _v100
configdb->execute("ALTER TABLE mysql_replication_hostgroups RENAME TO mysql_replication_hostgroups_v100");
// create new table
configdb->build_table((char *)"mysql_replication_hostgroups",(char *)ADMIN_SQLITE_TABLE_MYSQL_REPLICATION_HOSTGROUPS,false);
// copy fields from old table
configdb->execute("INSERT INTO mysql_replication_hostgroups (writer_hostgroup,reader_hostgroup) SELECT writer_hostgroup , reader_hostgroup FROM mysql_replication_hostgroups_v100");
}
rci=configdb->check_table_structure((char *)"mysql_replication_hostgroups",(char *)ADMIN_SQLITE_TABLE_MYSQL_REPLICATION_HOSTGROUPS_V1_2_2); // issue #1304
if (rci) {
// upgrade is required
proxy_warning("Detected version v1.2.2 (pre-1.4.5) of table mysql_replication_hostgroups\n");
proxy_warning("ONLINE UPGRADE of table mysql_replication_hostgroups in progress\n");
// drop any existing table with suffix _v122
configdb->execute("DROP TABLE IF EXISTS mysql_replication_hostgroups_v122");
// rename current table to add suffix _v122
configdb->execute("ALTER TABLE mysql_replication_hostgroups RENAME TO mysql_replication_hostgroups_v122");
// create new table
configdb->build_table((char *)"mysql_replication_hostgroups",(char *)ADMIN_SQLITE_TABLE_MYSQL_REPLICATION_HOSTGROUPS,false);
// copy fields from old table
configdb->execute("INSERT INTO mysql_replication_hostgroups (writer_hostgroup,reader_hostgroup,comment) SELECT writer_hostgroup , reader_hostgroup , COALESCE(comment,'') FROM mysql_replication_hostgroups_v122");
}
rci=configdb->check_table_structure((char *)"mysql_replication_hostgroups",(char *)ADMIN_SQLITE_TABLE_MYSQL_REPLICATION_HOSTGROUPS_V1_4_5); // issue #1304
if (rci) {
// upgrade is required
proxy_warning("Detected version v1.4.5 (pre-2.0.0) of table mysql_replication_hostgroups\n");
proxy_warning("ONLINE UPGRADE of table mysql_replication_hostgroups in progress\n");
// drop any existing table with suffix _v145
configdb->execute("DROP TABLE IF EXISTS mysql_replication_hostgroups_v145");
// rename current table to add suffix _v145
configdb->execute("ALTER TABLE mysql_replication_hostgroups RENAME TO mysql_replication_hostgroups_v145");
// create new table
configdb->build_table((char *)"mysql_replication_hostgroups",(char *)ADMIN_SQLITE_TABLE_MYSQL_REPLICATION_HOSTGROUPS,false);
// copy fields from old table
configdb->execute("INSERT INTO mysql_replication_hostgroups (writer_hostgroup,reader_hostgroup,comment) SELECT writer_hostgroup , reader_hostgroup , comment FROM mysql_replication_hostgroups_v145");
}
rci=configdb->check_table_structure((char *)"mysql_replication_hostgroups",(char *)ADMIN_SQLITE_TABLE_MYSQL_REPLICATION_HOSTGROUPS_V2_0_0); // issue #2186
if (rci) {
// upgrade is required
proxy_warning("Detected version v2.0.0 (pre-2.0.8) of table mysql_replication_hostgroups\n");
proxy_warning("ONLINE UPGRADE of table mysql_replication_hostgroups in progress\n");
// drop any existing table with suffix _v200
configdb->execute("DROP TABLE IF EXISTS mysql_replication_hostgroups_v200");
// rename current table to add suffix _v200
configdb->execute("ALTER TABLE mysql_replication_hostgroups RENAME TO mysql_replication_hostgroups_v200");
// create new table
configdb->build_table((char *)"mysql_replication_hostgroups",(char *)ADMIN_SQLITE_TABLE_MYSQL_REPLICATION_HOSTGROUPS,false);
// copy fields from old table
configdb->execute("INSERT INTO mysql_replication_hostgroups SELECT * FROM mysql_replication_hostgroups_v200");
}
// upgrade mysql_group_replication_hostgroups
rci=configdb->check_table_structure((char *)"mysql_group_replication_hostgroups",(char *)ADMIN_SQLITE_TABLE_MYSQL_GROUP_REPLICATION_HOSTGROUPS_V1_4);
if (rci) {
// upgrade is required
proxy_warning("Detected version v1.4 (pre-2.0.0) of mysql_group_replication_hostgroups\n");
proxy_warning("ONLINE UPGRADE of table mysql_group_replication_hostgroups in progress\n");
// drop any existing table with suffix _v14
configdb->execute("DROP TABLE IF EXISTS mysql_group_replication_hostgroups_v14");
// rename current table to add suffix _v14
configdb->execute("ALTER TABLE mysql_group_replication_hostgroups RENAME TO mysql_group_replication_hostgroups_v14");
// create new table
configdb->build_table((char *)"mysql_group_replication_hostgroups",(char *)ADMIN_SQLITE_TABLE_MYSQL_GROUP_REPLICATION_HOSTGROUPS,false);
// copy fields from old table
configdb->execute("INSERT INTO mysql_group_replication_hostgroups SELECT * FROM mysql_group_replication_hostgroups_v14");
}
// upgrade mysql_galera_hostgroups
rci=configdb->check_table_structure((char *)"mysql_galera_hostgroups",(char *)ADMIN_SQLITE_TABLE_MYSQL_GALERA_HOSTGROUPS_V2_0_0a);
if (rci) {
// upgrade is required
proxy_warning("Detected version v2.0.0a (pre-2.0.0b) of mysql_galera_hostgroups\n");
proxy_warning("ONLINE UPGRADE of table mysql_galera_hostgroups in progress\n");
// drop any existing table with suffix _v200a
configdb->execute("DROP TABLE IF EXISTS mysql_galera_hostgroups_v200a");
// rename current table to add suffix _v200a
configdb->execute("ALTER TABLE mysql_galera_hostgroups RENAME TO mysql_galera_hostgroups_v200a");
// create new table
configdb->build_table((char *)"mysql_galera_hostgroups",(char *)ADMIN_SQLITE_TABLE_MYSQL_GALERA_HOSTGROUPS,false);
// copy fields from old table
configdb->execute("INSERT INTO mysql_galera_hostgroups SELECT * FROM mysql_galera_hostgroups_v200a");
}
// upgrade mysql_aws_aurora_hostgroups
rci=configdb->check_table_structure((char *)"mysql_aws_aurora_hostgroups",(char *)ADMIN_SQLITE_TABLE_MYSQL_AWS_AURORA_HOSTGROUPS_V2_0_8);
if (rci) {
// upgrade is required
proxy_warning("Detected version pre-v2.0.9 of mysql_aws_aurora_hostgroups\n");
proxy_warning("ONLINE UPGRADE of table mysql_aws_aurora_hostgroups in progress\n");
// drop mysql_aws_aurora_hostgroups table with suffix _v208
configdb->execute("DROP TABLE IF EXISTS mysql_aws_aurora_hostgroups_v208");
// rename current table to add suffix _v208
configdb->execute("ALTER TABLE mysql_aws_aurora_hostgroups RENAME TO mysql_aws_aurora_hostgroups_v208");
// create new table
configdb->build_table((char *)"mysql_aws_aurora_hostgroups",(char *)ADMIN_SQLITE_TABLE_MYSQL_AWS_AURORA_HOSTGROUPS,false);
// copy fields from old table
configdb->execute("INSERT INTO mysql_aws_aurora_hostgroups (writer_hostgroup, reader_hostgroup, active, aurora_port, domain_name, "
"max_lag_ms, check_interval_ms, check_timeout_ms, writer_is_also_reader, new_reader_weight, comment) "
"SELECT writer_hostgroup, reader_hostgroup, active, aurora_port, domain_name, max_lag_ms, check_interval_ms, "
"check_timeout_ms, writer_is_also_reader, new_reader_weight, comment FROM mysql_aws_aurora_hostgroups_v208");
}
// upgrade mysql_hostgroup_attributes
rci=configdb->check_table_structure((char *)"mysql_hostgroup_attributes",(char *)ADMIN_SQLITE_TABLE_MYSQL_HOSTGROUP_ATTRIBUTES_V2_5_0);
if (rci) {
// upgrade is required
proxy_warning("Detected version pre-v2.5.2 of mysql_hostgroup_attributes\n");
proxy_warning("ONLINE UPGRADE of table mysql_hostgroup_attributes in progress\n");
// drop mysql_hostgroup_attributes table with suffix _v250
configdb->execute("DROP TABLE IF EXISTS mysql_hostgroup_attributes_v250");
// rename current table to add suffix _v250
configdb->execute("ALTER TABLE mysql_hostgroup_attributes RENAME TO mysql_hostgroup_attributes_v250");
// create new table
configdb->build_table((char *)"mysql_hostgroup_attributes",(char *)ADMIN_SQLITE_TABLE_MYSQL_HOSTGROUP_ATTRIBUTES,false);
// copy fields from old table
configdb->execute(
"INSERT INTO mysql_hostgroup_attributes ("
" hostgroup_id, max_num_online_servers, autocommit, free_connections_pct, init_connect, multiplex,"
" connection_warming, throttle_connections_per_sec, ignore_session_variables, comment"
") SELECT"
" hostgroup_id, max_num_online_servers, autocommit, free_connections_pct, init_connect, multiplex,"
" connection_warming, throttle_connections_per_sec, ignore_session_variables, comment"
" FROM mysql_hostgroup_attributes_v250"
);
}
rci = configdb->check_table_structure((char*)"mysql_hostgroup_attributes", (char*)ADMIN_SQLITE_TABLE_MYSQL_HOSTGROUP_ATTRIBUTES_V2_5_2);
if (rci) {
// upgrade is required
proxy_warning("Detected version pre-v2.6.0 of mysql_hostgroup_attributes\n");
proxy_warning("ONLINE UPGRADE of table mysql_hostgroup_attributes in progress\n");
// drop mysql_hostgroup_attributes table with suffix _v252
configdb->execute("DROP TABLE IF EXISTS mysql_hostgroup_attributes_v252");
// rename current table to add suffix _v252
configdb->execute("ALTER TABLE mysql_hostgroup_attributes RENAME TO mysql_hostgroup_attributes_v252");
// create new table
configdb->build_table((char*)"mysql_hostgroup_attributes", (char*)ADMIN_SQLITE_TABLE_MYSQL_HOSTGROUP_ATTRIBUTES, false);
// copy fields from old table
configdb->execute(
"INSERT INTO mysql_hostgroup_attributes ("
" hostgroup_id, max_num_online_servers, autocommit, free_connections_pct, init_connect, multiplex,"
" connection_warming, throttle_connections_per_sec, ignore_session_variables, servers_defaults, comment"
") SELECT"
" hostgroup_id, max_num_online_servers, autocommit, free_connections_pct, init_connect, multiplex,"
" connection_warming, throttle_connections_per_sec, ignore_session_variables, servers_defaults, comment"
" FROM mysql_hostgroup_attributes_v252"
);
}
configdb->execute("PRAGMA foreign_keys = ON");
}
void ProxySQL_Admin::disk_upgrade_mysql_users() {
// this function is called only for configdb table
// it is responsible to upgrade table mysql_users if its structure is from a previous version
int rci;
configdb->execute("PRAGMA foreign_keys = OFF");
// change transaction_persistent=1 by default . See #793
rci=configdb->check_table_structure((char *)"mysql_users",(char *)ADMIN_SQLITE_TABLE_MYSQL_USERS_V1_3_0);
if (rci) {
// upgrade is required
proxy_warning("Detected version pre-1.4 of table mysql_users\n");
proxy_warning("ONLINE UPGRADE of table mysql_users in progress\n");
// drop any existing table with suffix _v130
configdb->execute("DROP TABLE IF EXISTS mysql_users_v130");
// rename current table to add suffix _v130
configdb->execute("ALTER TABLE mysql_users RENAME TO mysql_users_v130");
// create new table
configdb->build_table((char *)"mysql_users",(char *)ADMIN_SQLITE_TABLE_MYSQL_USERS,false);
// copy fields from old table
configdb->execute("INSERT INTO mysql_users(username,password,active,use_ssl,default_hostgroup,default_schema,schema_locked,transaction_persistent,fast_forward,backend,frontend,max_connections) SELECT * FROM mysql_users_v130");
}
// adding mysql_users.commment . See #1633
rci=configdb->check_table_structure((char *)"mysql_users",(char *)ADMIN_SQLITE_TABLE_MYSQL_USERS_V1_4_0);
if (rci) {
// upgrade is required
proxy_warning("Detected version pre-2.0 of table mysql_users\n");
proxy_warning("ONLINE UPGRADE of table mysql_users in progress\n");
// drop any existing table with suffix _v140
configdb->execute("DROP TABLE IF EXISTS mysql_users_v140");
// rename current table to add suffix _v140
configdb->execute("ALTER TABLE mysql_users RENAME TO mysql_users_v140");
// create new table
configdb->build_table((char *)"mysql_users",(char *)ADMIN_SQLITE_TABLE_MYSQL_USERS,false);
// copy fields from old table
configdb->execute("INSERT INTO mysql_users(username,password,active,use_ssl,default_hostgroup,default_schema,schema_locked,transaction_persistent,fast_forward,backend,frontend,max_connections) SELECT * FROM mysql_users_v140");
}
// adding mysql_users.attributes. See #3083
rci=configdb->check_table_structure((char *)"mysql_users",(char *)ADMIN_SQLITE_TABLE_MYSQL_USERS_V2_0_0);
if (rci) {
// upgrade is required
proxy_warning("Detected version pre-2.1.0 of table mysql_users\n");
proxy_warning("ONLINE UPGRADE of table mysql_users in progress\n");
// drop any existing table with suffix _v210
configdb->execute("DROP TABLE IF EXISTS mysql_users_v200");
// rename current table to add suffix _v210
configdb->execute("ALTER TABLE mysql_users RENAME TO mysql_users_v200");
// create new table
configdb->build_table((char *)"mysql_users",(char *)ADMIN_SQLITE_TABLE_MYSQL_USERS,false);
// copy fields from old table
configdb->execute("INSERT INTO mysql_users(username,password,active,use_ssl,default_hostgroup,default_schema,schema_locked,transaction_persistent,fast_forward,backend,frontend,max_connections,comment) SELECT * FROM mysql_users_v200");
}
configdb->execute("PRAGMA foreign_keys = ON");
}
void ProxySQL_Admin::disk_upgrade_rest_api_routes() {
int rci;
configdb->execute("PRAGMA foreign_keys = OFF");
rci=configdb->check_table_structure((char *)"restapi_routes",(char *)ADMIN_SQLITE_TABLE_RESTAPI_ROUTES_V2_0_15);
if (rci) {
// upgrade is required
proxy_warning("Detected version pre-2.1.0 of table restapi_routes\n");
proxy_warning("ONLINE UPGRADE of table restapi_routes in progress\n");
// drop any existing table with suffix _v2015
configdb->execute("DROP TABLE IF EXISTS restapi_routes_v2015");
// rename current table to add suffix _v2015
configdb->execute("ALTER TABLE restapi_routes RENAME TO restapi_routes_v2015");
// create new table
configdb->build_table((char *)"restapi_routes",(char *)ADMIN_SQLITE_TABLE_RESTAPI_ROUTES,false);
// copy fields from old table
configdb->execute("INSERT INTO restapi_routes(id,active,timeout_ms,method,uri,script,comment) SELECT id,active,interval_ms,method,uri,script,comment FROM restapi_routes_v2015");
}
configdb->execute("PRAGMA foreign_keys = ON");
}