diff --git a/include/ProxySQL_Admin_Tables_Definitions.h b/include/ProxySQL_Admin_Tables_Definitions.h index d8980901b..fdeecc9cb 100644 --- a/include/ProxySQL_Admin_Tables_Definitions.h +++ b/include/ProxySQL_Admin_Tables_Definitions.h @@ -291,14 +291,8 @@ /* #define STATS_SQLITE_TABLE_MYSQL_QUERY_RULES "CREATE TABLE stats_pgsql_query_rules (rule_id INTEGER PRIMARY KEY , hits INT NOT NULL)" - - #define STATS_SQLITE_TABLE_MYSQL_COMMANDS_COUNTERS "CREATE TABLE stats_pgsql_commands_counters (Command VARCHAR NOT NULL PRIMARY KEY , Total_Time_us INT NOT NULL , Total_cnt INT NOT NULL , cnt_100us INT NOT NULL , cnt_500us INT NOT NULL , cnt_1ms INT NOT NULL , cnt_5ms INT NOT NULL , cnt_10ms INT NOT NULL , cnt_50ms INT NOT NULL , cnt_100ms INT NOT NULL , cnt_500ms INT NOT NULL , cnt_1s INT NOT NULL , cnt_5s INT NOT NULL , cnt_10s INT NOT NULL , cnt_INFs)" -#define STATS_SQLITE_TABLE_MYSQL_PROCESSLIST "CREATE TABLE stats_pgsql_processlist (ThreadID INT NOT NULL , SessionID INTEGER PRIMARY KEY , user VARCHAR , db VARCHAR , cli_host VARCHAR , cli_port INT , hostgroup INT , l_srv_host VARCHAR , l_srv_port INT , srv_host VARCHAR , srv_port INT , command VARCHAR , time_ms INT NOT NULL , info VARCHAR , status_flags INT , extended_info VARCHAR)" - - #define STATS_SQLITE_TABLE_MYSQL_QUERY_DIGEST "CREATE TABLE stats_pgsql_query_digest (hostgroup INT , schemaname VARCHAR NOT NULL , username VARCHAR NOT NULL , client_address VARCHAR NOT NULL , digest VARCHAR NOT NULL , digest_text VARCHAR NOT NULL , count_star INTEGER NOT NULL , first_seen INTEGER NOT NULL , last_seen INTEGER NOT NULL , sum_time INTEGER NOT NULL , min_time INTEGER NOT NULL , max_time INTEGER NOT NULL , sum_rows_affected INTEGER NOT NULL , sum_rows_sent INTEGER NOT NULL , PRIMARY KEY(hostgroup, schemaname, username, client_address, digest))" - #define STATS_SQLITE_TABLE_MYSQL_QUERY_DIGEST_RESET "CREATE TABLE stats_pgsql_query_digest_reset (hostgroup INT , schemaname VARCHAR NOT NULL , username VARCHAR NOT NULL , client_address VARCHAR NOT NULL , digest VARCHAR NOT NULL , digest_text VARCHAR NOT NULL , count_star INTEGER NOT NULL , first_seen INTEGER NOT NULL , last_seen INTEGER NOT NULL , sum_time INTEGER NOT NULL , min_time INTEGER NOT NULL , max_time INTEGER NOT NULL , sum_rows_affected INTEGER NOT NULL , sum_rows_sent INTEGER NOT NULL , PRIMARY KEY(hostgroup, schemaname, username, client_address, digest))" */ #define STATS_SQLITE_TABLE_PGSQL_GLOBAL "CREATE TABLE stats_pgsql_global (Variable_Name VARCHAR NOT NULL PRIMARY KEY , Variable_Value VARCHAR NOT NULL)" @@ -306,6 +300,7 @@ #define STATS_SQLITE_TABLE_PGSQL_CONNECTION_POOL_RESET "CREATE TABLE stats_pgsql_connection_pool_reset (hostgroup INT , srv_host VARCHAR , srv_port INT , status VARCHAR , ConnUsed INT , ConnFree INT , ConnOK INT , ConnERR INT , MaxConnUsed INT , Queries INT , Bytes_data_sent INT , Bytes_data_recv INT , Latency_us INT)" #define STATS_SQLITE_TABLE_PGSQL_FREE_CONNECTIONS "CREATE TABLE stats_pgsql_free_connections (fd INT NOT NULL , hostgroup INT NOT NULL , srv_host VARCHAR NOT NULL , srv_port INT NOT NULL , user VARCHAR NOT NULL , database VARCHAR , init_connect VARCHAR , time_zone VARCHAR , sql_mode VARCHAR , idle_ms INT , statistics VARCHAR , pgsql_info VARCHAR)" #define STATS_SQLITE_TABLE_PGSQL_USERS "CREATE TABLE stats_pgsql_users (username VARCHAR PRIMARY KEY , frontend_connections INT NOT NULL , frontend_max_connections INT NOT NULL)" +#define STATS_SQLITE_TABLE_PGSQL_PROCESSLIST "CREATE TABLE stats_pgsql_processlist (ThreadID INT NOT NULL , SessionID INTEGER PRIMARY KEY , user VARCHAR , database VARCHAR , cli_host VARCHAR , cli_port INT , hostgroup INT , l_srv_host VARCHAR , l_srv_port INT , srv_host VARCHAR , srv_port INT , command VARCHAR , time_ms INT NOT NULL , info VARCHAR , status_flags INT , extended_info VARCHAR)" //#define STATS_SQLITE_TABLE_MEMORY_METRICS "CREATE TABLE stats_memory_metrics (Variable_Name VARCHAR NOT NULL PRIMARY KEY , Variable_Value VARCHAR NOT NULL)" /* #define STATS_SQLITE_TABLE_MYSQL_ERRORS "CREATE TABLE stats_pgsql_errors (hostgroup INT NOT NULL , hostname VARCHAR NOT NULL , port INT NOT NULL , username VARCHAR NOT NULL , client_address VARCHAR NOT NULL , schemaname VARCHAR NOT NULL , errno INT NOT NULL , count_star INTEGER NOT NULL , first_seen INTEGER NOT NULL , last_seen INTEGER NOT NULL , last_error VARCHAR NOT NULL DEFAULT '' , PRIMARY KEY (hostgroup, hostname, port, username, schemaname, errno) )" diff --git a/include/proxysql_admin.h b/include/proxysql_admin.h index 4513ab697..bb6209034 100644 --- a/include/proxysql_admin.h +++ b/include/proxysql_admin.h @@ -654,6 +654,7 @@ class ProxySQL_Admin { void stats___pgsql_users(); void stats___pgsql_free_connections(); void stats___pgsql_connection_pool(bool _reset); + void stats___pgsql_processlist(); void stats___proxysql_servers_checksums(); void stats___proxysql_servers_metrics(); @@ -728,7 +729,6 @@ class ProxySQL_Admin { void init_pgsql_users(std::unique_ptr&& pgsql_users_resultset = nullptr, const std::string& checksum = "", const time_t epoch = 0); void flush_pgsql_users__from_memory_to_disk(); void flush_pgsql_users__from_disk_to_memory(); - void stats___pgsql_processlist(); void save_pgsql_users_runtime_to_database(bool _runtime); diff --git a/lib/Admin_Bootstrap.cpp b/lib/Admin_Bootstrap.cpp index 21e75ed3f..ce662506c 100644 --- a/lib/Admin_Bootstrap.cpp +++ b/lib/Admin_Bootstrap.cpp @@ -678,6 +678,7 @@ bool ProxySQL_Admin::init(const bootstrap_info_t& bootstrap_info) { insert_into_tables_defs(tables_defs_stats,"stats_pgsql_connection_pool_reset", STATS_SQLITE_TABLE_PGSQL_CONNECTION_POOL_RESET); insert_into_tables_defs(tables_defs_stats,"stats_pgsql_free_connections", STATS_SQLITE_TABLE_PGSQL_FREE_CONNECTIONS); insert_into_tables_defs(tables_defs_stats,"stats_pgsql_users", STATS_SQLITE_TABLE_PGSQL_USERS); + insert_into_tables_defs(tables_defs_stats,"stats_pgsql_processlist", STATS_SQLITE_TABLE_PGSQL_PROCESSLIST); // ProxySQL Cluster insert_into_tables_defs(tables_defs_admin,"proxysql_servers", ADMIN_SQLITE_TABLE_PROXYSQL_SERVERS); diff --git a/lib/Admin_Handler.cpp b/lib/Admin_Handler.cpp index 04d82ddcf..b5240b9b3 100644 --- a/lib/Admin_Handler.cpp +++ b/lib/Admin_Handler.cpp @@ -3558,6 +3558,20 @@ void admin_session_handler(Client_Session sess, void *_pa, PtrSize_t *pkt) { goto __run_query; } + if (query_no_space_length == strlen("SHOW FULL PGSQL PROCESSLIST") && !strncasecmp("SHOW FULL PGSQL PROCESSLIST", query_no_space, query_no_space_length)) { + l_free(query_length, query); + query = l_strdup("SELECT * FROM stats_pgsql_processlist"); + query_length = strlen(query) + 1; + goto __run_query; + } + + if (query_no_space_length == strlen("SHOW PGSQL PROCESSLIST") && !strncasecmp("SHOW PGSQL PROCESSLIST", query_no_space, query_no_space_length)) { + l_free(query_length, query); + query = l_strdup("SELECT SessionID, user, database, hostgroup, command, time_ms, SUBSTR(info,0,100) info FROM stats_pgsql_processlist"); + query_length = strlen(query) + 1; + goto __run_query; + } + __end_show_commands: if (query_no_space_length==strlen("SELECT DATABASE()") && !strncasecmp("SELECT DATABASE()",query_no_space, query_no_space_length)) { diff --git a/lib/PgSQL_HostGroups_Manager.cpp b/lib/PgSQL_HostGroups_Manager.cpp index ecb940282..bda1add02 100644 --- a/lib/PgSQL_HostGroups_Manager.cpp +++ b/lib/PgSQL_HostGroups_Manager.cpp @@ -2968,7 +2968,7 @@ SQLite3_result * PgSQL_HostGroups_Manager::SQL3_Free_Connections() { j["host_addr"] = conn->get_pg_hostaddr(); j["port"] = conn->get_pg_port(); j["user"] = conn->get_pg_user(); - j["db"] = conn->get_pg_dbname(); + j["database"] = conn->get_pg_dbname(); j["backend_pid"] = conn->get_pg_backend_pid(); j["using_ssl"] = conn->get_pg_ssl_in_use() ? "YES" : "NO"; j["error_msg"] = conn->get_pg_error_message(); diff --git a/lib/PgSQL_Session.cpp b/lib/PgSQL_Session.cpp index b19b86317..81ffad5cd 100644 --- a/lib/PgSQL_Session.cpp +++ b/lib/PgSQL_Session.cpp @@ -942,7 +942,7 @@ void PgSQL_Session::generate_proxysql_internal_session_json(json& j) { #ifdef DEBUG j["backends"][i]["conn"]["pgsql"]["password"] = _myconn->get_pg_password(); #endif - j["backends"][i]["conn"]["pgsql"]["db"] = _myconn->get_pg_dbname(); + j["backends"][i]["conn"]["pgsql"]["database"] = _myconn->get_pg_dbname(); j["backends"][i]["conn"]["pgsql"]["backend_pid"] = _myconn->get_pg_backend_pid(); j["backends"][i]["conn"]["pgsql"]["using_ssl"] = _myconn->get_pg_ssl_in_use() ? "YES" : "NO"; j["backends"][i]["conn"]["pgsql"]["error_msg"] = _myconn->get_pg_error_message(); diff --git a/lib/PgSQL_Thread.cpp b/lib/PgSQL_Thread.cpp index 1b60f5740..7e598467f 100644 --- a/lib/PgSQL_Thread.cpp +++ b/lib/PgSQL_Thread.cpp @@ -4113,7 +4113,7 @@ SQLite3_result* PgSQL_Threads_Handler::SQL3_GlobalStatus(bool _memory) { if (_memory == true) { Get_Memory_Stats(); } - proxy_debug(PROXY_DEBUG_MYSQL_CONNECTION, 4, "Dumping MySQL Global Status\n"); + proxy_debug(PROXY_DEBUG_MYSQL_CONNECTION, 4, "Dumping PgSQL Global Status\n"); SQLite3_result* result = new SQLite3_result(colnum); result->add_column_definition(SQLITE_TEXT, "Variable_Name"); result->add_column_definition(SQLITE_TEXT, "Variable_Value"); @@ -4480,12 +4480,12 @@ void PgSQL_Threads_Handler::Get_Memory_Stats() { SQLite3_result* PgSQL_Threads_Handler::SQL3_Processlist() { const int colnum = 16; char port[NI_MAXSERV]; - proxy_debug(PROXY_DEBUG_MYSQL_CONNECTION, 4, "Dumping MySQL Processlist\n"); + proxy_debug(PROXY_DEBUG_MYSQL_CONNECTION, 4, "Dumping PgSQL Processlist\n"); SQLite3_result* result = new SQLite3_result(colnum); result->add_column_definition(SQLITE_TEXT, "ThreadID"); result->add_column_definition(SQLITE_TEXT, "SessionID"); result->add_column_definition(SQLITE_TEXT, "user"); - result->add_column_definition(SQLITE_TEXT, "db"); + result->add_column_definition(SQLITE_TEXT, "database"); result->add_column_definition(SQLITE_TEXT, "cli_host"); result->add_column_definition(SQLITE_TEXT, "cli_port"); result->add_column_definition(SQLITE_TEXT, "hostgroup"); @@ -4678,9 +4678,9 @@ SQLite3_result* PgSQL_Threads_Handler::SQL3_Processlist() { case RESETTING_CONNECTION_V2: pta[11] = strdup("Resetting connection V2"); break; - case CHANGING_SCHEMA: - pta[11] = strdup("InitDB"); - break; + //case CHANGING_SCHEMA: + // pta[11] = strdup("InitDB"); + // break; case PROCESSING_STMT_EXECUTE: pta[11] = strdup("Execute"); break; @@ -4696,12 +4696,12 @@ SQLite3_result* PgSQL_Threads_Handler::SQL3_Processlist() { case WAITING_SERVER_DATA: pta[11] = strdup("Waiting server data"); break; - case CHANGING_CHARSET: - pta[11] = strdup("Changing charset"); - break; - case CHANGING_AUTOCOMMIT: - pta[11] = strdup("Changing autocommit"); - break; + //case CHANGING_CHARSET: + // pta[11] = strdup("Changing charset"); + // break; + //case CHANGING_AUTOCOMMIT: + // pta[11] = strdup("Changing autocommit"); + // break; case SETTING_INIT_CONNECT: pta[11] = strdup("Setting init connect"); break; diff --git a/lib/ProxySQL_Admin.cpp b/lib/ProxySQL_Admin.cpp index 102be6b0a..000118697 100644 --- a/lib/ProxySQL_Admin.cpp +++ b/lib/ProxySQL_Admin.cpp @@ -1135,6 +1135,7 @@ bool ProxySQL_Admin::GenericRefreshStatistics(const char *query_no_space, unsign bool ret=false; bool refresh=false; bool stats_mysql_processlist=false; + bool stats_pgsql_processlist=false; bool stats_mysql_free_connections=false; bool stats_pgsql_free_connections=false; bool stats_mysql_connection_pool=false; @@ -1199,12 +1200,22 @@ bool ProxySQL_Admin::GenericRefreshStatistics(const char *query_no_space, unsign //bool stats_proxysql_servers_status = false; // temporary disabled because not implemented - if (strcasestr(query_no_space,"processlist")) + if (strcasestr(query_no_space, "pgsql processlist") || + strcasestr(query_no_space, "stats_pgsql_processlist")) + // This will match the following usecases: + // SHOW PGSQL PROCESSLIST + // SHOW FULL PGSQL PROCESSLIST + // SELECT * FROM stats_pgsql_processlist + { + stats_pgsql_processlist = true; refresh = true; + } else if (strcasestr(query_no_space,"processlist")) // This will match the following usecases: // SHOW PROCESSLIST // SHOW FULL PROCESSLIST // SELECT * FROM stats_mysql_processlist - { stats_mysql_processlist=true; refresh=true; } + { + stats_mysql_processlist=true; refresh=true; + } if (strstr(query_no_space,"stats_mysql_query_digest")) { stats_mysql_query_digest=true; refresh=true; } if (strstr(query_no_space,"stats_mysql_query_digest_reset")) @@ -1404,6 +1415,8 @@ bool ProxySQL_Admin::GenericRefreshStatistics(const char *query_no_space, unsign //ProxySQL_Admin *SPA=(ProxySQL_Admin *)pa; if (stats_mysql_processlist) stats___mysql_processlist(); + if (stats_pgsql_processlist) + stats___pgsql_processlist(); if (stats_mysql_query_digest_reset) { stats___mysql_query_digests_v2(true, stats_mysql_query_digest, false); } else { @@ -1599,7 +1612,7 @@ bool ProxySQL_Admin::GenericRefreshStatistics(const char *query_no_space, unsign stats_mysql_commands_counters || stats_mysql_query_rules || stats_mysql_users || stats_mysql_gtid_executed || stats_mysql_free_connections || stats_pgsql_global || stats_pgsql_connection_pool || stats_pgsql_connection_pool_reset || - stats_pgsql_free_connections || stats_pgsql_users + stats_pgsql_free_connections || stats_pgsql_users || stats_pgsql_processlist ) { ret = true; } @@ -1801,6 +1814,7 @@ void ProxySQL_Admin::vacuum_stats(bool is_admin) { "stats_pgsql_connection_pool_reset", "stats_mysql_prepared_statements_info", "stats_mysql_processlist", + "stats_pgsql_processlist", "stats_mysql_query_digest", "stats_mysql_query_digest_reset", "stats_mysql_query_rules", diff --git a/lib/ProxySQL_Admin_Stats.cpp b/lib/ProxySQL_Admin_Stats.cpp index 1636ecf28..7f2b6f077 100644 --- a/lib/ProxySQL_Admin_Stats.cpp +++ b/lib/ProxySQL_Admin_Stats.cpp @@ -882,14 +882,14 @@ CREATE TABLE stats_mysql_processlist ( void ProxySQL_Admin::stats___pgsql_processlist() { int rc; - if (!GloMTH) return; + if (!GloPTH) return; pgsql_thread___show_processlist_extended = variables.pgsql_show_processlist_extended; SQLite3_result* resultset = GloPTH->SQL3_Processlist(); if (resultset == NULL) return; sqlite3_stmt* statement1 = NULL; sqlite3_stmt* statement32 = NULL; - //sqlite3 *mydb3=statsdb->get_db(); + char* query1 = NULL; char* query32 = NULL; std::string query32s = ""; @@ -905,26 +905,6 @@ void ProxySQL_Admin::stats___pgsql_processlist() { rc = statsdb->prepare_v2(query32, &statement32); ASSERT_SQLITE_OK(rc, statsdb); - /* for reference - CREATE TABLE stats_mysql_processlist ( - ThreadID INT NOT NULL, - SessionID INTEGER PRIMARY KEY, - user VARCHAR, - db VARCHAR, - cli_host VARCHAR, - cli_port INT, - hostgroup INT, - l_srv_host VARCHAR, - l_srv_port INT, - srv_host VARCHAR, - srv_port INT, - command VARCHAR, - time_ms INT NOT NULL, - info VARCHAR, - status_flags INT, - extended_info VARCHAR) - */ - statsdb->execute("BEGIN"); statsdb->execute("DELETE FROM stats_pgsql_processlist"); @@ -938,46 +918,40 @@ void ProxySQL_Admin::stats___pgsql_processlist() { rc = (*proxy_sqlite3_bind_int64)(statement32, (idx * 16) + 1, atoll(r1->fields[0])); ASSERT_SQLITE_OK(rc, statsdb); // ThreadID rc = (*proxy_sqlite3_bind_int64)(statement32, (idx * 16) + 2, atoll(r1->fields[1])); ASSERT_SQLITE_OK(rc, statsdb); // SessionID rc = (*proxy_sqlite3_bind_text)(statement32, (idx * 16) + 3, r1->fields[2], -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb); // user - rc = (*proxy_sqlite3_bind_text)(statement32, (idx * 16) + 4, r1->fields[3], -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb); // db + rc = (*proxy_sqlite3_bind_text)(statement32, (idx * 16) + 4, r1->fields[3], -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb); // database rc = (*proxy_sqlite3_bind_text)(statement32, (idx * 16) + 5, r1->fields[4], -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb); // cli_host if (r1->fields[5]) { rc = (*proxy_sqlite3_bind_int64)(statement32, (idx * 16) + 6, atoll(r1->fields[5])); ASSERT_SQLITE_OK(rc, statsdb); // cli_port - } - else { + } else { rc = (*proxy_sqlite3_bind_null)(statement32, (idx * 16) + 6); ASSERT_SQLITE_OK(rc, statsdb); } if (r1->fields[6]) { rc = (*proxy_sqlite3_bind_int64)(statement32, (idx * 16) + 7, atoll(r1->fields[6])); ASSERT_SQLITE_OK(rc, statsdb); // hostgroup - } - else { + } else { rc = (*proxy_sqlite3_bind_null)(statement32, (idx * 16) + 8); ASSERT_SQLITE_OK(rc, statsdb); } rc = (*proxy_sqlite3_bind_text)(statement32, (idx * 16) + 8, r1->fields[7], -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb); // l_srv_host if (r1->fields[8]) { rc = (*proxy_sqlite3_bind_int64)(statement32, (idx * 16) + 9, atoll(r1->fields[8])); ASSERT_SQLITE_OK(rc, statsdb); // l_srv_port - } - else { + } else { rc = (*proxy_sqlite3_bind_null)(statement32, (idx * 16) + 9); ASSERT_SQLITE_OK(rc, statsdb); } rc = (*proxy_sqlite3_bind_text)(statement32, (idx * 16) + 10, r1->fields[9], -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb); // srv_host if (r1->fields[10]) { rc = (*proxy_sqlite3_bind_int64)(statement32, (idx * 16) + 11, atoll(r1->fields[10])); ASSERT_SQLITE_OK(rc, statsdb); // srv_port - } - else { + } else { rc = (*proxy_sqlite3_bind_null)(statement32, (idx * 16) + 11); ASSERT_SQLITE_OK(rc, statsdb); } rc = (*proxy_sqlite3_bind_text)(statement32, (idx * 16) + 12, r1->fields[11], -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb); // command if (r1->fields[12]) { rc = (*proxy_sqlite3_bind_int64)(statement32, (idx * 16) + 13, atoll(r1->fields[12])); ASSERT_SQLITE_OK(rc, statsdb); // time_ms - } - else { + } else { rc = (*proxy_sqlite3_bind_null)(statement32, (idx * 16) + 13); ASSERT_SQLITE_OK(rc, statsdb); } rc = (*proxy_sqlite3_bind_text)(statement32, (idx * 16) + 14, r1->fields[13], -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb); // info if (r1->fields[14]) { rc = (*proxy_sqlite3_bind_int64)(statement32, (idx * 16) + 15, atoll(r1->fields[14])); ASSERT_SQLITE_OK(rc, statsdb); // status_flags - } - else { + } else { rc = (*proxy_sqlite3_bind_null)(statement32, (idx * 16) + 15); ASSERT_SQLITE_OK(rc, statsdb); } rc = (*proxy_sqlite3_bind_text)(statement32, (idx * 16) + 16, r1->fields[15], -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb); // extended_info @@ -986,51 +960,44 @@ void ProxySQL_Admin::stats___pgsql_processlist() { rc = (*proxy_sqlite3_clear_bindings)(statement32); ASSERT_SQLITE_OK(rc, statsdb); rc = (*proxy_sqlite3_reset)(statement32); ASSERT_SQLITE_OK(rc, statsdb); } - } - else { // single row + } else { // single row rc = (*proxy_sqlite3_bind_int64)(statement1, 1, atoll(r1->fields[0])); ASSERT_SQLITE_OK(rc, statsdb); // ThreadID rc = (*proxy_sqlite3_bind_int64)(statement1, 2, atoll(r1->fields[1])); ASSERT_SQLITE_OK(rc, statsdb); // SessionID rc = (*proxy_sqlite3_bind_text)(statement1, 3, r1->fields[2], -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb); // user - rc = (*proxy_sqlite3_bind_text)(statement1, 4, r1->fields[3], -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb); // db + rc = (*proxy_sqlite3_bind_text)(statement1, 4, r1->fields[3], -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb); // database rc = (*proxy_sqlite3_bind_text)(statement1, 5, r1->fields[4], -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb); // cli_host if (r1->fields[5]) { rc = (*proxy_sqlite3_bind_int64)(statement1, 6, atoll(r1->fields[5])); ASSERT_SQLITE_OK(rc, statsdb); // cli_port - } - else { + } else { rc = (*proxy_sqlite3_bind_null)(statement1, 6); ASSERT_SQLITE_OK(rc, statsdb); } if (r1->fields[6]) { rc = (*proxy_sqlite3_bind_int64)(statement1, 7, atoll(r1->fields[6])); ASSERT_SQLITE_OK(rc, statsdb); // hostgroup - } - else { + } else { rc = (*proxy_sqlite3_bind_null)(statement1, 8); ASSERT_SQLITE_OK(rc, statsdb); } rc = (*proxy_sqlite3_bind_text)(statement1, 8, r1->fields[7], -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb); // l_srv_host if (r1->fields[8]) { rc = (*proxy_sqlite3_bind_int64)(statement1, 9, atoll(r1->fields[8])); ASSERT_SQLITE_OK(rc, statsdb); // l_srv_port - } - else { + } else { rc = (*proxy_sqlite3_bind_null)(statement1, 9); ASSERT_SQLITE_OK(rc, statsdb); } rc = (*proxy_sqlite3_bind_text)(statement1, 10, r1->fields[9], -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb); // srv_host if (r1->fields[10]) { rc = (*proxy_sqlite3_bind_int64)(statement1, 11, atoll(r1->fields[10])); ASSERT_SQLITE_OK(rc, statsdb); // srv_port - } - else { + } else { rc = (*proxy_sqlite3_bind_null)(statement1, 11); ASSERT_SQLITE_OK(rc, statsdb); } rc = (*proxy_sqlite3_bind_text)(statement1, 12, r1->fields[11], -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb); // command if (r1->fields[12]) { rc = (*proxy_sqlite3_bind_int64)(statement1, 13, atoll(r1->fields[12])); ASSERT_SQLITE_OK(rc, statsdb); // time_ms - } - else { + } else { rc = (*proxy_sqlite3_bind_null)(statement1, 13); ASSERT_SQLITE_OK(rc, statsdb); } rc = (*proxy_sqlite3_bind_text)(statement1, 14, r1->fields[13], -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb); // info if (r1->fields[14]) { rc = (*proxy_sqlite3_bind_int64)(statement1, 15, atoll(r1->fields[14])); ASSERT_SQLITE_OK(rc, statsdb); // status_flags - } - else { + } else { rc = (*proxy_sqlite3_bind_null)(statement1, 15); ASSERT_SQLITE_OK(rc, statsdb); } rc = (*proxy_sqlite3_bind_text)(statement1, 16, r1->fields[15], -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb); // extended_info