mirror of
https://github.com/MariaDB/server.git
synced 2025-04-11 17:55:34 +02:00

This imports and adapts a number of MySQL 5.7 test cases that are applicable to MariaDB. Some tests for old bug fixes are not that relevant because the code has been refactored since then (especially starting with MariaDB Server 10.6), and the tests would not reproduce the original bug if the fix was reverted. In the test innodb_fts.opt, there are many duplicate MATCH ranks, which would make the results nondeterministic. The test was stabilized by changing some LIMIT clauses or by adding sorted_result in those cases where the purpose of a test was to show that no sorting took place in the server. In the test innodb_fts.phrase, MySQL 5.7 would generate FTS_DOC_ID that are 1 larger than in MariaDB. In innodb_fts.index_table the difference is 2. This is because in MariaDB, fts_get_next_doc_id() post-increments cache->next_doc_id, while MySQL 5.7 pre-increments it. Reviewed by: Thirunarayanan Balathandayuthapani
117 lines
2.9 KiB
Text
117 lines
2.9 KiB
Text
# DEBUG_SYNC must be compiled in.
|
|
--source include/have_debug_sync.inc
|
|
--source include/have_debug.inc
|
|
--source include/have_innodb.inc
|
|
|
|
CREATE TABLE t1 (c1 INT , c2 CHAR(10), PRIMARY KEY (c1)) ENGINE = InnoDB;
|
|
INSERT INTO t1 VALUES(0, "0");
|
|
INSERT INTO t1 VALUES(1, "1");
|
|
INSERT INTO t1 VALUES(2, "2");
|
|
INSERT INTO t1 VALUES(3, "3");
|
|
|
|
--connect (con1,localhost,root,,)
|
|
--connect (con2,localhost,root,,)
|
|
--connect (con3,localhost,root,,)
|
|
--connect (con4,localhost,root,,)
|
|
--connect (con5,localhost,root,,)
|
|
--connect (con6,localhost,root,,)
|
|
|
|
connection default;
|
|
# Disable query log to avoid non-deterministic output conflicts
|
|
SET AUTOCOMMIT=0;
|
|
BEGIN;
|
|
# Lock all the records
|
|
SELECT * FROM t1 FOR UPDATE;
|
|
--disable_query_log
|
|
|
|
connection con1;
|
|
SET AUTOCOMMIT=1;
|
|
# Test if locking autocommit selects end up in the trx_sys_t::trx_list.
|
|
# We check this via the INFORMATION_SCHEMA.INNODB_TRX.
|
|
# This should block and show up in the I_S.
|
|
SET DEBUG_SYNC='lock_wait_suspend_thread_enter SIGNAL waiting1';
|
|
--send
|
|
SELECT COUNT(*) FROM t1 LOCK IN SHARE MODE;
|
|
|
|
connection con2;
|
|
SET AUTOCOMMIT=1;
|
|
# Test if non-locking autocommit selects end up in the trx_sys_t::trx_list.
|
|
# We check this via the INFORMATION_SCHEMA.INNODB_TRX.
|
|
# This should not block and should not show up in the I_S.
|
|
--send
|
|
SELECT COUNT(*) FROM t1;
|
|
|
|
connection con3;
|
|
SET AUTOCOMMIT=1;
|
|
# Note: autocommit non-locking selects are not converted to locking selects
|
|
# Therefore this should not block;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
|
--send
|
|
SELECT COUNT(*) FROM t1;
|
|
|
|
connection con4;
|
|
SET AUTOCOMMIT=0;
|
|
# Note: Non-locking selects are converted to locking selects
|
|
# therefore this should block;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
|
SET DEBUG_SYNC='now WAIT_FOR waiting1';
|
|
SET DEBUG_SYNC='lock_wait_suspend_thread_enter SIGNAL waiting4';
|
|
--send
|
|
SELECT COUNT(*) FROM t1 WHERE c1 >= 0;
|
|
|
|
connection con5;
|
|
SET AUTOCOMMIT=1;
|
|
# This should not block
|
|
BEGIN;
|
|
--send
|
|
SELECT COUNT(*) FROM t1;
|
|
|
|
connection con6;
|
|
SET AUTOCOMMIT=1;
|
|
# This will ignore the auto-commit setting but wont block because it is
|
|
# a non-locking select.
|
|
XA START '1';
|
|
--enable_query_log
|
|
SELECT * FROM t1 WHERE c1 <= 3;
|
|
|
|
connection default;
|
|
# Wait for SELECTs to get into the lock wait queue
|
|
SET DEBUG_SYNC='now WAIT_FOR waiting4';
|
|
SET DEBUG_SYNC= 'RESET';
|
|
|
|
# Check the number of non-locking transactions
|
|
let $wait_condition =
|
|
SELECT COUNT(*) = 5
|
|
FROM INFORMATION_SCHEMA.INNODB_TRX
|
|
WHERE trx_autocommit_non_locking = 0;
|
|
--source include/wait_condition.inc
|
|
|
|
# Check the waiting transactions
|
|
SELECT trx_state, trx_query, trx_autocommit_non_locking
|
|
FROM INFORMATION_SCHEMA.INNODB_TRX
|
|
WHERE trx_state = 'LOCK WAIT'
|
|
ORDER BY trx_query;
|
|
|
|
INSERT INTO t1 VALUES(4, '4');
|
|
COMMIT;
|
|
|
|
connection con6;
|
|
SELECT * FROM t1 WHERE c1 <= 4;
|
|
XA END '1';
|
|
XA PREPARE '1';
|
|
XA ROLLBACK '1';
|
|
disconnect con6;
|
|
disconnect con2;
|
|
disconnect con3;
|
|
disconnect con5;
|
|
|
|
connection con1;
|
|
reap;
|
|
disconnect con1;
|
|
|
|
connection con4;
|
|
reap;
|
|
disconnect con4;
|
|
|
|
connection default;
|
|
DROP TABLE t1;
|