# Can't test with embedded server that doesn't support grants
-- source include/not_embedded.inc

--disable_warnings
drop database if exists events_test;
drop database if exists mysqltest_db1;
drop database if exists mysqltest_db2;
--enable_warnings
create database events_test;
use events_test;

#
# START - 16415: Events: event names are case sensitive
#
CREATE EVENT lower_case ON SCHEDULE EVERY 1 MINUTE DO SELECT 1;
--error ER_EVENT_ALREADY_EXISTS
CREATE EVENT Lower_case ON SCHEDULE EVERY 2 MINUTE DO SELECT 2;
DROP EVENT Lower_case;
SET NAMES cp1251;
CREATE EVENT 漕脲韄疱汨耱_1251 ON SCHEDULE EVERY 1 YEAR DO SELECT 100;
--error ER_EVENT_ALREADY_EXISTS
CREATE EVENT 念隋蚠疱汨耱_1251 ON SCHEDULE EVERY 2 YEAR DO SELECT 200;
DROP EVENT 念隋蚠疱汨耱_1251;
SET NAMES utf8;
CREATE EVENT 写芯谢械薪_褉械谐懈褋褌褗褉_褍褌褎8 ON SCHEDULE EVERY 3 YEAR DO SELECT 300;
--error ER_EVENT_ALREADY_EXISTS
CREATE EVENT 袛袨袥袝袧_褉械谐懈褋褌褗褉_褍褌褎8 ON SCHEDULE EVERY 4 YEAR DO SELECT 400;
DROP EVENT 袛袨袥袝袧_褉械谐懈褋褌褗褉_褍褌褎8;
SET NAMES latin1;
#
# END   - 16415: Events: event names are case sensitive
#

#
# START - BUG#16408: Events: crash for an event in a procedure
#
set @a=3;
--error ER_EVENT_RECURSION_FORBIDDEN
CREATE PROCEDURE p_16 () CREATE EVENT e_16 ON SCHEDULE EVERY @a SECOND DO SET @a=5;
#
# END   - BUG#16408: Events: crash for an event in a procedure
#

#
# Start - 16396: Events: Distant-future dates become past dates
#
--error ER_WRONG_VALUE
create event e_55 on schedule at 99990101000000 do drop table t;
--error ER_WRONG_VALUE
create event e_55 on schedule every 10 hour starts 99990101000000 do drop table t;
--error ER_EVENT_ENDS_BEFORE_STARTS
create event e_55 on schedule every 10 minute ends 99990101000000 do drop table t;
--error ER_WRONG_VALUE
create event e_55 on schedule at 10000101000000 do drop table t;

# For the purpose of backup we allow times in the past.  Here, no
# error will be given, but the event won't be created.  One may think
# of that as if the event was created, then it turned out it's in the
# past, so it was dropped because of implicit ON COMPLETION NOT
# PRESERVE.
create event e_55 on schedule at 20000101000000 do drop table t;
show events;

--error ER_PARSE_ERROR
create event e_55 on schedule at 20200101000000 starts 10000101000000 do drop table t;
--error ER_PARSE_ERROR
create event e_55 on schedule at 20200101000000 ends 10000101000000 do drop table t;
--error ER_PARSE_ERROR
create event e_55 on schedule at 20200101000000 starts 10000101000000 ends 10000101000000 do drop table t;
--error ER_WRONG_VALUE
create event e_55 on schedule every 10 hour starts 10000101000000 do drop table t;

#
# End  -  16396: Events: Distant-future dates become past dates
#

#
# Start - 16407: Events: Changes in sql_mode won't be taken into account
#
set global event_scheduler=off;
delete from mysql.event;
set global event_scheduler= on;
set @old_sql_mode:=@@sql_mode;
set sql_mode=ansi;
select get_lock('test_bug16407', 60);
delimiter |;
create event e_16407 on schedule every 60 second do
begin
  select get_lock('test_bug16407', 60);
end|
delimiter ;|

let $wait_condition=
  select count(*) = 1 from information_schema.processlist
  where info = 'select get_lock(\'test_bug16407\', 60)';
--source include/wait_condition.inc

--echo "Now if everything is fine the event has compiled and is locked"
select /*1*/ user, host, db, info from information_schema.processlist where command!='Daemon' and (info is null or info not like '%processlist%') order by info;
select release_lock('test_bug16407');

set global event_scheduler= off;

select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
--echo "Let's check whether we change the sql_mode on ALTER EVENT"
set sql_mode='traditional';
alter event e_16407 do select 1;
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
drop event e_16407;

set sql_mode="ansi";
select get_lock('ee_16407_2', 60);

set global event_scheduler= 1;
--echo "Another sql_mode test"
set sql_mode="traditional";
create table events_smode_test(ev_name char(10), a date) engine=myisam;
--echo "This should never insert something"
delimiter |;
create event ee_16407_2 on schedule every 60 second do
begin
  select get_lock('ee_16407_2', 60) /*ee_16407_2*/;
  select release_lock('ee_16407_2');
  insert into events_test.events_smode_test values('ee_16407_2','1980-19-02');
end|
--error ER_TRUNCATED_WRONG_VALUE
insert into events_smode_test values ('test','1980-19-02')|
--echo "This is ok"
create event ee_16407_3 on schedule every 60 second do
begin
  select get_lock('ee_16407_2', 60) /*ee_16407_3*/;
  select release_lock('ee_16407_2');
  insert into events_test.events_smode_test values ('ee_16407_3','1980-02-19');
  insert into events_test.events_smode_test values ('ee_16407_3','1980-02-29');
end|
set sql_mode=""|
--echo "This will insert rows but they will be truncated"
create event ee_16407_4 on schedule every 60 second do
begin
  select get_lock('ee_16407_2', 60) /*ee_16407_4*/;
  select release_lock('ee_16407_2');
  insert into events_test.events_smode_test values ('ee_16407_4','10-11-1956');
end|
delimiter ;|
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;

let $wait_condition=
  select count(*) = 3 from information_schema.processlist
  where info = 'select get_lock(\'ee_16407_2\', 60)';
--source include/wait_condition.inc

select /*2*/ user, host, db, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info;
select release_lock('ee_16407_2');

let $wait_condition=
  select count(*) = 1 and user = 'event_scheduler' and info is null
  from information_schema.processlist
  where (command!='Daemon' || user='event_scheduler')
  and (info is null or info not like '%processlist%');
--source include/wait_condition.inc

select /*3*/ user, host, db, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info;
set global event_scheduler= off;
select * from events_smode_test order by ev_name, a;
--echo "OK, last check before we drop them"
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
drop event ee_16407_2;
drop event ee_16407_3;
drop event ee_16407_4;


--echo "And now one last test regarding sql_mode and call of SP from an event"
delete from events_smode_test;
set sql_mode='ansi';
select get_lock('ee_16407_5', 60);

set global event_scheduler= on;

set sql_mode='traditional';
delimiter |;
# ee_16407_5_pendant() should not insert anything because of invalid date.
create procedure ee_16407_5_pendant() begin insert into events_test.events_smode_test values('ee_16407_5','2001-02-29'); end|
create procedure ee_16407_6_pendant() begin insert into events_test.events_smode_test values('ee_16407_6','2004-02-29'); end|
create event ee_16407_5 on schedule every 60 second do
begin
  select get_lock('ee_16407_5', 60) /*ee_16407_5*/;
  select release_lock('ee_16407_5');
  call events_test.ee_16407_5_pendant();
end|
create event ee_16407_6 on schedule every 60 second do
begin
  select get_lock('ee_16407_5', 60) /*ee_16407_6*/;
  select release_lock('ee_16407_5');
  call events_test.ee_16407_6_pendant();
end|
delimiter ;|

let $wait_condition=
  select count(*) = 2 from information_schema.processlist
  where info = 'select get_lock(\'ee_16407_5\', 60)';
--source include/wait_condition.inc

--echo "Should have 2 locked processes"
select /*4*/ user, host, db, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info;
select release_lock('ee_16407_5');

let $wait_condition=
  select count(*) = 1 and user = 'event_scheduler' and info is null
  from information_schema.processlist
  where (command!='Daemon' || user='event_scheduler')
  and (info is null or info not like '%processlist%');
--source include/wait_condition.inc

--echo "Should have 0 processes locked"
select /*5*/ user, host, db, info from information_schema.processlist where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%') order by info;
select * from events_smode_test order by ev_name, a;
--echo "And here we check one more time before we drop the events"
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
drop event ee_16407_5;
drop event ee_16407_6;
drop procedure ee_16407_5_pendant;
drop procedure ee_16407_6_pendant;
set global event_scheduler= off;
drop table events_smode_test;
set sql_mode=@old_sql_mode;
#
# End  - 16407: Events: Changes in sql_mode won't be taken into account  
#

#
# START - 18897: Events: unauthorized action possible with alter event rename
#
set global event_scheduler=off;
--disable_warnings
delete from mysql.user where User like 'mysqltest_%';
delete from mysql.db where User like 'mysqltest_%';
flush privileges;
drop database if exists mysqltest_db1;
--enable_warnings
create user mysqltest_user1@localhost;
create database mysqltest_db1;
grant event on events_test.* to mysqltest_user1@localhost;
connect (conn2,localhost,mysqltest_user1,,events_test);
create event mysqltest_user1 on schedule every 10 second do select 42;
--error ER_DBACCESS_DENIED_ERROR
alter event mysqltest_user1 rename to mysqltest_db1.mysqltest_user1;
--echo "Let's test now rename when there is no select DB"
disconnect conn2;
connect (conn2,localhost,mysqltest_user1,,*NO-ONE*);
select database();
--error ER_NO_DB_ERROR
alter event events_test.mysqltest_user1 rename to mysqltest_user1;
select event_schema, event_name, definer, event_type, status from information_schema.events;
drop event events_test.mysqltest_user1;
disconnect conn2;
connection default;
drop user mysqltest_user1@localhost;
drop database mysqltest_db1;
#
# END   - 18897: Events: unauthorized action possible with alter event rename
#

#
# START - BUG#16394: Events: Crash if schedule contains SELECT
#
--error ER_NOT_SUPPORTED_YET
create event e_53 on schedule at (select s1 from ttx) do drop table t;
--error ER_NOT_SUPPORTED_YET
create event e_53 on schedule every (select s1 from ttx) second do drop table t;
--error ER_NOT_SUPPORTED_YET
create event e_53 on schedule every 5 second starts (select s1 from ttx) do drop table t;
--error ER_NOT_SUPPORTED_YET
create event e_53 on schedule every 5 second ends (select s1 from ttx) do drop table t;
#
# END   - BUG#16394: Events: Crash if schedule contains SELECT
#

#
# START - BUG#22397: Events: crash with procedure which alters events
#
--disable_warnings
drop event if exists e_16;
drop procedure if exists p_16;
--enable_warnings
create event e_16 on schedule every 1 second do set @a=5;
create procedure p_16 () alter event e_16 on schedule every @a second;
set @a = null;
--error ER_WRONG_VALUE
call p_16();
--error ER_WRONG_VALUE
call p_16();
set @a= 6;
call p_16();

drop procedure p_16;
drop event e_16;

#
# START - BUG#22830 Events: crash with procedure which alters events with function
#
--disable_warnings
drop function if exists f22830;
drop event if exists e22830;
drop event if exists e22830_1;
drop event if exists e22830_2;
drop event if exists e22830_3;
drop event if exists e22830_4;
drop table if exists t1;
drop table if exists t2;
--enable_warnings
create table t1 (a int);
insert into t1 values (2);
create table t2 (a char(20));
insert into t2 values ("e22830_1");
create function f22830 () returns int return 5;

select get_lock('ee_22830', 60);
set global event_scheduler=on;

delimiter |;
create procedure p22830_wait()
begin
  select get_lock('ee_22830', 60);
  select release_lock('ee_22830');
end|

--error ER_NOT_SUPPORTED_YET
create event e22830 on schedule every f22830() second do
begin
  call p22830_wait();
  select 123;
end|
create event e22830_1 on schedule every 1 hour do
begin
  call p22830_wait();
  alter event e22830_1 on schedule every (select 8 from dual) hour;
end|
create event e22830_2 on schedule every 1 hour do
begin
  call p22830_wait();
  alter event e22830_2 on schedule every (select 8 from t1) hour;
end|
create event e22830_3 on schedule every 1 hour do
begin
  call p22830_wait();
  alter event e22830_3 on schedule every f22830() hour;
end|
create event e22830_4 on schedule every 1 hour do
begin
  call p22830_wait();
  alter event e22830_4 on schedule every (select f22830() from dual) hour;
end|
delimiter ;|

--echo "All events should be blocked in get_lock()"
select event_name, event_definition, interval_value, interval_field from information_schema.events order by event_name;

select release_lock('ee_22830');

let $wait_condition=
  select group_concat(interval_value order by interval_value) = '1,1,1,8'
  from information_schema.events;
--source include/wait_condition.inc

set global event_scheduler=off;
select event_name, event_definition, interval_value, interval_field from information_schema.events order by event_name;
drop procedure p22830_wait;
drop function f22830;
--error ER_PARSE_ERROR
drop event (select a from t2);
drop event e22830_1;
drop event e22830_2;
drop event e22830_3;
drop event e22830_4;
drop table t1;
drop table t2;


#
# BUG#16425: Events: no DEFINER clause
#
--error 0,ER_CANNOT_USER
DROP USER mysqltest_u1@localhost;

CREATE USER mysqltest_u1@localhost;
GRANT EVENT ON events_test.* TO mysqltest_u1@localhost;

CREATE EVENT e1 ON SCHEDULE EVERY 1 DAY DO SELECT 1;
SELECT event_name, definer FROM INFORMATION_SCHEMA.EVENTS; 
DROP EVENT e1;

CREATE DEFINER=CURRENT_USER EVENT e1 ON SCHEDULE EVERY 1 DAY DO SELECT 1;
SELECT event_name, definer FROM INFORMATION_SCHEMA.EVENTS; 
ALTER DEFINER=mysqltest_u1@localhost EVENT e1 ON SCHEDULE EVERY 1 HOUR;
SELECT event_name, definer FROM INFORMATION_SCHEMA.EVENTS; 
DROP EVENT e1;

CREATE DEFINER=CURRENT_USER() EVENT e1 ON SCHEDULE EVERY 1 DAY DO SELECT 1;
SELECT event_name, definer FROM INFORMATION_SCHEMA.EVENTS; 
DROP EVENT e1;

CREATE DEFINER=mysqltest_u1@localhost EVENT e1 ON SCHEDULE EVERY 1 DAY DO
  SELECT 1;
SELECT event_name, definer FROM INFORMATION_SCHEMA.EVENTS; 
DROP EVENT e1;

connect (conn1, localhost, mysqltest_u1, , events_test);

CREATE EVENT e1 ON SCHEDULE EVERY 1 DAY DO SELECT 1;
SELECT event_name, definer FROM INFORMATION_SCHEMA.EVENTS; 
DROP EVENT e1;

CREATE DEFINER=CURRENT_USER EVENT e1 ON SCHEDULE EVERY 1 DAY DO SELECT 1;
SELECT event_name, definer FROM INFORMATION_SCHEMA.EVENTS; 
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
ALTER DEFINER=root@localhost EVENT e1 ON SCHEDULE EVERY 1 HOUR;
SELECT event_name, definer FROM INFORMATION_SCHEMA.EVENTS; 
DROP EVENT e1;

CREATE DEFINER=CURRENT_USER() EVENT e1 ON SCHEDULE EVERY 1 DAY DO SELECT 1;
SELECT event_name, definer FROM INFORMATION_SCHEMA.EVENTS; 
DROP EVENT e1;

--error ER_SPECIFIC_ACCESS_DENIED_ERROR
CREATE DEFINER=root@localhost EVENT e1 ON SCHEDULE EVERY 1 DAY DO SELECT 1;
--error ER_EVENT_DOES_NOT_EXIST
DROP EVENT e1;

disconnect conn1;
connection default;

DROP USER mysqltest_u1@localhost;


#
# BUG#16420: Events: timestamps become UTC
# BUG#26429: SHOW CREATE EVENT is incorrect for an event that
#            STARTS NOW()
# BUG#26431: Impossible to re-create an event from backup if its
#            STARTS clause is in the past
# WL#3698: Events: execution in local time zone
#
# Here we only check non-concurrent aspects of the patch.
# For the actual tests of time zones please see events_time_zone.test
#
SET GLOBAL EVENT_SCHEDULER= OFF;
SET @save_time_zone= @@TIME_ZONE;

#----------------------------------------------------------------------

# We will use a separate connection because SET TIMESTAMP will stop
# the clock in that connection.

SET TIME_ZONE= '+00:00';
SET TIMESTAMP= UNIX_TIMESTAMP('2005-12-31 23:58:59');


# Test when event time zone is updated on ALTER EVENT.
#

CREATE EVENT e1 ON SCHEDULE EVERY 1 DAY DO SELECT 1;
SHOW EVENTS;

# Test storing and updating of the event time zone.
#
SET TIME_ZONE= '-01:00';
ALTER EVENT e1 ON SCHEDULE EVERY 1 DAY STARTS '2000-01-01 00:00:00';
SHOW EVENTS;

# This will update event time zone.
SET TIME_ZONE= '+02:00';
ALTER EVENT e1 ON SCHEDULE AT '2000-01-02 00:00:00'
  ON COMPLETION PRESERVE DISABLE;
SHOW EVENTS;

# This will update event time zone.
SET TIME_ZONE= '-03:00';
ALTER EVENT e1 ON SCHEDULE EVERY 1 DAY ENDS '2030-01-03 00:00:00'
  ON COMPLETION PRESERVE DISABLE;
SHOW EVENTS;

# This will not update event time zone, as no time is being adjusted.
SET TIME_ZONE= '+04:00';
ALTER EVENT e1 DO SELECT 2;
SHOW EVENTS;

DROP EVENT e1;

#----------------------------------------------------------------------

# Create some events.
SET TIME_ZONE='+05:00';
CREATE EVENT e1 ON SCHEDULE EVERY 1 DAY STARTS '2006-01-01 00:00:00' DO
  SELECT 1;

SET TIMESTAMP= @@TIMESTAMP + 1;

SET TIME_ZONE='-05:00';
CREATE EVENT e2 ON SCHEDULE EVERY 1 DAY STARTS '2006-01-01 00:00:00' DO
  SELECT 1;

SET TIMESTAMP= @@TIMESTAMP + 1;

SET TIME_ZONE='+00:00';
CREATE EVENT e3 ON SCHEDULE EVERY 1 DAY STARTS '2006-01-01 00:00:00' DO
  SELECT 1;


# Test INFORMATION_SCHEMA.EVENTS.
#

SELECT * FROM INFORMATION_SCHEMA.EVENTS ORDER BY event_name;


# Test SHOW EVENTS.
#

SHOW EVENTS;


# Test SHOW CREATE EVENT.
#

SHOW CREATE EVENT e1;
SHOW CREATE EVENT e2;
SHOW CREATE EVENT e3;

#----------------------------------------------------------------------

# Test times in the past.
#

--echo The following should fail, and nothing should be altered.

--error ER_EVENT_CANNOT_ALTER_IN_THE_PAST
ALTER EVENT e1 ON SCHEDULE EVERY 1 HOUR STARTS '1999-01-01 00:00:00'
  ENDS '1999-01-02 00:00:00';

--error ER_EVENT_CANNOT_ALTER_IN_THE_PAST
ALTER EVENT e1 ON SCHEDULE EVERY 1 HOUR STARTS '1999-01-01 00:00:00'
  ENDS '1999-01-02 00:00:00' DISABLE;

--echo The following should give warnings, and nothing should be created.

CREATE EVENT e4 ON SCHEDULE EVERY 1 HOUR STARTS '1999-01-01 00:00:00'
  ENDS '1999-01-02 00:00:00'
DO
  SELECT 1;

CREATE EVENT e4 ON SCHEDULE EVERY 1 HOUR STARTS '1999-01-01 00:00:00'
  ENDS '1999-01-02 00:00:00' DISABLE
DO
  SELECT 1;

CREATE EVENT e4 ON SCHEDULE AT '1999-01-01 00:00:00' DO
  SELECT 1;

CREATE EVENT e4 ON SCHEDULE AT '1999-01-01 00:00:00' DISABLE
DO
  SELECT 1;

SHOW EVENTS;

--echo The following should succeed giving a warning.

ALTER EVENT e1 ON SCHEDULE EVERY 1 HOUR STARTS '1999-01-01 00:00:00'
  ENDS '1999-01-02 00:00:00' ON COMPLETION PRESERVE;

CREATE EVENT e4 ON SCHEDULE EVERY 1 HOUR STARTS '1999-01-01 00:00:00'
  ENDS '1999-01-02 00:00:00' ON COMPLETION PRESERVE
DO
  SELECT 1;

CREATE EVENT e5 ON SCHEDULE AT '1999-01-01 00:00:00'
  ON COMPLETION PRESERVE
DO
  SELECT 1;

--echo The following should succeed without warnings.

ALTER EVENT e2 ON SCHEDULE EVERY 1 HOUR STARTS '1999-01-01 00:00:00';

ALTER EVENT e3 ON SCHEDULE EVERY 1 HOUR STARTS '1999-01-01 00:00:00'
  ENDS '1999-01-02 00:00:00' ON COMPLETION PRESERVE DISABLE;

CREATE EVENT e6 ON SCHEDULE EVERY 1 HOUR STARTS '1999-01-01 00:00:00' DO
  SELECT 1;

CREATE EVENT e7 ON SCHEDULE EVERY 1 HOUR STARTS '1999-01-01 00:00:00'
  ENDS '1999-01-02 00:00:00' ON COMPLETION PRESERVE DISABLE
DO
  SELECT 1;

CREATE EVENT e8 ON SCHEDULE AT '1999-01-01 00:00:00'
  ON COMPLETION PRESERVE DISABLE
DO
  SELECT 1;

SHOW EVENTS;


DROP EVENT e8;
DROP EVENT e7;
DROP EVENT e6;
DROP EVENT e5;
DROP EVENT e4;
DROP EVENT e3;
DROP EVENT e2;
DROP EVENT e1;

SET TIME_ZONE=@save_time_zone;

#
# START - BUG#28666 CREATE EVENT ... EVERY 0 SECOND let server crash
#
--disable_warnings
drop event if exists new_event;
--enable_warnings
--error ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG
CREATE EVENT new_event ON SCHEDULE EVERY 0 SECOND DO SELECT 1;
--error ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG
CREATE EVENT new_event ON SCHEDULE EVERY (SELECT 0) SECOND DO SELECT 1;
--error ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG
CREATE EVENT new_event ON SCHEDULE EVERY "abcdef" SECOND DO SELECT 1;
--error ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG
CREATE EVENT new_event ON SCHEDULE EVERY "0abcdef" SECOND DO SELECT 1;
--error ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG
CREATE EVENT new_event ON SCHEDULE EVERY "a1bcdef" SECOND DO SELECT 1;

--error ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG
CREATE EVENT new_event ON SCHEDULE EVERY (SELECT "abcdef" UNION SELECT "abcdef") SECOND DO SELECT 1;
--error ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG
CREATE EVENT new_event ON SCHEDULE EVERY (SELECT "0abcdef") SECOND DO SELECT 1;
--error ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG
CREATE EVENT new_event ON SCHEDULE EVERY (SELECT "a1bcdef") SECOND DO SELECT 1;

--error ER_WRONG_VALUE
CREATE EVENT new_event ON SCHEDULE AT "every day" DO SELECT 1;
--error ER_WRONG_VALUE
CREATE EVENT new_event ON SCHEDULE AT "0every day" DO SELECT 1;
--error ER_WRONG_VALUE
CREATE EVENT new_event ON SCHEDULE AT (SELECT "every day") DO SELECT 1;

--error ER_PARSE_ERROR
CREATE EVENT new_event ON SCHEDULE AT NOW() STARTS NOW() DO SELECT 1;
--error ER_PARSE_ERROR
CREATE EVENT new_event ON SCHEDULE AT NOW() ENDS NOW() DO SELECT 1;
--error ER_PARSE_ERROR
CREATE EVENT new_event ON SCHEDULE AT NOW() STARTS NOW() ENDS NOW() DO SELECT 1;

#
# START - BUG#28924 If I drop the user who is the definer of an active event then server cores
#
let $engine=MyISAM;
USE test;
SHOW GRANTS FOR CURRENT_USER;
SET GLOBAL event_scheduler = ON;
eval CREATE TABLE event_log (id int KEY AUTO_INCREMENT,
                             ev_nm char(40), ev_cnt int,
                             ev_tm timestamp) ENGINE=$engine; 
SET @ev_base_date = 20281224180000;
--disable_warnings
SET autocommit=0;
#DROP DATABASE IF EXISTS ev_db_1;
#CREATE DATABASE ev_db_1;
--enable_warnings
CREATE USER evtest1@localhost;
SET PASSWORD FOR evtest1@localhost = password('ev1');
REVOKE ALL PRIVILEGES, GRANT OPTION FROM evtest1@localhost;
GRANT create, insert, select, event ON events_test.* TO evtest1@localhost;
GRANT select,insert ON test.* TO evtest1@localhost;
SHOW GRANTS FOR evtest1@localhost;

--echo connection e1;
--replace_result $MASTER_MYPORT MASTER_MYPORT $MASTER_MYSOCK MASTER_MYSOCK
connect (e1,localhost,evtest1,ev1,events_test,$MASTER_MYPORT,$MASTER_MYSOCK);
USE events_test;

DELIMITER |;
CREATE EVENT ev_sched_1823 ON SCHEDULE EVERY 2 SECOND
DO BEGIN
       SET AUTOCOMMIT = 0;
       SET @evname = 'ev_sched_1823';
       SET @cnt = 0;
       SELECT COUNT(*) INTO @cnt FROM test.event_log WHERE ev_nm = @evname;
       IF @cnt < 6 THEN
         INSERT INTO test.event_log VALUES (NULL,@evname,@cnt+1,current_timestamp());
         COMMIT;
       END IF;
       SELECT COUNT(*) INTO @cnt FROM test.event_log WHERE ev_nm = @evname;
       IF @cnt < 6 THEN
         INSERT INTO test.event_log VALUES (NULL,@evname,@cnt+1,current_timestamp());
         ROLLBACK;
       END IF;
END;|
DELIMITER ;|

--sleep 6
--echo connection default;
DROP EVENT ev_sched_1823;
connection default;
DROP USER evtest1@localhost;

--sleep 6
USE test;
--echo =====================================================================================
--sleep 5
#--disable_result_log
select id,ev_nm,ev_cnt from event_log order by id;
#--enable_result_log
DROP TABLE event_log;
#DROP DATABASE ev_db_1;
SET GLOBAL event_scheduler = OFF;

# 
# 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;


#
# Bug#28641 CREATE EVENT with '2038.01.18 03:00:00' let server crash.
#
SET GLOBAL event_scheduler= ON;
DELIMITER |;
CREATE EVENT bug28641 ON SCHEDULE AT '2038.01.18 03:00:00'
            DO BEGIN
		SELECT 1;
               END;|

DELIMITER ;|
SET GLOBAL event_scheduler= OFF;
DROP EVENT bug28641;
