mariadb/mysql-test/suite/innodb/t/implicit_gap_lock_convertion.test
Vlad Lesin 2d259187a2 MDEV-26206 gap lock is not set if implicit lock exists
If lock type is LOCK_GAP or LOCK_ORDINARY, and the transaction holds
implicit lock for the record, then explicit gap-lock will not be set for
the record, as lock_rec_convert_impl_to_expl() returns true and
lock_rec_convert_impl_to_expl() bypasses lock_rec_lock() call.

The fix converts explicit lock to implicit one if requested lock type is
not LOCK_REC_NOT_GAP.

innodb_information_schema test result is also changed as after the fix
the following statements execution:

SET autocommit=0;
INSERT INTO t1 VALUES (5,10);
SELECT * FROM t1 FOR UPDATE;

leads to additional gap lock requests.
2021-08-17 16:09:55 +03:00

21 lines
518 B
Text

--source include/have_innodb.inc
--source include/count_sessions.inc
CREATE TABLE t(a INT UNSIGNED PRIMARY KEY) ENGINE=InnoDB;
INSERT INTO t VALUES (10), (30);
--connect (con1,localhost,root,,)
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN;
INSERT INTO t VALUES (20);
SELECT * FROM t WHERE a BETWEEN 10 AND 30;
--connection default
SET session innodb_lock_wait_timeout=1;
--error ER_LOCK_WAIT_TIMEOUT
INSERT INTO t VALUES (15);
--disconnect con1
DROP TABLE t;
--source include/wait_until_count_sessions.inc