mirror of
https://github.com/MariaDB/server.git
synced 2025-02-05 21:32:18 +01:00
b82abc7163
trx_t::autoinc_locks: Use small_vector<lock_t*,4> in order to avoid any dynamic memory allocation in the most common case (a statement is holding AUTO_INCREMENT locks on at most 4 tables or partitions). lock_cancel_waiting_and_release(): Instead of removing elements from the middle, simply assign nullptr, like lock_table_remove_autoinc_lock(). The added test innodb.auto_increment_lock_mode covers the dynamic memory allocation as well as nondeterministically (occasionally) covers the out-of-order lock release in lock_table_remove_autoinc_lock(). Reviewed by: Debarun Banerjee
25 lines
735 B
Text
25 lines
735 B
Text
CREATE TABLE t1_56228(
|
|
c1 iNT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
|
CREATE TABLE t2_56228(
|
|
c1 iNT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
|
CREATE FUNCTION bug56228() RETURNS INT DETERMINISTIC
|
|
BEGIN
|
|
INSERT INTO t1_56228 VALUES(NULL);
|
|
INSERT INTO t2_56228 VALUES(NULL);
|
|
INSERT INTO t1_56228 VALUES(NULL);
|
|
INSERT INTO t2_56228 VALUES(NULL);
|
|
DROP TABLE t1_56228;
|
|
RETURN 42;
|
|
END //
|
|
ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger
|
|
CREATE PROCEDURE bug56228()
|
|
BEGIN
|
|
INSERT INTO t1_56228 VALUES(NULL);
|
|
INSERT INTO t2_56228 VALUES(NULL);
|
|
INSERT INTO t1_56228 VALUES(NULL);
|
|
INSERT INTO t2_56228 VALUES(NULL);
|
|
DROP TABLE t1_56228;
|
|
END //
|
|
CALL bug56228();
|
|
DROP PROCEDURE bug56228;
|
|
DROP TABLE t2_56228;
|