github.com/netdata/go.d.plugin@v0.58.1/modules/proxysql/proxysql_test.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package proxysql 4 5 import ( 6 "bufio" 7 "bytes" 8 "database/sql/driver" 9 "errors" 10 "fmt" 11 "os" 12 "strings" 13 "testing" 14 15 "github.com/DATA-DOG/go-sqlmock" 16 "github.com/stretchr/testify/assert" 17 "github.com/stretchr/testify/require" 18 ) 19 20 var ( 21 dataV2010Version, _ = os.ReadFile("testdata/v2.0.10/version.txt") 22 dataV2010StatsMySQLGlobal, _ = os.ReadFile("testdata/v2.0.10/stats_mysql_global.txt") 23 dataV2010StatsMemoryMetrics, _ = os.ReadFile("testdata/v2.0.10/stats_memory_metrics.txt") 24 dataV2010StatsMySQLCommandsCounters, _ = os.ReadFile("testdata/v2.0.10/stats_mysql_commands_counters.txt") 25 dataV2010StatsMySQLUsers, _ = os.ReadFile("testdata/v2.0.10/stats_mysql_users.txt") 26 dataV2010StatsMySQLConnectionPool, _ = os.ReadFile("testdata/v2.0.10/stats_mysql_connection_pool .txt") 27 ) 28 29 func Test_testDataIsValid(t *testing.T) { 30 for name, data := range map[string][]byte{ 31 "dataV2010Version": dataV2010Version, 32 "dataV2010StatsMySQLGlobal": dataV2010StatsMySQLGlobal, 33 "dataV2010StatsMemoryMetrics": dataV2010StatsMemoryMetrics, 34 "dataV2010StatsMySQLCommandsCounters": dataV2010StatsMySQLCommandsCounters, 35 "dataV2010StatsMySQLUsers": dataV2010StatsMySQLUsers, 36 "dataV2010StatsMySQLConnectionPool": dataV2010StatsMySQLConnectionPool, 37 } { 38 require.NotNilf(t, data, name) 39 _, err := prepareMockRows(data) 40 require.NoErrorf(t, err, name) 41 } 42 } 43 44 func TestProxySQL_Init(t *testing.T) { 45 tests := map[string]struct { 46 config Config 47 wantFail bool 48 }{ 49 "default": { 50 wantFail: false, 51 config: New().Config, 52 }, 53 "empty DSN": { 54 wantFail: true, 55 config: Config{DSN: ""}, 56 }, 57 } 58 59 for name, test := range tests { 60 t.Run(name, func(t *testing.T) { 61 proxySQL := New() 62 proxySQL.Config = test.config 63 64 if test.wantFail { 65 assert.False(t, proxySQL.Init()) 66 } else { 67 assert.True(t, proxySQL.Init()) 68 } 69 }) 70 } 71 } 72 73 func TestProxySQL_Cleanup(t *testing.T) { 74 tests := map[string]func(t *testing.T) (proxySQL *ProxySQL, cleanup func()){ 75 "db connection not initialized": func(t *testing.T) (proxySQL *ProxySQL, cleanup func()) { 76 return New(), func() {} 77 }, 78 "db connection initialized": func(t *testing.T) (proxySQL *ProxySQL, cleanup func()) { 79 db, mock, err := sqlmock.New() 80 require.NoError(t, err) 81 82 mock.ExpectClose() 83 proxySQL = New() 84 proxySQL.db = db 85 cleanup = func() { _ = db.Close() } 86 87 return proxySQL, cleanup 88 }, 89 } 90 91 for name, prepare := range tests { 92 t.Run(name, func(t *testing.T) { 93 proxySQL, cleanup := prepare(t) 94 defer cleanup() 95 96 assert.NotPanics(t, proxySQL.Cleanup) 97 assert.Nil(t, proxySQL.db) 98 }) 99 } 100 } 101 102 func TestProxySQL_Charts(t *testing.T) { 103 assert.NotNil(t, New().Charts()) 104 } 105 106 func TestProxySQL_Check(t *testing.T) { 107 tests := map[string]struct { 108 prepareMock func(t *testing.T, m sqlmock.Sqlmock) 109 wantFail bool 110 }{ 111 "success on all queries": { 112 wantFail: false, 113 prepareMock: func(t *testing.T, m sqlmock.Sqlmock) { 114 mockExpect(t, m, queryVersion, dataV2010Version) 115 mockExpect(t, m, queryStatsMySQLGlobal, dataV2010StatsMySQLGlobal) 116 mockExpect(t, m, queryStatsMySQLMemoryMetrics, dataV2010StatsMemoryMetrics) 117 mockExpect(t, m, queryStatsMySQLCommandsCounters, dataV2010StatsMySQLCommandsCounters) 118 mockExpect(t, m, queryStatsMySQLUsers, dataV2010StatsMySQLUsers) 119 mockExpect(t, m, queryStatsMySQLConnectionPool, dataV2010StatsMySQLConnectionPool) 120 }, 121 }, 122 "fails when error on querying global stats": { 123 wantFail: true, 124 prepareMock: func(t *testing.T, m sqlmock.Sqlmock) { 125 mockExpect(t, m, queryVersion, dataV2010Version) 126 mockExpectErr(m, queryStatsMySQLGlobal) 127 }, 128 }, 129 "fails when error on querying memory metrics": { 130 wantFail: true, 131 prepareMock: func(t *testing.T, m sqlmock.Sqlmock) { 132 mockExpect(t, m, queryVersion, dataV2010Version) 133 mockExpect(t, m, queryStatsMySQLGlobal, dataV2010StatsMySQLGlobal) 134 mockExpectErr(m, queryStatsMySQLMemoryMetrics) 135 }, 136 }, 137 "fails when error on querying mysql command counters": { 138 wantFail: true, 139 prepareMock: func(t *testing.T, m sqlmock.Sqlmock) { 140 mockExpect(t, m, queryVersion, dataV2010Version) 141 mockExpect(t, m, queryStatsMySQLGlobal, dataV2010StatsMySQLGlobal) 142 mockExpect(t, m, queryStatsMySQLMemoryMetrics, dataV2010StatsMemoryMetrics) 143 mockExpectErr(m, queryStatsMySQLCommandsCounters) 144 }, 145 }, 146 "fails when error on querying mysql users": { 147 wantFail: true, 148 prepareMock: func(t *testing.T, m sqlmock.Sqlmock) { 149 mockExpect(t, m, queryVersion, dataV2010Version) 150 mockExpect(t, m, queryStatsMySQLGlobal, dataV2010StatsMySQLGlobal) 151 mockExpect(t, m, queryStatsMySQLMemoryMetrics, dataV2010StatsMemoryMetrics) 152 mockExpect(t, m, queryStatsMySQLCommandsCounters, dataV2010StatsMySQLCommandsCounters) 153 mockExpectErr(m, queryStatsMySQLUsers) 154 }, 155 }, 156 } 157 158 for name, test := range tests { 159 t.Run(name, func(t *testing.T) { 160 db, mock, err := sqlmock.New( 161 sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual), 162 ) 163 require.NoError(t, err) 164 proxySQL := New() 165 proxySQL.db = db 166 defer func() { _ = db.Close() }() 167 168 require.True(t, proxySQL.Init()) 169 170 test.prepareMock(t, mock) 171 172 if test.wantFail { 173 assert.False(t, proxySQL.Check()) 174 } else { 175 assert.True(t, proxySQL.Check()) 176 } 177 assert.NoError(t, mock.ExpectationsWereMet()) 178 }) 179 } 180 } 181 182 func TestProxySQL_Collect(t *testing.T) { 183 type testCaseStep struct { 184 prepareMock func(t *testing.T, m sqlmock.Sqlmock) 185 check func(t *testing.T, my *ProxySQL) 186 } 187 tests := map[string][]testCaseStep{ 188 189 "success on all queries (v2.0.10)": { 190 { 191 prepareMock: func(t *testing.T, m sqlmock.Sqlmock) { 192 mockExpect(t, m, queryVersion, dataV2010Version) 193 mockExpect(t, m, queryStatsMySQLGlobal, dataV2010StatsMySQLGlobal) 194 mockExpect(t, m, queryStatsMySQLMemoryMetrics, dataV2010StatsMemoryMetrics) 195 mockExpect(t, m, queryStatsMySQLCommandsCounters, dataV2010StatsMySQLCommandsCounters) 196 mockExpect(t, m, queryStatsMySQLUsers, dataV2010StatsMySQLUsers) 197 mockExpect(t, m, queryStatsMySQLConnectionPool, dataV2010StatsMySQLConnectionPool) 198 }, 199 check: func(t *testing.T, my *ProxySQL) { 200 mx := my.Collect() 201 202 expected := map[string]int64{ 203 "Access_Denied_Max_Connections": 0, 204 "Access_Denied_Max_User_Connections": 0, 205 "Access_Denied_Wrong_Password": 2, 206 "Active_Transactions": 0, 207 "Auth_memory": 1044, 208 "Backend_query_time_nsec": 0, 209 "Client_Connections_aborted": 2, 210 "Client_Connections_connected": 3, 211 "Client_Connections_created": 5458991, 212 "Client_Connections_hostgroup_locked": 0, 213 "Client_Connections_non_idle": 3, 214 "Com_autocommit": 0, 215 "Com_autocommit_filtered": 0, 216 "Com_backend_change_user": 188694, 217 "Com_backend_init_db": 0, 218 "Com_backend_set_names": 1517893, 219 "Com_backend_stmt_close": 0, 220 "Com_backend_stmt_execute": 36303146, 221 "Com_backend_stmt_prepare": 16858208, 222 "Com_commit": 0, 223 "Com_commit_filtered": 0, 224 "Com_frontend_init_db": 2, 225 "Com_frontend_set_names": 0, 226 "Com_frontend_stmt_close": 32137933, 227 "Com_frontend_stmt_execute": 36314138, 228 "Com_frontend_stmt_prepare": 32185987, 229 "Com_frontend_use_db": 0, 230 "Com_rollback": 0, 231 "Com_rollback_filtered": 0, 232 "ConnPool_get_conn_failure": 212943, 233 "ConnPool_get_conn_immediate": 13361, 234 "ConnPool_get_conn_latency_awareness": 0, 235 "ConnPool_get_conn_success": 36319474, 236 "ConnPool_memory_bytes": 932248, 237 "GTID_consistent_queries": 0, 238 "GTID_session_collected": 0, 239 "Mirror_concurrency": 0, 240 "Mirror_queue_length": 0, 241 "MyHGM_myconnpoll_destroy": 15150, 242 "MyHGM_myconnpoll_get": 36519056, 243 "MyHGM_myconnpoll_get_ok": 36306113, 244 "MyHGM_myconnpoll_push": 37358734, 245 "MyHGM_myconnpoll_reset": 2, 246 "MySQL_Monitor_Workers": 10, 247 "MySQL_Monitor_Workers_Aux": 0, 248 "MySQL_Monitor_Workers_Started": 10, 249 "MySQL_Monitor_connect_check_ERR": 130, 250 "MySQL_Monitor_connect_check_OK": 3548306, 251 "MySQL_Monitor_ping_check_ERR": 108271, 252 "MySQL_Monitor_ping_check_OK": 21289849, 253 "MySQL_Monitor_read_only_check_ERR": 19610, 254 "MySQL_Monitor_read_only_check_OK": 106246409, 255 "MySQL_Monitor_replication_lag_check_ERR": 482, 256 "MySQL_Monitor_replication_lag_check_OK": 28702388, 257 "MySQL_Thread_Workers": 4, 258 "ProxySQL_Uptime": 26748286, 259 "Queries_backends_bytes_recv": 5896210168, 260 "Queries_backends_bytes_sent": 4329581500, 261 "Queries_frontends_bytes_recv": 7434816962, 262 "Queries_frontends_bytes_sent": 11643634097, 263 "Query_Cache_Entries": 0, 264 "Query_Cache_Memory_bytes": 0, 265 "Query_Cache_Purged": 0, 266 "Query_Cache_bytes_IN": 0, 267 "Query_Cache_bytes_OUT": 0, 268 "Query_Cache_count_GET": 0, 269 "Query_Cache_count_GET_OK": 0, 270 "Query_Cache_count_SET": 0, 271 "Query_Processor_time_nsec": 0, 272 "Questions": 100638067, 273 "SQLite3_memory_bytes": 6017144, 274 "Selects_for_update__autocommit0": 0, 275 "Server_Connections_aborted": 9979, 276 "Server_Connections_connected": 13, 277 "Server_Connections_created": 2122254, 278 "Server_Connections_delayed": 0, 279 "Servers_table_version": 37, 280 "Slow_queries": 405818, 281 "Stmt_Cached": 65, 282 "Stmt_Client_Active_Total": 18, 283 "Stmt_Client_Active_Unique": 18, 284 "Stmt_Max_Stmt_id": 66, 285 "Stmt_Server_Active_Total": 101, 286 "Stmt_Server_Active_Unique": 39, 287 "automatic_detected_sql_injection": 0, 288 "aws_aurora_replicas_skipped_during_query": 0, 289 "backend_10_back001-db-master_6001_Bytes_data_recv": 145193069937, 290 "backend_10_back001-db-master_6001_Bytes_data_sent": 9858463664, 291 "backend_10_back001-db-master_6001_ConnERR": 0, 292 "backend_10_back001-db-master_6001_ConnFree": 423, 293 "backend_10_back001-db-master_6001_ConnOK": 524, 294 "backend_10_back001-db-master_6001_ConnUsed": 69, 295 "backend_10_back001-db-master_6001_Latency_us": 17684, 296 "backend_10_back001-db-master_6001_Queries": 8970367, 297 "backend_10_back001-db-master_6001_status_OFFLINE_HARD": 0, 298 "backend_10_back001-db-master_6001_status_OFFLINE_SOFT": 0, 299 "backend_10_back001-db-master_6001_status_ONLINE": 0, 300 "backend_10_back001-db-master_6001_status_SHUNNED": 0, 301 "backend_11_back001-db-master_6002_Bytes_data_recv": 2903, 302 "backend_11_back001-db-master_6002_Bytes_data_sent": 187675, 303 "backend_11_back001-db-master_6002_ConnERR": 0, 304 "backend_11_back001-db-master_6002_ConnFree": 1, 305 "backend_11_back001-db-master_6002_ConnOK": 1, 306 "backend_11_back001-db-master_6002_ConnUsed": 0, 307 "backend_11_back001-db-master_6002_Latency_us": 17684, 308 "backend_11_back001-db-master_6002_Queries": 69, 309 "backend_11_back001-db-master_6002_status_OFFLINE_HARD": 0, 310 "backend_11_back001-db-master_6002_status_OFFLINE_SOFT": 0, 311 "backend_11_back001-db-master_6002_status_ONLINE": 0, 312 "backend_11_back001-db-master_6002_status_SHUNNED": 0, 313 "backend_11_back001-db-reader_6003_Bytes_data_recv": 4994101, 314 "backend_11_back001-db-reader_6003_Bytes_data_sent": 163690013, 315 "backend_11_back001-db-reader_6003_ConnERR": 0, 316 "backend_11_back001-db-reader_6003_ConnFree": 11, 317 "backend_11_back001-db-reader_6003_ConnOK": 11, 318 "backend_11_back001-db-reader_6003_ConnUsed": 0, 319 "backend_11_back001-db-reader_6003_Latency_us": 113, 320 "backend_11_back001-db-reader_6003_Queries": 63488, 321 "backend_11_back001-db-reader_6003_status_OFFLINE_HARD": 0, 322 "backend_11_back001-db-reader_6003_status_OFFLINE_SOFT": 0, 323 "backend_11_back001-db-reader_6003_status_ONLINE": 0, 324 "backend_11_back001-db-reader_6003_status_SHUNNED": 0, 325 "backend_20_back002-db-master_6004_Bytes_data_recv": 266034339, 326 "backend_20_back002-db-master_6004_Bytes_data_sent": 1086994186, 327 "backend_20_back002-db-master_6004_ConnERR": 2, 328 "backend_20_back002-db-master_6004_ConnFree": 188, 329 "backend_20_back002-db-master_6004_ConnOK": 197, 330 "backend_20_back002-db-master_6004_ConnUsed": 9, 331 "backend_20_back002-db-master_6004_Latency_us": 101981, 332 "backend_20_back002-db-master_6004_Queries": 849461, 333 "backend_20_back002-db-master_6004_status_OFFLINE_HARD": 0, 334 "backend_20_back002-db-master_6004_status_OFFLINE_SOFT": 0, 335 "backend_20_back002-db-master_6004_status_ONLINE": 0, 336 "backend_20_back002-db-master_6004_status_SHUNNED": 0, 337 "backend_21_back002-db-reader_6005_Bytes_data_recv": 984, 338 "backend_21_back002-db-reader_6005_Bytes_data_sent": 6992, 339 "backend_21_back002-db-reader_6005_ConnERR": 0, 340 "backend_21_back002-db-reader_6005_ConnFree": 1, 341 "backend_21_back002-db-reader_6005_ConnOK": 1, 342 "backend_21_back002-db-reader_6005_ConnUsed": 0, 343 "backend_21_back002-db-reader_6005_Latency_us": 230, 344 "backend_21_back002-db-reader_6005_Queries": 8, 345 "backend_21_back002-db-reader_6005_status_OFFLINE_HARD": 0, 346 "backend_21_back002-db-reader_6005_status_OFFLINE_SOFT": 0, 347 "backend_21_back002-db-reader_6005_status_ONLINE": 0, 348 "backend_21_back002-db-reader_6005_status_SHUNNED": 0, 349 "backend_31_back003-db-master_6006_Bytes_data_recv": 81438709, 350 "backend_31_back003-db-master_6006_Bytes_data_sent": 712803, 351 "backend_31_back003-db-master_6006_ConnERR": 0, 352 "backend_31_back003-db-master_6006_ConnFree": 3, 353 "backend_31_back003-db-master_6006_ConnOK": 3, 354 "backend_31_back003-db-master_6006_ConnUsed": 0, 355 "backend_31_back003-db-master_6006_Latency_us": 231, 356 "backend_31_back003-db-master_6006_Queries": 3276, 357 "backend_31_back003-db-master_6006_status_OFFLINE_HARD": 0, 358 "backend_31_back003-db-master_6006_status_OFFLINE_SOFT": 0, 359 "backend_31_back003-db-master_6006_status_ONLINE": 0, 360 "backend_31_back003-db-master_6006_status_SHUNNED": 0, 361 "backend_31_back003-db-reader_6007_Bytes_data_recv": 115810708275, 362 "backend_31_back003-db-reader_6007_Bytes_data_sent": 411900849, 363 "backend_31_back003-db-reader_6007_ConnERR": 0, 364 "backend_31_back003-db-reader_6007_ConnFree": 70, 365 "backend_31_back003-db-reader_6007_ConnOK": 71, 366 "backend_31_back003-db-reader_6007_ConnUsed": 1, 367 "backend_31_back003-db-reader_6007_Latency_us": 230, 368 "backend_31_back003-db-reader_6007_Queries": 2356904, 369 "backend_31_back003-db-reader_6007_status_OFFLINE_HARD": 0, 370 "backend_31_back003-db-reader_6007_status_OFFLINE_SOFT": 0, 371 "backend_31_back003-db-reader_6007_status_ONLINE": 0, 372 "backend_31_back003-db-reader_6007_status_SHUNNED": 0, 373 "backend_lagging_during_query": 8880, 374 "backend_offline_during_query": 8, 375 "generated_error_packets": 231, 376 "hostgroup_locked_queries": 0, 377 "hostgroup_locked_set_cmds": 0, 378 "jemalloc_active": 385101824, 379 "jemalloc_allocated": 379402432, 380 "jemalloc_mapped": 430993408, 381 "jemalloc_metadata": 17418872, 382 "jemalloc_resident": 403759104, 383 "jemalloc_retained": 260542464, 384 "max_connect_timeouts": 227, 385 "mysql_backend_buffers_bytes": 0, 386 "mysql_command_ALTER_TABLE_Total_Time_us": 0, 387 "mysql_command_ALTER_TABLE_Total_cnt": 0, 388 "mysql_command_ALTER_TABLE_cnt_100ms": 0, 389 "mysql_command_ALTER_TABLE_cnt_100us": 0, 390 "mysql_command_ALTER_TABLE_cnt_10ms": 0, 391 "mysql_command_ALTER_TABLE_cnt_10s": 0, 392 "mysql_command_ALTER_TABLE_cnt_1ms": 0, 393 "mysql_command_ALTER_TABLE_cnt_1s": 0, 394 "mysql_command_ALTER_TABLE_cnt_500ms": 0, 395 "mysql_command_ALTER_TABLE_cnt_500us": 0, 396 "mysql_command_ALTER_TABLE_cnt_50ms": 0, 397 "mysql_command_ALTER_TABLE_cnt_5ms": 0, 398 "mysql_command_ALTER_TABLE_cnt_5s": 0, 399 "mysql_command_ALTER_TABLE_cnt_INFs": 0, 400 "mysql_command_ALTER_VIEW_Total_Time_us": 0, 401 "mysql_command_ALTER_VIEW_Total_cnt": 0, 402 "mysql_command_ALTER_VIEW_cnt_100ms": 0, 403 "mysql_command_ALTER_VIEW_cnt_100us": 0, 404 "mysql_command_ALTER_VIEW_cnt_10ms": 0, 405 "mysql_command_ALTER_VIEW_cnt_10s": 0, 406 "mysql_command_ALTER_VIEW_cnt_1ms": 0, 407 "mysql_command_ALTER_VIEW_cnt_1s": 0, 408 "mysql_command_ALTER_VIEW_cnt_500ms": 0, 409 "mysql_command_ALTER_VIEW_cnt_500us": 0, 410 "mysql_command_ALTER_VIEW_cnt_50ms": 0, 411 "mysql_command_ALTER_VIEW_cnt_5ms": 0, 412 "mysql_command_ALTER_VIEW_cnt_5s": 0, 413 "mysql_command_ALTER_VIEW_cnt_INFs": 0, 414 "mysql_command_ANALYZE_TABLE_Total_Time_us": 0, 415 "mysql_command_ANALYZE_TABLE_Total_cnt": 0, 416 "mysql_command_ANALYZE_TABLE_cnt_100ms": 0, 417 "mysql_command_ANALYZE_TABLE_cnt_100us": 0, 418 "mysql_command_ANALYZE_TABLE_cnt_10ms": 0, 419 "mysql_command_ANALYZE_TABLE_cnt_10s": 0, 420 "mysql_command_ANALYZE_TABLE_cnt_1ms": 0, 421 "mysql_command_ANALYZE_TABLE_cnt_1s": 0, 422 "mysql_command_ANALYZE_TABLE_cnt_500ms": 0, 423 "mysql_command_ANALYZE_TABLE_cnt_500us": 0, 424 "mysql_command_ANALYZE_TABLE_cnt_50ms": 0, 425 "mysql_command_ANALYZE_TABLE_cnt_5ms": 0, 426 "mysql_command_ANALYZE_TABLE_cnt_5s": 0, 427 "mysql_command_ANALYZE_TABLE_cnt_INFs": 0, 428 "mysql_command_BEGIN_Total_Time_us": 0, 429 "mysql_command_BEGIN_Total_cnt": 0, 430 "mysql_command_BEGIN_cnt_100ms": 0, 431 "mysql_command_BEGIN_cnt_100us": 0, 432 "mysql_command_BEGIN_cnt_10ms": 0, 433 "mysql_command_BEGIN_cnt_10s": 0, 434 "mysql_command_BEGIN_cnt_1ms": 0, 435 "mysql_command_BEGIN_cnt_1s": 0, 436 "mysql_command_BEGIN_cnt_500ms": 0, 437 "mysql_command_BEGIN_cnt_500us": 0, 438 "mysql_command_BEGIN_cnt_50ms": 0, 439 "mysql_command_BEGIN_cnt_5ms": 0, 440 "mysql_command_BEGIN_cnt_5s": 0, 441 "mysql_command_BEGIN_cnt_INFs": 0, 442 "mysql_command_CALL_Total_Time_us": 0, 443 "mysql_command_CALL_Total_cnt": 0, 444 "mysql_command_CALL_cnt_100ms": 0, 445 "mysql_command_CALL_cnt_100us": 0, 446 "mysql_command_CALL_cnt_10ms": 0, 447 "mysql_command_CALL_cnt_10s": 0, 448 "mysql_command_CALL_cnt_1ms": 0, 449 "mysql_command_CALL_cnt_1s": 0, 450 "mysql_command_CALL_cnt_500ms": 0, 451 "mysql_command_CALL_cnt_500us": 0, 452 "mysql_command_CALL_cnt_50ms": 0, 453 "mysql_command_CALL_cnt_5ms": 0, 454 "mysql_command_CALL_cnt_5s": 0, 455 "mysql_command_CALL_cnt_INFs": 0, 456 "mysql_command_CHANGE_MASTER_Total_Time_us": 0, 457 "mysql_command_CHANGE_MASTER_Total_cnt": 0, 458 "mysql_command_CHANGE_MASTER_cnt_100ms": 0, 459 "mysql_command_CHANGE_MASTER_cnt_100us": 0, 460 "mysql_command_CHANGE_MASTER_cnt_10ms": 0, 461 "mysql_command_CHANGE_MASTER_cnt_10s": 0, 462 "mysql_command_CHANGE_MASTER_cnt_1ms": 0, 463 "mysql_command_CHANGE_MASTER_cnt_1s": 0, 464 "mysql_command_CHANGE_MASTER_cnt_500ms": 0, 465 "mysql_command_CHANGE_MASTER_cnt_500us": 0, 466 "mysql_command_CHANGE_MASTER_cnt_50ms": 0, 467 "mysql_command_CHANGE_MASTER_cnt_5ms": 0, 468 "mysql_command_CHANGE_MASTER_cnt_5s": 0, 469 "mysql_command_CHANGE_MASTER_cnt_INFs": 0, 470 "mysql_command_COMMIT_Total_Time_us": 0, 471 "mysql_command_COMMIT_Total_cnt": 0, 472 "mysql_command_COMMIT_cnt_100ms": 0, 473 "mysql_command_COMMIT_cnt_100us": 0, 474 "mysql_command_COMMIT_cnt_10ms": 0, 475 "mysql_command_COMMIT_cnt_10s": 0, 476 "mysql_command_COMMIT_cnt_1ms": 0, 477 "mysql_command_COMMIT_cnt_1s": 0, 478 "mysql_command_COMMIT_cnt_500ms": 0, 479 "mysql_command_COMMIT_cnt_500us": 0, 480 "mysql_command_COMMIT_cnt_50ms": 0, 481 "mysql_command_COMMIT_cnt_5ms": 0, 482 "mysql_command_COMMIT_cnt_5s": 0, 483 "mysql_command_COMMIT_cnt_INFs": 0, 484 "mysql_command_CREATE_DATABASE_Total_Time_us": 0, 485 "mysql_command_CREATE_DATABASE_Total_cnt": 0, 486 "mysql_command_CREATE_DATABASE_cnt_100ms": 0, 487 "mysql_command_CREATE_DATABASE_cnt_100us": 0, 488 "mysql_command_CREATE_DATABASE_cnt_10ms": 0, 489 "mysql_command_CREATE_DATABASE_cnt_10s": 0, 490 "mysql_command_CREATE_DATABASE_cnt_1ms": 0, 491 "mysql_command_CREATE_DATABASE_cnt_1s": 0, 492 "mysql_command_CREATE_DATABASE_cnt_500ms": 0, 493 "mysql_command_CREATE_DATABASE_cnt_500us": 0, 494 "mysql_command_CREATE_DATABASE_cnt_50ms": 0, 495 "mysql_command_CREATE_DATABASE_cnt_5ms": 0, 496 "mysql_command_CREATE_DATABASE_cnt_5s": 0, 497 "mysql_command_CREATE_DATABASE_cnt_INFs": 0, 498 "mysql_command_CREATE_INDEX_Total_Time_us": 0, 499 "mysql_command_CREATE_INDEX_Total_cnt": 0, 500 "mysql_command_CREATE_INDEX_cnt_100ms": 0, 501 "mysql_command_CREATE_INDEX_cnt_100us": 0, 502 "mysql_command_CREATE_INDEX_cnt_10ms": 0, 503 "mysql_command_CREATE_INDEX_cnt_10s": 0, 504 "mysql_command_CREATE_INDEX_cnt_1ms": 0, 505 "mysql_command_CREATE_INDEX_cnt_1s": 0, 506 "mysql_command_CREATE_INDEX_cnt_500ms": 0, 507 "mysql_command_CREATE_INDEX_cnt_500us": 0, 508 "mysql_command_CREATE_INDEX_cnt_50ms": 0, 509 "mysql_command_CREATE_INDEX_cnt_5ms": 0, 510 "mysql_command_CREATE_INDEX_cnt_5s": 0, 511 "mysql_command_CREATE_INDEX_cnt_INFs": 0, 512 "mysql_command_CREATE_TABLE_Total_Time_us": 0, 513 "mysql_command_CREATE_TABLE_Total_cnt": 0, 514 "mysql_command_CREATE_TABLE_cnt_100ms": 0, 515 "mysql_command_CREATE_TABLE_cnt_100us": 0, 516 "mysql_command_CREATE_TABLE_cnt_10ms": 0, 517 "mysql_command_CREATE_TABLE_cnt_10s": 0, 518 "mysql_command_CREATE_TABLE_cnt_1ms": 0, 519 "mysql_command_CREATE_TABLE_cnt_1s": 0, 520 "mysql_command_CREATE_TABLE_cnt_500ms": 0, 521 "mysql_command_CREATE_TABLE_cnt_500us": 0, 522 "mysql_command_CREATE_TABLE_cnt_50ms": 0, 523 "mysql_command_CREATE_TABLE_cnt_5ms": 0, 524 "mysql_command_CREATE_TABLE_cnt_5s": 0, 525 "mysql_command_CREATE_TABLE_cnt_INFs": 0, 526 "mysql_command_CREATE_TEMPORARY_Total_Time_us": 0, 527 "mysql_command_CREATE_TEMPORARY_Total_cnt": 0, 528 "mysql_command_CREATE_TEMPORARY_cnt_100ms": 0, 529 "mysql_command_CREATE_TEMPORARY_cnt_100us": 0, 530 "mysql_command_CREATE_TEMPORARY_cnt_10ms": 0, 531 "mysql_command_CREATE_TEMPORARY_cnt_10s": 0, 532 "mysql_command_CREATE_TEMPORARY_cnt_1ms": 0, 533 "mysql_command_CREATE_TEMPORARY_cnt_1s": 0, 534 "mysql_command_CREATE_TEMPORARY_cnt_500ms": 0, 535 "mysql_command_CREATE_TEMPORARY_cnt_500us": 0, 536 "mysql_command_CREATE_TEMPORARY_cnt_50ms": 0, 537 "mysql_command_CREATE_TEMPORARY_cnt_5ms": 0, 538 "mysql_command_CREATE_TEMPORARY_cnt_5s": 0, 539 "mysql_command_CREATE_TEMPORARY_cnt_INFs": 0, 540 "mysql_command_CREATE_TRIGGER_Total_Time_us": 0, 541 "mysql_command_CREATE_TRIGGER_Total_cnt": 0, 542 "mysql_command_CREATE_TRIGGER_cnt_100ms": 0, 543 "mysql_command_CREATE_TRIGGER_cnt_100us": 0, 544 "mysql_command_CREATE_TRIGGER_cnt_10ms": 0, 545 "mysql_command_CREATE_TRIGGER_cnt_10s": 0, 546 "mysql_command_CREATE_TRIGGER_cnt_1ms": 0, 547 "mysql_command_CREATE_TRIGGER_cnt_1s": 0, 548 "mysql_command_CREATE_TRIGGER_cnt_500ms": 0, 549 "mysql_command_CREATE_TRIGGER_cnt_500us": 0, 550 "mysql_command_CREATE_TRIGGER_cnt_50ms": 0, 551 "mysql_command_CREATE_TRIGGER_cnt_5ms": 0, 552 "mysql_command_CREATE_TRIGGER_cnt_5s": 0, 553 "mysql_command_CREATE_TRIGGER_cnt_INFs": 0, 554 "mysql_command_CREATE_USER_Total_Time_us": 0, 555 "mysql_command_CREATE_USER_Total_cnt": 0, 556 "mysql_command_CREATE_USER_cnt_100ms": 0, 557 "mysql_command_CREATE_USER_cnt_100us": 0, 558 "mysql_command_CREATE_USER_cnt_10ms": 0, 559 "mysql_command_CREATE_USER_cnt_10s": 0, 560 "mysql_command_CREATE_USER_cnt_1ms": 0, 561 "mysql_command_CREATE_USER_cnt_1s": 0, 562 "mysql_command_CREATE_USER_cnt_500ms": 0, 563 "mysql_command_CREATE_USER_cnt_500us": 0, 564 "mysql_command_CREATE_USER_cnt_50ms": 0, 565 "mysql_command_CREATE_USER_cnt_5ms": 0, 566 "mysql_command_CREATE_USER_cnt_5s": 0, 567 "mysql_command_CREATE_USER_cnt_INFs": 0, 568 "mysql_command_CREATE_VIEW_Total_Time_us": 0, 569 "mysql_command_CREATE_VIEW_Total_cnt": 0, 570 "mysql_command_CREATE_VIEW_cnt_100ms": 0, 571 "mysql_command_CREATE_VIEW_cnt_100us": 0, 572 "mysql_command_CREATE_VIEW_cnt_10ms": 0, 573 "mysql_command_CREATE_VIEW_cnt_10s": 0, 574 "mysql_command_CREATE_VIEW_cnt_1ms": 0, 575 "mysql_command_CREATE_VIEW_cnt_1s": 0, 576 "mysql_command_CREATE_VIEW_cnt_500ms": 0, 577 "mysql_command_CREATE_VIEW_cnt_500us": 0, 578 "mysql_command_CREATE_VIEW_cnt_50ms": 0, 579 "mysql_command_CREATE_VIEW_cnt_5ms": 0, 580 "mysql_command_CREATE_VIEW_cnt_5s": 0, 581 "mysql_command_CREATE_VIEW_cnt_INFs": 0, 582 "mysql_command_DEALLOCATE_Total_Time_us": 0, 583 "mysql_command_DEALLOCATE_Total_cnt": 0, 584 "mysql_command_DEALLOCATE_cnt_100ms": 0, 585 "mysql_command_DEALLOCATE_cnt_100us": 0, 586 "mysql_command_DEALLOCATE_cnt_10ms": 0, 587 "mysql_command_DEALLOCATE_cnt_10s": 0, 588 "mysql_command_DEALLOCATE_cnt_1ms": 0, 589 "mysql_command_DEALLOCATE_cnt_1s": 0, 590 "mysql_command_DEALLOCATE_cnt_500ms": 0, 591 "mysql_command_DEALLOCATE_cnt_500us": 0, 592 "mysql_command_DEALLOCATE_cnt_50ms": 0, 593 "mysql_command_DEALLOCATE_cnt_5ms": 0, 594 "mysql_command_DEALLOCATE_cnt_5s": 0, 595 "mysql_command_DEALLOCATE_cnt_INFs": 0, 596 "mysql_command_DELETE_Total_Time_us": 0, 597 "mysql_command_DELETE_Total_cnt": 0, 598 "mysql_command_DELETE_cnt_100ms": 0, 599 "mysql_command_DELETE_cnt_100us": 0, 600 "mysql_command_DELETE_cnt_10ms": 0, 601 "mysql_command_DELETE_cnt_10s": 0, 602 "mysql_command_DELETE_cnt_1ms": 0, 603 "mysql_command_DELETE_cnt_1s": 0, 604 "mysql_command_DELETE_cnt_500ms": 0, 605 "mysql_command_DELETE_cnt_500us": 0, 606 "mysql_command_DELETE_cnt_50ms": 0, 607 "mysql_command_DELETE_cnt_5ms": 0, 608 "mysql_command_DELETE_cnt_5s": 0, 609 "mysql_command_DELETE_cnt_INFs": 0, 610 "mysql_command_DESCRIBE_Total_Time_us": 0, 611 "mysql_command_DESCRIBE_Total_cnt": 0, 612 "mysql_command_DESCRIBE_cnt_100ms": 0, 613 "mysql_command_DESCRIBE_cnt_100us": 0, 614 "mysql_command_DESCRIBE_cnt_10ms": 0, 615 "mysql_command_DESCRIBE_cnt_10s": 0, 616 "mysql_command_DESCRIBE_cnt_1ms": 0, 617 "mysql_command_DESCRIBE_cnt_1s": 0, 618 "mysql_command_DESCRIBE_cnt_500ms": 0, 619 "mysql_command_DESCRIBE_cnt_500us": 0, 620 "mysql_command_DESCRIBE_cnt_50ms": 0, 621 "mysql_command_DESCRIBE_cnt_5ms": 0, 622 "mysql_command_DESCRIBE_cnt_5s": 0, 623 "mysql_command_DESCRIBE_cnt_INFs": 0, 624 "mysql_command_DROP_DATABASE_Total_Time_us": 0, 625 "mysql_command_DROP_DATABASE_Total_cnt": 0, 626 "mysql_command_DROP_DATABASE_cnt_100ms": 0, 627 "mysql_command_DROP_DATABASE_cnt_100us": 0, 628 "mysql_command_DROP_DATABASE_cnt_10ms": 0, 629 "mysql_command_DROP_DATABASE_cnt_10s": 0, 630 "mysql_command_DROP_DATABASE_cnt_1ms": 0, 631 "mysql_command_DROP_DATABASE_cnt_1s": 0, 632 "mysql_command_DROP_DATABASE_cnt_500ms": 0, 633 "mysql_command_DROP_DATABASE_cnt_500us": 0, 634 "mysql_command_DROP_DATABASE_cnt_50ms": 0, 635 "mysql_command_DROP_DATABASE_cnt_5ms": 0, 636 "mysql_command_DROP_DATABASE_cnt_5s": 0, 637 "mysql_command_DROP_DATABASE_cnt_INFs": 0, 638 "mysql_command_DROP_INDEX_Total_Time_us": 0, 639 "mysql_command_DROP_INDEX_Total_cnt": 0, 640 "mysql_command_DROP_INDEX_cnt_100ms": 0, 641 "mysql_command_DROP_INDEX_cnt_100us": 0, 642 "mysql_command_DROP_INDEX_cnt_10ms": 0, 643 "mysql_command_DROP_INDEX_cnt_10s": 0, 644 "mysql_command_DROP_INDEX_cnt_1ms": 0, 645 "mysql_command_DROP_INDEX_cnt_1s": 0, 646 "mysql_command_DROP_INDEX_cnt_500ms": 0, 647 "mysql_command_DROP_INDEX_cnt_500us": 0, 648 "mysql_command_DROP_INDEX_cnt_50ms": 0, 649 "mysql_command_DROP_INDEX_cnt_5ms": 0, 650 "mysql_command_DROP_INDEX_cnt_5s": 0, 651 "mysql_command_DROP_INDEX_cnt_INFs": 0, 652 "mysql_command_DROP_TABLE_Total_Time_us": 0, 653 "mysql_command_DROP_TABLE_Total_cnt": 0, 654 "mysql_command_DROP_TABLE_cnt_100ms": 0, 655 "mysql_command_DROP_TABLE_cnt_100us": 0, 656 "mysql_command_DROP_TABLE_cnt_10ms": 0, 657 "mysql_command_DROP_TABLE_cnt_10s": 0, 658 "mysql_command_DROP_TABLE_cnt_1ms": 0, 659 "mysql_command_DROP_TABLE_cnt_1s": 0, 660 "mysql_command_DROP_TABLE_cnt_500ms": 0, 661 "mysql_command_DROP_TABLE_cnt_500us": 0, 662 "mysql_command_DROP_TABLE_cnt_50ms": 0, 663 "mysql_command_DROP_TABLE_cnt_5ms": 0, 664 "mysql_command_DROP_TABLE_cnt_5s": 0, 665 "mysql_command_DROP_TABLE_cnt_INFs": 0, 666 "mysql_command_DROP_TRIGGER_Total_Time_us": 0, 667 "mysql_command_DROP_TRIGGER_Total_cnt": 0, 668 "mysql_command_DROP_TRIGGER_cnt_100ms": 0, 669 "mysql_command_DROP_TRIGGER_cnt_100us": 0, 670 "mysql_command_DROP_TRIGGER_cnt_10ms": 0, 671 "mysql_command_DROP_TRIGGER_cnt_10s": 0, 672 "mysql_command_DROP_TRIGGER_cnt_1ms": 0, 673 "mysql_command_DROP_TRIGGER_cnt_1s": 0, 674 "mysql_command_DROP_TRIGGER_cnt_500ms": 0, 675 "mysql_command_DROP_TRIGGER_cnt_500us": 0, 676 "mysql_command_DROP_TRIGGER_cnt_50ms": 0, 677 "mysql_command_DROP_TRIGGER_cnt_5ms": 0, 678 "mysql_command_DROP_TRIGGER_cnt_5s": 0, 679 "mysql_command_DROP_TRIGGER_cnt_INFs": 0, 680 "mysql_command_DROP_USER_Total_Time_us": 0, 681 "mysql_command_DROP_USER_Total_cnt": 0, 682 "mysql_command_DROP_USER_cnt_100ms": 0, 683 "mysql_command_DROP_USER_cnt_100us": 0, 684 "mysql_command_DROP_USER_cnt_10ms": 0, 685 "mysql_command_DROP_USER_cnt_10s": 0, 686 "mysql_command_DROP_USER_cnt_1ms": 0, 687 "mysql_command_DROP_USER_cnt_1s": 0, 688 "mysql_command_DROP_USER_cnt_500ms": 0, 689 "mysql_command_DROP_USER_cnt_500us": 0, 690 "mysql_command_DROP_USER_cnt_50ms": 0, 691 "mysql_command_DROP_USER_cnt_5ms": 0, 692 "mysql_command_DROP_USER_cnt_5s": 0, 693 "mysql_command_DROP_USER_cnt_INFs": 0, 694 "mysql_command_DROP_VIEW_Total_Time_us": 0, 695 "mysql_command_DROP_VIEW_Total_cnt": 0, 696 "mysql_command_DROP_VIEW_cnt_100ms": 0, 697 "mysql_command_DROP_VIEW_cnt_100us": 0, 698 "mysql_command_DROP_VIEW_cnt_10ms": 0, 699 "mysql_command_DROP_VIEW_cnt_10s": 0, 700 "mysql_command_DROP_VIEW_cnt_1ms": 0, 701 "mysql_command_DROP_VIEW_cnt_1s": 0, 702 "mysql_command_DROP_VIEW_cnt_500ms": 0, 703 "mysql_command_DROP_VIEW_cnt_500us": 0, 704 "mysql_command_DROP_VIEW_cnt_50ms": 0, 705 "mysql_command_DROP_VIEW_cnt_5ms": 0, 706 "mysql_command_DROP_VIEW_cnt_5s": 0, 707 "mysql_command_DROP_VIEW_cnt_INFs": 0, 708 "mysql_command_EXECUTE_Total_Time_us": 0, 709 "mysql_command_EXECUTE_Total_cnt": 0, 710 "mysql_command_EXECUTE_cnt_100ms": 0, 711 "mysql_command_EXECUTE_cnt_100us": 0, 712 "mysql_command_EXECUTE_cnt_10ms": 0, 713 "mysql_command_EXECUTE_cnt_10s": 0, 714 "mysql_command_EXECUTE_cnt_1ms": 0, 715 "mysql_command_EXECUTE_cnt_1s": 0, 716 "mysql_command_EXECUTE_cnt_500ms": 0, 717 "mysql_command_EXECUTE_cnt_500us": 0, 718 "mysql_command_EXECUTE_cnt_50ms": 0, 719 "mysql_command_EXECUTE_cnt_5ms": 0, 720 "mysql_command_EXECUTE_cnt_5s": 0, 721 "mysql_command_EXECUTE_cnt_INFs": 0, 722 "mysql_command_EXPLAIN_Total_Time_us": 0, 723 "mysql_command_EXPLAIN_Total_cnt": 0, 724 "mysql_command_EXPLAIN_cnt_100ms": 0, 725 "mysql_command_EXPLAIN_cnt_100us": 0, 726 "mysql_command_EXPLAIN_cnt_10ms": 0, 727 "mysql_command_EXPLAIN_cnt_10s": 0, 728 "mysql_command_EXPLAIN_cnt_1ms": 0, 729 "mysql_command_EXPLAIN_cnt_1s": 0, 730 "mysql_command_EXPLAIN_cnt_500ms": 0, 731 "mysql_command_EXPLAIN_cnt_500us": 0, 732 "mysql_command_EXPLAIN_cnt_50ms": 0, 733 "mysql_command_EXPLAIN_cnt_5ms": 0, 734 "mysql_command_EXPLAIN_cnt_5s": 0, 735 "mysql_command_EXPLAIN_cnt_INFs": 0, 736 "mysql_command_FLUSH_Total_Time_us": 0, 737 "mysql_command_FLUSH_Total_cnt": 0, 738 "mysql_command_FLUSH_cnt_100ms": 0, 739 "mysql_command_FLUSH_cnt_100us": 0, 740 "mysql_command_FLUSH_cnt_10ms": 0, 741 "mysql_command_FLUSH_cnt_10s": 0, 742 "mysql_command_FLUSH_cnt_1ms": 0, 743 "mysql_command_FLUSH_cnt_1s": 0, 744 "mysql_command_FLUSH_cnt_500ms": 0, 745 "mysql_command_FLUSH_cnt_500us": 0, 746 "mysql_command_FLUSH_cnt_50ms": 0, 747 "mysql_command_FLUSH_cnt_5ms": 0, 748 "mysql_command_FLUSH_cnt_5s": 0, 749 "mysql_command_FLUSH_cnt_INFs": 0, 750 "mysql_command_GRANT_Total_Time_us": 0, 751 "mysql_command_GRANT_Total_cnt": 0, 752 "mysql_command_GRANT_cnt_100ms": 0, 753 "mysql_command_GRANT_cnt_100us": 0, 754 "mysql_command_GRANT_cnt_10ms": 0, 755 "mysql_command_GRANT_cnt_10s": 0, 756 "mysql_command_GRANT_cnt_1ms": 0, 757 "mysql_command_GRANT_cnt_1s": 0, 758 "mysql_command_GRANT_cnt_500ms": 0, 759 "mysql_command_GRANT_cnt_500us": 0, 760 "mysql_command_GRANT_cnt_50ms": 0, 761 "mysql_command_GRANT_cnt_5ms": 0, 762 "mysql_command_GRANT_cnt_5s": 0, 763 "mysql_command_GRANT_cnt_INFs": 0, 764 "mysql_command_INSERT_Total_Time_us": 0, 765 "mysql_command_INSERT_Total_cnt": 0, 766 "mysql_command_INSERT_cnt_100ms": 0, 767 "mysql_command_INSERT_cnt_100us": 0, 768 "mysql_command_INSERT_cnt_10ms": 0, 769 "mysql_command_INSERT_cnt_10s": 0, 770 "mysql_command_INSERT_cnt_1ms": 0, 771 "mysql_command_INSERT_cnt_1s": 0, 772 "mysql_command_INSERT_cnt_500ms": 0, 773 "mysql_command_INSERT_cnt_500us": 0, 774 "mysql_command_INSERT_cnt_50ms": 0, 775 "mysql_command_INSERT_cnt_5ms": 0, 776 "mysql_command_INSERT_cnt_5s": 0, 777 "mysql_command_INSERT_cnt_INFs": 0, 778 "mysql_command_KILL_Total_Time_us": 0, 779 "mysql_command_KILL_Total_cnt": 0, 780 "mysql_command_KILL_cnt_100ms": 0, 781 "mysql_command_KILL_cnt_100us": 0, 782 "mysql_command_KILL_cnt_10ms": 0, 783 "mysql_command_KILL_cnt_10s": 0, 784 "mysql_command_KILL_cnt_1ms": 0, 785 "mysql_command_KILL_cnt_1s": 0, 786 "mysql_command_KILL_cnt_500ms": 0, 787 "mysql_command_KILL_cnt_500us": 0, 788 "mysql_command_KILL_cnt_50ms": 0, 789 "mysql_command_KILL_cnt_5ms": 0, 790 "mysql_command_KILL_cnt_5s": 0, 791 "mysql_command_KILL_cnt_INFs": 0, 792 "mysql_command_LOAD_Total_Time_us": 0, 793 "mysql_command_LOAD_Total_cnt": 0, 794 "mysql_command_LOAD_cnt_100ms": 0, 795 "mysql_command_LOAD_cnt_100us": 0, 796 "mysql_command_LOAD_cnt_10ms": 0, 797 "mysql_command_LOAD_cnt_10s": 0, 798 "mysql_command_LOAD_cnt_1ms": 0, 799 "mysql_command_LOAD_cnt_1s": 0, 800 "mysql_command_LOAD_cnt_500ms": 0, 801 "mysql_command_LOAD_cnt_500us": 0, 802 "mysql_command_LOAD_cnt_50ms": 0, 803 "mysql_command_LOAD_cnt_5ms": 0, 804 "mysql_command_LOAD_cnt_5s": 0, 805 "mysql_command_LOAD_cnt_INFs": 0, 806 "mysql_command_LOCK_TABLE_Total_Time_us": 0, 807 "mysql_command_LOCK_TABLE_Total_cnt": 0, 808 "mysql_command_LOCK_TABLE_cnt_100ms": 0, 809 "mysql_command_LOCK_TABLE_cnt_100us": 0, 810 "mysql_command_LOCK_TABLE_cnt_10ms": 0, 811 "mysql_command_LOCK_TABLE_cnt_10s": 0, 812 "mysql_command_LOCK_TABLE_cnt_1ms": 0, 813 "mysql_command_LOCK_TABLE_cnt_1s": 0, 814 "mysql_command_LOCK_TABLE_cnt_500ms": 0, 815 "mysql_command_LOCK_TABLE_cnt_500us": 0, 816 "mysql_command_LOCK_TABLE_cnt_50ms": 0, 817 "mysql_command_LOCK_TABLE_cnt_5ms": 0, 818 "mysql_command_LOCK_TABLE_cnt_5s": 0, 819 "mysql_command_LOCK_TABLE_cnt_INFs": 0, 820 "mysql_command_OPTIMIZE_Total_Time_us": 0, 821 "mysql_command_OPTIMIZE_Total_cnt": 0, 822 "mysql_command_OPTIMIZE_cnt_100ms": 0, 823 "mysql_command_OPTIMIZE_cnt_100us": 0, 824 "mysql_command_OPTIMIZE_cnt_10ms": 0, 825 "mysql_command_OPTIMIZE_cnt_10s": 0, 826 "mysql_command_OPTIMIZE_cnt_1ms": 0, 827 "mysql_command_OPTIMIZE_cnt_1s": 0, 828 "mysql_command_OPTIMIZE_cnt_500ms": 0, 829 "mysql_command_OPTIMIZE_cnt_500us": 0, 830 "mysql_command_OPTIMIZE_cnt_50ms": 0, 831 "mysql_command_OPTIMIZE_cnt_5ms": 0, 832 "mysql_command_OPTIMIZE_cnt_5s": 0, 833 "mysql_command_OPTIMIZE_cnt_INFs": 0, 834 "mysql_command_PREPARE_Total_Time_us": 0, 835 "mysql_command_PREPARE_Total_cnt": 0, 836 "mysql_command_PREPARE_cnt_100ms": 0, 837 "mysql_command_PREPARE_cnt_100us": 0, 838 "mysql_command_PREPARE_cnt_10ms": 0, 839 "mysql_command_PREPARE_cnt_10s": 0, 840 "mysql_command_PREPARE_cnt_1ms": 0, 841 "mysql_command_PREPARE_cnt_1s": 0, 842 "mysql_command_PREPARE_cnt_500ms": 0, 843 "mysql_command_PREPARE_cnt_500us": 0, 844 "mysql_command_PREPARE_cnt_50ms": 0, 845 "mysql_command_PREPARE_cnt_5ms": 0, 846 "mysql_command_PREPARE_cnt_5s": 0, 847 "mysql_command_PREPARE_cnt_INFs": 0, 848 "mysql_command_PURGE_Total_Time_us": 0, 849 "mysql_command_PURGE_Total_cnt": 0, 850 "mysql_command_PURGE_cnt_100ms": 0, 851 "mysql_command_PURGE_cnt_100us": 0, 852 "mysql_command_PURGE_cnt_10ms": 0, 853 "mysql_command_PURGE_cnt_10s": 0, 854 "mysql_command_PURGE_cnt_1ms": 0, 855 "mysql_command_PURGE_cnt_1s": 0, 856 "mysql_command_PURGE_cnt_500ms": 0, 857 "mysql_command_PURGE_cnt_500us": 0, 858 "mysql_command_PURGE_cnt_50ms": 0, 859 "mysql_command_PURGE_cnt_5ms": 0, 860 "mysql_command_PURGE_cnt_5s": 0, 861 "mysql_command_PURGE_cnt_INFs": 0, 862 "mysql_command_RENAME_TABLE_Total_Time_us": 0, 863 "mysql_command_RENAME_TABLE_Total_cnt": 0, 864 "mysql_command_RENAME_TABLE_cnt_100ms": 0, 865 "mysql_command_RENAME_TABLE_cnt_100us": 0, 866 "mysql_command_RENAME_TABLE_cnt_10ms": 0, 867 "mysql_command_RENAME_TABLE_cnt_10s": 0, 868 "mysql_command_RENAME_TABLE_cnt_1ms": 0, 869 "mysql_command_RENAME_TABLE_cnt_1s": 0, 870 "mysql_command_RENAME_TABLE_cnt_500ms": 0, 871 "mysql_command_RENAME_TABLE_cnt_500us": 0, 872 "mysql_command_RENAME_TABLE_cnt_50ms": 0, 873 "mysql_command_RENAME_TABLE_cnt_5ms": 0, 874 "mysql_command_RENAME_TABLE_cnt_5s": 0, 875 "mysql_command_RENAME_TABLE_cnt_INFs": 0, 876 "mysql_command_REPLACE_Total_Time_us": 0, 877 "mysql_command_REPLACE_Total_cnt": 0, 878 "mysql_command_REPLACE_cnt_100ms": 0, 879 "mysql_command_REPLACE_cnt_100us": 0, 880 "mysql_command_REPLACE_cnt_10ms": 0, 881 "mysql_command_REPLACE_cnt_10s": 0, 882 "mysql_command_REPLACE_cnt_1ms": 0, 883 "mysql_command_REPLACE_cnt_1s": 0, 884 "mysql_command_REPLACE_cnt_500ms": 0, 885 "mysql_command_REPLACE_cnt_500us": 0, 886 "mysql_command_REPLACE_cnt_50ms": 0, 887 "mysql_command_REPLACE_cnt_5ms": 0, 888 "mysql_command_REPLACE_cnt_5s": 0, 889 "mysql_command_REPLACE_cnt_INFs": 0, 890 "mysql_command_RESET_MASTER_Total_Time_us": 0, 891 "mysql_command_RESET_MASTER_Total_cnt": 0, 892 "mysql_command_RESET_MASTER_cnt_100ms": 0, 893 "mysql_command_RESET_MASTER_cnt_100us": 0, 894 "mysql_command_RESET_MASTER_cnt_10ms": 0, 895 "mysql_command_RESET_MASTER_cnt_10s": 0, 896 "mysql_command_RESET_MASTER_cnt_1ms": 0, 897 "mysql_command_RESET_MASTER_cnt_1s": 0, 898 "mysql_command_RESET_MASTER_cnt_500ms": 0, 899 "mysql_command_RESET_MASTER_cnt_500us": 0, 900 "mysql_command_RESET_MASTER_cnt_50ms": 0, 901 "mysql_command_RESET_MASTER_cnt_5ms": 0, 902 "mysql_command_RESET_MASTER_cnt_5s": 0, 903 "mysql_command_RESET_MASTER_cnt_INFs": 0, 904 "mysql_command_RESET_SLAVE_Total_Time_us": 0, 905 "mysql_command_RESET_SLAVE_Total_cnt": 0, 906 "mysql_command_RESET_SLAVE_cnt_100ms": 0, 907 "mysql_command_RESET_SLAVE_cnt_100us": 0, 908 "mysql_command_RESET_SLAVE_cnt_10ms": 0, 909 "mysql_command_RESET_SLAVE_cnt_10s": 0, 910 "mysql_command_RESET_SLAVE_cnt_1ms": 0, 911 "mysql_command_RESET_SLAVE_cnt_1s": 0, 912 "mysql_command_RESET_SLAVE_cnt_500ms": 0, 913 "mysql_command_RESET_SLAVE_cnt_500us": 0, 914 "mysql_command_RESET_SLAVE_cnt_50ms": 0, 915 "mysql_command_RESET_SLAVE_cnt_5ms": 0, 916 "mysql_command_RESET_SLAVE_cnt_5s": 0, 917 "mysql_command_RESET_SLAVE_cnt_INFs": 0, 918 "mysql_command_REVOKE_Total_Time_us": 0, 919 "mysql_command_REVOKE_Total_cnt": 0, 920 "mysql_command_REVOKE_cnt_100ms": 0, 921 "mysql_command_REVOKE_cnt_100us": 0, 922 "mysql_command_REVOKE_cnt_10ms": 0, 923 "mysql_command_REVOKE_cnt_10s": 0, 924 "mysql_command_REVOKE_cnt_1ms": 0, 925 "mysql_command_REVOKE_cnt_1s": 0, 926 "mysql_command_REVOKE_cnt_500ms": 0, 927 "mysql_command_REVOKE_cnt_500us": 0, 928 "mysql_command_REVOKE_cnt_50ms": 0, 929 "mysql_command_REVOKE_cnt_5ms": 0, 930 "mysql_command_REVOKE_cnt_5s": 0, 931 "mysql_command_REVOKE_cnt_INFs": 0, 932 "mysql_command_ROLLBACK_Total_Time_us": 0, 933 "mysql_command_ROLLBACK_Total_cnt": 0, 934 "mysql_command_ROLLBACK_cnt_100ms": 0, 935 "mysql_command_ROLLBACK_cnt_100us": 0, 936 "mysql_command_ROLLBACK_cnt_10ms": 0, 937 "mysql_command_ROLLBACK_cnt_10s": 0, 938 "mysql_command_ROLLBACK_cnt_1ms": 0, 939 "mysql_command_ROLLBACK_cnt_1s": 0, 940 "mysql_command_ROLLBACK_cnt_500ms": 0, 941 "mysql_command_ROLLBACK_cnt_500us": 0, 942 "mysql_command_ROLLBACK_cnt_50ms": 0, 943 "mysql_command_ROLLBACK_cnt_5ms": 0, 944 "mysql_command_ROLLBACK_cnt_5s": 0, 945 "mysql_command_ROLLBACK_cnt_INFs": 0, 946 "mysql_command_SAVEPOINT_Total_Time_us": 0, 947 "mysql_command_SAVEPOINT_Total_cnt": 0, 948 "mysql_command_SAVEPOINT_cnt_100ms": 0, 949 "mysql_command_SAVEPOINT_cnt_100us": 0, 950 "mysql_command_SAVEPOINT_cnt_10ms": 0, 951 "mysql_command_SAVEPOINT_cnt_10s": 0, 952 "mysql_command_SAVEPOINT_cnt_1ms": 0, 953 "mysql_command_SAVEPOINT_cnt_1s": 0, 954 "mysql_command_SAVEPOINT_cnt_500ms": 0, 955 "mysql_command_SAVEPOINT_cnt_500us": 0, 956 "mysql_command_SAVEPOINT_cnt_50ms": 0, 957 "mysql_command_SAVEPOINT_cnt_5ms": 0, 958 "mysql_command_SAVEPOINT_cnt_5s": 0, 959 "mysql_command_SAVEPOINT_cnt_INFs": 0, 960 "mysql_command_SELECT_FOR_UPDATE_Total_Time_us": 0, 961 "mysql_command_SELECT_FOR_UPDATE_Total_cnt": 0, 962 "mysql_command_SELECT_FOR_UPDATE_cnt_100ms": 0, 963 "mysql_command_SELECT_FOR_UPDATE_cnt_100us": 0, 964 "mysql_command_SELECT_FOR_UPDATE_cnt_10ms": 0, 965 "mysql_command_SELECT_FOR_UPDATE_cnt_10s": 0, 966 "mysql_command_SELECT_FOR_UPDATE_cnt_1ms": 0, 967 "mysql_command_SELECT_FOR_UPDATE_cnt_1s": 0, 968 "mysql_command_SELECT_FOR_UPDATE_cnt_500ms": 0, 969 "mysql_command_SELECT_FOR_UPDATE_cnt_500us": 0, 970 "mysql_command_SELECT_FOR_UPDATE_cnt_50ms": 0, 971 "mysql_command_SELECT_FOR_UPDATE_cnt_5ms": 0, 972 "mysql_command_SELECT_FOR_UPDATE_cnt_5s": 0, 973 "mysql_command_SELECT_FOR_UPDATE_cnt_INFs": 0, 974 "mysql_command_SELECT_Total_Time_us": 4673958076637, 975 "mysql_command_SELECT_Total_cnt": 68490650, 976 "mysql_command_SELECT_cnt_100ms": 4909816, 977 "mysql_command_SELECT_cnt_100us": 32185976, 978 "mysql_command_SELECT_cnt_10ms": 2955830, 979 "mysql_command_SELECT_cnt_10s": 497, 980 "mysql_command_SELECT_cnt_1ms": 481335, 981 "mysql_command_SELECT_cnt_1s": 1321917, 982 "mysql_command_SELECT_cnt_500ms": 11123900, 983 "mysql_command_SELECT_cnt_500us": 36650, 984 "mysql_command_SELECT_cnt_50ms": 10468460, 985 "mysql_command_SELECT_cnt_5ms": 4600948, 986 "mysql_command_SELECT_cnt_5s": 403451, 987 "mysql_command_SELECT_cnt_INFs": 1870, 988 "mysql_command_SET_Total_Time_us": 0, 989 "mysql_command_SET_Total_cnt": 0, 990 "mysql_command_SET_cnt_100ms": 0, 991 "mysql_command_SET_cnt_100us": 0, 992 "mysql_command_SET_cnt_10ms": 0, 993 "mysql_command_SET_cnt_10s": 0, 994 "mysql_command_SET_cnt_1ms": 0, 995 "mysql_command_SET_cnt_1s": 0, 996 "mysql_command_SET_cnt_500ms": 0, 997 "mysql_command_SET_cnt_500us": 0, 998 "mysql_command_SET_cnt_50ms": 0, 999 "mysql_command_SET_cnt_5ms": 0, 1000 "mysql_command_SET_cnt_5s": 0, 1001 "mysql_command_SET_cnt_INFs": 0, 1002 "mysql_command_SHOW_TABLE_STATUS_Total_Time_us": 0, 1003 "mysql_command_SHOW_TABLE_STATUS_Total_cnt": 0, 1004 "mysql_command_SHOW_TABLE_STATUS_cnt_100ms": 0, 1005 "mysql_command_SHOW_TABLE_STATUS_cnt_100us": 0, 1006 "mysql_command_SHOW_TABLE_STATUS_cnt_10ms": 0, 1007 "mysql_command_SHOW_TABLE_STATUS_cnt_10s": 0, 1008 "mysql_command_SHOW_TABLE_STATUS_cnt_1ms": 0, 1009 "mysql_command_SHOW_TABLE_STATUS_cnt_1s": 0, 1010 "mysql_command_SHOW_TABLE_STATUS_cnt_500ms": 0, 1011 "mysql_command_SHOW_TABLE_STATUS_cnt_500us": 0, 1012 "mysql_command_SHOW_TABLE_STATUS_cnt_50ms": 0, 1013 "mysql_command_SHOW_TABLE_STATUS_cnt_5ms": 0, 1014 "mysql_command_SHOW_TABLE_STATUS_cnt_5s": 0, 1015 "mysql_command_SHOW_TABLE_STATUS_cnt_INFs": 0, 1016 "mysql_command_SHOW_Total_Time_us": 2158, 1017 "mysql_command_SHOW_Total_cnt": 1, 1018 "mysql_command_SHOW_cnt_100ms": 0, 1019 "mysql_command_SHOW_cnt_100us": 0, 1020 "mysql_command_SHOW_cnt_10ms": 0, 1021 "mysql_command_SHOW_cnt_10s": 0, 1022 "mysql_command_SHOW_cnt_1ms": 0, 1023 "mysql_command_SHOW_cnt_1s": 0, 1024 "mysql_command_SHOW_cnt_500ms": 0, 1025 "mysql_command_SHOW_cnt_500us": 0, 1026 "mysql_command_SHOW_cnt_50ms": 0, 1027 "mysql_command_SHOW_cnt_5ms": 1, 1028 "mysql_command_SHOW_cnt_5s": 0, 1029 "mysql_command_SHOW_cnt_INFs": 0, 1030 "mysql_command_START_TRANSACTION_Total_Time_us": 0, 1031 "mysql_command_START_TRANSACTION_Total_cnt": 0, 1032 "mysql_command_START_TRANSACTION_cnt_100ms": 0, 1033 "mysql_command_START_TRANSACTION_cnt_100us": 0, 1034 "mysql_command_START_TRANSACTION_cnt_10ms": 0, 1035 "mysql_command_START_TRANSACTION_cnt_10s": 0, 1036 "mysql_command_START_TRANSACTION_cnt_1ms": 0, 1037 "mysql_command_START_TRANSACTION_cnt_1s": 0, 1038 "mysql_command_START_TRANSACTION_cnt_500ms": 0, 1039 "mysql_command_START_TRANSACTION_cnt_500us": 0, 1040 "mysql_command_START_TRANSACTION_cnt_50ms": 0, 1041 "mysql_command_START_TRANSACTION_cnt_5ms": 0, 1042 "mysql_command_START_TRANSACTION_cnt_5s": 0, 1043 "mysql_command_START_TRANSACTION_cnt_INFs": 0, 1044 "mysql_command_TRUNCATE_TABLE_Total_Time_us": 0, 1045 "mysql_command_TRUNCATE_TABLE_Total_cnt": 0, 1046 "mysql_command_TRUNCATE_TABLE_cnt_100ms": 0, 1047 "mysql_command_TRUNCATE_TABLE_cnt_100us": 0, 1048 "mysql_command_TRUNCATE_TABLE_cnt_10ms": 0, 1049 "mysql_command_TRUNCATE_TABLE_cnt_10s": 0, 1050 "mysql_command_TRUNCATE_TABLE_cnt_1ms": 0, 1051 "mysql_command_TRUNCATE_TABLE_cnt_1s": 0, 1052 "mysql_command_TRUNCATE_TABLE_cnt_500ms": 0, 1053 "mysql_command_TRUNCATE_TABLE_cnt_500us": 0, 1054 "mysql_command_TRUNCATE_TABLE_cnt_50ms": 0, 1055 "mysql_command_TRUNCATE_TABLE_cnt_5ms": 0, 1056 "mysql_command_TRUNCATE_TABLE_cnt_5s": 0, 1057 "mysql_command_TRUNCATE_TABLE_cnt_INFs": 0, 1058 "mysql_command_UNKNOWN_Total_Time_us": 0, 1059 "mysql_command_UNKNOWN_Total_cnt": 0, 1060 "mysql_command_UNKNOWN_cnt_100ms": 0, 1061 "mysql_command_UNKNOWN_cnt_100us": 0, 1062 "mysql_command_UNKNOWN_cnt_10ms": 0, 1063 "mysql_command_UNKNOWN_cnt_10s": 0, 1064 "mysql_command_UNKNOWN_cnt_1ms": 0, 1065 "mysql_command_UNKNOWN_cnt_1s": 0, 1066 "mysql_command_UNKNOWN_cnt_500ms": 0, 1067 "mysql_command_UNKNOWN_cnt_500us": 0, 1068 "mysql_command_UNKNOWN_cnt_50ms": 0, 1069 "mysql_command_UNKNOWN_cnt_5ms": 0, 1070 "mysql_command_UNKNOWN_cnt_5s": 0, 1071 "mysql_command_UNKNOWN_cnt_INFs": 0, 1072 "mysql_command_UNLOCK_TABLES_Total_Time_us": 0, 1073 "mysql_command_UNLOCK_TABLES_Total_cnt": 0, 1074 "mysql_command_UNLOCK_TABLES_cnt_100ms": 0, 1075 "mysql_command_UNLOCK_TABLES_cnt_100us": 0, 1076 "mysql_command_UNLOCK_TABLES_cnt_10ms": 0, 1077 "mysql_command_UNLOCK_TABLES_cnt_10s": 0, 1078 "mysql_command_UNLOCK_TABLES_cnt_1ms": 0, 1079 "mysql_command_UNLOCK_TABLES_cnt_1s": 0, 1080 "mysql_command_UNLOCK_TABLES_cnt_500ms": 0, 1081 "mysql_command_UNLOCK_TABLES_cnt_500us": 0, 1082 "mysql_command_UNLOCK_TABLES_cnt_50ms": 0, 1083 "mysql_command_UNLOCK_TABLES_cnt_5ms": 0, 1084 "mysql_command_UNLOCK_TABLES_cnt_5s": 0, 1085 "mysql_command_UNLOCK_TABLES_cnt_INFs": 0, 1086 "mysql_command_UPDATE_Total_Time_us": 0, 1087 "mysql_command_UPDATE_Total_cnt": 0, 1088 "mysql_command_UPDATE_cnt_100ms": 0, 1089 "mysql_command_UPDATE_cnt_100us": 0, 1090 "mysql_command_UPDATE_cnt_10ms": 0, 1091 "mysql_command_UPDATE_cnt_10s": 0, 1092 "mysql_command_UPDATE_cnt_1ms": 0, 1093 "mysql_command_UPDATE_cnt_1s": 0, 1094 "mysql_command_UPDATE_cnt_500ms": 0, 1095 "mysql_command_UPDATE_cnt_500us": 0, 1096 "mysql_command_UPDATE_cnt_50ms": 0, 1097 "mysql_command_UPDATE_cnt_5ms": 0, 1098 "mysql_command_UPDATE_cnt_5s": 0, 1099 "mysql_command_UPDATE_cnt_INFs": 0, 1100 "mysql_command_USE_Total_Time_us": 0, 1101 "mysql_command_USE_Total_cnt": 0, 1102 "mysql_command_USE_cnt_100ms": 0, 1103 "mysql_command_USE_cnt_100us": 0, 1104 "mysql_command_USE_cnt_10ms": 0, 1105 "mysql_command_USE_cnt_10s": 0, 1106 "mysql_command_USE_cnt_1ms": 0, 1107 "mysql_command_USE_cnt_1s": 0, 1108 "mysql_command_USE_cnt_500ms": 0, 1109 "mysql_command_USE_cnt_500us": 0, 1110 "mysql_command_USE_cnt_50ms": 0, 1111 "mysql_command_USE_cnt_5ms": 0, 1112 "mysql_command_USE_cnt_5s": 0, 1113 "mysql_command_USE_cnt_INFs": 0, 1114 "mysql_firewall_rules_config": 329, 1115 "mysql_firewall_rules_table": 0, 1116 "mysql_firewall_users_config": 0, 1117 "mysql_firewall_users_table": 0, 1118 "mysql_frontend_buffers_bytes": 196608, 1119 "mysql_killed_backend_connections": 0, 1120 "mysql_killed_backend_queries": 0, 1121 "mysql_query_rules_memory": 22825, 1122 "mysql_session_internal_bytes": 20232, 1123 "mysql_unexpected_frontend_com_quit": 0, 1124 "mysql_unexpected_frontend_packets": 0, 1125 "mysql_user_first_user_frontend_connections": 0, 1126 "mysql_user_first_user_frontend_connections_utilization": 0, 1127 "mysql_user_second_user_frontend_connections": 3, 1128 "mysql_user_second_user_frontend_connections_utilization": 20, 1129 "queries_with_max_lag_ms": 0, 1130 "queries_with_max_lag_ms__delayed": 0, 1131 "queries_with_max_lag_ms__total_wait_time_us": 0, 1132 "query_digest_memory": 13688, 1133 "stack_memory_admin_threads": 16777216, 1134 "stack_memory_cluster_threads": 0, 1135 "stack_memory_mysql_threads": 33554432, 1136 "whitelisted_sqli_fingerprint": 0, 1137 } 1138 1139 require.Equal(t, expected, mx) 1140 }, 1141 }, 1142 }, 1143 } 1144 1145 for name, test := range tests { 1146 t.Run(name, func(t *testing.T) { 1147 db, mock, err := sqlmock.New( 1148 sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual), 1149 ) 1150 require.NoError(t, err) 1151 my := New() 1152 my.db = db 1153 defer func() { _ = db.Close() }() 1154 1155 require.True(t, my.Init()) 1156 1157 for i, step := range test { 1158 t.Run(fmt.Sprintf("step[%d]", i), func(t *testing.T) { 1159 step.prepareMock(t, mock) 1160 step.check(t, my) 1161 }) 1162 } 1163 assert.NoError(t, mock.ExpectationsWereMet()) 1164 }) 1165 } 1166 } 1167 1168 func mustMockRows(t *testing.T, data []byte) *sqlmock.Rows { 1169 rows, err := prepareMockRows(data) 1170 require.NoError(t, err) 1171 return rows 1172 } 1173 1174 func mockExpect(t *testing.T, mock sqlmock.Sqlmock, query string, rows []byte) { 1175 mock.ExpectQuery(query).WillReturnRows(mustMockRows(t, rows)).RowsWillBeClosed() 1176 } 1177 1178 func mockExpectErr(mock sqlmock.Sqlmock, query string) { 1179 mock.ExpectQuery(query).WillReturnError(fmt.Errorf("mock error (%s)", query)) 1180 } 1181 1182 func prepareMockRows(data []byte) (*sqlmock.Rows, error) { 1183 if len(data) == 0 { 1184 return sqlmock.NewRows(nil), nil 1185 } 1186 1187 r := bytes.NewReader(data) 1188 sc := bufio.NewScanner(r) 1189 1190 var numColumns int 1191 var rows *sqlmock.Rows 1192 1193 for sc.Scan() { 1194 s := strings.TrimSpace(strings.Trim(sc.Text(), "|")) 1195 switch { 1196 case s == "", 1197 strings.HasPrefix(s, "+"), 1198 strings.HasPrefix(s, "ft_boolean_syntax"): 1199 continue 1200 } 1201 1202 parts := strings.Split(s, "|") 1203 for i, v := range parts { 1204 parts[i] = strings.TrimSpace(v) 1205 } 1206 1207 if rows == nil { 1208 numColumns = len(parts) 1209 rows = sqlmock.NewRows(parts) 1210 continue 1211 } 1212 1213 if len(parts) != numColumns { 1214 return nil, fmt.Errorf("prepareMockRows(): columns != values (%d/%d)", numColumns, len(parts)) 1215 } 1216 1217 values := make([]driver.Value, len(parts)) 1218 for i, v := range parts { 1219 values[i] = v 1220 } 1221 rows.AddRow(values...) 1222 } 1223 1224 if rows == nil { 1225 return nil, errors.New("prepareMockRows(): nil rows result") 1226 } 1227 1228 return rows, sc.Err() 1229 }