summaryrefslogtreecommitdiff
path: root/mysql-test/suite/atomic/rename_combinations.test
blob: b0b5074e56e61fbe9eed01a885774a352058b0f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#
# This tests tries cover most of the recovery cases in
# DDL_LOG_RENAME_TABLE_ACTION and do_rename()
# This test does not intend to crash the server
# It's a complement to main.rename
#

create database test2;

--echo #
--echo # Testing rename error in different places
--echo #

create table t1 (a int);
create table t2 (b int);
create table t3 (c int);
create table t4 (d int);

insert into t1 values(1);
insert into t2 values(2);
insert into t3 values(3);
insert into t4 values(4);

create temporary table tmp1 (a int);
create temporary table tmp2 (b int);
create temporary table tmp3 (c int);
create temporary table tmp4 (d int);

insert into tmp1 values(11);
insert into tmp2 values(22);
insert into tmp3 values(33);
insert into tmp4 values(44);

--error ER_TABLE_EXISTS_ERROR
rename table t3 to t4, t1 to t5, t2 to t1, t5 to t2;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t3 to t4, t2 to t1, t5 to t2;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t2 to t1, t3 to t4, t5 to t2;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t2 to t1, t5 to t2, t3 to t4;

--echo # Try failed rename using two databases
--error ER_NO_SUCH_TABLE
rename table test.t1 to test2.t5, test.t2 to test.t1, t5 to test.t2;

select t1.a+t2.b+t3.c+t4.d from t1,t2,t3,t4;
--error ER_NO_SUCH_TABLE
select * from t5;

--echo #
--echo # Testing rename error in different places with temporary tables
--echo #

--error ER_TABLE_EXISTS_ERROR
rename table tmp3 to tmp4, tmp1 to t5, tmp2 to tmp1, t5 to tmp1;
--error ER_TABLE_EXISTS_ERROR
rename table tmp1 to t5, tmp3 to tmp4, tmp2 to tmp1, t5 to tmp1;
--error ER_TABLE_EXISTS_ERROR
rename table tmp1 to t5, tmp2 to tmp1, tmp3 to tmp4, t5 to tmp1;
--error ER_TABLE_EXISTS_ERROR
rename table tmp1 to t5, tmp2 to tmp1, t5 to tmp1, tmp3 to tmp4;

select tmp1.a+tmp2.b+tmp3.c+tmp4.d from tmp1,tmp2,tmp3,tmp4;
--error ER_NO_SUCH_TABLE
select * from t5;

--echo #
--echo # Testing combinations of rename normal and temporary tables
--echo #

--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t2 to t1, t5 to t2, tmp3 to tmp4, tmp1 to t5, tmp2 to tmp1, t5 to tmp1;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t2 to t1, t5 to t2, tmp1 to t5, tmp3 to tmp4, tmp2 to tmp1, t5 to tmp1;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t2 to t1, t5 to t2, tmp1 to t5, tmp2 to tmp1, tmp3 to tmp4, t5 to tmp1;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t2 to t1, t5 to t2, tmp1 to t5, tmp2 to tmp1, t5 to tmp1, t3 to t4;

--error ER_NO_SUCH_TABLE
rename table t1 to t5, tmp2 to tmp5, t2 to t1, tmp2 to tmp1, t5 to t2, tmp5 to tmp1, t8 to t9;

select t1.a+t2.b+t3.c+t4.d from t1,t2,t3,t4;
select tmp1.a+tmp2.b+tmp3.c+tmp4.d from tmp1,tmp2,tmp3,tmp4;

drop table tmp1,tmp2,tmp3,tmp4;

--echo #
--echo # Similar tests with triggers
--echo #

delimiter |;
create trigger t1_trg before insert on t1 for each row
begin
  if isnull(new.a) then
    set new.a:= 10;
  end if;
end|
create trigger t2_trg before insert on t2 for each row
begin
  if isnull(new.b) then
    set new.b:= 100;
  end if;
end|
create trigger t3_trg before insert on t3 for each row
begin
  if isnull(new.c) then
    set new.c:= 1000;
  end if;
end|

delimiter ;|

--error ER_TABLE_EXISTS_ERROR
rename table t3 to t4, t1 to t5, t2 to t1, t5 to t2;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t3 to t4, t2 to t1, t5 to t2;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t2 to t1, t3 to t4, t5 to t2;
--error ER_TABLE_EXISTS_ERROR
rename table t1 to t5, t2 to t1, t5 to t2, t3 to t4;

--echo # Test of move table between databases
--error ER_TRG_IN_WRONG_SCHEMA
rename table t4 to test2.t5, t2 to t4, test2.t5 to t2, t1 to test2.t6;

--replace_column 6 #
show triggers;

select t1.a+t2.b+t3.c+t4.d from t1,t2,t3,t4;
insert into t1 values(null);
insert into t2 values(null);
insert into t3 values(null);
select (select sum(t1.a) from t1)+ (select sum(t2.b) from t2) + (select sum(t3.c) from t3)+ (select sum(t4.d) from t4);

drop trigger t1_trg;
drop trigger t2_trg;
drop trigger t3_trg;

--echo #
--echo # Test with views
--echo #

create view v1 as select * from t1;
create view v2 as select * from t2;
create view v3 as select * from t3;
create view v4 as select * from t4;

--error ER_TABLE_EXISTS_ERROR
rename table v3 to v4, v1 to t5, v2 to v1, t5 to v2;
--error ER_TABLE_EXISTS_ERROR
rename table v1 to t5, v3 to v4, v2 to v1, t5 to v2;
--error ER_TABLE_EXISTS_ERROR
rename table v1 to t5, v2 to v1, v3 to v4, t5 to v2;
--error ER_TABLE_EXISTS_ERROR
rename table v1 to t5, v2 to v1, t5 to v2, v3 to v4;

--echo # Try failed rename using two databases
--error ER_FORBID_SCHEMA_CHANGE
rename table test.v1 to test.v5, test.v2 to test.v1, test.v3 to test2.v2, non_existing_view to another_non_existing_view;

select (select sum(v1.a) from v1)+ (select sum(v2.b) from v2) + (select sum(v3.c) from v3)+ (select sum(v4.d) from v4);

drop view v1,v2,v3,v4;

#
# Clean up
#
drop table t1, t2, t3, t4;
drop database test2;