149 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			149 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | # Can't test with embedded server that doesn't support events | ||
|  | -- source include/not_embedded.inc | ||
|  | 
 | ||
|  | CREATE DATABASE IF NOT EXISTS events_test; | ||
|  | USE events_test; | ||
|  | 
 | ||
|  | SET @event_scheduler=@@global.event_scheduler; | ||
|  | SET GLOBAL event_scheduler=OFF; | ||
|  | --echo Try again to make sure it's allowed | ||
|  | SET GLOBAL event_scheduler=OFF; | ||
|  | SHOW VARIABLES LIKE 'event_scheduler'; | ||
|  | SET GLOBAL event_scheduler=1; | ||
|  | SHOW VARIABLES LIKE 'event_scheduler'; | ||
|  | SET GLOBAL event_scheduler=0; | ||
|  | SHOW VARIABLES LIKE 'event_scheduler'; | ||
|  | SET GLOBAL event_scheduler=ON; | ||
|  | --echo Try again to make sure it's allowed | ||
|  | SET GLOBAL event_scheduler=ON; | ||
|  | SHOW VARIABLES LIKE 'event_scheduler'; | ||
|  | --error ER_WRONG_VALUE_FOR_VAR | ||
|  | SET GLOBAL event_scheduler=DISABLED; | ||
|  | SHOW VARIABLES LIKE 'event_scheduler'; | ||
|  | --error ER_WRONG_VALUE_FOR_VAR | ||
|  | SET GLOBAL event_scheduler=-1; | ||
|  | SHOW VARIABLES LIKE 'event_scheduler'; | ||
|  | --error ER_WRONG_VALUE_FOR_VAR | ||
|  | SET GLOBAL event_scheduler=2; | ||
|  | SHOW VARIABLES LIKE 'event_scheduler'; | ||
|  | --error ER_WRONG_VALUE_FOR_VAR | ||
|  | SET GLOBAL event_scheduler=5; | ||
|  | SHOW VARIABLES LIKE 'event_scheduler'; | ||
|  | 
 | ||
|  | CREATE TABLE table_1(a int); | ||
|  | CREATE TABLE table_2(a int); | ||
|  | CREATE TABLE table_3(a int); | ||
|  | CREATE TABLE table_4(a int); | ||
|  | 
 | ||
|  | SET GLOBAL event_scheduler=ON; | ||
|  | # We need to have 2 to make it safe with valgrind. This is probably because | ||
|  | # of when we calculate the timestamp value | ||
|  | CREATE EVENT event_1 ON SCHEDULE EVERY 2 SECOND | ||
|  | DO | ||
|  |   INSERT INTO table_1 VALUES (1); | ||
|  | 
 | ||
|  | CREATE EVENT event_2 ON SCHEDULE EVERY 1 SECOND | ||
|  | ENDS NOW() + INTERVAL 6 SECOND | ||
|  | ON COMPLETION PRESERVE | ||
|  | DO | ||
|  |   INSERT INTO table_2 VALUES (1); | ||
|  | 
 | ||
|  | CREATE EVENT event_3 ON SCHEDULE EVERY 2 SECOND ENDS NOW() + INTERVAL 1 SECOND | ||
|  | ON COMPLETION NOT PRESERVE | ||
|  | DO | ||
|  |   INSERT INTO table_3 VALUES (1); | ||
|  | 
 | ||
|  | CREATE EVENT event_4 ON SCHEDULE EVERY 1 SECOND ENDS NOW() + INTERVAL 1 SECOND | ||
|  | ON COMPLETION PRESERVE | ||
|  | DO | ||
|  |   INSERT INTO table_4 VALUES (1); | ||
|  | 
 | ||
|  | # Let event_1 insert at least 4 records into the table | ||
|  | let $wait_condition=select count(*) >= 4 from table_1; | ||
|  | --source include/wait_condition.inc | ||
|  | # Minimum of passed time is 6 seconds assuming | ||
|  | # - event executions starts immediate after creation | ||
|  | # - 4 times event_1 means an insert at ect, ect+2, ect+4, ect+6 | ||
|  | # ect = event creation time | ||
|  | 
 | ||
|  | # Let event_2 reach the end of its execution interval | ||
|  | let $wait_condition=select count(*) = 0 from information_schema.events | ||
|  | where event_name='event_2' and status='enabled'; | ||
|  | --source include/wait_condition.inc | ||
|  | # Minimum of passed time is 6 seconds. | ||
|  | # See wait_condition for event_1 above and ENDS condition for event_2. | ||
|  | 
 | ||
|  | # Let event_3, which is ON COMPLETION NOT PRESERVE execute and drop itself | ||
|  | let $wait_condition=select count(*) = 0 from information_schema.events | ||
|  | where event_name='event_3'; | ||
|  | --source include/wait_condition.inc | ||
|  | 
 | ||
|  | # Let event_4 reach the end of its execution interval | ||
|  | let $wait_condition=select count(*) = 0 from information_schema.events | ||
|  | where event_name='event_4' and status='enabled'; | ||
|  | --source include/wait_condition.inc | ||
|  | 
 | ||
|  | # | ||
|  | # On a busy system the scheduler may skip execution of events, | ||
|  | # we can't reliably expect that the data in a table to be modified | ||
|  | # by an event will be exact. Thus we do not SELECT from the tables | ||
|  | # in this test. See also | ||
|  | #    Bug#39854 events_scheduling fails sporadically on pushbuild | ||
|  | # | ||
|  | 
 | ||
|  | SELECT IF(TIME_TO_SEC(TIMEDIFF(ENDS,STARTS))=6, 'OK', 'ERROR') | ||
|  | FROM INFORMATION_SCHEMA.EVENTS | ||
|  | WHERE EVENT_SCHEMA=DATABASE() AND EVENT_NAME='event_2'; | ||
|  | 
 | ||
|  | --echo "Already dropped because ended. Therefore an error." | ||
|  | --error ER_EVENT_DOES_NOT_EXIST | ||
|  | DROP EVENT event_3; | ||
|  | 
 | ||
|  | DROP EVENT event_1; | ||
|  | --echo "Should be preserved" | ||
|  | SELECT EVENT_NAME, STATUS FROM INFORMATION_SCHEMA.EVENTS ORDER BY EVENT_NAME; | ||
|  | DROP EVENT event_2; | ||
|  | DROP EVENT event_4; | ||
|  | DROP TABLE table_1; | ||
|  | DROP TABLE table_2; | ||
|  | DROP TABLE table_3; | ||
|  | DROP TABLE table_4; | ||
|  | 
 | ||
|  | -- echo | ||
|  | -- echo Bug #50087 Interval arithmetic for Event_queue_element is not portable. | ||
|  | -- echo | ||
|  | 
 | ||
|  | CREATE TABLE t1(a int); | ||
|  | 
 | ||
|  | CREATE EVENT e1 ON SCHEDULE EVERY 1 MONTH | ||
|  | STARTS NOW() - INTERVAL 1 MONTH | ||
|  | ENDS NOW() + INTERVAL 2 MONTH | ||
|  | ON COMPLETION PRESERVE | ||
|  | DO | ||
|  |   INSERT INTO t1 VALUES (1); | ||
|  | 
 | ||
|  | CREATE EVENT e2 ON SCHEDULE EVERY 1 MONTH | ||
|  | STARTS NOW() | ||
|  | ENDS NOW() + INTERVAL 11 MONTH | ||
|  | ON COMPLETION PRESERVE | ||
|  | DO | ||
|  |   INSERT INTO t1 VALUES (1); | ||
|  | 
 | ||
|  | DROP TABLE t1; | ||
|  | DROP EVENT e1; | ||
|  | DROP EVENT e2; | ||
|  | 
 | ||
|  | 
 | ||
|  | DROP DATABASE events_test; | ||
|  | SET GLOBAL event_scheduler=@event_scheduler; | ||
|  | 
 | ||
|  | # | ||
|  | # End of tests | ||
|  | # | ||
|  | 
 | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 0 from information_schema.processlist | ||
|  |   where db='events_test' and command = 'Connect' and user=current_user(); | ||
|  | --source include/wait_condition.inc | ||
|  | 
 |