If a Lua script defines the sysbench.hooks.sql_error_ignorable function, sysbench calls it whenever an SQL error occurs and passes information about connection, failed query, SQL error number, state and message as arguments. If the function returns true, the error is ignored and the entire event is restarted. Otherwise sysbench aborts scripts execution.
98 lines
2.7 KiB
Perl
98 lines
2.7 KiB
Perl
########################################################################
|
|
SQL Lua API + MySQL tests
|
|
########################################################################
|
|
|
|
$ . ${SBTEST_INCDIR}/mysql_common.sh
|
|
$ . ${SBTEST_INCDIR}/api_sql_common.sh
|
|
drv:name() = mysql
|
|
SQL types:
|
|
NONE = 0
|
|
INT = 3
|
|
CHAR = 11
|
|
VARCHAR = 12
|
|
TIMESTAMP = 10
|
|
TIME = 7
|
|
FLOAT = 5
|
|
TINYINT = 1
|
|
BIGINT = 4
|
|
SMALLINT = 2
|
|
DATE = 8
|
|
DATETIME = 9
|
|
DOUBLE = 6
|
|
--
|
|
SQL error codes:
|
|
NONE = 0
|
|
FATAL = 2
|
|
IGNORABLE = 1
|
|
--
|
|
FATAL: invalid database driver name: 'non-existing'
|
|
failed to initialize the DB driver
|
|
100
|
|
--
|
|
--
|
|
nil bar 0.2
|
|
nil nil 0.1
|
|
1 foo 0.4
|
|
2 nil 0.3
|
|
--
|
|
nil 2
|
|
--
|
|
<sql_bind>
|
|
<sql_bind>
|
|
Unsupported argument type: 8
|
|
nil
|
|
<sql_result>
|
|
ALERT: attempt to fetch row from an empty result set
|
|
<sql_result>
|
|
ALERT: attempt to free an invalid result set
|
|
db_free_results() failed
|
|
db_free_results() failed
|
|
--
|
|
(last message repeated 1 times)
|
|
ALERT: attempt to use an already closed connection
|
|
*/api_sql.lua:*: SQL API error (glob)
|
|
ALERT: attempt to close an already closed connection
|
|
--
|
|
4
|
|
301 400 0123456789 0123456789
|
|
--
|
|
FATAL: unable to connect to MySQL server on host 'non-existing', port 3306, aborting...
|
|
FATAL: error 2005: Unknown MySQL server host 'non-existing' (0)
|
|
connection creation failed
|
|
--
|
|
FATAL: mysql_drv_query() returned error 1048 (Column 'a' cannot be null) for query 'INSERT INTO t VALUES (NULL)'
|
|
Got an error descriptor:
|
|
sql_errno = \t1048 (esc)
|
|
connection = \t<sql_connection> (esc)
|
|
query = \tINSERT INTO t VALUES (NULL) (esc)
|
|
sql_state = \t23000 (esc)
|
|
sql_errmsg = \tColumn 'a' cannot be null (esc)
|
|
*/api_sql.lua:*: SQL error, errno = 1048, state = '23000': Column 'a' cannot be null (glob)
|
|
FATAL: mysql_drv_query() returned error 1406 (Data too long for column 'a' at row 1) for query 'INSERT INTO t VALUES ("test")'
|
|
Got an error descriptor:
|
|
sql_errno = \t1406 (esc)
|
|
connection = \t<sql_connection> (esc)
|
|
query = \tINSERT INTO t VALUES ("test") (esc)
|
|
sql_state = \t22001 (esc)
|
|
sql_errmsg = \tData too long for column 'a' at row 1 (esc)
|
|
*/api_sql.lua:*: SQL error, errno = 1406, state = '22001': Data too long for column 'a' at row 1 (glob)
|
|
FATAL: mysql_drv_query() returned error 1051 (Unknown table 'sbtest.t') for query 'DROP TABLE t'
|
|
Got an error descriptor:
|
|
sql_errno = \t1051 (esc)
|
|
connection = \t<sql_connection> (esc)
|
|
query = \tDROP TABLE t (esc)
|
|
sql_state = \t42S02 (esc)
|
|
sql_errmsg = \tUnknown table 'sbtest.t' (esc)
|
|
*/api_sql.lua:*: SQL error, errno = 1051, state = '42S02': Unknown table 'sbtest.t' (glob)
|
|
--
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|