mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +03:00 
			
		
		
		
	Problem was that partitioning cached the table flags. These flags could change due to TRANSACTION LEVEL changes. Solution was to remove the cache and always return the table flags from the first partition (if the handler was initialized).
		
			
				
	
	
		
			49 lines
		
	
	
		
			999 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			999 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # connection default
 | |
| SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
 | |
| CREATE TABLE t1
 | |
| (
 | |
| id SMALLINT NOT NULL,
 | |
| PRIMARY KEY (id)
 | |
| ) ENGINE=innodb
 | |
| PARTITION BY RANGE (id)
 | |
| (
 | |
| PARTITION p1 VALUES LESS THAN (2),
 | |
| PARTITION p2 VALUES LESS THAN (4),
 | |
| PARTITION p3 VALUES LESS THAN (10)
 | |
| );
 | |
| INSERT INTO t1 VALUES (1),(2),(3);
 | |
| # Test READ COMMITTED -> REPEATABLE READ
 | |
| FLUSH TABLES;
 | |
| SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
 | |
| BEGIN;
 | |
| SELECT * FROM t1;
 | |
| id
 | |
| 1
 | |
| 2
 | |
| 3
 | |
| #connection con1
 | |
| SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
 | |
| BEGIN;
 | |
| INSERT INTO t1 VALUES(7);
 | |
| COMMIT;
 | |
| # connection default
 | |
| COMMIT;
 | |
| FLUSH TABLES;
 | |
| # Test REPEATABLE READ -> READ COMMITTED
 | |
| SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
 | |
| BEGIN;
 | |
| SELECT * FROM t1;
 | |
| id
 | |
| 1
 | |
| 2
 | |
| 3
 | |
| 7
 | |
| # connection con1
 | |
| SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
 | |
| BEGIN;
 | |
| INSERT INTO t1 VALUES(9);
 | |
| ERROR HY000: Binary logging not possible. Message: Transaction level 'READ-COMMITTED' in InnoDB is not safe for binlog mode 'STATEMENT'
 | |
| COMMIT;
 | |
| COMMIT;
 | |
| DROP TABLE t1;
 |