mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
168 lines
4 KiB
Text
168 lines
4 KiB
Text
#
|
|
# Test of rename table
|
|
#
|
|
|
|
--source include/count_sessions.inc
|
|
|
|
--disable_warnings
|
|
drop table if exists t0,t1,t2,t3,t4;
|
|
# Clear up from other tests (to ensure that SHOW TABLES below is right)
|
|
drop table if exists t0,t5,t6,t7,t8,t9,t1_1,t1_2,t9_1,t9_2;
|
|
--enable_warnings
|
|
|
|
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;
|
|
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;
|
|
|
|
# The following should give errors
|
|
--error ER_TABLE_EXISTS_ERROR
|
|
rename table t1 to t2;
|
|
--error ER_TABLE_EXISTS_ERROR
|
|
rename table t1 to t1;
|
|
--error ER_TABLE_EXISTS_ERROR
|
|
rename table t3 to t4, t2 to t3, t1 to t2, t4 to t2;
|
|
show tables like "t_";
|
|
--error ER_TABLE_EXISTS_ERROR
|
|
rename table t3 to t1, t2 to t3, t1 to t2, t4 to t1;
|
|
--error ER_NO_SUCH_TABLE
|
|
rename table t3 to t4, t5 to t3, t1 to t2, t4 to t1;
|
|
|
|
select * from t1;
|
|
select * from t2;
|
|
select * from t3;
|
|
|
|
# This should give a warning for t4
|
|
drop table if exists t1,t2,t3,t4;
|
|
|
|
#
|
|
# Bug #2397 RENAME TABLES is not blocked by
|
|
# FLUSH TABLES WITH READ LOCK
|
|
#
|
|
|
|
connect (con1,localhost,root,,);
|
|
connect (con2,localhost,root,,);
|
|
|
|
connection con1;
|
|
CREATE TABLE t1 (a int);
|
|
CREATE TABLE t3 (a int);
|
|
connection con2;
|
|
FLUSH TABLES WITH READ LOCK;
|
|
connection con1;
|
|
send RENAME TABLE t1 TO t2, t3 to t4;
|
|
connection con2;
|
|
show tables;
|
|
UNLOCK TABLES;
|
|
connection con1;
|
|
reap;
|
|
connection con2;
|
|
|
|
# Wait for the the tables to be renamed
|
|
# i.e the query below succeds
|
|
let $query= select * from t2, t4;
|
|
source include/wait_for_query_to_succeed.inc;
|
|
|
|
show tables;
|
|
|
|
drop table t2, t4;
|
|
|
|
disconnect con2;
|
|
disconnect con1;
|
|
connection default;
|
|
|
|
|
|
--echo End of 4.1 tests
|
|
|
|
|
|
--echo #
|
|
--echo # Bug#14959: "ALTER TABLE isn't able to rename a view"
|
|
--echo # Bug#53976: "ALTER TABLE RENAME is allowed on views
|
|
--echo # (not documented, broken)"
|
|
--echo #
|
|
create table t1(f1 int);
|
|
create view v1 as select * from t1;
|
|
--error ER_WRONG_OBJECT
|
|
alter table v1 rename to v2;
|
|
drop view v1;
|
|
drop table t1;
|
|
|
|
--echo End of 5.0 tests
|
|
|
|
--source include/wait_until_count_sessions.inc
|
|
|
|
#
|
|
# Test of rename with temporary tables
|
|
#
|
|
|
|
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);
|
|
|
|
# Can't rename table over another one
|
|
--error ER_TABLE_EXISTS_ERROR
|
|
rename table t1 to t2;
|
|
--error ER_TABLE_EXISTS_ERROR
|
|
rename table t1 to tmp, tmp to t2;
|
|
--error ER_TABLE_EXISTS_ERROR
|
|
rename table t1_tmp to t2_tmp;
|
|
--error ER_TABLE_EXISTS_ERROR
|
|
rename table t1_tmp to tmp, tmp to t2_tmp;
|
|
|
|
show create table t1_tmp;
|
|
show create table t2_tmp;
|
|
|
|
# The following should work
|
|
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;
|
|
SHOW CREATE TABLE t1_tmp;
|
|
drop table t1_tmp;
|
|
SHOW CREATE TABLE t1_tmp;
|
|
drop table t1_tmp;
|
|
SHOW CREATE TABLE t2;
|
|
drop table t2;
|
|
SHOW CREATE TABLE t2;
|
|
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;
|
|
select * from t2;
|
|
drop table tmp,t2;
|
|
|
|
#
|
|
# MDEV-11741 handler::ha_reset(): Assertion `bitmap_is_set_all(&table->s->all_set)' failed or server crash in mi_reset or buffer overrun or unexpected ER_CANT_REMOVE_ALL_FIELDS
|
|
#
|
|
create table t1 (a int) engine=memory;
|
|
--error ER_BAD_DB_ERROR
|
|
rename table t1 to non_existent.t2;
|
|
drop table t1;
|
|
|
|
--echo #
|
|
--echo # Test rename IF EXISTS
|
|
--echo #
|
|
rename table if exists t1 to t2;
|
|
alter table if exists t1 rename to t2;
|
|
create table t2 (a int);
|
|
alter table if exists t1 rename to t2;
|
|
rename table if exists t1 to t2;
|
|
create table t1 (a int);
|
|
--error ER_TABLE_EXISTS_ERROR
|
|
rename table if exists t1 to t2;
|
|
--error ER_TABLE_EXISTS_ERROR
|
|
alter table if exists t1 rename to t2;
|
|
drop table t2;
|
|
rename table if exists t1 to t2;
|
|
alter table if exists t2 rename to t1;
|
|
drop table t1;
|