mySQL 5.0.11 sources for tomato
[tomato.git] / release / src / router / mysql / mysql-test / t / lock_multi_bug38499.test
blob3d3f084ba5f0ad897a14dcdc20e769dcc237c197
1 # Bug38499 flush tables and multitable table update with derived table cause crash
2 # MySQL >= 5.0
5 # Save the initial number of concurrent sessions
6 --source include/count_sessions.inc
8 SET @odl_sync_frm = @@global.sync_frm;
9 SET @@global.sync_frm = OFF;
11 connect (locker,localhost,root,,);
12 connect (writer,localhost,root,,);
14 --connection default
15 --disable_warnings
16 DROP TABLE IF EXISTS t1;
17 --enable_warnings
18 CREATE TABLE t1( a INT, b INT );
19 INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3), (4, 4);
21 --echo # 1. test regular tables
22 --echo # 1.1. test altering of columns that multiupdate doesn't use
23 --echo # 1.1.1. normal mode
25 --disable_query_log
26 let $i = 100;
27 while ($i) {
28 --dec $i
30 --connection writer
31   send UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0;
33 --connection locker
34   ALTER TABLE t1 ADD COLUMN (c INT);
35   ALTER TABLE t1 DROP COLUMN c;
37 --connection writer
38 --reap
41 --echo # 1.1.2. PS mode
43 --connection writer
44 PREPARE stmt FROM 'UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0';
46 let $i = 100;
47 while ($i) {
48 --dec $i
50 --connection writer
51 --send EXECUTE stmt
53 --connection locker
54   ALTER TABLE t1 ADD COLUMN (c INT);
55   ALTER TABLE t1 DROP COLUMN c;
57 --connection writer
58 --reap
60 --enable_query_log
62 --echo # 1.2. test altering of columns that multiupdate uses
63 --echo # 1.2.1. normal mode
65 --connection default
67 --disable_query_log
68 let $i = 100;
69 while ($i) {
70   dec $i;
72 --connection locker
73 --error 0,ER_DUP_FIELDNAME
74   ALTER TABLE t1 ADD COLUMN a int(11) unsigned default NULL;
75   UPDATE t1 SET a=b;
77 --connection writer
78 --send UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0;
80 --connection locker
81 --error 0,ER_CANT_DROP_FIELD_OR_KEY
82   ALTER TABLE t1 DROP COLUMN a;
84 --connection writer
85 --error 0,ER_BAD_FIELD_ERROR # unknown column error
86 --reap
88 --enable_query_log
90 --echo # 1.2.2. PS mode
92 --disable_query_log
93 let $i = 100;
94 while ($i) {
95   dec $i;
97 --connection locker
98 --error 0,ER_DUP_FIELDNAME
99   ALTER TABLE t1 ADD COLUMN a INT;
100   UPDATE t1 SET a=b;
102 --connection writer
103   PREPARE stmt FROM 'UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0';
104 --send EXECUTE stmt
106 --connection locker
107 --error 0,ER_CANT_DROP_FIELD_OR_KEY
108   ALTER TABLE t1 DROP COLUMN a;
110 --connection writer
111 --error 0,ER_BAD_FIELD_ERROR # Unknown column 'a' in 'field list'
112 --reap
114 --enable_query_log
115 --connection default
116 ALTER TABLE t1 ADD COLUMN a INT;
118 --echo # 2. test UNIONs
119 --echo # 2.1. test altering of columns that multiupdate doesn't use
120 --echo # 2.1.1. normal mode
122 --disable_query_log
123 let $i = 100;
124 while ($i) {
125 --dec $i
127 --connection writer
128   send UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0;
130 --connection locker
131   ALTER TABLE t1 ADD COLUMN (c INT);
132   ALTER TABLE t1 DROP COLUMN c;
134 --connection writer
135 --reap
138 --echo # 2.1.2. PS mode
140 --connection writer
141 PREPARE stmt FROM 'UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0';
143 let $i = 100;
144 while ($i) {
145 --dec $i
147 --connection writer
148 --send EXECUTE stmt
150 --connection locker
151   ALTER TABLE t1 ADD COLUMN (c INT);
152   ALTER TABLE t1 DROP COLUMN c;
154 --connection writer
155 --reap
157 --enable_query_log
159 --echo # 2.2. test altering of columns that multiupdate uses
160 --echo # 2.2.1. normal mode
162 --connection default
164 --disable_query_log
165 let $i = 100;
166 while ($i) {
167   dec $i;
169 --connection locker
170 --error 0,ER_DUP_FIELDNAME
171   ALTER TABLE t1 ADD COLUMN a int(11) unsigned default NULL;
172   UPDATE t1 SET a=b;
174 --connection writer
175 --send UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0;
177 --connection locker
178 --error 0,ER_CANT_DROP_FIELD_OR_KEY
179   ALTER TABLE t1 DROP COLUMN a;
181 --connection writer
182 --error 0,ER_BAD_FIELD_ERROR # Unknown column 'a' in 'field list'
183 --reap
185 --enable_query_log
187 --echo # 2.2.2. PS mode
189 --disable_query_log
190 let $i = 100;
191 while ($i) {
192   dec $i;
194 --connection locker
195 --error 0,ER_DUP_FIELDNAME
196   ALTER TABLE t1 ADD COLUMN a INT;
197   UPDATE t1 SET a=b;
199 --connection writer
200   PREPARE stmt FROM 'UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0';
201 --send EXECUTE stmt
203 --connection locker
204 --error 0,ER_CANT_DROP_FIELD_OR_KEY
205   ALTER TABLE t1 DROP COLUMN a;
207 --connection writer
208 --error 0,ER_BAD_FIELD_ERROR # Unknown column 'a' in 'field list'
209 --reap
211 --enable_query_log
212 --connection default
213 DROP TABLE t1;
216 # Close connections
217 --disconnect locker
218 --disconnect writer
220 SET @@global.sync_frm = @odl_sync_frm;
222 # End of 5.0 tests
224 # Wait till all disconnects are completed
225 --source include/wait_until_count_sessions.inc