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:
@@ -460,9 +460,6 @@ drop table t1;
|
||||
#
|
||||
# Bug#30882 Dropping a temporary table inside a stored function may cause a server crash
|
||||
#
|
||||
# Test HANDLER statements in conjunction with temporary tables. While the temporary table
|
||||
# is open by a HANDLER, no other statement can access it.
|
||||
#
|
||||
|
||||
create temporary table t1 (a int, b char(1), key a using btree (a), key b using btree (a,b));
|
||||
insert into t1 values (0,"a"),(1,"b"),(2,"c"),(3,"d"),(4,"e"),
|
||||
@@ -472,7 +469,6 @@ handler t1 open as a1;
|
||||
handler a1 read a=(1);
|
||||
handler a1 read a next;
|
||||
handler a1 read a next;
|
||||
--error ER_CANT_REOPEN_TABLE
|
||||
select a,b from t1;
|
||||
handler a1 read a prev;
|
||||
handler a1 read a prev;
|
||||
@@ -564,7 +560,7 @@ handler t1 open;
|
||||
handler t1 read next;
|
||||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||||
handler t2 close;
|
||||
--error ER_CANT_REOPEN_TABLE
|
||||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||||
handler t3 open;
|
||||
--echo # After UNLOCK TABLES handlers should be around and
|
||||
--echo # we should be able to continue reading through them.
|
||||
@@ -1182,7 +1178,6 @@ handler t1 read a next;
|
||||
select * from t1;
|
||||
--echo # Sic: the position is not lost
|
||||
handler t2 read a next;
|
||||
--error ER_CANT_REOPEN_TABLE
|
||||
select * from t2;
|
||||
handler t2 read a next;
|
||||
drop table t1;
|
||||
|
Reference in New Issue
Block a user