mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 02:46:29 +01:00 
			
		
		
		
	 7305be2f7e
			
		
	
	
	7305be2f7e
	
	
	
		
			
			mysqld maintains a list of TABLE objects for all temporary tables created within a session in THD. Here each table is represented by a TABLE object. A query referencing a particular temporary table for more than once, however, failed with ER_CANT_REOPEN_TABLE error because a TABLE_SHARE was allocate together with the TABLE, so temporary tables always had only one TABLE per TABLE_SHARE. This patch lift this restriction by separating TABLE and TABLE_SHARE objects and storing TABLE_SHAREs for temporary tables in a list in THD, and TABLEs in a list within their respective TABLE_SHAREs.
		
			
				
	
	
		
			30 lines
		
	
	
	
		
			657 B
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
	
		
			657 B
		
	
	
	
		
			Text
		
	
	
	
	
	
| include/master-slave.inc
 | |
| [connection master]
 | |
| connection slave;
 | |
| reset master;
 | |
| #
 | |
| # MDEV-5535: Cannot reopen temporary table
 | |
| #
 | |
| connection master;
 | |
| DROP TABLE IF EXISTS t1, t2, t3;
 | |
| CREATE TEMPORARY TABLE t1(c1 INT) ENGINE=INNODB;
 | |
| INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
 | |
| CREATE TEMPORARY TABLE t2 SELECT A.c1 a, B.c1 b FROM t1 AS A, t1 AS B;
 | |
| CREATE TABLE t3 SELECT * FROM t2;
 | |
| SELECT COUNT(*) = 5 FROM t1;
 | |
| COUNT(*) = 5
 | |
| 1
 | |
| SELECT COUNT(*) = 25 FROM t2;
 | |
| COUNT(*) = 25
 | |
| 1
 | |
| SELECT COUNT(*) = 25 FROM t3;
 | |
| COUNT(*) = 25
 | |
| 1
 | |
| connection slave;
 | |
| SELECT COUNT(*) = 25 FROM t3;
 | |
| COUNT(*) = 25
 | |
| 1
 | |
| connection master;
 | |
| DROP TABLE t1, t2, t3;
 | |
| connection slave;
 | |
| include/rpl_end.inc
 |