mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-5535: Cannot reopen temporary table
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.
This commit is contained in:
30
mysql-test/suite/rpl/r/rpl_reopen_temp_table.result
Normal file
30
mysql-test/suite/rpl/r/rpl_reopen_temp_table.result
Normal file
@@ -0,0 +1,30 @@
|
||||
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
|
Reference in New Issue
Block a user