mirror of
https://github.com/MariaDB/server.git
synced 2025-11-30 05:23:50 +03:00
Problem was that detection of temporary tables was all wrong for RENAME TABLE. (Temporary tables where opened by top level call to open_temporary_tables(), which can't detect if a temporary table was renamed to something and then reused). Fixed by adding proper parsing of rename list to check against the current name of a table at each rename stage. Also change do_rename_temporary() to check against the current state of temporary tables, not according to the state of start of RENAME TABLE.
35 lines
970 B
Plaintext
35 lines
970 B
Plaintext
include/master-slave.inc
|
|
[connection master]
|
|
#
|
|
# MDEV-16229 Replication aborts with ER_VIEW_SELECT_TMPTABLE after
|
|
# half-failed RENAME
|
|
#
|
|
CREATE TABLE t1 (a INT);
|
|
CREATE TEMPORARY TABLE t1 (b INT);
|
|
RENAME TABLE t1 TO tmp, tmp TO t1;
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TEMPORARY TABLE `t1` (
|
|
`b` int(11) DEFAULT NULL
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
CREATE VIEW v AS SELECT * FROM t1;
|
|
ERROR HY000: View's SELECT refers to a temporary table 't1'
|
|
RENAME TABLE t1 TO tmp, t1 TO t2;
|
|
SHOW CREATE TABLE tmp;
|
|
Table Create Table
|
|
tmp CREATE TEMPORARY TABLE `tmp` (
|
|
`b` int(11) DEFAULT NULL
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
SHOW CREATE TABLE t2;
|
|
Table Create Table
|
|
t2 CREATE TABLE `t2` (
|
|
`a` int(11) DEFAULT NULL
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
CREATE VIEW v AS SELECT * FROM tmp;
|
|
ERROR HY000: View's SELECT refers to a temporary table 'tmp'
|
|
CREATE VIEW v AS SELECT * FROM t2;
|
|
DROP VIEW v;
|
|
DROP TABLE tmp;
|
|
DROP TABLE t2;
|
|
include/rpl_end.inc
|