summaryrefslogtreecommitdiffstats
path: root/mysql-test/suite/atomic/create_trigger.test
blob: 09b00f99efe18af32f18e232e39b9ce2da6109ae (plain)
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
133
134
135
136
137
--source include/have_debug.inc
--source include/have_log_bin.inc
--source include/not_valgrind.inc

# Speed up wait_until_connected_again.inc
let NO_WSREP=1;
RESET MASTER;

#
# Testing of atomic CREATE TRIGGER with crashes in a lot of different places
#

let $MYSQLD_DATADIR= `SELECT @@datadir`;

let $engine_count=1;
let $engines='aria';

let $crash_count=6;
let $crash_points='ddl_log_create_before_create_trigger', 'ddl_log_create_after_create_trigger', 'definition_file_after_create', 'ddl_log_drop_before_binlog', 'ddl_log_drop_after_binlog','ddl_log_drop_before_delete_tmp';

let $old_debug=`select @@debug_dbug`;

let $e=0;
let $keep_include_silent=1;
let $grep_script=CREATE.*TRIGGER;
let $drops=3;
--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;
  }
  --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;

  let $c=0;
  while ($c < $crash_count)
  {
    inc $c;
    let $crash=`select ELT($c, $crash_points)`;
    let $r=0;
    while ($r < $drops)
    {
      inc $r;

      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;
      delimiter |;
      --error 0,2013
      CREATE TRIGGER t1_trg before insert on t1 for each row
      begin
        if isnull(new.a) then
          set new.a:= 1000;
        end if;
      end|
      delimiter ;|
      let $error=$errno;
      if ($error == 0)
      {
        delimiter |;
        --error 0,2013
        CREATE OR REPLACE TRIGGER t2_trg before insert on t1 for each row
        begin
          if isnull(new.b) then
            set new.b:= 2000;
          end if;
        end|
        delimiter ;|
        let $error=$errno;
      }
      if ($error == 0)
      {
        delimiter |;
        --error 0,2013
        CREATE OR REPLACE TRIGGER t2_trg before insert on t1 for each row
        begin
          if isnull(new.b) then
            set new.b:= 3000;
          end if;
        end|
        delimiter ;|
        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*
      --list_files $MYSQLD_DATADIR/test *sql*

      --replace_column 7 #
      --error 0,ER_TRG_DOES_NOT_EXIST
      SHOW CREATE TRIGGER t1_trg;
      --replace_column 7 #
      --error 0,ER_TRG_DOES_NOT_EXIST
      SHOW CREATE TRIGGER t2_trg;

      --let $binlog_file=$start_binlog_file
      --let $binlog_output_name=master-bin.000001
      --source include/show_binlog_events.inc
      --disable_warnings
      drop trigger if exists t1_trg;
      drop trigger if exists t2_trg;
      --enable_warnings
    }
  }
}

drop table t1;

--enable_query_log