polardbxengine/mysql-test/suite/xengine/include/locking_issues_case6.inc

77 lines
2.0 KiB
PHP

#
# Check concurrent locking issues:
# Changing primary key
#
# To call this, set $isolation_level and call this file
#
# let $isolation_level = REPEATABLE READ;
# --source suite/xengine/include/locking_issues_case6.inc
#
--echo
--echo -----------------------------------------------------------------------
--echo - Locking issues case 6:
--echo - Changing primary key
--echo - using $isolation_level transaction isolation level
--echo -----------------------------------------------------------------------
--disable_warnings
DROP TABLE IF EXISTS t0;
--enable_warnings
CREATE TABLE t0(id INT AUTO_INCREMENT PRIMARY KEY, value INT) ENGINE=XENGINE;
# Insert 200,000 rows, breaking it up into inserts of 1000 rows at a time
--echo Inserting 200,000 rows
--disable_query_log
#SET @save_xengine_bulk_load=@@xengine_bulk_load;
#SET xengine_bulk_load=1;
#SET @save_xengine_write_disable_wal=@@xengine_write_disable_wal;
#SET GLOBAL xengine_write_disable_wal=1;
let $i = 1;
while ($i <= 200) {
eval BEGIN;
let $j = 1;
while ($j <= 100) {
eval INSERT INTO t0(value) VALUES (0),(0),(0),(0),(0),(0),(0),(0),(0),(0);
inc $j;
}
eval COMMIT;
inc $i;
}
#SET xengine_bulk_load=@save_xengine_bulk_load;
#SET GLOBAL xengine_write_disable_wal=@save_xengine_write_disable_wal;
--enable_query_log
UPDATE t0 SET value=100 WHERE id=190000;
connect (con1,localhost,root,,);
connect (con2,localhost,root,,);
connection con1;
eval SET SESSION TRANSACTION ISOLATION LEVEL $isolation_level;
BEGIN;
let $ID = `SELECT connection_id()`;
send SELECT * FROM t0 WHERE value > 0 FOR UPDATE;
connection con2;
let $wait_condition = SELECT 1 FROM information_schema.processlist
WHERE id = $ID AND state = "Sending data";
--source include/wait_condition.inc
eval SET SESSION TRANSACTION ISOLATION LEVEL $isolation_level;
BEGIN;
UPDATE t0 SET id=200001 WHERE id=190000;
COMMIT;
connection con1;
--error 0,ER_LOCK_DEADLOCK
reap;
--echo ERROR: $mysql_errno
COMMIT;
connection default;
disconnect con1;
disconnect con2;
DROP TABLE t0;