mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 19:06:14 +01:00 
			
		
		
		
	 b82abc7163
			
		
	
	
	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;
 |