mySQL 5.0.11 sources for tomato
[tomato.git] / release / src / router / mysql / mysql-test / t / events_restart.test
blobfacf29120878dee2edca0781fca6a6a4b25bc7e6
1 # Can't test with embedded server that doesn't support grants
2 -- source include/not_embedded.inc
4 call mtr.add_suppression("Column count of mysql.event is wrong. Expected .*, found .*\. The table is probably corrupted");
7 # Test that when the server is restarted, it checks mysql.event table,
8 # and disables the scheduler if it's not up to date.
11 # Switch off the scheduler for now.
12 set global event_scheduler=off;
14 --disable_warnings
15 drop database if exists events_test;
16 --enable_warnings
17 create database events_test;
18 use events_test;
19 create table execution_log(name char(10));
21 create event abc1 on schedule every 1 second do
22   insert into execution_log value('abc1');
23 create event abc2 on schedule every 1 second do
24   insert into execution_log value('abc2');
25 create event abc3 on schedule every 1 second do 
26   insert into execution_log value('abc3');
28 # There are various conditions when a server would regard mysql.event
29 # table as damaged:
30 # - the table has more column than specified in the compiled in value, but
31 # the version of the server which created the table is the same
32 # - the column count in the table is less than the compiled in value
33 # - some column has an incompatible type specification (for what is an
34 # incompatible type specification please refer to the comments in the source
36 # Unfortunately, in order to test a condition, we need to restart the
37 # server. Therefore, here we test only one simple case: changing the data
38 # type of the 'body' field to blob.
40 # First, let's do a backup to not depend on actual definition of mysql.event
41 create table event_like like mysql.event;
42 insert into event_like select * from mysql.event;
43 # Now let's alter the table and restart the server
44 alter table mysql.event
45   change column body  body longtext character set utf8 collate utf8_bin;
46 --echo "Now we restart the server"
48 --source include/restart_mysqld.inc
50 use events_test;
51 # Event scheduler should be disabled: the system tables are damaged
52 select @@event_scheduler;
53 # Try various Event Scheduler operation and check the output.
54 --error ER_EVENTS_DB_ERROR
55 show events;
56 --error ER_EVENTS_DB_ERROR
57 select event_name from information_schema.events;
58 --error ER_EVENTS_DB_ERROR
59 show create event intact_check;
60 --error ER_EVENTS_DB_ERROR
61 drop event no_such_event;
62 --error ER_EVENTS_DB_ERROR
63 create event intact_check_1 on schedule every 5 hour do select 5;
64 --error ER_EVENTS_DB_ERROR
65 alter event intact_check_1 on schedule every 8 hour do select 8;
66 --error ER_EVENTS_DB_ERROR
67 alter event intact_check_1 rename to intact_check_2;
68 --error ER_EVENTS_DB_ERROR
69 drop event intact_check_1;
70 --error ER_EVENTS_DB_ERROR
71 drop event intact_check_2;
72 --error ER_EVENTS_DB_ERROR
73 drop event intact_check;
74 --error ER_EVENTS_DB_ERROR
75 set global event_scheduler=on;
76 --error ER_EVENTS_DB_ERROR
77 set global event_scheduler=off;
78 show variables like 'event_scheduler';
79 --echo Make sure that we still can create and drop databases,
80 --echo and no warnings are produced.
81 drop database if exists mysqltest_database_not_exists;
82 create database mysqltest_db1;
83 drop database mysqltest_db1;
84 --echo Restore the original mysql.event table
85 drop table mysql.event;
86 rename table event_like to mysql.event;
87 --echo Now let's restart the server again
89 --source include/restart_mysqld.inc
91 # We need this file primarily to make sure that the scheduler is restarted
92 # and enabled after we have restored mysql.event table.
93 # This is the final step of the "cleanup".
95 # Make sure also that events are executed OK after restart, just in case.
96 use events_test;
97 # Make sure the scheduler was started successfully
98 select @@event_scheduler;
99 let $wait_condition=select count(distinct name)=3 from execution_log;
100 --source include/wait_condition.inc
101 drop table execution_log;
102 # Will drop all events
103 drop database events_test;
105 let $wait_condition=
106   select count(*) = 0 from information_schema.processlist
107   where db='events_test' and command = 'Connect' and user=current_user();
108 --source include/wait_condition.inc