~ubuntu-branches/ubuntu/precise/mysql-5.1/precise

« back to all changes in this revision

Viewing changes to mysql-test/r/innodb_mysql_lock2.result

  • Committer: Bazaar Package Importer
  • Author(s): Chuck Short
  • Date: 2010-06-21 15:31:05 UTC
  • mfrom: (1.1.3 upstream)
  • mto: This revision was merged to the branch mainline in revision 6.
  • Revision ID: james.westby@ubuntu.com-20100621153105-pbbz3t6nyrf9t2zq
Tags: upstream-5.1.48
ImportĀ upstreamĀ versionĀ 5.1.48

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#
 
2
# Test how do we handle locking in various cases when
 
3
# we read data from InnoDB tables.
 
4
#
 
5
# In fact by performing this test we check two things:
 
6
# 1) That SQL-layer correctly determine type of thr_lock.c
 
7
#    lock to be acquired/passed to InnoDB engine.
 
8
# 2) That InnoDB engine correctly interprets this lock
 
9
#    type and takes necessary row locks or does not
 
10
#    take them if they are not necessary.
 
11
#
 
12
# This test makes sense only in REPEATABLE-READ mode as
 
13
# in SERIALIZABLE mode all statements that read data take
 
14
# shared lock on them to enforce its semantics.
 
15
select @@session.tx_isolation;
 
16
@@session.tx_isolation
 
17
REPEATABLE-READ
 
18
# Prepare playground by creating tables, views,
 
19
# routines and triggers used in tests.
 
20
drop table if exists t0, t1, t2, t3, t4, t5, te;
 
21
drop view if exists v1, v2;
 
22
drop procedure if exists p1;
 
23
drop procedure if exists p2;
 
24
drop function if exists f1;
 
25
drop function if exists f2;
 
26
drop function if exists f3;
 
27
drop function if exists f4;
 
28
drop function if exists f5;
 
29
drop function if exists f6;
 
30
drop function if exists f7;
 
31
drop function if exists f8;
 
32
drop function if exists f9;
 
33
drop function if exists f10;
 
34
drop function if exists f11;
 
35
drop function if exists f12;
 
36
drop function if exists f13;
 
37
drop function if exists f14;
 
38
drop function if exists f15;
 
39
create table t1 (i int primary key) engine=innodb;
 
40
insert into t1 values (1), (2), (3), (4), (5);
 
41
create table t2 (j int primary key) engine=innodb;
 
42
insert into t2 values (1), (2), (3), (4), (5);
 
43
create table t3 (k int primary key) engine=innodb;
 
44
insert into t3 values (1), (2), (3);
 
45
create table t4 (l int primary key) engine=innodb;
 
46
insert into t4 values (1);
 
47
create table t5 (l int primary key) engine=innodb;
 
48
insert into t5 values (1);
 
49
create table te(e int primary key);
 
50
insert into te values (1);
 
51
create view v1 as select i from t1;
 
52
create view v2 as select j from t2 where j in (select i from t1);
 
53
create procedure p1(k int) insert into t2 values (k);
 
54
create function f1() returns int
 
55
begin
 
56
declare j int;
 
57
select i from t1 where i = 1 into j;
 
58
return j;
 
59
end|
 
60
create function f2() returns int
 
61
begin
 
62
declare k int;
 
63
select i from t1 where i = 1 into k;
 
64
insert into t2 values (k + 5);
 
65
return 0;
 
66
end|
 
67
create function f3() returns int
 
68
begin
 
69
return (select i from t1 where i = 3);
 
70
end|
 
71
create function f4() returns int
 
72
begin
 
73
if (select i from t1 where i = 3) then
 
74
return 1;
 
75
else
 
76
return 0;
 
77
end if;
 
78
end|
 
79
create function f5() returns int
 
80
begin
 
81
insert into t2 values ((select i from t1 where i = 1) + 5);
 
82
return 0;
 
83
end|
 
84
create function f6() returns int
 
85
begin
 
86
declare k int;
 
87
select i from v1 where i = 1 into k;
 
88
return k;
 
89
end|
 
90
create function f7() returns int
 
91
begin
 
92
declare k int;
 
93
select j from v2 where j = 1 into k;
 
94
return k;
 
95
end|
 
96
create function f8() returns int
 
97
begin
 
98
declare k int;
 
99
select i from v1 where i = 1 into k;
 
100
insert into t2 values (k+5);
 
101
return k;
 
102
end|
 
103
create function f9() returns int
 
104
begin
 
105
update v2 set j=j+10 where j=1;
 
106
return 1;
 
107
end|
 
108
create function f10() returns int
 
109
begin
 
110
return f1();
 
111
end|
 
112
create function f11() returns int
 
113
begin
 
114
declare k int;
 
115
set k= f1();
 
116
insert into t2 values (k+5);
 
117
return k;
 
118
end|
 
119
create function f12(p int) returns int
 
120
begin
 
121
insert into t2 values (p);
 
122
return p;
 
123
end|
 
124
create function f13(p int) returns int
 
125
begin
 
126
return p;
 
127
end|
 
128
create procedure p2(inout p int)
 
129
begin
 
130
select i from t1 where i = 1 into p;
 
131
end|
 
132
create function f14() returns int
 
133
begin
 
134
declare k int;
 
135
call p2(k);
 
136
insert into t2 values (k+5);
 
137
return k;
 
138
end|
 
139
create function f15() returns int
 
140
begin
 
141
declare k int;
 
142
call p2(k);
 
143
return k;
 
144
end|
 
145
create trigger t4_bi before insert on t4 for each row
 
146
begin
 
147
declare k int;
 
148
select i from t1 where i=1 into k;
 
149
set new.l= k+1;
 
150
end|
 
151
create trigger t4_bu before update on t4 for each row
 
152
begin
 
153
if (select i from t1 where i=1) then
 
154
set new.l= 2;
 
155
end if;
 
156
end|
 
157
# Trigger below uses insertion of duplicate key in 'te'
 
158
# table as a way to abort delete operation.
 
159
create trigger t4_bd before delete on t4 for each row
 
160
begin
 
161
if !(select i from v1 where i=1) then
 
162
insert into te values (1);
 
163
end if;
 
164
end|
 
165
create trigger t5_bi before insert on t5 for each row
 
166
begin
 
167
set new.l= f1()+1;
 
168
end|
 
169
create trigger t5_bu before update on t5 for each row
 
170
begin
 
171
declare j int;
 
172
call p2(j);
 
173
set new.l= j + 1;
 
174
end|
 
175
#
 
176
# Set common variables to be used by scripts called below.
 
177
#
 
178
#
 
179
# 1. Statements that read tables and do not use subqueries.
 
180
#
 
181
#
 
182
# 1.1 Simple SELECT statement.
 
183
#
 
184
# No locks are necessary as this statement won't be written
 
185
# to the binary log and InnoDB supports snapshots.
 
186
Success: 'select * from t1' doesn't take row locks on 't1'.
 
187
#
 
188
# 1.2 Multi-UPDATE statement.
 
189
#
 
190
# Has to take shared locks on rows in the table being read as this
 
191
# statement will be written to the binary log and therefore should
 
192
# be serialized with concurrent statements.
 
193
Success: 'update t2, t1 set j= j - 1 where i = j' takes shared row locks on 't1'.
 
194
#
 
195
# 1.3 Multi-DELETE statement.
 
196
#
 
197
# The above is true for this statement as well.
 
198
Success: 'delete t2 from t1, t2 where i = j' takes shared row locks on 't1'.
 
199
#
 
200
# 1.4 DESCRIBE statement.
 
201
#
 
202
# This statement does not really read data from the
 
203
# target table and thus does not take any lock on it.
 
204
# We check this for completeness of coverage.
 
205
Success: 'describe t1' doesn't take row locks on 't1'.
 
206
#
 
207
# 1.5 SHOW statements.
 
208
 
209
# The above is true for SHOW statements as well.
 
210
Success: 'show create table t1' doesn't take row locks on 't1'.
 
211
Success: 'show keys from t1' doesn't take row locks on 't1'.
 
212
#
 
213
# 2. Statements which read tables through subqueries.
 
214
#
 
215
#
 
216
# 2.1 CALL with a subquery.
 
217
 
218
# A strong lock is not necessary as this statement is not
 
219
# written to the binary log as a whole (it is written
 
220
# statement-by-statement) and thanks to MVCC we can always get
 
221
# versions of rows prior to the update that has locked them.
 
222
# But in practice InnoDB does locking reads for all statements
 
223
# other than SELECT (unless it is a READ-COMITTED mode or
 
224
# innodb_locks_unsafe_for_binlog is ON).
 
225
Success: 'call p1((select i + 5 from t1 where i = 1))' takes shared row locks on 't1'.
 
226
#
 
227
# 2.2 CREATE TABLE with a subquery.
 
228
#
 
229
# Has to take shared locks on rows in the table being read as
 
230
# this statement is written to the binary log and therefore
 
231
# should be serialized with concurrent statements.
 
232
Success: 'create table t0 engine=innodb select * from t1' takes shared row locks on 't1'.
 
233
drop table t0;
 
234
Success: 'create table t0 engine=innodb select j from t2 where j in (select i from t1)' takes shared row locks on 't1'.
 
235
drop table t0;
 
236
#
 
237
# 2.3 DELETE with a subquery.
 
238
#
 
239
# The above is true for this statement as well.
 
240
Success: 'delete from t2 where j in (select i from t1)' takes shared row locks on 't1'.
 
241
#
 
242
# 2.4 MULTI-DELETE with a subquery.
 
243
#
 
244
# Same is true for this statement as well.
 
245
Success: 'delete t2 from t3, t2 where k = j and j in (select i from t1)' takes shared row locks on 't1'.
 
246
#
 
247
# 2.5 DO with a subquery.
 
248
#
 
249
# In theory should not take row locks as it is not logged.
 
250
# In practice InnoDB takes shared row locks.
 
251
Success: 'do (select i from t1 where i = 1)' takes shared row locks on 't1'.
 
252
#
 
253
# 2.6 INSERT with a subquery.
 
254
#
 
255
# Has to take shared locks on rows in the table being read as
 
256
# this statement is written to the binary log and therefore
 
257
# should be serialized with concurrent statements.
 
258
Success: 'insert into t2 select i+5 from t1' takes shared row locks on 't1'.
 
259
Success: 'insert into t2 values ((select i+5 from t1 where i = 4))' takes shared row locks on 't1'.
 
260
#
 
261
# 2.7 LOAD DATA with a subquery.
 
262
 
263
# The above is true for this statement as well.
 
264
Success: 'load data infile '../../std_data/rpl_loaddata.dat' into table t2 (@a, @b) set j= @b + (select i from t1 where i = 1)' takes shared row locks on 't1'.
 
265
#
 
266
# 2.8 REPLACE with a subquery.
 
267
 
268
# Same is true for this statement as well.
 
269
Success: 'replace into t2 select i+5 from t1' takes shared row locks on 't1'.
 
270
Success: 'replace into t2 values ((select i+5 from t1 where i = 4))' takes shared row locks on 't1'.
 
271
#
 
272
# 2.9 SELECT with a subquery.
 
273
#
 
274
# Locks are not necessary as this statement is not written
 
275
# to the binary log and thanks to MVCC we can always get
 
276
# versions of rows prior to the update that has locked them.
 
277
#
 
278
# Also serves as a test case for bug #46947 "Embedded SELECT
 
279
# without FOR UPDATE is causing a lock".
 
280
Success: 'select * from t2 where j in (select i from t1)' doesn't take row locks on 't1'.
 
281
#
 
282
# 2.10 SET with a subquery.
 
283
#
 
284
# In theory should not require locking as it is not written
 
285
# to the binary log. In practice InnoDB acquires shared row
 
286
# locks.
 
287
Success: 'set @a:= (select i from t1 where i = 1)' takes shared row locks on 't1'.
 
288
#
 
289
# 2.11 SHOW with a subquery.
 
290
 
291
# Similarly to the previous case, in theory should not require locking
 
292
# as it is not written to the binary log. In practice InnoDB
 
293
# acquires shared row locks.
 
294
Success: 'show tables from test where Tables_in_test = 't2' and (select i from t1 where i = 1)' takes shared row locks on 't1'.
 
295
Success: 'show columns from t2 where (select i from t1 where i = 1)' takes shared row locks on 't1'.
 
296
#
 
297
# 2.12 UPDATE with a subquery.
 
298
#
 
299
# Has to take shared locks on rows in the table being read as
 
300
# this statement is written to the binary log and therefore
 
301
# should be serialized with concurrent statements.
 
302
Success: 'update t2 set j= j-10 where j in (select i from t1)' takes shared row locks on 't1'.
 
303
#
 
304
# 2.13 MULTI-UPDATE with a subquery.
 
305
#
 
306
# Same is true for this statement as well.
 
307
Success: 'update t2, t3 set j= j -10 where j=k and j in (select i from t1)' takes shared row locks on 't1'.
 
308
#
 
309
# 3. Statements which read tables through a view.
 
310
#
 
311
#
 
312
# 3.1 SELECT statement which uses some table through a view.
 
313
#
 
314
# Since this statement is not written to the binary log
 
315
# and old version of rows are accessible thanks to MVCC,
 
316
# no locking is necessary.
 
317
Success: 'select * from v1' doesn't take row locks on 't1'.
 
318
Success: 'select * from v2' doesn't take row locks on 't1'.
 
319
Success: 'select * from t2 where j in (select i from v1)' doesn't take row locks on 't1'.
 
320
Success: 'select * from t3 where k in (select j from v2)' doesn't take row locks on 't1'.
 
321
#
 
322
# 3.2 Statements which modify a table and use views.
 
323
#
 
324
# Since such statements are going to be written to the binary
 
325
# log they need to be serialized against concurrent statements
 
326
# and therefore should take shared row locks on data read.
 
327
Success: 'update t2 set j= j-10 where j in (select i from v1)' takes shared row locks on 't1'.
 
328
Success: 'update t3 set k= k-10 where k in (select j from v2)' takes shared row locks on 't1'.
 
329
Success: 'update t2, v1 set j= j-10 where j = i' takes shared row locks on 't1'.
 
330
Success: 'update v2 set j= j-10 where j = 3' takes shared row locks on 't1'.
 
331
#
 
332
# 4. Statements which read tables through stored functions.
 
333
#
 
334
#
 
335
# 4.1 SELECT/SET with a stored function which does not 
 
336
#     modify data and uses SELECT in its turn.
 
337
#
 
338
# Calls to such functions won't get into the binary log and
 
339
# thus don't need to acquire strong locks.
 
340
# In 5.5 due to fix for bug #53921 "Wrong locks for SELECTs
 
341
# used stored functions may lead to broken SBR" strong locks
 
342
# are taken (we accepted it as a trade-off for this fix).
 
343
Success: 'select f1()' doesn't take row locks on 't1'.
 
344
Success: 'set @a:= f1()' doesn't take row locks on 't1'.
 
345
#
 
346
# 4.2 INSERT (or other statement which modifies data) with
 
347
#     a stored function which does not modify data and uses
 
348
#     SELECT.
 
349
#
 
350
# Since such statement is written to the binary log it should
 
351
# be serialized with concurrent statements affecting the data
 
352
# it uses. Therefore it should take row locks on the data
 
353
# it reads.
 
354
# But due to bug #53921 "Wrong locks for SELECTs used stored
 
355
# functions may lead to broken SBR" no lock is taken.
 
356
Success: 'insert into t2 values (f1() + 5)' doesn't take row locks on 't1'.
 
357
#
 
358
# 4.3 SELECT/SET with a stored function which
 
359
#     reads and modifies data.
 
360
#
 
361
# Since a call to such function is written to the binary log,
 
362
# it should be serialized with concurrent statements affecting
 
363
# the data it uses. Hence, row locks on the data read
 
364
# should be taken.
 
365
# But due to bug #53921 "Wrong locks for SELECTs used stored
 
366
# functions may lead to broken SBR" no lock is taken.
 
367
Success: 'select f2()' doesn't take row locks on 't1'.
 
368
Success: 'set @a:= f2()' doesn't take row locks on 't1'.
 
369
#
 
370
# 4.4. SELECT/SET with a stored function which does not
 
371
#      modify data and reads a table through subselect
 
372
#      in a control construct.
 
373
#
 
374
# Again, in theory a call to this function won't get to the
 
375
# binary log and thus no locking is needed. But in practice
 
376
# we don't detect this fact early enough (get_lock_type_for_table())
 
377
# to avoid taking row locks.
 
378
Success: 'select f3()' takes shared row locks on 't1'.
 
379
Success: 'set @a:= f3()' takes shared row locks on 't1'.
 
380
Success: 'select f4()' takes shared row locks on 't1'.
 
381
Success: 'set @a:= f4()' takes shared row locks on 't1'.
 
382
#
 
383
# 4.5. INSERT (or other statement which modifies data) with
 
384
#      a stored function which does not modify data and reads
 
385
#      the table through a subselect in one of its control
 
386
#      constructs.
 
387
#
 
388
# Since such statement is written to the binary log it should
 
389
# be serialized with concurrent statements affecting data it
 
390
# uses. Therefore it should take row locks on the data
 
391
# it reads.
 
392
Success: 'insert into t2 values (f3() + 5)' takes shared row locks on 't1'.
 
393
Success: 'insert into t2 values (f4() + 6)' takes shared row locks on 't1'.
 
394
#
 
395
# 4.6 SELECT/SET which uses a stored function with
 
396
#      DML which reads a table via a subquery.
 
397
#
 
398
# Since call to such function is written to the binary log
 
399
# it should be serialized with concurrent statements.
 
400
# Hence reads should take row locks.
 
401
Success: 'select f5()' takes shared row locks on 't1'.
 
402
Success: 'set @a:= f5()' takes shared row locks on 't1'.
 
403
#
 
404
# 4.7 SELECT/SET which uses a stored function which
 
405
#     doesn't modify data and reads tables through
 
406
#     a view.
 
407
#
 
408
# Once again, in theory, calls to such functions won't
 
409
# get into the binary log and thus don't need row
 
410
# locks. In practice this fact is discovered
 
411
# too late to have any effect.
 
412
# But due to bug #53921 "Wrong locks for SELECTs used stored
 
413
# functions may lead to broken SBR" no lock is taken
 
414
# in case of simple SELECT.
 
415
Success: 'select f6()' doesn't take row locks on 't1'.
 
416
Success: 'set @a:= f6()' doesn't take row locks on 't1'.
 
417
Success: 'select f7()' takes shared row locks on 't1'.
 
418
Success: 'set @a:= f7()' takes shared row locks on 't1'.
 
419
#
 
420
# 4.8 INSERT which uses stored function which
 
421
#     doesn't modify data and reads a table
 
422
#     through a view.
 
423
#
 
424
# Since such statement is written to the binary log and
 
425
# should be serialized with concurrent statements affecting
 
426
# the data it uses. Therefore it should take row locks on
 
427
# the rows it reads.
 
428
# But due to bug #53921 "Wrong locks for SELECTs used stored
 
429
# functions may lead to broken SBR" no lock is taken
 
430
# in case of simple SELECT.
 
431
Success: 'insert into t3 values (f6() + 5)' doesn't take row locks on 't1'.
 
432
Success: 'insert into t3 values (f7() + 5)' takes shared row locks on 't1'.
 
433
#
 
434
# 4.9 SELECT which uses a stored function which
 
435
#     modifies data and reads tables through a view.
 
436
#
 
437
# Since a call to such function is written to the binary log
 
438
# it should be serialized with concurrent statements.
 
439
# Hence, reads should take row locks.
 
440
# But due to bug #53921 "Wrong locks for SELECTs used stored
 
441
# functions may lead to broken SBR" no lock is taken
 
442
# in case of simple SELECT.
 
443
Success: 'select f8()' doesn't take row locks on 't1'.
 
444
Success: 'select f9()' takes shared row locks on 't1'.
 
445
#
 
446
# 4.10 SELECT which uses stored function which doesn't modify
 
447
#      data and reads a table indirectly, by calling another
 
448
#      function.
 
449
#
 
450
# Calls to such functions won't get into the binary log and
 
451
# thus don't need to acquire strong locks.
 
452
# In 5.5 due to fix for bug #53921 "Wrong locks for SELECTs
 
453
# used stored functions may lead to broken SBR" strong locks
 
454
# are taken (we accepted it as a trade-off for this fix).
 
455
Success: 'select f10()' doesn't take row locks on 't1'.
 
456
#
 
457
# 4.11 INSERT which uses a stored function which doesn't modify
 
458
#      data and reads a table indirectly, by calling another
 
459
#      function. 
 
460
#
 
461
# Since such statement is written to the binary log, it should
 
462
# be serialized with concurrent statements affecting the data it
 
463
# uses. Therefore it should take row locks on data it reads.
 
464
# But due to bug #53921 "Wrong locks for SELECTs used stored
 
465
# functions may lead to broken SBR" no lock is taken.
 
466
Success: 'insert into t2 values (f10() + 5)' doesn't take row locks on 't1'.
 
467
#
 
468
# 4.12 SELECT which uses a stored function which modifies
 
469
#      data and reads a table indirectly, by calling another
 
470
#      function. 
 
471
#
 
472
# Since a call to such function is written to the binary log
 
473
# it should be serialized from concurrent statements.
 
474
# Hence, reads should take row locks.
 
475
# But due to bug #53921 "Wrong locks for SELECTs used stored
 
476
# functions may lead to broken SBR" no lock is taken.
 
477
Success: 'select f11()' doesn't take row locks on 't1'.
 
478
#
 
479
# 4.13 SELECT that reads a table through a subquery passed
 
480
#      as a parameter to a stored function which modifies
 
481
#      data.
 
482
#
 
483
# Even though a call to this function is written to the
 
484
# binary log, values of its parameters are written as literals.
 
485
# So there is no need to acquire row locks on rows used in 
 
486
# the subquery.
 
487
# But due to the fact that in 5.1 for prelocked statements
 
488
# THD::in_lock_tables is set to TRUE we acquire strong locks
 
489
# (see also bug#44613 "SELECT statement inside FUNCTION takes
 
490
# a shared lock" [sic!!!]).
 
491
Success: 'select f12((select i+10 from t1 where i=1))' takes shared row locks on 't1'.
 
492
#
 
493
# 4.14 INSERT that reads a table via a subquery passed
 
494
#      as a parameter to a stored function which doesn't
 
495
#      modify data.
 
496
#
 
497
# Since this statement is written to the binary log it should
 
498
# be serialized with concurrent statements affecting the data it
 
499
# uses. Therefore it should take row locks on the data it reads.
 
500
Success: 'insert into t2 values (f13((select i+10 from t1 where i=1)))' takes shared row locks on 't1'.
 
501
#
 
502
# 5. Statements that read tables through stored procedures.
 
503
#
 
504
#
 
505
# 5.1 CALL statement which reads a table via SELECT.
 
506
#
 
507
# Since neither this statement nor its components are
 
508
# written to the binary log, there is no need to take
 
509
# row locks on the data it reads.
 
510
Success: 'call p2(@a)' doesn't take row locks on 't1'.
 
511
#
 
512
# 5.2 Function that modifies data and uses CALL, 
 
513
#     which reads a table through SELECT.
 
514
#
 
515
# Since a call to such function is written to the binary
 
516
# log, it should be serialized with concurrent statements.
 
517
# Hence, in this case reads should take row locks on data.
 
518
# But due to bug #53921 "Wrong locks for SELECTs used stored
 
519
# functions may lead to broken SBR" no lock is taken.
 
520
Success: 'select f14()' doesn't take row locks on 't1'.
 
521
#
 
522
# 5.3 SELECT that calls a function that doesn't modify data and
 
523
#     uses a CALL statement that reads a table via SELECT.
 
524
#
 
525
# Calls to such functions won't get into the binary log and
 
526
# thus don't need to acquire strong locks.
 
527
# In 5.5 due to fix for bug #53921 "Wrong locks for SELECTs
 
528
# used stored functions may lead to broken SBR" strong locks
 
529
# are taken (we accepted it as a trade-off for this fix).
 
530
Success: 'select f15()' doesn't take row locks on 't1'.
 
531
#
 
532
# 5.4 INSERT which calls function which doesn't modify data and
 
533
#     uses CALL statement which reads table through SELECT.
 
534
#
 
535
# Since such statement is written to the binary log it should
 
536
# be serialized with concurrent statements affecting data it
 
537
# uses. Therefore it should take row locks on data it reads.
 
538
# But due to bug #53921 "Wrong locks for SELECTs used stored
 
539
# functions may lead to broken SBR" no lock is taken.
 
540
Success: 'insert into t2 values (f15()+5)' doesn't take row locks on 't1'.
 
541
#
 
542
# 6. Statements that use triggers.
 
543
#
 
544
#
 
545
# 6.1 Statement invoking a trigger that reads table via SELECT.
 
546
#
 
547
# Since this statement is written to the binary log it should
 
548
# be serialized with concurrent statements affecting the data
 
549
# it uses. Therefore, it should take row locks on the data
 
550
# it reads.
 
551
# But due to bug #53921 "Wrong locks for SELECTs used stored
 
552
# functions may lead to broken SBR" no lock is taken.
 
553
Success: 'insert into t4 values (2)' doesn't take row locks on 't1'.
 
554
#
 
555
# 6.2 Statement invoking a trigger that reads table through
 
556
#     a subquery in a control construct.
 
557
#
 
558
# The above is true for this statement as well.
 
559
Success: 'update t4 set l= 2 where l = 1' takes shared row locks on 't1'.
 
560
#
 
561
# 6.3 Statement invoking a trigger that reads a table through
 
562
#     a view.
 
563
#
 
564
# And for this statement.
 
565
Success: 'delete from t4 where l = 1' takes shared row locks on 't1'.
 
566
#
 
567
# 6.4 Statement invoking a trigger that reads a table through
 
568
#     a stored function.
 
569
#
 
570
# And for this statement.
 
571
# But due to bug #53921 "Wrong locks for SELECTs used stored
 
572
# functions may lead to broken SBR" no lock is taken.
 
573
Success: 'insert into t5 values (2)' doesn't take row locks on 't1'.
 
574
#
 
575
# 6.5 Statement invoking a trigger that reads a table through
 
576
#     stored procedure.
 
577
#
 
578
# And for this statement.
 
579
# But due to bug #53921 "Wrong locks for SELECTs used stored
 
580
# functions may lead to broken SBR" no lock is taken.
 
581
Success: 'update t5 set l= 2 where l = 1' doesn't take row locks on 't1'.
 
582
# Clean-up.
 
583
drop function f1;
 
584
drop function f2;
 
585
drop function f3;
 
586
drop function f4;
 
587
drop function f5;
 
588
drop function f6;
 
589
drop function f7;
 
590
drop function f8;
 
591
drop function f9;
 
592
drop function f10;
 
593
drop function f11;
 
594
drop function f12;
 
595
drop function f13;
 
596
drop function f14;
 
597
drop function f15;
 
598
drop view v1, v2;
 
599
drop procedure p1;
 
600
drop procedure p2;
 
601
drop table t1, t2, t3, t4, t5, te;