~vadim-tk/percona-server/percona-5.5.15-galera

« back to all changes in this revision

Viewing changes to mysql-test/t/lock_multi_bug38691.test

  • Committer: root
  • Date: 2011-09-10 16:37:18 UTC
  • Revision ID: root@r815.office.percona.com-20110910163718-ydh4zj8hcdgoyavb
Porting Galera to 5.5.15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#
 
2
# Bug#38691 segfault/abort in ``UPDATE ...JOIN'' while
 
3
#           ``FLUSH TABLES WITH READ LOCK''
 
4
# MySQL >= 5.0
 
5
#
 
6
 
 
7
 
 
8
# Save the initial number of concurrent sessions
 
9
--source include/count_sessions.inc
 
10
 
 
11
SET @odl_sync_frm = @@global.sync_frm;
 
12
SET @@global.sync_frm = OFF;
 
13
 
 
14
# Test to see if select will get the lock ahead of low priority update
 
15
 
 
16
connect (locker,localhost,root,,);
 
17
connect (writer,localhost,root,,);
 
18
 
 
19
--connection default
 
20
--disable_warnings
 
21
DROP TABLE IF EXISTS t1,t2,t3;
 
22
--enable_warnings
 
23
 
 
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)
 
29
);
 
30
 
 
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;
 
34
 
 
35
--echo # test altering of columns that multiupdate doesn't use
 
36
 
 
37
--echo # normal mode
 
38
 
 
39
--disable_query_log
 
40
let $i = 100;
 
41
while ($i) {
 
42
--dec $i
 
43
 
 
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;
 
47
 
 
48
--connection locker
 
49
  ALTER TABLE t2 ADD COLUMN (c INT);
 
50
  ALTER TABLE t2 DROP COLUMN c;
 
51
 
 
52
--connection writer
 
53
--reap
 
54
}
 
55
 
 
56
--echo # PS mode
 
57
 
 
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';
 
61
 
 
62
let $i = 100;
 
63
while ($i) {
 
64
--dec $i
 
65
 
 
66
--connection writer
 
67
--send EXECUTE stmt
 
68
 
 
69
--connection locker
 
70
  ALTER TABLE t2 ADD COLUMN (c INT);
 
71
  ALTER TABLE t2 DROP COLUMN c;
 
72
 
 
73
--connection writer
 
74
--reap
 
75
}
 
76
--enable_query_log
 
77
 
 
78
 
 
79
--echo # test altering of columns that multiupdate uses
 
80
 
 
81
--echo # normal mode
 
82
 
 
83
--connection default
 
84
 
 
85
--disable_query_log
 
86
let $i = 100;
 
87
while ($i) {
 
88
  dec $i;
 
89
 
 
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;
 
94
 
 
95
--connection writer
 
96
--send UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a) SET a = NULL WHERE t1.b <> t2.b
 
97
 
 
98
--connection locker
 
99
--error 0,ER_CANT_DROP_FIELD_OR_KEY
 
100
  ALTER TABLE t2 DROP COLUMN a;
 
101
 
 
102
--connection writer
 
103
--error 0,ER_BAD_FIELD_ERROR
 
104
--reap
 
105
}
 
106
--enable_query_log
 
107
 
 
108
--echo # PS mode
 
109
 
 
110
--disable_query_log
 
111
let $i = 100;
 
112
while ($i) {
 
113
  dec $i;
 
114
 
 
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;
 
119
 
 
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
 
123
 
 
124
--connection locker
 
125
--error 0,ER_CANT_DROP_FIELD_OR_KEY
 
126
  ALTER TABLE t2 DROP COLUMN a;
 
127
 
 
128
--connection writer
 
129
--error 0,ER_BAD_FIELD_ERROR
 
130
--reap
 
131
 
 
132
}
 
133
--enable_query_log
 
134
--connection default
 
135
DROP TABLE t1, t2, t3;
 
136
 
 
137
 
 
138
# Close connections
 
139
--disconnect locker
 
140
--disconnect writer
 
141
 
 
142
SET @@global.sync_frm = @odl_sync_frm;
 
143
 
 
144
# Wait till all disconnects are completed
 
145
--source include/wait_until_count_sessions.inc
 
146