1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
--source include/have_debug.inc
--source include/have_log_bin.inc
--source include/not_valgrind.inc
#
# Testing of atomic drop with crashes in a lot of different places
#
# Speed up wait_until_connected_again.inc
let NO_WSREP=1;
RESET MASTER;
let $MYSQLD_DATADIR= `SELECT @@datadir`;
let long_comment=`select repeat('a',16384)`;
let $engine_count=1;
let $engines='aria';
let $crash_count=6;
let $crash_points='ddl_log_drop_before_drop_trigger', 'ddl_log_drop_before_drop_trn','ddl_log_drop_after_drop_trigger', 'definition_file_after_create', 'ddl_log_drop_before_binlog', 'ddl_log_drop_after_binlog';
# Number of drops in the tested statement
let $drops=2;
let $old_debug=`select @@debug_dbug`;
let $e=0;
let $keep_include_silent=1;
let $grep_script=DROP TRIGGER;
--disable_query_log
while ($e < $engine_count)
{
inc $e;
let $engine=`select ELT($e, $engines)`;
let $default_engine=$engine;
let $extra_option=;
if ($engine == "aria")
{
let $extra_option=transactional=1;
}
if ($engine == "aria_notrans")
{
let $default_engine="aria";
let $extra_option=transactional=0;
}
let $c=0;
while ($c < $crash_count)
{
inc $c;
let $crash=`select ELT($c, $crash_points)`;
let $r=0;
while ($r < $drops)
{
inc $r;
--eval set @@default_storage_engine=$default_engine
--eval create table t1 (a int not null, b int not null) $extra_option;
insert into t1 values(1,1);
flush tables;
delimiter |;
create trigger t1_trg before insert on t1 for each row
begin
if isnull(new.a) then
set new.a:= 1000;
end if;
end|
create trigger t2_trg before insert on t1 for each row
begin
if isnull(new.b) then
set new.b:= 2000;
end if;
end|
delimiter ;|
FLUSH BINARY LOGS;
--let $start_binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
echo "engine: $engine crash point: $crash position: $r";
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--disable_reconnect
--eval set @@debug_dbug="+d,$crash",@debug_crash_counter=$r
let $errno=0;
let $crashed=1;
--error 0,2013
DROP TRIGGER t1_trg;
let $error=$errno;
if ($error == 0)
{
--error 0,2013
--eval DROP TRIGGER t2_trg /* $long_comment */;
let $error=$errno;
}
--enable_reconnect
--source include/wait_until_connected_again.inc
--disable_query_log
--eval set @@debug_dbug="$old_debug"
if ($error == 0)
{
echo "No crash!";
}
# Check which tables still exists
--list_files $MYSQLD_DATADIR/test *TR*
--let $binlog_file=$start_binlog_file
--let $binlog_output_name=master-bin.000001
--source include/show_binlog_events.inc
if ($error)
{
--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
--let $binlog_output_name=master-bin.000002
if ($binlog_file != $start_binlog_file)
{
--source include/show_binlog_events.inc
}
}
--disable_warnings
drop table if exists t1;
--enable_warnings
}
let long_comment=some comment;
}
}
--echo
--echo # Test deleting not existing trigger
--echo #
drop trigger if exists `t1_trg`;
--enable_query_log
|