mariadb/mysql-test/t/events_2.test
unknown c83b9a338a Bug#35997 Event scheduler seems to let the server crash, if it is embedded.
Fixed build failure depending on events in embedded build.


mysql-test/r/create.result:
  Moved test with events to another test file sine embedded build doesn't
  support event scheduler.
mysql-test/r/events_2.result:
  Moved test with events to another test file sine embedded build doesn't
  support event scheduler.
mysql-test/r/sp.result:
  Removed 'show privileges' from test as result is depending on 
  if event sheduler is built in.
mysql-test/t/create.test:
  Moved test with events to another test file sine embedded build doesn't
  support event scheduler.
mysql-test/t/events_2.test:
  Moved test with events to another test file sine embedded build doesn't
  support event scheduler.
mysql-test/t/sp.test:
  Removed 'show privileges' from test as result is depending on 
  if event sheduler is built in.
2008-05-13 14:06:32 +02:00

423 lines
13 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# changes 2008-02-20 hhunger splitted events.test into events_1 and events_2
#
# Can't test with embedded server that doesn't support grants
-- source include/not_embedded.inc
--disable_warnings
drop database if exists events_test;
--enable_warnings
create database events_test;
use events_test;
#
# mysql.event intact checking end
#
create event e_26 on schedule at '2017-01-01 00:00:00' disable do set @a = 5;
select db, name, body, definer, convert_tz(execute_at, 'UTC', 'SYSTEM'), on_completion from mysql.event;
drop event e_26;
--error ER_WRONG_VALUE
create event e_26 on schedule at NULL disable do set @a = 5;
--error ER_WRONG_VALUE
create event e_26 on schedule at 'definitely not a datetime' disable do set @a = 5;
set names utf8;
create event задачка on schedule every 123 minute starts now() ends now() + interval 1 month do select 1;
drop event задачка;
# event_scheduler is a global var
--error ER_GLOBAL_VARIABLE
set event_scheduler=off;
# event_scheduler could be only either 1 or 2
--error ER_WRONG_VALUE_FOR_VAR
set global event_scheduler=3;
--error ER_WRONG_VALUE_FOR_VAR
set global event_scheduler=disabled;
--echo "DISABLE the scheduler. Testing that it does not work when the variable is 0"
set global event_scheduler=off;
select definer, name, db from mysql.event;
select get_lock("test_lock1", 20);
create event закачка on schedule every 10 hour do select get_lock("test_lock1", 20);
--echo "Should return 1 row"
select definer, name, db from mysql.event;
--echo "Should be only 0 process"
select /*1*/ user, host, db, command, state, info
from information_schema.processlist
where (user='event_scheduler')
order by info;
select release_lock("test_lock1");
drop event закачка;
--echo "Should have 0 events"
select count(*) from mysql.event;
#
#
#
--echo "ENABLE the scheduler and get a lock"
set global event_scheduler=on;
select get_lock("test_lock2", 20);
--echo "Create an event which tries to acquire a mutex. The event locks on the mutex"
create event закачка on schedule every 10 hour do select get_lock("test_lock2", 20);
--echo "Should have only 2 processes: the scheduler and the locked event"
let $wait_condition= select count(*) = 2 from information_schema.processlist
where ( (state like 'User lock%' AND info like 'select get_lock%')
OR (command='Daemon' AND user='event_scheduler' AND
state = 'Waiting for next activation'));
--source include/wait_condition.inc
select /*2*/ user, host, db, command, state, info
from information_schema.processlist
where (info like "select get_lock%" OR user='event_scheduler')
order by info;
--echo "Release the mutex, the event worker should finish."
select release_lock("test_lock2");
drop event закачка;
# Wait for release_lock("test_lock2") to complete,
# to avoid polluting the next test information_schema.processlist
let $wait_condition= select count(*) = 0 from information_schema.processlist
where (state like 'User lock%' AND info like 'select get_lock%');
--source include/wait_condition.inc
##
## 1. get a lock
## 2. create an event
## 3. sleep so it has time to start
## 4. should appear in processlist
## 5. kill the scheduler, it will wait for the child to stop
## 6. both processes should be there on show processlist
## 7. release the lock and sleep, both scheduler and child should end
set global event_scheduler=1;
select get_lock("test_lock2_1", 20);
create event закачка21 on schedule every 10 hour do select get_lock("test_lock2_1", 20);
--echo "Should have only 2 processes: the scheduler and the locked event"
let $wait_condition= select count(*) = 2 from information_schema.processlist
where ( (state like 'User lock%' AND info like 'select get_lock%')
OR (command='Daemon' AND user='event_scheduler' AND
state = 'Waiting for next activation'));
--source include/wait_condition.inc
select /*3*/ user, host, db, command, state, info
from information_schema.processlist
where (info like "select get_lock%" OR user='event_scheduler')
order by info;
set global event_scheduler=off;
let $wait_condition= select count(*) =1 from information_schema.processlist
where (info like "select get_lock%" OR user='event_scheduler');
--source include/wait_condition.inc
--echo "Should have only our process now:"
select /*4*/ user, host, db, command, state, info
from information_schema.processlist
where (info like "select get_lock%" OR user='event_scheduler')
order by info;
select release_lock("test_lock2_1");
drop event закачка21;
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
####
# Bug #16410 Events: CREATE EVENT is legal in a CREATE TRIGGER statement
#
create table t_16 (s1 int);
--error ER_EVENT_RECURSION_FORBIDDEN
create trigger t_16_bi before insert on t_16 for each row create event e_16 on schedule every 1 second do set @a=5;
drop table t_16;
#
# end of test case
####
#
# START: BUG #17453: Creating Event crash the server
#
create event white_space
on schedule every 10 hour
disable
do
select 1;
select event_schema, event_name, definer, event_definition from information_schema.events where event_name='white_space';
drop event white_space;
create event white_space on schedule every 10 hour disable do
select 2;
select event_schema, event_name, definer, event_definition from information_schema.events where event_name='white_space';
drop event white_space;
create event white_space on schedule every 10 hour disable do select 3;
select event_schema, event_name, definer, event_definition from information_schema.events where event_name='white_space';
drop event white_space;
#
# END: BUG #17453: Creating Event crash the server
#
#
# Bug#17403 "Events: packets out of order with show create event"
#
create event e1 on schedule every 1 year do set @a = 5;
create table t1 (s1 int);
--error ER_SP_NO_RETSET
create trigger t1_ai after insert on t1 for each row show create event e1;
drop table t1;
drop event e1;
##set global event_scheduler=1;
##select get_lock("test_lock3", 20);
##create event закачка on schedule every 10 hour do select get_lock("test_lock3", 20);
##select sleep(2);
##select /*5*/ user, host, db, command, state, info from information_schema.processlist where info is null or info not like '%processlist%' order by info;
##drop event закачка;
##select release_lock("test_lock3");
#
# test with very often occuring event
# (disabled for now, locks)
##select get_lock("test_lock4", 20);
##create event закачка4 on schedule every 1 second do select get_lock("test_lock4", 20);
##select sleep(3);
##select /*6*/ user, host, db, command, state, info from information_schema.processlist where info is null or info not like '%processlist%' order by info;
##drop event закачка4;
##select release_lock("test_lock4");
##set global event_scheduler=off;
##select sleep(2);
##--replace_column 1 # 6 #
##show processlist;
##select count(*) from mysql.event;
#
# Test wrong syntax
#
--error ER_WRONG_DB_NAME
SHOW EVENTS FROM aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
--error ER_WRONG_DB_NAME
SHOW EVENTS FROM ``;
SHOW EVENTS FROM `events\\test`;
#
# A check for events SQL under LOCK TABLES and in pre-locked mode.
#
--echo
--echo LOCK TABLES mode.
--echo
#
# SHOW CREATE EVENT and INFORMATION_SCHEMA.events are available and
# cause an implicit lock/unlock of mysql.event table, regardless of the
# currently locked tables.
#
create table t1 (a int);
create event e1 on schedule every 10 hour do select 1;
#
lock table t1 read;
#
--replace_regex /STARTS '[^']+'/STARTS '#'/
show create event e1;
select event_name from information_schema.events;
--error ER_TABLE_NOT_LOCKED
create event e2 on schedule every 10 hour do select 1;
--error ER_TABLE_NOT_LOCKED
alter event e2 disable;
--error ER_TABLE_NOT_LOCKED
alter event e2 rename to e3;
--error ER_TABLE_NOT_LOCKED
drop event e2;
--error ER_TABLE_NOT_LOCKED
drop event e1;
unlock tables;
#
lock table t1 write;
#
--replace_regex /STARTS '[^']+'/STARTS '#'/
show create event e1;
select event_name from information_schema.events;
--error ER_TABLE_NOT_LOCKED
create event e2 on schedule every 10 hour do select 1;
--error ER_TABLE_NOT_LOCKED
alter event e2 disable;
--error ER_TABLE_NOT_LOCKED
alter event e2 rename to e3;
--error ER_TABLE_NOT_LOCKED
drop event e2;
--error ER_TABLE_NOT_LOCKED
drop event e1;
unlock tables;
#
lock table t1 read, mysql.event read;
#
--replace_regex /STARTS '[^']+'/STARTS '#'/
show create event e1;
select event_name from information_schema.events;
--error ER_TABLE_NOT_LOCKED_FOR_WRITE
create event e2 on schedule every 10 hour do select 1;
--error ER_TABLE_NOT_LOCKED_FOR_WRITE
alter event e2 disable;
--error ER_TABLE_NOT_LOCKED_FOR_WRITE
alter event e2 rename to e3;
--error ER_TABLE_NOT_LOCKED_FOR_WRITE
drop event e2;
--error ER_TABLE_NOT_LOCKED_FOR_WRITE
drop event e1;
unlock tables;
#
lock table t1 write, mysql.event read;
#
--replace_regex /STARTS '[^']+'/STARTS '#'/
show create event e1;
select event_name from information_schema.events;
--error ER_TABLE_NOT_LOCKED_FOR_WRITE
create event e2 on schedule every 10 hour do select 1;
--error ER_TABLE_NOT_LOCKED_FOR_WRITE
alter event e2 disable;
--error ER_TABLE_NOT_LOCKED_FOR_WRITE
alter event e2 rename to e3;
--error ER_TABLE_NOT_LOCKED_FOR_WRITE
drop event e2;
--error ER_TABLE_NOT_LOCKED_FOR_WRITE
drop event e1;
unlock tables;
#
--error ER_WRONG_LOCK_OF_SYSTEM_TABLE
lock table t1 read, mysql.event write;
#
--error ER_WRONG_LOCK_OF_SYSTEM_TABLE
lock table t1 write, mysql.event write;
#
lock table mysql.event write;
--replace_regex /STARTS '[^']+'/STARTS '#'/
show create event e1;
select event_name from information_schema.events;
create event e2 on schedule every 10 hour do select 1;
alter event e2 disable;
alter event e2 rename to e3;
drop event e3;
drop event e1;
unlock tables;
--echo Make sure we have left no events
select event_name from information_schema.events;
--echo
--echo Events in sub-statements, events and prelocking
--echo
--echo
create event e1 on schedule every 10 hour do select 1;
delimiter |;
--error ER_SP_NO_RETSET
create function f1() returns int
begin
show create event e1;
return 1;
end|
--error ER_SP_NO_RETSET
create trigger trg before insert on t1 for each row
begin
show create event e1;
end|
--error ER_SP_NO_RETSET
create function f1() returns int
begin
select event_name from information_schema.events;
return 1;
end|
--error ER_SP_NO_RETSET
create trigger trg before insert on t1 for each row
begin
select event_name from information_schema.events;
end|
--error ER_EVENT_RECURSION_FORBIDDEN
create function f1() returns int
begin
create event e2 on schedule every 10 hour do select 1;
return 1;
end|
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
create function f1() returns int
begin
alter event e1 rename to e2;
return 1;
end|
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
create function f1() returns int
begin
drop event e2;
return 1;
end|
--echo ----------------------------------------------------------------------
create trigger trg before insert on t1 for each row
begin
set new.a= f1();
end|
create function f1() returns int
begin
call p1();
return 0;
end|
create procedure p1()
begin
select event_name from information_schema.events;
end|
--error ER_SP_NO_RETSET
insert into t1 (a) values (1)|
drop procedure p1|
create procedure p1()
begin
show create event e1;
end|
--error ER_SP_NO_RETSET
insert into t1 (a) values (1)|
drop procedure p1|
create procedure p1()
begin
create temporary table tmp select event_name from information_schema.events;
end|
--echo expected to work, since we redirect the output into a tmp table
insert into t1 (a) values (1)|
select * from tmp|
drop temporary table tmp|
drop procedure p1|
create procedure p1()
begin
alter event e1 rename to e2;
end|
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
insert into t1 (a) values (1)|
drop procedure p1|
create procedure p1()
begin
drop event e1;
end|
--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
insert into t1 (a) values (1)|
drop table t1|
drop event e1|
delimiter ;|
#
# Bug#21432 Database/Table name limited to 64 bytes, not chars, problems with multi-byte
#
set names utf8;
create event имя_события_в_кодировке_утф8_длиной_большеем_48 on schedule every 2 year do select 1;
select EVENT_NAME from information_schema.events
where event_schema='test';
drop event имя_события_в_кодировке_утф8_длиной_большеем_48;
--error 1059
create event
очень_очень_очень_очень_очень_очень_очень_очень_длинная_строка_66
on schedule every 2 year do select 1;
#
# 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
drop database events_test;