mariadb/mysql-test/t/events.test

466 lines
16 KiB
Text
Raw Normal View History

create database if not exists events_test;
use events_test;
#
# START: BUG #17289 Events: missing privilege check for drop database
#
CREATE USER pauline@localhost;
CREATE DATABASE db_x;
GRANT EVENT ON db_x.* TO pauline@localhost;
USE db_x;
CREATE TABLE x_table(a int);
connect (priv_conn,localhost,pauline,,db_x);
CREATE EVENT e_x1 ON SCHEDULE EVERY 1 SECOND DO DROP DATABASE db_x;
CREATE EVENT e_x2 ON SCHEDULE EVERY 1 SECOND DO DROP TABLE x_table;
connection default;
SHOW DATABASES LIKE 'db_x';
SET GLOBAL event_scheduler=1;
--sleep 2
SHOW DATABASES LIKE 'db_x';
SHOW TABLES FROM db_x;
SET GLOBAL event_scheduler=0;
--sleep 1
connection priv_conn;
DROP EVENT e_x1;
DROP EVENT e_x2;
disconnect priv_conn;
connection default;
DROP DATABASE db_x;
DROP USER pauline@localhost;
USE events_test;
#
# END: BUG #17289 Events: missing privilege check for drop database
#
SET GLOBAL event_scheduler=0;
--sleep 1
2005-12-02 13:28:14 +01:00
drop event if exists event1;
create event event1 on schedule every 15 minute starts now() ends date_add(now(), interval 5 hour) DO begin end;
alter event event1 rename to event2 enable;
alter event event2 disable;
alter event event2 enable;
alter event event2 on completion not preserve;
delimiter __;
alter event event2 on schedule every 1 year on completion preserve rename to event3 comment "new comment" do begin select 1; end__
delimiter ;__
alter event event3 rename to event2;
2005-12-02 13:28:14 +01:00
drop event event2;
create event event2 on schedule every 2 second starts now() ends date_add(now(), interval 5 hour) comment "some" DO begin end;
drop event event2;
# BUG #16537 (Events: mysql.event.starts is null)
CREATE EVENT event_starts_test ON SCHEDULE EVERY 10 SECOND COMMENT "" DO SELECT 1;
--replace_column 8 # 9 #
SHOW EVENTS;
SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
ALTER EVENT event_starts_test ON SCHEDULE AT '2020-02-02 20:00:02';
--replace_column 8 # 9 #
SHOW EVENTS;
SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
ALTER EVENT event_starts_test COMMENT "non-empty comment";
--replace_column 8 # 9 #
SHOW EVENTS;
SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
ALTER EVENT event_starts_test COMMENT "";
--replace_column 8 # 9 #
SHOW EVENTS;
SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
DROP EVENT event_starts_test;
CREATE EVENT event_starts_test ON SCHEDULE EVERY 20 SECOND STARTS '2020-02-02 20:00:02' ENDS '2022-02-02 20:00:02' DO SELECT 2;
--replace_column 8 # 9 #
SHOW EVENTS;
SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
ALTER EVENT event_starts_test COMMENT "non-empty comment";
--replace_column 8 # 9 #
SHOW EVENTS;
SELECT starts IS NULL, ends IS NULL, comment FROM mysql.event WHERE db='events_test' AND name='event_starts_test';
ALTER EVENT event_starts_test COMMENT "";
--replace_column 8 # 9 #
SHOW EVENTS;
DROP EVENT event_starts_test;
#
#
create event e_43 on schedule every 1 second do set @a = 5;
set global event_scheduler = 1;
--sleep 2
alter event e_43 do alter event e_43 do set @a = 4;
--sleep 2
select db, name, body, status, interval_field, interval_value from mysql.event;
drop event e_43;
--sleep 1
--echo "Let's check whether we can use non-qualified names"
create table non_qualif(a int);
create event non_qualif_ev on schedule every 10 minute do insert into non_qualif values (800219);
--sleep 2
select * from non_qualif;
drop event non_qualif_ev;
drop table non_qualif;
set global event_scheduler = 0;
2005-12-02 13:28:14 +01:00
create table t_event3 (a int, b float);
drop event if exists event3;
create event event3 on schedule every 50 + 10 minute starts date_add("20100101", interval 5 minute) ends date_add("20151010", interval 5 day) comment "portokala_comment" DO insert into t_event3 values (unix_timestamp(), rand());
2005-12-02 13:28:14 +01:00
set max_allowed_packet=128000000;
select count(*) from t_event3;
drop event event3;
WL#1034 update - fix EVENT_ACL problem that GRANT ALL on some_db.* to someone@somewhere did not get to mysql.db - fix crash when the following is executed : CREATE EVENT P() CREATE EVENT E ON SCHEDULER 1 SECOND DO ROLLBACK; (creation works as well as calling P() which creates the event). mysql-test/lib/init_db.sql: - fix init_db.sql so add Event_priv to the database privs, many tests failed because of that ommision - remove the quotes from the column names mysql-test/t/events.test: - fix the small test, don't create own db scripts/mysql_fix_privilege_tables.sql: - fix that sql/event.cc: - be defensive and don't crash if outside has already has opened some table sql/event_executor.cc: - show in SHOW PROCESSLIST - "event_scheduler" as name of the user of the main thread - use "localhost" as the host where event_scheduler comes from - comment out some debug info, fix other debug info sql/event_timed.cc: - enable EVENT creation inside SP. sphead from lex->sphead goes to et->sphead. it's there only if we compile the event. OTOH when doing CREATE PROCEDURE PROC() CREATE EVENT SOME_EV ON SCHEDULE EVERY 1 SECOND DO ROLLBACK; I have only to get the body of the event which is anonymous SP. Before it being "compiled" but then freed without being used because a bit later it is compiled one more time before being put in the events cache. So it was good that the memory structures weren't reused but scrapped out. Now lex->sphead is not needed during event creation but only where the event's body starts and where it ends so to be able at later stage to compile this anonymous SP (the body of the event). sql/sp_head.cc: - copy over a fix to a crash sql/sql_acl.h: - fix privileges. There was _NO_ documentation about that. Another CHUNK had to be created to so EVENT_ACL gets shifted to it's place in the db table. So how this is calculated? EVENT_ACL is 1 << 26. Remember 26, see which poistion in the db table is EVENT_ACL, it's 17, counted from 0. 26 - 17 = 9, then shift it with 9. CHUNKS are created because in some cases some privileges are in chunks and they are shifted at once. There are few chunks of such privileges which has to be shifted to get to exactly the structure of mysql.db table. sql/sql_parse.cc: - ok, we don't care anymore about lex->sphead because our sphead is lex->et->sphead sql/sql_yacc.yy: - bail out if new event_timed returns 0x0 - enable creation of an event inside a SP CREATE PROCEDURE P() CREATE EVENT E ON SCHEDULE EVERY 1 SECOND DO SELECT 1;
2005-12-15 14:12:28 +01:00
drop table t_event3;
- final fixes for bug#16431 (Events: An event which alters itself disappears) - fix for bug#16423 (Events: SHOW CREATE EVENT doesn't work) - this Changeset commits makes CREATE/UPDATE/DELETE EVENT real DDL statements by committing the currently open transaction before they are executed. - this Changeset also fixes a trailing space problem since the very early days of the internal cron - adds sophisticated checking of whether mysql.event was tampered accidentally or with purpose by an user. - adds a lot of inline function documentation - documents everything left uncodumented - INTERVAL_XXXX to XXX in I_S.EVENTS.INTERVAL_FIELD WL#1034 (Internal CRON) mysql-test/r/events.result: update result mysql-test/t/events.test: add test cases for SHOW CREATE EVENT add test cases where the structure of mysql.event is changed and error reporting in this case sql/event.cc: - do a lot more checking on mysql.event whether it's valid introduced generic function table_check_intact() which can be used also for checking whether a system table (mysql.*) has been tampered by user and report an error in this case. The checking is quite strict, thus maybe some mechanism can be added later that loosens this like some session variable, for instance, i_am_aware_that_i_can_damage_my_data so the table will be opened nevertheless we think that it's not valid. - add evex_show_create_event(THD *thd, sp_name *spn, LEX_STRING definer) - document a loooot. not a single function left undocumented. sql/event.h: - add evex_show_create_event(THD *thd, sp_name *spn, LEX_STRING definer) - change get_show_create_event() to get_create_event() - add TABLE_FIELD_W_TYPE used by table_check_intact() - add event_timed::sql_mode so it can be used by show create event. currently always 0, will be fixed by a patch for another bug. At least makes the code of show create event complete. sql/event_executor.cc: - add evex_check_system_tables() that checks on boot and event main thread startup that mysql.db and mysql.user tables are correct. - document everything! sql/event_priv.h: remove a line sql/event_timed.cc: - implement SHOW CREATE EVENT - document undocumented functions! sql/share/errmsg.txt: - fix an error message and add two new sql/sql_acl.cc: - add mysql.db table definition to use by table_check_intact() - exchange some of the positions by numbers from mysql.db to enum names (see sql_acl.h) sql/sql_acl.h: - define the structure of mysql.db table sql/sql_parse.cc: - handle SQLCOM_SHOW_CREATE_EVENT - end the current transaction becase CREATE/UPDATE/DELETE EVENT is a DDL statement sql/sql_show.cc: - remove interval_type_to_name - use common function event_reconstruct_interval_expression() that reconstructs the expression given at create/alter, to some extent - interval of 2:62 MINUTE_SECOND will be reconstructed as interval of 3:02 MINUTE_SECOND! sql/sql_yacc.yy: init the definer of event_timed also when doing SHOW CREATE EVENT because it's needed for checking into mysql.event sql/table.cc: - remove stale code. only mysql.event should be a 'system_table' - add table_check_intact() to check the consistency of a table. mostly usable with mysql.xxx tables. sql/table.h: - export TABLE_FIELD_W_TYPE and table_check_intact() which are used for checking the structure of a table. mostly usable for mysql.xxx tables.
2006-02-14 16:20:48 +01:00
set names utf8;
#
# SHOW CREATE EVENT test begin
#
CREATE EVENT root6 ON SCHEDULE EVERY '10:20' MINUTE_SECOND ON COMPLETION PRESERVE ENABLE COMMENT 'some comment' DO select 1;
SHOW CREATE EVENT root6;
create event root7 on schedule every 2 year do select 1;
SHOW CREATE EVENT root7;
create event root8 on schedule every '2:5' year_month do select 1;
SHOW CREATE EVENT root8;
create event root8_1 on schedule every '2:15' year_month do select 1;
SHOW CREATE EVENT root8_1;
create event root9 on schedule every 2 week ON COMPLETION PRESERVE DISABLE COMMENT 'коментар на кирилица' do select 1;
SHOW CREATE EVENT root9;
create event root10 on schedule every '20:5' day_hour do select 1;
SHOW CREATE EVENT root10;
create event root11 on schedule every '20:25' day_hour do select 1;
SHOW CREATE EVENT root11;
create event root12 on schedule every '20:25' hour_minute do select 1;
SHOW CREATE EVENT root12;
create event root13 on schedule every '25:25' hour_minute do select 1;
SHOW CREATE EVENT root13;
create event root13_1 on schedule every '11:65' hour_minute do select 1;
SHOW CREATE EVENT root13_1;
create event root14 on schedule every '35:35' minute_second do select 1;
SHOW CREATE EVENT root14;
create event root15 on schedule every '35:66' minute_second do select 1;
SHOW CREATE EVENT root15;
create event root16 on schedule every '35:56' day_minute do select 1;
SHOW CREATE EVENT root16;
create event root17 on schedule every '35:12:45' day_minute do select 1;
SHOW CREATE EVENT root17;
create event root17_1 on schedule every '35:25:65' day_minute do select 1;
SHOW CREATE EVENT root17_1;
create event root18 on schedule every '35:12:45' hour_second do select 1;
SHOW CREATE EVENT root18;
create event root19 on schedule every '15:59:85' hour_second do select 1;
SHOW CREATE EVENT root19;
create event root20 on schedule every '50:20:12:45' day_second do select 1;
SHOW CREATE EVENT root20;
set names cp1251;
create event <20><><EFBFBD><EFBFBD>21 on schedule every '50:23:59:95' day_second COMMENT '<27><><EFBFBD><EFBFBD> <20> 1251 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>' do select 1;
SHOW CREATE EVENT <20><><EFBFBD><EFBFBD>21;
insert into mysql.event (db, name, body, definer, interval_value, interval_field) values (database(), "root22", "select 1", user(), 100, "SECOND_MICROSECOND");
--error 1235
- final fixes for bug#16431 (Events: An event which alters itself disappears) - fix for bug#16423 (Events: SHOW CREATE EVENT doesn't work) - this Changeset commits makes CREATE/UPDATE/DELETE EVENT real DDL statements by committing the currently open transaction before they are executed. - this Changeset also fixes a trailing space problem since the very early days of the internal cron - adds sophisticated checking of whether mysql.event was tampered accidentally or with purpose by an user. - adds a lot of inline function documentation - documents everything left uncodumented - INTERVAL_XXXX to XXX in I_S.EVENTS.INTERVAL_FIELD WL#1034 (Internal CRON) mysql-test/r/events.result: update result mysql-test/t/events.test: add test cases for SHOW CREATE EVENT add test cases where the structure of mysql.event is changed and error reporting in this case sql/event.cc: - do a lot more checking on mysql.event whether it's valid introduced generic function table_check_intact() which can be used also for checking whether a system table (mysql.*) has been tampered by user and report an error in this case. The checking is quite strict, thus maybe some mechanism can be added later that loosens this like some session variable, for instance, i_am_aware_that_i_can_damage_my_data so the table will be opened nevertheless we think that it's not valid. - add evex_show_create_event(THD *thd, sp_name *spn, LEX_STRING definer) - document a loooot. not a single function left undocumented. sql/event.h: - add evex_show_create_event(THD *thd, sp_name *spn, LEX_STRING definer) - change get_show_create_event() to get_create_event() - add TABLE_FIELD_W_TYPE used by table_check_intact() - add event_timed::sql_mode so it can be used by show create event. currently always 0, will be fixed by a patch for another bug. At least makes the code of show create event complete. sql/event_executor.cc: - add evex_check_system_tables() that checks on boot and event main thread startup that mysql.db and mysql.user tables are correct. - document everything! sql/event_priv.h: remove a line sql/event_timed.cc: - implement SHOW CREATE EVENT - document undocumented functions! sql/share/errmsg.txt: - fix an error message and add two new sql/sql_acl.cc: - add mysql.db table definition to use by table_check_intact() - exchange some of the positions by numbers from mysql.db to enum names (see sql_acl.h) sql/sql_acl.h: - define the structure of mysql.db table sql/sql_parse.cc: - handle SQLCOM_SHOW_CREATE_EVENT - end the current transaction becase CREATE/UPDATE/DELETE EVENT is a DDL statement sql/sql_show.cc: - remove interval_type_to_name - use common function event_reconstruct_interval_expression() that reconstructs the expression given at create/alter, to some extent - interval of 2:62 MINUTE_SECOND will be reconstructed as interval of 3:02 MINUTE_SECOND! sql/sql_yacc.yy: init the definer of event_timed also when doing SHOW CREATE EVENT because it's needed for checking into mysql.event sql/table.cc: - remove stale code. only mysql.event should be a 'system_table' - add table_check_intact() to check the consistency of a table. mostly usable with mysql.xxx tables. sql/table.h: - export TABLE_FIELD_W_TYPE and table_check_intact() which are used for checking the structure of a table. mostly usable for mysql.xxx tables.
2006-02-14 16:20:48 +01:00
show create event root22;
--error 1235
- final fixes for bug#16431 (Events: An event which alters itself disappears) - fix for bug#16423 (Events: SHOW CREATE EVENT doesn't work) - this Changeset commits makes CREATE/UPDATE/DELETE EVENT real DDL statements by committing the currently open transaction before they are executed. - this Changeset also fixes a trailing space problem since the very early days of the internal cron - adds sophisticated checking of whether mysql.event was tampered accidentally or with purpose by an user. - adds a lot of inline function documentation - documents everything left uncodumented - INTERVAL_XXXX to XXX in I_S.EVENTS.INTERVAL_FIELD WL#1034 (Internal CRON) mysql-test/r/events.result: update result mysql-test/t/events.test: add test cases for SHOW CREATE EVENT add test cases where the structure of mysql.event is changed and error reporting in this case sql/event.cc: - do a lot more checking on mysql.event whether it's valid introduced generic function table_check_intact() which can be used also for checking whether a system table (mysql.*) has been tampered by user and report an error in this case. The checking is quite strict, thus maybe some mechanism can be added later that loosens this like some session variable, for instance, i_am_aware_that_i_can_damage_my_data so the table will be opened nevertheless we think that it's not valid. - add evex_show_create_event(THD *thd, sp_name *spn, LEX_STRING definer) - document a loooot. not a single function left undocumented. sql/event.h: - add evex_show_create_event(THD *thd, sp_name *spn, LEX_STRING definer) - change get_show_create_event() to get_create_event() - add TABLE_FIELD_W_TYPE used by table_check_intact() - add event_timed::sql_mode so it can be used by show create event. currently always 0, will be fixed by a patch for another bug. At least makes the code of show create event complete. sql/event_executor.cc: - add evex_check_system_tables() that checks on boot and event main thread startup that mysql.db and mysql.user tables are correct. - document everything! sql/event_priv.h: remove a line sql/event_timed.cc: - implement SHOW CREATE EVENT - document undocumented functions! sql/share/errmsg.txt: - fix an error message and add two new sql/sql_acl.cc: - add mysql.db table definition to use by table_check_intact() - exchange some of the positions by numbers from mysql.db to enum names (see sql_acl.h) sql/sql_acl.h: - define the structure of mysql.db table sql/sql_parse.cc: - handle SQLCOM_SHOW_CREATE_EVENT - end the current transaction becase CREATE/UPDATE/DELETE EVENT is a DDL statement sql/sql_show.cc: - remove interval_type_to_name - use common function event_reconstruct_interval_expression() that reconstructs the expression given at create/alter, to some extent - interval of 2:62 MINUTE_SECOND will be reconstructed as interval of 3:02 MINUTE_SECOND! sql/sql_yacc.yy: init the definer of event_timed also when doing SHOW CREATE EVENT because it's needed for checking into mysql.event sql/table.cc: - remove stale code. only mysql.event should be a 'system_table' - add table_check_intact() to check the consistency of a table. mostly usable with mysql.xxx tables. sql/table.h: - export TABLE_FIELD_W_TYPE and table_check_intact() which are used for checking the structure of a table. mostly usable for mysql.xxx tables.
2006-02-14 16:20:48 +01:00
SHOW EVENTS;
drop event root22;
drop event root6;
drop event root7;
drop event root8;
drop event root8_1;
drop event root9;
drop event root10;
drop event root11;
drop event root12;
drop event root13;
drop event root13_1;
drop event root14;
drop event root15;
drop event root16;
drop event root17;
drop event root17_1;
drop event root18;
drop event root19;
drop event root20;
drop event <20><><EFBFBD><EFBFBD>21;
set names latin1;
#
# SHOW CREATE EVENT test end
#
#
# mysql.event intact checking start
#
# There should be at least 1 second between the ALTERs or we can't catch the change of create_time!!
#
CREATE EVENT intact_check ON SCHEDULE EVERY 10 HOUR DO SELECT "nothing";
--replace_column 8 # 9 #
SHOW EVENTS;
ALTER TABLE mysql.event ADD dummy INT FIRST;
--error 1525
SHOW EVENTS;
ALTER TABLE mysql.event DROP dummy, ADD dummy2 VARCHAR(64) FIRST;
--error 1525
SHOW EVENTS;
ALTER TABLE mysql.event DROP dummy2;
--replace_column 8 # 9 #
SHOW EVENTS;
CREATE TABLE event_like LIKE mysql.event;
INSERT INTO event_like SELECT * FROM mysql.event;
#sleep a bit or we won't catch the change of time
--sleep 1
ALTER TABLE mysql.event MODIFY db char(20) character set utf8 collate utf8_bin default '';
#wait a bit or we won't see the difference because of seconds resolution
--sleep 1
SHOW CREATE TABLE mysql.event;
--error 1526
SELECT event_name FROM INFORMATION_SCHEMA.EVENTS;
--sleep 1
ALTER TABLE mysql.event MODIFY db char(64) character set utf8 collate utf8_bin default '';
--sleep 1
--echo "This should work"
--replace_column 8 # 9 #
SHOW EVENTS;
--sleep 1
ALTER TABLE mysql.event MODIFY db char(64) character set cp1251 default '';
--error 1526
SELECT event_name FROM INFORMATION_SCHEMA.EVENTS;
--sleep 1
ALTER TABLE mysql.event MODIFY db varchar(64) character set utf8 collate utf8_bin default '';
--error 1526
SELECT event_name FROM INFORMATION_SCHEMA.EVENTS;
--sleep 1
ALTER TABLE mysql.event DROP comment, DROP starts;
--sleep 1
--error 1525
SELECT event_name FROM INFORMATION_SCHEMA.EVENTS;
DROP TABLE mysql.event;
CREATE TABLE mysql.event like event_like;
INSERT INTO mysql.event SELECT * FROM event_like;
DROP TABLE event_like;
--replace_column 8 # 9 #
SHOW EVENTS;
DROP EVENT intact_check;
#
# mysql.event intact checking end
#
fix for bug#16642 (Events: No INFORMATION_SCHEMA.EVENTS table) post-review change - use pointer instead of copy on the stack. WL#1034 (Internal CRON) This patch adds INFORMATION_SCHEMA.EVENTS table with the following format: EVENT_CATALOG - MYSQL_TYPE_STRING (Always NULL) EVENT_SCHEMA - MYSQL_TYPE_STRING (the database) EVENT_NAME - MYSQL_TYPE_STRING (the name) DEFINER - MYSQL_TYPE_STRING (user@host) EVENT_BODY - MYSQL_TYPE_STRING (the body from mysql.event) EVENT_TYPE - MYSQL_TYPE_STRING ("ONE TIME" | "RECURRING") EXECUTE_AT - MYSQL_TYPE_TIMESTAMP (set for "ONE TIME" otherwise NULL) INTERVAL_VALUE - MYSQL_TYPE_LONG (set for RECURRING otherwise NULL) INTERVAL_FIELD - MYSQL_TYPE_STRING (set for RECURRING otherwise NULL) SQL_MODE - MYSQL_TYPE_STRING (for now NULL) STARTS - MYSQL_TYPE_TIMESTAMP (starts from mysql.event) ENDS - MYSQL_TYPE_TIMESTAMP (ends from mysql.event) STATUS - MYSQL_TYPE_STRING (ENABLED | DISABLED) ON_COMPLETION - MYSQL_TYPE_STRING (NOT PRESERVE | PRESERVE) CREATED - MYSQL_TYPE_TIMESTAMP LAST_ALTERED - MYSQL_TYPE_TIMESTAMP LAST_EXECUTED - MYSQL_TYPE_TIMESTAMP EVENT_COMMENT - MYSQL_TYPE_STRING SQL_MODE is NULL for now, because the value is still not stored in mysql.event . Support will be added as a fix for another bug. This patch also adds SHOW [FULL] EVENTS [FROM db] [LIKE pattern] 1. SHOW EVENTS shows always only the events on the same user, because the PK of mysql.event is (definer, db, name) several users may have event with the same name -> no information disclosure. 2. SHOW FULL EVENTS - shows the events (in the current db as SHOW EVENTS) of all users. The user has to have PROCESS privilege, if not then SHOW FULL EVENTS behave like SHOW EVENTS. 3. If [FROM db] is specified then this db is considered. 4. Event names can be filtered with LIKE pattern. SHOW EVENTS returns table with the following columns, which are subset of the data which is returned by SELECT * FROM I_S.EVENTS Db Name Definer Type Execute at Interval value Interval field Starts Ends Status mysql-test/lib/init_db.sql: change the PK - (definer, db, name) quicker searches when SHOW EVENTS; allow also different users to have events with the same name -> no information disclosure mysql-test/r/events.result: result of new tests mysql-test/r/information_schema.result: result of new tests mysql-test/r/information_schema_db.result: result of new tests mysql-test/r/system_mysql_db.result: result of new tests mysql-test/t/events.test: new tests for information_schema.events scripts/mysql_create_system_tables.sh: change the PK of mysql.event to (definer, db, name) scripts/mysql_fix_privilege_tables.sql: change the PK of mysql.event to (definer, db, name) sql/event.cc: pass around the definer of the event because of the new PK which is (definer, db, name). It's needed for index searching. sql/event.h: - make enum evex_table_field again public so it can be used in sql_show.cc - make created and modified ulonglong, because they should be such - make public evex_open_event_table so it can be used in sql_show.cc sql/event_executor.cc: - cosmetics sql/event_priv.h: - moved enum evex_table_field and evex_open_event_table() to event.h (made them therefore public) sql/event_timed.cc: - in event_timed::init_definer() always fill this.definer with the concatenated value of definer_user@definer_host. Makes later the work easier. - pass around the definer wherever is needed for searching (new prototype of evex_db_find_evex_aux) sql/mysqld.cc: - add counter for SHOW EVENTS sql/sql_lex.h: - register SHOW EVENTS as command sql/sql_parse.cc: - handle SCH_EVENTS (I_S.EVENTS like SCH_TRIGGERS) - make additional check in case of SHOW EVENTS (check for EVENT on the current database. if it is null check_access() gives appropriate message back. sql/sql_show.cc: - add INFORMATION_SCHEMA.EVENTS and SHOW EVENTS - I_S.EVENTS.SQL_MODE is NULL for now -> not implemented. Trudy asked to be added so bug #16642 can be completely closed. There is another bug report which will fix the lack of storage of SQL_MODE during event creation. sql/sql_yacc.yy: - always call event_timed::init_definer() when CREATE/ALTER/DROP EVENT but not when just compiling the body of the event because in this case this operation is not needed, it takes memory and CPU time and at the end the result is not used. event_timed::definer is used only on SQLCOM_CREATE/ALTER/DROP_EVENT execution not on statement compilation. - add SHOW [FULL] EVENTS [FROM db] [LIKE pattern] in case of FULL and the user has PROCESS privilege then he will see also others' events in the current database, otherwise the output is the same as of SHOW EVENTS. Because the events are per DB only the events from the current database are shown. pattern is applied against event name. FROM db is self explanatory. sql/table.h: add SCH_EVENTS as part of INFORMATION_SCHEMA
2006-01-30 13:15:23 +01:00
#
#INFORMATION_SCHEMA.EVENTS test begin
#
create event one_event on schedule every 10 second do select 123;
--replace_column 8 # 9 #
SHOW EVENTS;
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT from information_schema.events;
CREATE DATABASE events_test2;
CREATE USER ev_test@localhost;
GRANT ALL ON events_test.* to ev_test@localhost;
GRANT ALL on events_test2.* to ev_test@localhost;
REVOKE EVENT ON events_test2.* FROM ev_test@localhost;
REVOKE PROCESS on *.* from ev_test@localhost;
#now we are on con1
connect (ev_con1,localhost,ev_test,,events_test2);
select "NEW CONNECTION";
SELECT USER(), DATABASE();
SHOW GRANTS;
--echo "Here comes an error:";
fix for bug#16642 (Events: No INFORMATION_SCHEMA.EVENTS table) post-review change - use pointer instead of copy on the stack. WL#1034 (Internal CRON) This patch adds INFORMATION_SCHEMA.EVENTS table with the following format: EVENT_CATALOG - MYSQL_TYPE_STRING (Always NULL) EVENT_SCHEMA - MYSQL_TYPE_STRING (the database) EVENT_NAME - MYSQL_TYPE_STRING (the name) DEFINER - MYSQL_TYPE_STRING (user@host) EVENT_BODY - MYSQL_TYPE_STRING (the body from mysql.event) EVENT_TYPE - MYSQL_TYPE_STRING ("ONE TIME" | "RECURRING") EXECUTE_AT - MYSQL_TYPE_TIMESTAMP (set for "ONE TIME" otherwise NULL) INTERVAL_VALUE - MYSQL_TYPE_LONG (set for RECURRING otherwise NULL) INTERVAL_FIELD - MYSQL_TYPE_STRING (set for RECURRING otherwise NULL) SQL_MODE - MYSQL_TYPE_STRING (for now NULL) STARTS - MYSQL_TYPE_TIMESTAMP (starts from mysql.event) ENDS - MYSQL_TYPE_TIMESTAMP (ends from mysql.event) STATUS - MYSQL_TYPE_STRING (ENABLED | DISABLED) ON_COMPLETION - MYSQL_TYPE_STRING (NOT PRESERVE | PRESERVE) CREATED - MYSQL_TYPE_TIMESTAMP LAST_ALTERED - MYSQL_TYPE_TIMESTAMP LAST_EXECUTED - MYSQL_TYPE_TIMESTAMP EVENT_COMMENT - MYSQL_TYPE_STRING SQL_MODE is NULL for now, because the value is still not stored in mysql.event . Support will be added as a fix for another bug. This patch also adds SHOW [FULL] EVENTS [FROM db] [LIKE pattern] 1. SHOW EVENTS shows always only the events on the same user, because the PK of mysql.event is (definer, db, name) several users may have event with the same name -> no information disclosure. 2. SHOW FULL EVENTS - shows the events (in the current db as SHOW EVENTS) of all users. The user has to have PROCESS privilege, if not then SHOW FULL EVENTS behave like SHOW EVENTS. 3. If [FROM db] is specified then this db is considered. 4. Event names can be filtered with LIKE pattern. SHOW EVENTS returns table with the following columns, which are subset of the data which is returned by SELECT * FROM I_S.EVENTS Db Name Definer Type Execute at Interval value Interval field Starts Ends Status mysql-test/lib/init_db.sql: change the PK - (definer, db, name) quicker searches when SHOW EVENTS; allow also different users to have events with the same name -> no information disclosure mysql-test/r/events.result: result of new tests mysql-test/r/information_schema.result: result of new tests mysql-test/r/information_schema_db.result: result of new tests mysql-test/r/system_mysql_db.result: result of new tests mysql-test/t/events.test: new tests for information_schema.events scripts/mysql_create_system_tables.sh: change the PK of mysql.event to (definer, db, name) scripts/mysql_fix_privilege_tables.sql: change the PK of mysql.event to (definer, db, name) sql/event.cc: pass around the definer of the event because of the new PK which is (definer, db, name). It's needed for index searching. sql/event.h: - make enum evex_table_field again public so it can be used in sql_show.cc - make created and modified ulonglong, because they should be such - make public evex_open_event_table so it can be used in sql_show.cc sql/event_executor.cc: - cosmetics sql/event_priv.h: - moved enum evex_table_field and evex_open_event_table() to event.h (made them therefore public) sql/event_timed.cc: - in event_timed::init_definer() always fill this.definer with the concatenated value of definer_user@definer_host. Makes later the work easier. - pass around the definer wherever is needed for searching (new prototype of evex_db_find_evex_aux) sql/mysqld.cc: - add counter for SHOW EVENTS sql/sql_lex.h: - register SHOW EVENTS as command sql/sql_parse.cc: - handle SCH_EVENTS (I_S.EVENTS like SCH_TRIGGERS) - make additional check in case of SHOW EVENTS (check for EVENT on the current database. if it is null check_access() gives appropriate message back. sql/sql_show.cc: - add INFORMATION_SCHEMA.EVENTS and SHOW EVENTS - I_S.EVENTS.SQL_MODE is NULL for now -> not implemented. Trudy asked to be added so bug #16642 can be completely closed. There is another bug report which will fix the lack of storage of SQL_MODE during event creation. sql/sql_yacc.yy: - always call event_timed::init_definer() when CREATE/ALTER/DROP EVENT but not when just compiling the body of the event because in this case this operation is not needed, it takes memory and CPU time and at the end the result is not used. event_timed::definer is used only on SQLCOM_CREATE/ALTER/DROP_EVENT execution not on statement compilation. - add SHOW [FULL] EVENTS [FROM db] [LIKE pattern] in case of FULL and the user has PROCESS privilege then he will see also others' events in the current database, otherwise the output is the same as of SHOW EVENTS. Because the events are per DB only the events from the current database are shown. pattern is applied against event name. FROM db is self explanatory. sql/table.h: add SCH_EVENTS as part of INFORMATION_SCHEMA
2006-01-30 13:15:23 +01:00
#NO EVENT_ACL on events_test2
--error 1044
SHOW EVENTS;
USE events_test;
--echo "Now the list should be empty:";
fix for bug#16642 (Events: No INFORMATION_SCHEMA.EVENTS table) post-review change - use pointer instead of copy on the stack. WL#1034 (Internal CRON) This patch adds INFORMATION_SCHEMA.EVENTS table with the following format: EVENT_CATALOG - MYSQL_TYPE_STRING (Always NULL) EVENT_SCHEMA - MYSQL_TYPE_STRING (the database) EVENT_NAME - MYSQL_TYPE_STRING (the name) DEFINER - MYSQL_TYPE_STRING (user@host) EVENT_BODY - MYSQL_TYPE_STRING (the body from mysql.event) EVENT_TYPE - MYSQL_TYPE_STRING ("ONE TIME" | "RECURRING") EXECUTE_AT - MYSQL_TYPE_TIMESTAMP (set for "ONE TIME" otherwise NULL) INTERVAL_VALUE - MYSQL_TYPE_LONG (set for RECURRING otherwise NULL) INTERVAL_FIELD - MYSQL_TYPE_STRING (set for RECURRING otherwise NULL) SQL_MODE - MYSQL_TYPE_STRING (for now NULL) STARTS - MYSQL_TYPE_TIMESTAMP (starts from mysql.event) ENDS - MYSQL_TYPE_TIMESTAMP (ends from mysql.event) STATUS - MYSQL_TYPE_STRING (ENABLED | DISABLED) ON_COMPLETION - MYSQL_TYPE_STRING (NOT PRESERVE | PRESERVE) CREATED - MYSQL_TYPE_TIMESTAMP LAST_ALTERED - MYSQL_TYPE_TIMESTAMP LAST_EXECUTED - MYSQL_TYPE_TIMESTAMP EVENT_COMMENT - MYSQL_TYPE_STRING SQL_MODE is NULL for now, because the value is still not stored in mysql.event . Support will be added as a fix for another bug. This patch also adds SHOW [FULL] EVENTS [FROM db] [LIKE pattern] 1. SHOW EVENTS shows always only the events on the same user, because the PK of mysql.event is (definer, db, name) several users may have event with the same name -> no information disclosure. 2. SHOW FULL EVENTS - shows the events (in the current db as SHOW EVENTS) of all users. The user has to have PROCESS privilege, if not then SHOW FULL EVENTS behave like SHOW EVENTS. 3. If [FROM db] is specified then this db is considered. 4. Event names can be filtered with LIKE pattern. SHOW EVENTS returns table with the following columns, which are subset of the data which is returned by SELECT * FROM I_S.EVENTS Db Name Definer Type Execute at Interval value Interval field Starts Ends Status mysql-test/lib/init_db.sql: change the PK - (definer, db, name) quicker searches when SHOW EVENTS; allow also different users to have events with the same name -> no information disclosure mysql-test/r/events.result: result of new tests mysql-test/r/information_schema.result: result of new tests mysql-test/r/information_schema_db.result: result of new tests mysql-test/r/system_mysql_db.result: result of new tests mysql-test/t/events.test: new tests for information_schema.events scripts/mysql_create_system_tables.sh: change the PK of mysql.event to (definer, db, name) scripts/mysql_fix_privilege_tables.sql: change the PK of mysql.event to (definer, db, name) sql/event.cc: pass around the definer of the event because of the new PK which is (definer, db, name). It's needed for index searching. sql/event.h: - make enum evex_table_field again public so it can be used in sql_show.cc - make created and modified ulonglong, because they should be such - make public evex_open_event_table so it can be used in sql_show.cc sql/event_executor.cc: - cosmetics sql/event_priv.h: - moved enum evex_table_field and evex_open_event_table() to event.h (made them therefore public) sql/event_timed.cc: - in event_timed::init_definer() always fill this.definer with the concatenated value of definer_user@definer_host. Makes later the work easier. - pass around the definer wherever is needed for searching (new prototype of evex_db_find_evex_aux) sql/mysqld.cc: - add counter for SHOW EVENTS sql/sql_lex.h: - register SHOW EVENTS as command sql/sql_parse.cc: - handle SCH_EVENTS (I_S.EVENTS like SCH_TRIGGERS) - make additional check in case of SHOW EVENTS (check for EVENT on the current database. if it is null check_access() gives appropriate message back. sql/sql_show.cc: - add INFORMATION_SCHEMA.EVENTS and SHOW EVENTS - I_S.EVENTS.SQL_MODE is NULL for now -> not implemented. Trudy asked to be added so bug #16642 can be completely closed. There is another bug report which will fix the lack of storage of SQL_MODE during event creation. sql/sql_yacc.yy: - always call event_timed::init_definer() when CREATE/ALTER/DROP EVENT but not when just compiling the body of the event because in this case this operation is not needed, it takes memory and CPU time and at the end the result is not used. event_timed::definer is used only on SQLCOM_CREATE/ALTER/DROP_EVENT execution not on statement compilation. - add SHOW [FULL] EVENTS [FROM db] [LIKE pattern] in case of FULL and the user has PROCESS privilege then he will see also others' events in the current database, otherwise the output is the same as of SHOW EVENTS. Because the events are per DB only the events from the current database are shown. pattern is applied against event name. FROM db is self explanatory. sql/table.h: add SCH_EVENTS as part of INFORMATION_SCHEMA
2006-01-30 13:15:23 +01:00
--replace_column 8 # 9 #
SHOW EVENTS;
#now create an event with the same name but we are different user
select concat("Let's create some new events from the name of ",user());
create event one_event on schedule every 20 second do select 123;
create event two_event on schedule every 20 second on completion not preserve comment "two event" do select 123;
create event three_event on schedule every 20 second on completion preserve comment "three event" do select 123;
--echo "Now we should see 3 events:";
fix for bug#16642 (Events: No INFORMATION_SCHEMA.EVENTS table) post-review change - use pointer instead of copy on the stack. WL#1034 (Internal CRON) This patch adds INFORMATION_SCHEMA.EVENTS table with the following format: EVENT_CATALOG - MYSQL_TYPE_STRING (Always NULL) EVENT_SCHEMA - MYSQL_TYPE_STRING (the database) EVENT_NAME - MYSQL_TYPE_STRING (the name) DEFINER - MYSQL_TYPE_STRING (user@host) EVENT_BODY - MYSQL_TYPE_STRING (the body from mysql.event) EVENT_TYPE - MYSQL_TYPE_STRING ("ONE TIME" | "RECURRING") EXECUTE_AT - MYSQL_TYPE_TIMESTAMP (set for "ONE TIME" otherwise NULL) INTERVAL_VALUE - MYSQL_TYPE_LONG (set for RECURRING otherwise NULL) INTERVAL_FIELD - MYSQL_TYPE_STRING (set for RECURRING otherwise NULL) SQL_MODE - MYSQL_TYPE_STRING (for now NULL) STARTS - MYSQL_TYPE_TIMESTAMP (starts from mysql.event) ENDS - MYSQL_TYPE_TIMESTAMP (ends from mysql.event) STATUS - MYSQL_TYPE_STRING (ENABLED | DISABLED) ON_COMPLETION - MYSQL_TYPE_STRING (NOT PRESERVE | PRESERVE) CREATED - MYSQL_TYPE_TIMESTAMP LAST_ALTERED - MYSQL_TYPE_TIMESTAMP LAST_EXECUTED - MYSQL_TYPE_TIMESTAMP EVENT_COMMENT - MYSQL_TYPE_STRING SQL_MODE is NULL for now, because the value is still not stored in mysql.event . Support will be added as a fix for another bug. This patch also adds SHOW [FULL] EVENTS [FROM db] [LIKE pattern] 1. SHOW EVENTS shows always only the events on the same user, because the PK of mysql.event is (definer, db, name) several users may have event with the same name -> no information disclosure. 2. SHOW FULL EVENTS - shows the events (in the current db as SHOW EVENTS) of all users. The user has to have PROCESS privilege, if not then SHOW FULL EVENTS behave like SHOW EVENTS. 3. If [FROM db] is specified then this db is considered. 4. Event names can be filtered with LIKE pattern. SHOW EVENTS returns table with the following columns, which are subset of the data which is returned by SELECT * FROM I_S.EVENTS Db Name Definer Type Execute at Interval value Interval field Starts Ends Status mysql-test/lib/init_db.sql: change the PK - (definer, db, name) quicker searches when SHOW EVENTS; allow also different users to have events with the same name -> no information disclosure mysql-test/r/events.result: result of new tests mysql-test/r/information_schema.result: result of new tests mysql-test/r/information_schema_db.result: result of new tests mysql-test/r/system_mysql_db.result: result of new tests mysql-test/t/events.test: new tests for information_schema.events scripts/mysql_create_system_tables.sh: change the PK of mysql.event to (definer, db, name) scripts/mysql_fix_privilege_tables.sql: change the PK of mysql.event to (definer, db, name) sql/event.cc: pass around the definer of the event because of the new PK which is (definer, db, name). It's needed for index searching. sql/event.h: - make enum evex_table_field again public so it can be used in sql_show.cc - make created and modified ulonglong, because they should be such - make public evex_open_event_table so it can be used in sql_show.cc sql/event_executor.cc: - cosmetics sql/event_priv.h: - moved enum evex_table_field and evex_open_event_table() to event.h (made them therefore public) sql/event_timed.cc: - in event_timed::init_definer() always fill this.definer with the concatenated value of definer_user@definer_host. Makes later the work easier. - pass around the definer wherever is needed for searching (new prototype of evex_db_find_evex_aux) sql/mysqld.cc: - add counter for SHOW EVENTS sql/sql_lex.h: - register SHOW EVENTS as command sql/sql_parse.cc: - handle SCH_EVENTS (I_S.EVENTS like SCH_TRIGGERS) - make additional check in case of SHOW EVENTS (check for EVENT on the current database. if it is null check_access() gives appropriate message back. sql/sql_show.cc: - add INFORMATION_SCHEMA.EVENTS and SHOW EVENTS - I_S.EVENTS.SQL_MODE is NULL for now -> not implemented. Trudy asked to be added so bug #16642 can be completely closed. There is another bug report which will fix the lack of storage of SQL_MODE during event creation. sql/sql_yacc.yy: - always call event_timed::init_definer() when CREATE/ALTER/DROP EVENT but not when just compiling the body of the event because in this case this operation is not needed, it takes memory and CPU time and at the end the result is not used. event_timed::definer is used only on SQLCOM_CREATE/ALTER/DROP_EVENT execution not on statement compilation. - add SHOW [FULL] EVENTS [FROM db] [LIKE pattern] in case of FULL and the user has PROCESS privilege then he will see also others' events in the current database, otherwise the output is the same as of SHOW EVENTS. Because the events are per DB only the events from the current database are shown. pattern is applied against event name. FROM db is self explanatory. sql/table.h: add SCH_EVENTS as part of INFORMATION_SCHEMA
2006-01-30 13:15:23 +01:00
--replace_column 8 # 9 #
SHOW EVENTS;
--echo "This should show us only 3 events:";
fix for bug#16642 (Events: No INFORMATION_SCHEMA.EVENTS table) post-review change - use pointer instead of copy on the stack. WL#1034 (Internal CRON) This patch adds INFORMATION_SCHEMA.EVENTS table with the following format: EVENT_CATALOG - MYSQL_TYPE_STRING (Always NULL) EVENT_SCHEMA - MYSQL_TYPE_STRING (the database) EVENT_NAME - MYSQL_TYPE_STRING (the name) DEFINER - MYSQL_TYPE_STRING (user@host) EVENT_BODY - MYSQL_TYPE_STRING (the body from mysql.event) EVENT_TYPE - MYSQL_TYPE_STRING ("ONE TIME" | "RECURRING") EXECUTE_AT - MYSQL_TYPE_TIMESTAMP (set for "ONE TIME" otherwise NULL) INTERVAL_VALUE - MYSQL_TYPE_LONG (set for RECURRING otherwise NULL) INTERVAL_FIELD - MYSQL_TYPE_STRING (set for RECURRING otherwise NULL) SQL_MODE - MYSQL_TYPE_STRING (for now NULL) STARTS - MYSQL_TYPE_TIMESTAMP (starts from mysql.event) ENDS - MYSQL_TYPE_TIMESTAMP (ends from mysql.event) STATUS - MYSQL_TYPE_STRING (ENABLED | DISABLED) ON_COMPLETION - MYSQL_TYPE_STRING (NOT PRESERVE | PRESERVE) CREATED - MYSQL_TYPE_TIMESTAMP LAST_ALTERED - MYSQL_TYPE_TIMESTAMP LAST_EXECUTED - MYSQL_TYPE_TIMESTAMP EVENT_COMMENT - MYSQL_TYPE_STRING SQL_MODE is NULL for now, because the value is still not stored in mysql.event . Support will be added as a fix for another bug. This patch also adds SHOW [FULL] EVENTS [FROM db] [LIKE pattern] 1. SHOW EVENTS shows always only the events on the same user, because the PK of mysql.event is (definer, db, name) several users may have event with the same name -> no information disclosure. 2. SHOW FULL EVENTS - shows the events (in the current db as SHOW EVENTS) of all users. The user has to have PROCESS privilege, if not then SHOW FULL EVENTS behave like SHOW EVENTS. 3. If [FROM db] is specified then this db is considered. 4. Event names can be filtered with LIKE pattern. SHOW EVENTS returns table with the following columns, which are subset of the data which is returned by SELECT * FROM I_S.EVENTS Db Name Definer Type Execute at Interval value Interval field Starts Ends Status mysql-test/lib/init_db.sql: change the PK - (definer, db, name) quicker searches when SHOW EVENTS; allow also different users to have events with the same name -> no information disclosure mysql-test/r/events.result: result of new tests mysql-test/r/information_schema.result: result of new tests mysql-test/r/information_schema_db.result: result of new tests mysql-test/r/system_mysql_db.result: result of new tests mysql-test/t/events.test: new tests for information_schema.events scripts/mysql_create_system_tables.sh: change the PK of mysql.event to (definer, db, name) scripts/mysql_fix_privilege_tables.sql: change the PK of mysql.event to (definer, db, name) sql/event.cc: pass around the definer of the event because of the new PK which is (definer, db, name). It's needed for index searching. sql/event.h: - make enum evex_table_field again public so it can be used in sql_show.cc - make created and modified ulonglong, because they should be such - make public evex_open_event_table so it can be used in sql_show.cc sql/event_executor.cc: - cosmetics sql/event_priv.h: - moved enum evex_table_field and evex_open_event_table() to event.h (made them therefore public) sql/event_timed.cc: - in event_timed::init_definer() always fill this.definer with the concatenated value of definer_user@definer_host. Makes later the work easier. - pass around the definer wherever is needed for searching (new prototype of evex_db_find_evex_aux) sql/mysqld.cc: - add counter for SHOW EVENTS sql/sql_lex.h: - register SHOW EVENTS as command sql/sql_parse.cc: - handle SCH_EVENTS (I_S.EVENTS like SCH_TRIGGERS) - make additional check in case of SHOW EVENTS (check for EVENT on the current database. if it is null check_access() gives appropriate message back. sql/sql_show.cc: - add INFORMATION_SCHEMA.EVENTS and SHOW EVENTS - I_S.EVENTS.SQL_MODE is NULL for now -> not implemented. Trudy asked to be added so bug #16642 can be completely closed. There is another bug report which will fix the lack of storage of SQL_MODE during event creation. sql/sql_yacc.yy: - always call event_timed::init_definer() when CREATE/ALTER/DROP EVENT but not when just compiling the body of the event because in this case this operation is not needed, it takes memory and CPU time and at the end the result is not used. event_timed::definer is used only on SQLCOM_CREATE/ALTER/DROP_EVENT execution not on statement compilation. - add SHOW [FULL] EVENTS [FROM db] [LIKE pattern] in case of FULL and the user has PROCESS privilege then he will see also others' events in the current database, otherwise the output is the same as of SHOW EVENTS. Because the events are per DB only the events from the current database are shown. pattern is applied against event name. FROM db is self explanatory. sql/table.h: add SCH_EVENTS as part of INFORMATION_SCHEMA
2006-01-30 13:15:23 +01:00
--replace_column 8 # 9 #
SHOW FULL EVENTS;
--echo "This should show us only 2 events:";
fix for bug#16642 (Events: No INFORMATION_SCHEMA.EVENTS table) post-review change - use pointer instead of copy on the stack. WL#1034 (Internal CRON) This patch adds INFORMATION_SCHEMA.EVENTS table with the following format: EVENT_CATALOG - MYSQL_TYPE_STRING (Always NULL) EVENT_SCHEMA - MYSQL_TYPE_STRING (the database) EVENT_NAME - MYSQL_TYPE_STRING (the name) DEFINER - MYSQL_TYPE_STRING (user@host) EVENT_BODY - MYSQL_TYPE_STRING (the body from mysql.event) EVENT_TYPE - MYSQL_TYPE_STRING ("ONE TIME" | "RECURRING") EXECUTE_AT - MYSQL_TYPE_TIMESTAMP (set for "ONE TIME" otherwise NULL) INTERVAL_VALUE - MYSQL_TYPE_LONG (set for RECURRING otherwise NULL) INTERVAL_FIELD - MYSQL_TYPE_STRING (set for RECURRING otherwise NULL) SQL_MODE - MYSQL_TYPE_STRING (for now NULL) STARTS - MYSQL_TYPE_TIMESTAMP (starts from mysql.event) ENDS - MYSQL_TYPE_TIMESTAMP (ends from mysql.event) STATUS - MYSQL_TYPE_STRING (ENABLED | DISABLED) ON_COMPLETION - MYSQL_TYPE_STRING (NOT PRESERVE | PRESERVE) CREATED - MYSQL_TYPE_TIMESTAMP LAST_ALTERED - MYSQL_TYPE_TIMESTAMP LAST_EXECUTED - MYSQL_TYPE_TIMESTAMP EVENT_COMMENT - MYSQL_TYPE_STRING SQL_MODE is NULL for now, because the value is still not stored in mysql.event . Support will be added as a fix for another bug. This patch also adds SHOW [FULL] EVENTS [FROM db] [LIKE pattern] 1. SHOW EVENTS shows always only the events on the same user, because the PK of mysql.event is (definer, db, name) several users may have event with the same name -> no information disclosure. 2. SHOW FULL EVENTS - shows the events (in the current db as SHOW EVENTS) of all users. The user has to have PROCESS privilege, if not then SHOW FULL EVENTS behave like SHOW EVENTS. 3. If [FROM db] is specified then this db is considered. 4. Event names can be filtered with LIKE pattern. SHOW EVENTS returns table with the following columns, which are subset of the data which is returned by SELECT * FROM I_S.EVENTS Db Name Definer Type Execute at Interval value Interval field Starts Ends Status mysql-test/lib/init_db.sql: change the PK - (definer, db, name) quicker searches when SHOW EVENTS; allow also different users to have events with the same name -> no information disclosure mysql-test/r/events.result: result of new tests mysql-test/r/information_schema.result: result of new tests mysql-test/r/information_schema_db.result: result of new tests mysql-test/r/system_mysql_db.result: result of new tests mysql-test/t/events.test: new tests for information_schema.events scripts/mysql_create_system_tables.sh: change the PK of mysql.event to (definer, db, name) scripts/mysql_fix_privilege_tables.sql: change the PK of mysql.event to (definer, db, name) sql/event.cc: pass around the definer of the event because of the new PK which is (definer, db, name). It's needed for index searching. sql/event.h: - make enum evex_table_field again public so it can be used in sql_show.cc - make created and modified ulonglong, because they should be such - make public evex_open_event_table so it can be used in sql_show.cc sql/event_executor.cc: - cosmetics sql/event_priv.h: - moved enum evex_table_field and evex_open_event_table() to event.h (made them therefore public) sql/event_timed.cc: - in event_timed::init_definer() always fill this.definer with the concatenated value of definer_user@definer_host. Makes later the work easier. - pass around the definer wherever is needed for searching (new prototype of evex_db_find_evex_aux) sql/mysqld.cc: - add counter for SHOW EVENTS sql/sql_lex.h: - register SHOW EVENTS as command sql/sql_parse.cc: - handle SCH_EVENTS (I_S.EVENTS like SCH_TRIGGERS) - make additional check in case of SHOW EVENTS (check for EVENT on the current database. if it is null check_access() gives appropriate message back. sql/sql_show.cc: - add INFORMATION_SCHEMA.EVENTS and SHOW EVENTS - I_S.EVENTS.SQL_MODE is NULL for now -> not implemented. Trudy asked to be added so bug #16642 can be completely closed. There is another bug report which will fix the lack of storage of SQL_MODE during event creation. sql/sql_yacc.yy: - always call event_timed::init_definer() when CREATE/ALTER/DROP EVENT but not when just compiling the body of the event because in this case this operation is not needed, it takes memory and CPU time and at the end the result is not used. event_timed::definer is used only on SQLCOM_CREATE/ALTER/DROP_EVENT execution not on statement compilation. - add SHOW [FULL] EVENTS [FROM db] [LIKE pattern] in case of FULL and the user has PROCESS privilege then he will see also others' events in the current database, otherwise the output is the same as of SHOW EVENTS. Because the events are per DB only the events from the current database are shown. pattern is applied against event name. FROM db is self explanatory. sql/table.h: add SCH_EVENTS as part of INFORMATION_SCHEMA
2006-01-30 13:15:23 +01:00
--replace_column 8 # 9 #
SHOW FULL EVENTS LIKE 't%event';
--echo "This should show us no events:";
fix for bug#16642 (Events: No INFORMATION_SCHEMA.EVENTS table) post-review change - use pointer instead of copy on the stack. WL#1034 (Internal CRON) This patch adds INFORMATION_SCHEMA.EVENTS table with the following format: EVENT_CATALOG - MYSQL_TYPE_STRING (Always NULL) EVENT_SCHEMA - MYSQL_TYPE_STRING (the database) EVENT_NAME - MYSQL_TYPE_STRING (the name) DEFINER - MYSQL_TYPE_STRING (user@host) EVENT_BODY - MYSQL_TYPE_STRING (the body from mysql.event) EVENT_TYPE - MYSQL_TYPE_STRING ("ONE TIME" | "RECURRING") EXECUTE_AT - MYSQL_TYPE_TIMESTAMP (set for "ONE TIME" otherwise NULL) INTERVAL_VALUE - MYSQL_TYPE_LONG (set for RECURRING otherwise NULL) INTERVAL_FIELD - MYSQL_TYPE_STRING (set for RECURRING otherwise NULL) SQL_MODE - MYSQL_TYPE_STRING (for now NULL) STARTS - MYSQL_TYPE_TIMESTAMP (starts from mysql.event) ENDS - MYSQL_TYPE_TIMESTAMP (ends from mysql.event) STATUS - MYSQL_TYPE_STRING (ENABLED | DISABLED) ON_COMPLETION - MYSQL_TYPE_STRING (NOT PRESERVE | PRESERVE) CREATED - MYSQL_TYPE_TIMESTAMP LAST_ALTERED - MYSQL_TYPE_TIMESTAMP LAST_EXECUTED - MYSQL_TYPE_TIMESTAMP EVENT_COMMENT - MYSQL_TYPE_STRING SQL_MODE is NULL for now, because the value is still not stored in mysql.event . Support will be added as a fix for another bug. This patch also adds SHOW [FULL] EVENTS [FROM db] [LIKE pattern] 1. SHOW EVENTS shows always only the events on the same user, because the PK of mysql.event is (definer, db, name) several users may have event with the same name -> no information disclosure. 2. SHOW FULL EVENTS - shows the events (in the current db as SHOW EVENTS) of all users. The user has to have PROCESS privilege, if not then SHOW FULL EVENTS behave like SHOW EVENTS. 3. If [FROM db] is specified then this db is considered. 4. Event names can be filtered with LIKE pattern. SHOW EVENTS returns table with the following columns, which are subset of the data which is returned by SELECT * FROM I_S.EVENTS Db Name Definer Type Execute at Interval value Interval field Starts Ends Status mysql-test/lib/init_db.sql: change the PK - (definer, db, name) quicker searches when SHOW EVENTS; allow also different users to have events with the same name -> no information disclosure mysql-test/r/events.result: result of new tests mysql-test/r/information_schema.result: result of new tests mysql-test/r/information_schema_db.result: result of new tests mysql-test/r/system_mysql_db.result: result of new tests mysql-test/t/events.test: new tests for information_schema.events scripts/mysql_create_system_tables.sh: change the PK of mysql.event to (definer, db, name) scripts/mysql_fix_privilege_tables.sql: change the PK of mysql.event to (definer, db, name) sql/event.cc: pass around the definer of the event because of the new PK which is (definer, db, name). It's needed for index searching. sql/event.h: - make enum evex_table_field again public so it can be used in sql_show.cc - make created and modified ulonglong, because they should be such - make public evex_open_event_table so it can be used in sql_show.cc sql/event_executor.cc: - cosmetics sql/event_priv.h: - moved enum evex_table_field and evex_open_event_table() to event.h (made them therefore public) sql/event_timed.cc: - in event_timed::init_definer() always fill this.definer with the concatenated value of definer_user@definer_host. Makes later the work easier. - pass around the definer wherever is needed for searching (new prototype of evex_db_find_evex_aux) sql/mysqld.cc: - add counter for SHOW EVENTS sql/sql_lex.h: - register SHOW EVENTS as command sql/sql_parse.cc: - handle SCH_EVENTS (I_S.EVENTS like SCH_TRIGGERS) - make additional check in case of SHOW EVENTS (check for EVENT on the current database. if it is null check_access() gives appropriate message back. sql/sql_show.cc: - add INFORMATION_SCHEMA.EVENTS and SHOW EVENTS - I_S.EVENTS.SQL_MODE is NULL for now -> not implemented. Trudy asked to be added so bug #16642 can be completely closed. There is another bug report which will fix the lack of storage of SQL_MODE during event creation. sql/sql_yacc.yy: - always call event_timed::init_definer() when CREATE/ALTER/DROP EVENT but not when just compiling the body of the event because in this case this operation is not needed, it takes memory and CPU time and at the end the result is not used. event_timed::definer is used only on SQLCOM_CREATE/ALTER/DROP_EVENT execution not on statement compilation. - add SHOW [FULL] EVENTS [FROM db] [LIKE pattern] in case of FULL and the user has PROCESS privilege then he will see also others' events in the current database, otherwise the output is the same as of SHOW EVENTS. Because the events are per DB only the events from the current database are shown. pattern is applied against event name. FROM db is self explanatory. sql/table.h: add SCH_EVENTS as part of INFORMATION_SCHEMA
2006-01-30 13:15:23 +01:00
--replace_column 8 # 9 #
SHOW FULL EVENTS FROM test LIKE '%';
#ok, we are back
connection default;
DROP DATABASE events_test2;
--echo "should see 1 event:";
fix for bug#16642 (Events: No INFORMATION_SCHEMA.EVENTS table) post-review change - use pointer instead of copy on the stack. WL#1034 (Internal CRON) This patch adds INFORMATION_SCHEMA.EVENTS table with the following format: EVENT_CATALOG - MYSQL_TYPE_STRING (Always NULL) EVENT_SCHEMA - MYSQL_TYPE_STRING (the database) EVENT_NAME - MYSQL_TYPE_STRING (the name) DEFINER - MYSQL_TYPE_STRING (user@host) EVENT_BODY - MYSQL_TYPE_STRING (the body from mysql.event) EVENT_TYPE - MYSQL_TYPE_STRING ("ONE TIME" | "RECURRING") EXECUTE_AT - MYSQL_TYPE_TIMESTAMP (set for "ONE TIME" otherwise NULL) INTERVAL_VALUE - MYSQL_TYPE_LONG (set for RECURRING otherwise NULL) INTERVAL_FIELD - MYSQL_TYPE_STRING (set for RECURRING otherwise NULL) SQL_MODE - MYSQL_TYPE_STRING (for now NULL) STARTS - MYSQL_TYPE_TIMESTAMP (starts from mysql.event) ENDS - MYSQL_TYPE_TIMESTAMP (ends from mysql.event) STATUS - MYSQL_TYPE_STRING (ENABLED | DISABLED) ON_COMPLETION - MYSQL_TYPE_STRING (NOT PRESERVE | PRESERVE) CREATED - MYSQL_TYPE_TIMESTAMP LAST_ALTERED - MYSQL_TYPE_TIMESTAMP LAST_EXECUTED - MYSQL_TYPE_TIMESTAMP EVENT_COMMENT - MYSQL_TYPE_STRING SQL_MODE is NULL for now, because the value is still not stored in mysql.event . Support will be added as a fix for another bug. This patch also adds SHOW [FULL] EVENTS [FROM db] [LIKE pattern] 1. SHOW EVENTS shows always only the events on the same user, because the PK of mysql.event is (definer, db, name) several users may have event with the same name -> no information disclosure. 2. SHOW FULL EVENTS - shows the events (in the current db as SHOW EVENTS) of all users. The user has to have PROCESS privilege, if not then SHOW FULL EVENTS behave like SHOW EVENTS. 3. If [FROM db] is specified then this db is considered. 4. Event names can be filtered with LIKE pattern. SHOW EVENTS returns table with the following columns, which are subset of the data which is returned by SELECT * FROM I_S.EVENTS Db Name Definer Type Execute at Interval value Interval field Starts Ends Status mysql-test/lib/init_db.sql: change the PK - (definer, db, name) quicker searches when SHOW EVENTS; allow also different users to have events with the same name -> no information disclosure mysql-test/r/events.result: result of new tests mysql-test/r/information_schema.result: result of new tests mysql-test/r/information_schema_db.result: result of new tests mysql-test/r/system_mysql_db.result: result of new tests mysql-test/t/events.test: new tests for information_schema.events scripts/mysql_create_system_tables.sh: change the PK of mysql.event to (definer, db, name) scripts/mysql_fix_privilege_tables.sql: change the PK of mysql.event to (definer, db, name) sql/event.cc: pass around the definer of the event because of the new PK which is (definer, db, name). It's needed for index searching. sql/event.h: - make enum evex_table_field again public so it can be used in sql_show.cc - make created and modified ulonglong, because they should be such - make public evex_open_event_table so it can be used in sql_show.cc sql/event_executor.cc: - cosmetics sql/event_priv.h: - moved enum evex_table_field and evex_open_event_table() to event.h (made them therefore public) sql/event_timed.cc: - in event_timed::init_definer() always fill this.definer with the concatenated value of definer_user@definer_host. Makes later the work easier. - pass around the definer wherever is needed for searching (new prototype of evex_db_find_evex_aux) sql/mysqld.cc: - add counter for SHOW EVENTS sql/sql_lex.h: - register SHOW EVENTS as command sql/sql_parse.cc: - handle SCH_EVENTS (I_S.EVENTS like SCH_TRIGGERS) - make additional check in case of SHOW EVENTS (check for EVENT on the current database. if it is null check_access() gives appropriate message back. sql/sql_show.cc: - add INFORMATION_SCHEMA.EVENTS and SHOW EVENTS - I_S.EVENTS.SQL_MODE is NULL for now -> not implemented. Trudy asked to be added so bug #16642 can be completely closed. There is another bug report which will fix the lack of storage of SQL_MODE during event creation. sql/sql_yacc.yy: - always call event_timed::init_definer() when CREATE/ALTER/DROP EVENT but not when just compiling the body of the event because in this case this operation is not needed, it takes memory and CPU time and at the end the result is not used. event_timed::definer is used only on SQLCOM_CREATE/ALTER/DROP_EVENT execution not on statement compilation. - add SHOW [FULL] EVENTS [FROM db] [LIKE pattern] in case of FULL and the user has PROCESS privilege then he will see also others' events in the current database, otherwise the output is the same as of SHOW EVENTS. Because the events are per DB only the events from the current database are shown. pattern is applied against event name. FROM db is self explanatory. sql/table.h: add SCH_EVENTS as part of INFORMATION_SCHEMA
2006-01-30 13:15:23 +01:00
--replace_column 8 # 9 #
SHOW EVENTS;
--echo "we should see 4 events now:";
fix for bug#16642 (Events: No INFORMATION_SCHEMA.EVENTS table) post-review change - use pointer instead of copy on the stack. WL#1034 (Internal CRON) This patch adds INFORMATION_SCHEMA.EVENTS table with the following format: EVENT_CATALOG - MYSQL_TYPE_STRING (Always NULL) EVENT_SCHEMA - MYSQL_TYPE_STRING (the database) EVENT_NAME - MYSQL_TYPE_STRING (the name) DEFINER - MYSQL_TYPE_STRING (user@host) EVENT_BODY - MYSQL_TYPE_STRING (the body from mysql.event) EVENT_TYPE - MYSQL_TYPE_STRING ("ONE TIME" | "RECURRING") EXECUTE_AT - MYSQL_TYPE_TIMESTAMP (set for "ONE TIME" otherwise NULL) INTERVAL_VALUE - MYSQL_TYPE_LONG (set for RECURRING otherwise NULL) INTERVAL_FIELD - MYSQL_TYPE_STRING (set for RECURRING otherwise NULL) SQL_MODE - MYSQL_TYPE_STRING (for now NULL) STARTS - MYSQL_TYPE_TIMESTAMP (starts from mysql.event) ENDS - MYSQL_TYPE_TIMESTAMP (ends from mysql.event) STATUS - MYSQL_TYPE_STRING (ENABLED | DISABLED) ON_COMPLETION - MYSQL_TYPE_STRING (NOT PRESERVE | PRESERVE) CREATED - MYSQL_TYPE_TIMESTAMP LAST_ALTERED - MYSQL_TYPE_TIMESTAMP LAST_EXECUTED - MYSQL_TYPE_TIMESTAMP EVENT_COMMENT - MYSQL_TYPE_STRING SQL_MODE is NULL for now, because the value is still not stored in mysql.event . Support will be added as a fix for another bug. This patch also adds SHOW [FULL] EVENTS [FROM db] [LIKE pattern] 1. SHOW EVENTS shows always only the events on the same user, because the PK of mysql.event is (definer, db, name) several users may have event with the same name -> no information disclosure. 2. SHOW FULL EVENTS - shows the events (in the current db as SHOW EVENTS) of all users. The user has to have PROCESS privilege, if not then SHOW FULL EVENTS behave like SHOW EVENTS. 3. If [FROM db] is specified then this db is considered. 4. Event names can be filtered with LIKE pattern. SHOW EVENTS returns table with the following columns, which are subset of the data which is returned by SELECT * FROM I_S.EVENTS Db Name Definer Type Execute at Interval value Interval field Starts Ends Status mysql-test/lib/init_db.sql: change the PK - (definer, db, name) quicker searches when SHOW EVENTS; allow also different users to have events with the same name -> no information disclosure mysql-test/r/events.result: result of new tests mysql-test/r/information_schema.result: result of new tests mysql-test/r/information_schema_db.result: result of new tests mysql-test/r/system_mysql_db.result: result of new tests mysql-test/t/events.test: new tests for information_schema.events scripts/mysql_create_system_tables.sh: change the PK of mysql.event to (definer, db, name) scripts/mysql_fix_privilege_tables.sql: change the PK of mysql.event to (definer, db, name) sql/event.cc: pass around the definer of the event because of the new PK which is (definer, db, name). It's needed for index searching. sql/event.h: - make enum evex_table_field again public so it can be used in sql_show.cc - make created and modified ulonglong, because they should be such - make public evex_open_event_table so it can be used in sql_show.cc sql/event_executor.cc: - cosmetics sql/event_priv.h: - moved enum evex_table_field and evex_open_event_table() to event.h (made them therefore public) sql/event_timed.cc: - in event_timed::init_definer() always fill this.definer with the concatenated value of definer_user@definer_host. Makes later the work easier. - pass around the definer wherever is needed for searching (new prototype of evex_db_find_evex_aux) sql/mysqld.cc: - add counter for SHOW EVENTS sql/sql_lex.h: - register SHOW EVENTS as command sql/sql_parse.cc: - handle SCH_EVENTS (I_S.EVENTS like SCH_TRIGGERS) - make additional check in case of SHOW EVENTS (check for EVENT on the current database. if it is null check_access() gives appropriate message back. sql/sql_show.cc: - add INFORMATION_SCHEMA.EVENTS and SHOW EVENTS - I_S.EVENTS.SQL_MODE is NULL for now -> not implemented. Trudy asked to be added so bug #16642 can be completely closed. There is another bug report which will fix the lack of storage of SQL_MODE during event creation. sql/sql_yacc.yy: - always call event_timed::init_definer() when CREATE/ALTER/DROP EVENT but not when just compiling the body of the event because in this case this operation is not needed, it takes memory and CPU time and at the end the result is not used. event_timed::definer is used only on SQLCOM_CREATE/ALTER/DROP_EVENT execution not on statement compilation. - add SHOW [FULL] EVENTS [FROM db] [LIKE pattern] in case of FULL and the user has PROCESS privilege then he will see also others' events in the current database, otherwise the output is the same as of SHOW EVENTS. Because the events are per DB only the events from the current database are shown. pattern is applied against event name. FROM db is self explanatory. sql/table.h: add SCH_EVENTS as part of INFORMATION_SCHEMA
2006-01-30 13:15:23 +01:00
--replace_column 8 # 9 #
SHOW FULL EVENTS;
SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT from information_schema.events;
connection ev_con1;
drop event one_event;
drop event two_event;
drop event three_event;
disconnect ev_con1;
connection default;
drop user ev_test@localhost;
drop event one_event;
#
##INFORMATION_SCHEMA.EVENTS test end
#
--echo "Sleep a bit so the server closes the second connection"
--sleep 2
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 1503
create event e_26 on schedule at NULL disabled do set @a = 5;
--error 1503
create event e_26 on schedule at 'definitely not a datetime' disabled 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 1229
set event_scheduler=0;
# event_scheduler could be only either 0 or 1
--error 1231
set global event_scheduler=2;
--echo "DISABLE the scheduler. Testing that it does not work when the variable is 0"
set global event_scheduler=0;
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 1 process"
--replace_column 1 # 6 #
show processlist;
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=1;
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 "Let some time pass to the event starts"
--sleep 2
--echo "Should have only 3 processes: the scheduler, our conn and the locked event"
--replace_column 1 # 6 #
show processlist;
--echo "Release the mutex, the event worker should finish."
select release_lock("test_lock2");
drop event закачка;
##
## 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);
--sleep 1
--echo "Should see 2 processes, one locked on get_lock("
#--replace_column 1 # 6 #
#show processlist;
--echo "Shutting down the scheduler, it should wait for the running event"
set global event_scheduler=0;
--sleep 1
--echo "Should have only 3 processes: the scheduler, our conn and the locked event"
--replace_column 1 # 6 #
show processlist;
--echo "Release the lock so the child process should finish. Hence the scheduler also"
select release_lock("test_lock2_1");
--sleep 1
--echo "Should have only our process now:"
--replace_column 1 # 6 #
show processlist;
drop event закачка21;
####
# Bug #16410 Events: CREATE EVENT is legal in a CREATE TRIGGER statement
#
create table t_16 (s1 int);
--error 1422
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_body 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_body 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_body 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);
##show processlist;
##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);
##--replace_column 1 # 6 #
##show processlist;
##drop event закачка4;
##select release_lock("test_lock4");
##set global event_scheduler=0;
##select sleep(2);
##--replace_column 1 # 6 #
##show processlist;
##select count(*) from mysql.event;
drop database events_test;