mirror of
https://github.com/MariaDB/server.git
synced 2025-07-24 19:42:23 +03:00
This allows one to run the test suite even if any of the following options are changed: - character-set-server - collation-server - join-cache-level - log-basename - max-allowed-packet - optimizer-switch - query-cache-size and query-cache-type - skip-name-resolve - table-definition-cache - table-open-cache - Some innodb options etc Changes: - Don't print out the value of system variables as one can't depend on them to being constants. - Don't set global variables to 'default' as the default may not be the same as the test was started with if there was an additional option file. Instead save original value and reset it at end of test. - Test that depends on the latin1 character set should include default_charset.inc or set the character set to latin1 - Test that depends on the original optimizer switch, should include default_optimizer_switch.inc - Test that depends on the value of a specific system variable should set it in the test (like optimizer_use_condition_selectivity) - Split subselect3.test into subselect3.test and subselect3.inc to make it easier to set and reset system variables. - Added .opt files for test that required specfic options that could be changed by external configuration files. - Fixed result files in rockdsb & tokudb that had not been updated for a while.
526 lines
16 KiB
Plaintext
526 lines
16 KiB
Plaintext
# 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
|
||
|
||
set sql_mode="";
|
||
--source include/default_charset.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 '2037-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 задачка;
|
||
|
||
--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 get_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 info='select get_lock("test_lock2", 20)';
|
||
--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_LOCK_OR_ACTIVE_TRANSACTION
|
||
create event e2 on schedule every 10 hour do select 1;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
alter event e2 disable;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
alter event e2 rename to e3;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
drop event e2;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
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_LOCK_OR_ACTIVE_TRANSACTION
|
||
create event e2 on schedule every 10 hour do select 1;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
alter event e2 disable;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
alter event e2 rename to e3;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
drop event e2;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
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_LOCK_OR_ACTIVE_TRANSACTION
|
||
create event e2 on schedule every 10 hour do select 1;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
alter event e2 disable;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
alter event e2 rename to e3;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
drop event e2;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
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_LOCK_OR_ACTIVE_TRANSACTION
|
||
create event e2 on schedule every 10 hour do select 1;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
alter event e2 disable;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
alter event e2 rename to e3;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
drop event e2;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
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;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
create event e2 on schedule every 10 hour do select 1;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
alter event e2 disable;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
alter event e2 rename to e3;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
drop event e3;
|
||
--error ER_LOCK_OR_ACTIVE_TRANSACTION
|
||
drop event e1;
|
||
unlock tables;
|
||
drop event e1;
|
||
--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;
|
||
|
||
#
|
||
# Bug#35981: ALTER EVENT causes the server to change the PRESERVE option.
|
||
#
|
||
|
||
create event event_35981 on schedule every 6 month on completion preserve
|
||
disable
|
||
do
|
||
select 1;
|
||
|
||
echo The following SELECTs should all give 1;
|
||
|
||
# show current ON_COMPLETION
|
||
select count(*) from information_schema.events
|
||
where event_schema = database() and event_name = 'event_35981' and
|
||
on_completion = 'PRESERVE';
|
||
|
||
# show ON_COMPLETION remains "PRESERVE" when not given in ALTER EVENT
|
||
alter event event_35981 enable;
|
||
select count(*) from information_schema.events
|
||
where event_schema = database() and event_name = 'event_35981' and
|
||
on_completion = 'PRESERVE';
|
||
|
||
# show we can change ON_COMPLETION
|
||
alter event event_35981 on completion not preserve;
|
||
select count(*) from information_schema.events
|
||
where event_schema = database() and event_name = 'event_35981' and
|
||
on_completion = 'NOT PRESERVE';
|
||
|
||
# show ON_COMPLETION remains "NOT PRESERVE" when not given in ALTER EVENT
|
||
alter event event_35981 disable;
|
||
select count(*) from information_schema.events
|
||
where event_schema = database() and event_name = 'event_35981' and
|
||
on_completion = 'NOT PRESERVE';
|
||
|
||
# show we can change ON_COMPLETION
|
||
alter event event_35981 on completion preserve;
|
||
select count(*) from information_schema.events
|
||
where event_schema = database() and event_name = 'event_35981' and
|
||
on_completion = 'PRESERVE';
|
||
|
||
|
||
drop event event_35981;
|
||
|
||
create event event_35981 on schedule every 6 month disable
|
||
do
|
||
select 1;
|
||
|
||
# show that the defaults for CREATE EVENT are still correct (NOT PRESERVE)
|
||
select count(*) from information_schema.events
|
||
where event_schema = database() and event_name = 'event_35981' and
|
||
on_completion = 'NOT PRESERVE';
|
||
|
||
drop event event_35981;
|
||
|
||
|
||
# show that backdating doesn't break
|
||
|
||
create event event_35981 on schedule every 1 hour starts current_timestamp
|
||
on completion not preserve
|
||
do
|
||
select 1;
|
||
|
||
# should fail thanks to above's NOT PRESERVE
|
||
--error ER_EVENT_CANNOT_ALTER_IN_THE_PAST
|
||
alter event event_35981 on schedule every 1 hour starts '1999-01-01 00:00:00'
|
||
ends '1999-01-02 00:00:00';
|
||
|
||
drop event event_35981;
|
||
|
||
create event event_35981 on schedule every 1 hour starts current_timestamp
|
||
on completion not preserve
|
||
do
|
||
select 1;
|
||
|
||
# succeed with warning
|
||
alter event event_35981 on schedule every 1 hour starts '1999-01-01 00:00:00'
|
||
ends '1999-01-02 00:00:00' on completion preserve;
|
||
|
||
drop event event_35981;
|
||
|
||
|
||
|
||
create event event_35981 on schedule every 1 hour starts current_timestamp
|
||
on completion preserve
|
||
do
|
||
select 1;
|
||
|
||
# this should succeed thanks to above PRESERVE! give a warning though.
|
||
alter event event_35981 on schedule every 1 hour starts '1999-01-01 00:00:00'
|
||
ends '1999-01-02 00:00:00';
|
||
|
||
# this should fail, as the event would have passed already
|
||
--error ER_EVENT_CANNOT_ALTER_IN_THE_PAST
|
||
alter event event_35981 on schedule every 1 hour starts '1999-01-01 00:00:00'
|
||
ends '1999-01-02 00:00:00' on completion not preserve;
|
||
|
||
# should succeed giving a warning
|
||
alter event event_35981 on schedule every 1 hour starts '1999-01-01 00:00:00'
|
||
ends '1999-01-02 00:00:00' on completion preserve;
|
||
|
||
drop event event_35981;
|
||
|
||
#
|
||
# 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;
|