polardbxengine/mysql-test/suite/xengine/t/lock_rows_not_exist.test

112 lines
2.7 KiB
Plaintext

--source suite/xengine/include/have_xengine.inc
--enable_connect_log
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
connect (con1,localhost,root,,);
connect (con2,localhost,root,,);
#1. Using all primary key columns, with equal conditions
connection con1;
CREATE TABLE t (id1 int, id2 int, id3 int, value int, PRIMARY KEY (id1, id2, id3)) ENGINE=XEngine;
#1.1 SELECT FOR UPDATE
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN;
SELECT * FROM t WHERE id1=1 AND id2=1 AND id3=1 FOR UPDATE;
connection con2;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN;
--error ER_LOCK_WAIT_TIMEOUT
SELECT * FROM t WHERE id1=1 AND id2=1 AND id3=1 FOR UPDATE;
SELECT * FROM t WHERE id1=1 AND id2=1 AND id3=2 FOR UPDATE;
#1.2 UPDATE
connection con1;
ROLLBACK;
BEGIN;
UPDATE t SET value=value+100 WHERE id1=1 AND id2=1 AND id3=1;
connection con2;
ROLLBACK;
BEGIN;
--error ER_LOCK_WAIT_TIMEOUT
UPDATE t SET value=value+100 WHERE id1=1 AND id2=1 AND id3=1;
UPDATE t SET value=value+100 WHERE id1=1 AND id2=0 AND id3=1;
#1.3 DELETE
connection con1;
ROLLBACK;
BEGIN;
DELETE FROM t WHERE id1=1 AND id2=1 AND id3=1;
connection con2;
ROLLBACK;
BEGIN;
--error ER_LOCK_WAIT_TIMEOUT
DELETE FROM t WHERE id1=1 AND id2=1 AND id3=1;
DELETE FROM t WHERE id1=1 AND id2=1 AND id3=0;
--disable_testcase BUG#0
#
# The following is commented out because XEngine's Transaction API doesn't
# "support" READ COMMITED, in particular, it doesn't release row locks
# after each statement. (MyX is able to request a new snapshot for
# every statement, but this won't free the locks. TODO: Is the behavior
# that is tested below really needed?)
#
connection con1;
ROLLBACK;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN;
SELECT * FROM t WHERE id1=1 AND id2=1 AND id3=1 FOR UPDATE;
connection con2;
ROLLBACK;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN;
SELECT * FROM t WHERE id1=1 AND id2=1 AND id3=1 FOR UPDATE;
SELECT * FROM t WHERE id1=1 AND id2=1 AND id3=2 FOR UPDATE;
connection con1;
ROLLBACK;
BEGIN;
UPDATE t SET value=value+100 WHERE id1=1 AND id2=1 AND id3=1;
connection con2;
ROLLBACK;
BEGIN;
UPDATE t SET value=value+100 WHERE id1=1 AND id2=1 AND id3=1;
UPDATE t SET value=value+100 WHERE id1=1 AND id2=0 AND id3=1;
connection con1;
ROLLBACK;
BEGIN;
DELETE FROM t WHERE id1=1 AND id2=1 AND id3=1;
connection con2;
ROLLBACK;
BEGIN;
DELETE FROM t WHERE id1=1 AND id2=1 AND id3=1;
DELETE FROM t WHERE id1=1 AND id2=1 AND id3=0;
connection con1;
ROLLBACK;
connection con2;
ROLLBACK;
--enable_testcase
connection default;
disconnect con1;
disconnect con2;
DROP TABLE t;
--source suite/xengine/include/check_xengine_log_error.inc