mirror of
https://github.com/MariaDB/server.git
synced 2025-11-28 17:36:30 +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.
136 lines
3.4 KiB
Plaintext
136 lines
3.4 KiB
Plaintext
drop table if exists t0,t1,t2,t3,t4;
|
|
drop table if exists t0,t5,t6,t7,t8,t9,t1_1,t1_2,t9_1,t9_2;
|
|
create table t0 SELECT 1,"table 1";
|
|
create table t2 SELECT 2,"table 2";
|
|
create table t3 SELECT 3,"table 3";
|
|
rename table t0 to t1;
|
|
rename table t3 to t4, t2 to t3, t1 to t2, t4 to t1;
|
|
select * from t1;
|
|
3 table 3
|
|
3 table 3
|
|
rename table t3 to t4, t2 to t3, t1 to t2, t4 to t1;
|
|
rename table t3 to t4, t2 to t3, t1 to t2, t4 to t1;
|
|
select * from t1;
|
|
1 table 1
|
|
1 table 1
|
|
rename table t1 to t2;
|
|
ERROR 42S01: Table 't2' already exists
|
|
rename table t1 to t1;
|
|
ERROR 42S01: Table 't1' already exists
|
|
rename table t3 to t4, t2 to t3, t1 to t2, t4 to t2;
|
|
ERROR 42S01: Table 't2' already exists
|
|
show tables like "t_";
|
|
Tables_in_test (t_)
|
|
t1
|
|
t2
|
|
t3
|
|
rename table t3 to t1, t2 to t3, t1 to t2, t4 to t1;
|
|
ERROR 42S01: Table 't1' already exists
|
|
rename table t3 to t4, t5 to t3, t1 to t2, t4 to t1;
|
|
ERROR 42S02: Table 'test.t5' doesn't exist
|
|
select * from t1;
|
|
1 table 1
|
|
1 table 1
|
|
select * from t2;
|
|
2 table 2
|
|
2 table 2
|
|
select * from t3;
|
|
3 table 3
|
|
3 table 3
|
|
drop table if exists t1,t2,t3,t4;
|
|
Warnings:
|
|
Note 1051 Unknown table 'test.t4'
|
|
CREATE TABLE t1 (a int);
|
|
CREATE TABLE t3 (a int);
|
|
FLUSH TABLES WITH READ LOCK;
|
|
RENAME TABLE t1 TO t2, t3 to t4;
|
|
show tables;
|
|
Tables_in_test
|
|
t1
|
|
t3
|
|
UNLOCK TABLES;
|
|
show tables;
|
|
Tables_in_test
|
|
t2
|
|
t4
|
|
drop table t2, t4;
|
|
End of 4.1 tests
|
|
#
|
|
# Bug#14959: "ALTER TABLE isn't able to rename a view"
|
|
# Bug#53976: "ALTER TABLE RENAME is allowed on views
|
|
# (not documented, broken)"
|
|
#
|
|
create table t1(f1 int);
|
|
create view v1 as select * from t1;
|
|
alter table v1 rename to v2;
|
|
ERROR HY000: 'test.v1' is not BASE TABLE
|
|
drop view v1;
|
|
drop table t1;
|
|
End of 5.0 tests
|
|
CREATE OR REPLACE TABLE t1 (a INT);
|
|
CREATE OR REPLACE TABLE t2 (a INT);
|
|
CREATE OR REPLACE TEMPORARY TABLE t1_tmp (b INT);
|
|
CREATE OR REPLACE TEMPORARY TABLE t2_tmp (b INT);
|
|
rename table t1 to t2;
|
|
ERROR 42S01: Table 't2' already exists
|
|
rename table t1 to tmp, tmp to t2;
|
|
ERROR 42S01: Table 't2' already exists
|
|
rename table t1_tmp to t2_tmp;
|
|
ERROR 42S01: Table 't2_tmp' already exists
|
|
rename table t1_tmp to tmp, tmp to t2_tmp;
|
|
ERROR 42S01: Table 't2_tmp' already exists
|
|
show create table t1_tmp;
|
|
Table Create Table
|
|
t1_tmp CREATE TEMPORARY TABLE `t1_tmp` (
|
|
`b` int(11) DEFAULT NULL
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
show create table t2_tmp;
|
|
Table Create Table
|
|
t2_tmp CREATE TEMPORARY TABLE `t2_tmp` (
|
|
`b` int(11) DEFAULT NULL
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
rename table t1 to t1_tmp;
|
|
rename table t2_tmp to t2;
|
|
rename table t2 to tmp, tmp to t2;
|
|
rename table t1_tmp to tmp, tmp to t1_tmp;
|
|
show tables;
|
|
Tables_in_test
|
|
t1_tmp
|
|
t2
|
|
SHOW CREATE TABLE t1_tmp;
|
|
Table Create Table
|
|
t1_tmp CREATE TEMPORARY TABLE `t1_tmp` (
|
|
`b` int(11) DEFAULT NULL
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
drop table t1_tmp;
|
|
SHOW CREATE TABLE t1_tmp;
|
|
Table Create Table
|
|
t1_tmp CREATE TABLE `t1_tmp` (
|
|
`a` int(11) DEFAULT NULL
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
drop table t1_tmp;
|
|
SHOW CREATE TABLE t2;
|
|
Table Create Table
|
|
t2 CREATE TEMPORARY TABLE `t2` (
|
|
`b` int(11) DEFAULT NULL
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
drop table t2;
|
|
SHOW CREATE TABLE t2;
|
|
Table Create Table
|
|
t2 CREATE TABLE `t2` (
|
|
`a` int(11) DEFAULT NULL
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
|
drop table t2;
|
|
CREATE TABLE t1 (a INT);
|
|
insert into t1 values (1);
|
|
CREATE TEMPORARY TABLE t1 (b INT);
|
|
insert into t1 values (2);
|
|
RENAME TABLE t1 TO tmp, t1 TO t2;
|
|
select * from tmp;
|
|
b
|
|
2
|
|
select * from t2;
|
|
a
|
|
1
|
|
drop table tmp,t2;
|