mySQL 5.0.11 sources for tomato
[tomato.git] / release / src / router / mysql / mysql-test / t / lock_multi_bug38691.test
blob881a0d8e5024cffdfeadf79762c067bf6fdbc84c
2 # Bug#38691 segfault/abort in ``UPDATE ...JOIN'' while
3 #           ``FLUSH TABLES WITH READ LOCK''
4 # MySQL >= 5.0
8 # Save the initial number of concurrent sessions
9 --source include/count_sessions.inc
11 SET @odl_sync_frm = @@global.sync_frm;
12 SET @@global.sync_frm = OFF;
14 # Test to see if select will get the lock ahead of low priority update
16 connect (locker,localhost,root,,);
17 connect (writer,localhost,root,,);
19 --connection default
20 --disable_warnings
21 DROP TABLE IF EXISTS t1,t2,t3;
22 --enable_warnings
24 CREATE TABLE t1 (
25   a int(11) unsigned default NULL,
26   b varchar(255) default NULL,
27   UNIQUE KEY a (a),
28   KEY b (b)
31 INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3);
32 CREATE TABLE t2 SELECT * FROM t1;
33 CREATE TABLE t3 SELECT * FROM t1;
35 --echo # test altering of columns that multiupdate doesn't use
37 --echo # normal mode
39 --disable_query_log
40 let $i = 100;
41 while ($i) {
42 --dec $i
44 --connection writer
45   send UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a)
46          SET a = NULL WHERE t1.b <> t2.b;
48 --connection locker
49   ALTER TABLE t2 ADD COLUMN (c INT);
50   ALTER TABLE t2 DROP COLUMN c;
52 --connection writer
53 --reap
56 --echo # PS mode
58 --connection writer
59 PREPARE stmt FROM 'UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a)
60                      SET a = NULL WHERE t1.b <> t2.b';
62 let $i = 100;
63 while ($i) {
64 --dec $i
66 --connection writer
67 --send EXECUTE stmt
69 --connection locker
70   ALTER TABLE t2 ADD COLUMN (c INT);
71   ALTER TABLE t2 DROP COLUMN c;
73 --connection writer
74 --reap
76 --enable_query_log
79 --echo # test altering of columns that multiupdate uses
81 --echo # normal mode
83 --connection default
85 --disable_query_log
86 let $i = 100;
87 while ($i) {
88   dec $i;
90 --connection locker
91 --error 0,ER_DUP_FIELDNAME
92   ALTER TABLE t2 ADD COLUMN a int(11) unsigned default NULL;
93   UPDATE t2 SET a=b;
95 --connection writer
96 --send UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a) SET a = NULL WHERE t1.b <> t2.b
98 --connection locker
99 --error 0,ER_CANT_DROP_FIELD_OR_KEY
100   ALTER TABLE t2 DROP COLUMN a;
102 --connection writer
103 --error 0,ER_BAD_FIELD_ERROR
104 --reap
106 --enable_query_log
108 --echo # PS mode
110 --disable_query_log
111 let $i = 100;
112 while ($i) {
113   dec $i;
115 --connection locker
116 --error 0,ER_DUP_FIELDNAME
117   ALTER TABLE t2 ADD COLUMN a int(11) unsigned default NULL;
118   UPDATE t2 SET a=b;
120 --connection writer
121   PREPARE stmt FROM 'UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a) SET a = NULL WHERE t1.b <> t2.b';
122 --send EXECUTE stmt
124 --connection locker
125 --error 0,ER_CANT_DROP_FIELD_OR_KEY
126   ALTER TABLE t2 DROP COLUMN a;
128 --connection writer
129 --error 0,ER_BAD_FIELD_ERROR
130 --reap
133 --enable_query_log
134 --connection default
135 DROP TABLE t1, t2, t3;
138 # Close connections
139 --disconnect locker
140 --disconnect writer
142 SET @@global.sync_frm = @odl_sync_frm;
144 # Wait till all disconnects are completed
145 --source include/wait_until_count_sessions.inc