1
# include/concurrent.inc
3
# Concurrent tests for transactional storage engines, mainly in UPDATE's
5
# Designed and tested by Sinisa Milivojevic, sinisa@mysql.com
7
# two non-interfering UPDATE's not changing result set
10
# $engine_type -- storage engine to be tested
11
# has to be set before sourcing this script.
14
# 2006-08-02 ML test refactored
15
# old name was t/innodb_concurrent.test
16
# main code went into include/concurrent.inc
20
eval SET SESSION STORAGE_ENGINE = $engine_type;
22
drop table if exists t1;
24
create table t1(eta int(11) not null, tipo int(11), c varchar(255));
25
connect (thread1, localhost, mysqltest,,);
27
eval SET SESSION STORAGE_ENGINE = $engine_type;
28
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
29
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
30
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
31
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
32
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
33
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
34
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
35
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
36
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
37
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
38
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
39
select get_lock("hello",1);
40
connect (thread2, localhost, mysqltest,,);
43
send update t1 set eta=1+get_lock("hello",1)*0 where tipo=11;
47
update t1 set eta=2 where tipo=22;
48
select release_lock("hello");
67
# two UPDATE's running and one changing result set
69
#connect (thread1, localhost, mysqltest,,);
71
create table t1(eta int(11) not null, tipo int(11), c varchar(255));
72
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
73
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
74
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
75
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
76
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
77
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
78
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
79
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
80
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
81
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
82
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
83
select get_lock("hello",10);
84
#connect (thread2, localhost, mysqltest,,);
87
send update t1 set eta=1+get_lock("hello",10)*0 where tipo=1;
91
update t1 set tipo=1 where tipo=2;
92
select release_lock("hello");
112
# One UPDATE and one INSERT .... Monty's test
115
#connect (thread1, localhost, mysqltest,,);
117
create table t1 (a int not null, b int not null);
118
insert into t1 values (1,1),(2,1),(3,1),(4,1);
119
select get_lock("hello2",1000);
120
#connect (thread2, localhost, mysqltest,,);
123
send update t1 set b=10+get_lock(concat("hello",a),1000)*0 where
127
insert into t1 values (1,1);
128
select release_lock("hello2");
142
# one UPDATE changing result set and SELECT ... FOR UPDATE
144
#connect (thread1, localhost, mysqltest,,);
146
create table t1(eta int(11) not null, tipo int(11), c varchar(255));
147
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
148
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
149
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
150
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
151
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
152
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
153
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
154
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
155
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
156
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
157
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
158
select get_lock("hello",10);
159
#connect (thread2, localhost, mysqltest,,);
162
send select * from t1 where tipo=2 FOR UPDATE;
166
select release_lock("hello");
168
update t1 set tipo=1+get_lock("hello",10)*0 where tipo=2;
185
# one UPDATE not changing result set and SELECT ... FOR UPDATE
187
#connect (thread1, localhost, mysqltest,,);
189
create table t1(eta int(11) not null, tipo int(11), c varchar(255));
190
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
191
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
192
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
193
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
194
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
195
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
196
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
197
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
198
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
199
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
200
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
201
select get_lock("hello",10);
202
#connect (thread2, localhost, mysqltest,,);
205
send select * from t1 where tipo=2 FOR UPDATE;
209
select release_lock("hello");
211
update t1 set tipo=11+get_lock("hello",10)*0 where tipo=22;
228
# two SELECT ... FOR UPDATE
230
#connect (thread1, localhost, mysqltest,,);
232
create table t1(eta int(11) not null, tipo int(11), c varchar(255));
233
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
234
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
235
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
236
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
237
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
238
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
239
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
240
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
241
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
242
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
243
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
244
select get_lock("hello",10);
245
#connect (thread2, localhost, mysqltest,,);
248
send select * from t1 where tipo=2 FOR UPDATE;
252
select release_lock("hello");
254
select * from t1 where tipo=1 FOR UPDATE;
271
# one UPDATE changing result set and DELETE
273
#connect (thread1, localhost, mysqltest,,);
275
create table t1(eta int(11) not null, tipo int(11), c varchar(255));
276
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
277
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
278
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
279
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
280
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
281
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
282
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
283
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
284
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
285
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
286
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
287
select get_lock("hello",10);
288
#connect (thread2, localhost, mysqltest,,);
291
send delete from t1 where tipo=2;
295
select release_lock("hello");
297
update t1 set tipo=1+get_lock("hello",10)*0 where tipo=2;
315
# one UPDATE not changing result set and DELETE
317
#connect (thread1, localhost, mysqltest,,);
319
create table t1(eta int(11) not null, tipo int(11), c varchar(255));
320
insert into t1 values (7,7, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
321
insert into t1 values (8,8, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
322
insert into t1 values (10,1,"ccccccccccccccccccccccccccccccccccccccccccc");
323
insert into t1 values (20,2,"ddddddddddddddddddddddddddddddddddddddddddd");
324
insert into t1 values (30,1,"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
325
insert into t1 values (40,2,"fffffffffffffffffffffffffffffffffffffffffff");
326
insert into t1 values (50,1,"ggggggggggggggggggggggggggggggggggggggggggg");
327
insert into t1 values (60,2,"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");
328
insert into t1 values (70,1,"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
329
insert into t1 values (80,22,"jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
330
insert into t1 values (90,11,"kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk");
331
select get_lock("hello",10);
332
#connect (thread2, localhost, mysqltest,,);
335
send delete from t1 where tipo=2;
339
select release_lock("hello");
340
update t1 set tipo=1+get_lock("hello",10)*0 where tipo=22;