polardbxengine/mysql-test/suite/innodb/r/skip_locked_nowait_isolatio...

177 lines
5.4 KiB
Plaintext

SET SESSION innodb_lock_wait_timeout=1;
SET SESSION innodb_lock_wait_timeout=1;
#
# Test READ UNCOMMITTED
#
CREATE TABLE t1(
seat_id INT,
pos POINT NOT NULL,
state INT,
PRIMARY KEY(seat_id)
) ENGINE=InnoDB;
INSERT INTO t1 VALUES
(1,ST_PointFromText('POINT(1 0)'),0),
(3,ST_PointFromText('POINT(2 0)'),0),
(4,ST_PointFromText('POINT(1 1)'),0),
(6,ST_PointFromText('POINT(2 1)'),0);
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
BEGIN;
SELECT seat_id, state, ST_AsText(pos) FROM t1
WHERE state = 0 AND seat_id >= 1 LIMIT 2 FOR SHARE;
seat_id state ST_AsText(pos)
1 0 POINT(1 0)
3 0 POINT(2 0)
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
BEGIN;
INSERT INTO t1 VALUES(2,ST_PointFromText('POINT(2 1)'),0);
SELECT seat_id, state, ST_AsText(pos) FROM t1 WHERE state = 0
FOR UPDATE NOWAIT;
SELECT seat_id, state, ST_AsText(pos) FROM t1 WHERE state = 0
FOR UPDATE SKIP LOCKED;
seat_id state ST_AsText(pos)
2 0 POINT(2 1)
4 0 POINT(1 1)
6 0 POINT(2 1)
SET @g = ST_GeomFromText('POLYGON((0 0,0 3,3 3,0 3,0 0))');
SELECT seat_id, state, ST_AsText(pos) FROM t1
WHERE state = 0 AND MBRWithin(pos, @g) LIMIT 2 FOR UPDATE NOWAIT;
ERROR HY000: Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set.
SELECT seat_id, state, ST_AsText(pos) FROM t1
WHERE state = 0 AND MBRWithin(pos, @g) LIMIT 2 FOR UPDATE SKIP LOCKED;
seat_id state ST_AsText(pos)
2 0 POINT(2 1)
4 0 POINT(1 1)
COMMIT;
COMMIT;
DROP TABLE t1;
#
# Test READ COMMITTED
#
CREATE TABLE t1(
seat_id INT,
pos POINT NOT NULL,
state INT,
PRIMARY KEY(seat_id)
) ENGINE=InnoDB;
INSERT INTO t1 VALUES
(1,ST_PointFromText('POINT(1 0)'),0),
(3,ST_PointFromText('POINT(2 0)'),0),
(4,ST_PointFromText('POINT(1 1)'),0),
(6,ST_PointFromText('POINT(2 1)'),0);
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN;
SELECT seat_id, state, ST_AsText(pos) FROM t1
WHERE state = 0 AND seat_id >= 1 LIMIT 2 FOR SHARE;
seat_id state ST_AsText(pos)
1 0 POINT(1 0)
3 0 POINT(2 0)
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN;
INSERT INTO t1 VALUES(2,ST_PointFromText('POINT(2 1)'),0);
SELECT seat_id, state, ST_AsText(pos) FROM t1 WHERE state = 0
FOR UPDATE NOWAIT;
SELECT seat_id, state, ST_AsText(pos) FROM t1 WHERE state = 0
FOR UPDATE SKIP LOCKED;
seat_id state ST_AsText(pos)
2 0 POINT(2 1)
4 0 POINT(1 1)
6 0 POINT(2 1)
SET @g = ST_GeomFromText('POLYGON((0 0,0 3,3 3,0 3,0 0))');
SELECT seat_id, state, ST_AsText(pos) FROM t1
WHERE state = 0 AND MBRWithin(pos, @g) LIMIT 2 FOR UPDATE NOWAIT;
ERROR HY000: Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set.
SELECT seat_id, state, ST_AsText(pos) FROM t1
WHERE state = 0 AND MBRWithin(pos, @g) LIMIT 2 FOR UPDATE SKIP LOCKED;
seat_id state ST_AsText(pos)
2 0 POINT(2 1)
4 0 POINT(1 1)
COMMIT;
COMMIT;
DROP TABLE t1;
#
# Test REPEATABLE READ
#
CREATE TABLE t1(
seat_id INT,
pos POINT NOT NULL,
state INT,
PRIMARY KEY(seat_id)
) ENGINE=InnoDB;
INSERT INTO t1 VALUES
(1,ST_PointFromText('POINT(1 0)'),0),
(3,ST_PointFromText('POINT(2 0)'),0),
(4,ST_PointFromText('POINT(1 1)'),0),
(6,ST_PointFromText('POINT(2 1)'),0);
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN;
SELECT seat_id, state, ST_AsText(pos) FROM t1
WHERE state = 0 AND seat_id >= 1 LIMIT 2 FOR SHARE;
seat_id state ST_AsText(pos)
1 0 POINT(1 0)
3 0 POINT(2 0)
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN;
INSERT INTO t1 VALUES(2,ST_PointFromText('POINT(2 1)'),0);
SELECT seat_id, state, ST_AsText(pos) FROM t1 WHERE state = 0
FOR UPDATE NOWAIT;
SELECT seat_id, state, ST_AsText(pos) FROM t1 WHERE state = 0
FOR UPDATE SKIP LOCKED;
seat_id state ST_AsText(pos)
4 0 POINT(1 1)
6 0 POINT(2 1)
SET @g = ST_GeomFromText('POLYGON((0 0,0 3,3 3,0 3,0 0))');
SELECT seat_id, state, ST_AsText(pos) FROM t1
WHERE state = 0 AND MBRWithin(pos, @g) LIMIT 2 FOR UPDATE NOWAIT;
ERROR HY000: Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set.
SELECT seat_id, state, ST_AsText(pos) FROM t1
WHERE state = 0 AND MBRWithin(pos, @g) LIMIT 2 FOR UPDATE SKIP LOCKED;
seat_id state ST_AsText(pos)
4 0 POINT(1 1)
6 0 POINT(2 1)
COMMIT;
COMMIT;
DROP TABLE t1;
#
# Test SERIALIZABLE
#
CREATE TABLE t1(
seat_id INT,
pos POINT NOT NULL,
state INT,
PRIMARY KEY(seat_id)
) ENGINE=InnoDB;
INSERT INTO t1 VALUES
(1,ST_PointFromText('POINT(1 0)'),0),
(3,ST_PointFromText('POINT(2 0)'),0),
(4,ST_PointFromText('POINT(1 1)'),0),
(6,ST_PointFromText('POINT(2 1)'),0);
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN;
SELECT seat_id, state, ST_AsText(pos) FROM t1
WHERE state = 0 AND seat_id >= 1 LIMIT 2 ;
seat_id state ST_AsText(pos)
1 0 POINT(1 0)
3 0 POINT(2 0)
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN;
INSERT INTO t1 VALUES(2,ST_PointFromText('POINT(2 1)'),0);
SELECT seat_id, state, ST_AsText(pos) FROM t1 WHERE state = 0
FOR UPDATE NOWAIT;
SELECT seat_id, state, ST_AsText(pos) FROM t1 WHERE state = 0
FOR UPDATE SKIP LOCKED;
seat_id state ST_AsText(pos)
4 0 POINT(1 1)
6 0 POINT(2 1)
SET @g = ST_GeomFromText('POLYGON((0 0,0 3,3 3,0 3,0 0))');
SELECT seat_id, state, ST_AsText(pos) FROM t1
WHERE state = 0 AND MBRWithin(pos, @g) LIMIT 2 FOR UPDATE NOWAIT;
ERROR HY000: Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set.
SELECT seat_id, state, ST_AsText(pos) FROM t1
WHERE state = 0 AND MBRWithin(pos, @g) LIMIT 2 FOR UPDATE SKIP LOCKED;
seat_id state ST_AsText(pos)
4 0 POINT(1 1)
6 0 POINT(2 1)
COMMIT;
COMMIT;
DROP TABLE t1;