3
# Check if statement reading table '$table' allows concurrent
7
# $table Table in which concurrent inserts should be allowed.
8
# $con_aux1 Name of the first auxiliary connection to be used by this
10
# $con_aux2 Name of the second auxiliary connection to be used by this
12
# $statement Statement to be checked.
13
# $restore_table Table which might be modified by statement to be checked
14
# and thus needs backing up before its execution and
15
# restoring after it (can be empty).
23
# Reset DEBUG_SYNC facility for safety.
24
set debug_sync= "RESET";
26
if (`SELECT '$restore_table' <> ''`)
28
--eval create temporary table t_backup select * from $restore_table;
32
set debug_sync='after_lock_tables_takes_lock SIGNAL parked WAIT_FOR go';
33
--send_eval $statement;
36
set debug_sync='now WAIT_FOR parked';
37
--send_eval insert into $table (i) values (0);
42
# Wait until concurrent insert is successfully executed while
43
# statement being checked has its tables locked.
44
# We use wait_condition.inc instead of simply reaping
45
# concurrent insert here in order to avoid deadlocks if test
46
# fails and to time out gracefully instead.
48
select count(*) = 0 from information_schema.processlist
49
where info = "insert into $table (i) values (0)";
50
--source include/wait_condition.inc
57
# Apparently concurrent insert was successfully executed.
58
# To be safe against wait_condition.inc succeeding due to
59
# races let us first reap concurrent insert to ensure that
60
# it has really been successfully executed.
64
set debug_sync= 'now SIGNAL go';
68
--echo Success: '$statement' allows concurrent inserts into '$table'.
72
# Waiting has timed out. Apparently concurrent insert was blocked.
73
# So to be able to continue we need to end our statement first.
74
set debug_sync= 'now SIGNAL go';
80
--echo Error: '$statement' doesn't allow concurrent inserts into '$table'!
83
--eval delete from $table where i = 0;
85
if (`SELECT '$restore_table' <> ''`)
87
--eval truncate table $restore_table;
88
--eval insert into $restore_table select * from t_backup;
89
drop temporary table t_backup;
92
# Clean-up. Reset DEBUG_SYNC facility after use.
93
set debug_sync= "RESET";