Added stats_pgsql_processlist table

* Implemented 'SHOW FULL PGSQL PROCESSLIST' command.
* Implemented 'SHOW PGSQL PROCESSLIST' command.
v2.x_pg_PrepStmtBase_240714
Rahim Kanji 2 years ago
parent 0b8df6df00
commit 43d3ec82c8

@ -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) )"

@ -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<SQLite3_result>&& 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);

@ -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);

@ -3558,6 +3558,20 @@ void admin_session_handler(Client_Session<T> 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)) {

@ -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();

@ -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();

@ -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;

@ -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",

@ -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

Loading…
Cancel
Save