Commit 2fc956fa authored by unknown's avatar unknown
Browse files

WL #1034 (Internal CRON) pre-push updates

- various fixes of test cases
(hopefully the last pre-push update before the push)


mysql-test/include/system_db_struct.inc:
  extend test case to include testing for event system table
mysql-test/r/events.result:
  results of events test
mysql-test/r/system_mysql_db.result:
  more testing - add structure of event system table
mysql-test/t/events.test:
  test case for events (internal CRON)
mysql-test/t/system_mysql_db_fix.test:
  drop event table and leave the test database empty
scripts/mysql_create_system_tables.sh:
  add missing create table statement
scripts/mysql_fix_privilege_tables.sql:
  don't specify the database. this fixes a failing test case which creates the
  tables not on mysql but on a test database and then tests again mysql.
sql/event_executor.cc:
  if asked to stop -> stop.
parent 8d1ea9e2
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -12,3 +12,4 @@ show create table tables_priv;
show create table columns_priv;
show create table procs_priv;
show create table proc;
show create table event;
+104 −1
Original line number Diff line number Diff line
use test;
create database if not exists events_test;
use events_test;
drop event if exists event1;
Warnings:
Note	1305	Event event1 does not exist
@@ -19,3 +20,105 @@ count(*)
0
drop event event3;
drop table t_event3;
set names utf8;
create event задачка on schedule every 123 minute starts now() ends now() + interval 1 month do select 1;
drop event задачка;
set event_scheduler=0;
ERROR HY000: Variable 'event_scheduler' is a GLOBAL variable and should be set with SET GLOBAL
set global event_scheduler=2;
ERROR 42000: Variable 'event_scheduler' can't be set to the value of '2'
set global event_scheduler=0;
select count(*) from mysql.event;
count(*)
0
select get_lock("test_lock1", 20);
get_lock("test_lock1", 20)
1
create event закачка on schedule every 10 hour do select get_lock("test_lock1", 20);
select count(*) from mysql.event;
count(*)
1
show processlist;
Id	User	Host	db	Command	Time	State	Info
1	root	localhost	events_test	Query	0	NULL	show processlist
select release_lock("test_lock1");
release_lock("test_lock1")
1
drop event закачка;
select count(*) from mysql.event;
count(*)
0
set global event_scheduler=1;
select get_lock("test_lock2", 20);
get_lock("test_lock2", 20)
1
create event закачка on schedule every 10 hour do select get_lock("test_lock2", 20);
select sleep(2);
sleep(2)
0
show processlist;
Id	User	Host	db	Command	Time	State	Info
1	root	localhost	events_test	Query	0	NULL	show processlist
2	event_scheduler		NULL	Connect	1	Sleeping	NULL
3	root		events_test	Connect	1	User lock	select get_lock("test_lock2", 20)
select release_lock("test_lock2");
release_lock("test_lock2")
1
drop event закачка;
set global event_scheduler=1;
select get_lock("test_lock2_1", 20);
get_lock("test_lock2_1", 20)
1
create event закачка21 on schedule every 10 hour do select get_lock("test_lock2_1", 20);
select sleep(2);
sleep(2)
0
show processlist;
Id	User	Host	db	Command	Time	State	Info
1	root	localhost	events_test	Query	0	NULL	show processlist
2	event_scheduler		NULL	Connect	1	Sleeping	NULL
4	root		events_test	Connect	1	User lock	select get_lock("test_lock2_1", 20)
set global event_scheduler=0;
select sleep(2);
sleep(2)
0
show processlist;
Id	User	Host	db	Command	Time	State	Info
1	root	localhost	events_test	Query	0	NULL	show processlist
2	event_scheduler		NULL	Connect	3	Sleeping	NULL
4	root		events_test	Connect	3	User lock	select get_lock("test_lock2_1", 20)
select release_lock("test_lock2_1");
release_lock("test_lock2_1")
1
select sleep(2);
sleep(2)
0
show processlist;
Id	User	Host	db	Command	Time	State	Info
1	root	localhost	events_test	Query	0	NULL	show processlist
drop event закачка21;
set global event_scheduler=1;
select get_lock("test_lock3", 20);
get_lock("test_lock3", 20)
1
create event закачка on schedule every 10 hour do select get_lock("test_lock3", 20);
select sleep(2);
sleep(2)
0
show processlist;
Id	User	Host	db	Command	Time	State	Info
1	root	localhost	events_test	Query	0	NULL	show processlist
5	event_scheduler		NULL	Connect	2	Sleeping	NULL
6	root		events_test	Connect	2	User lock	select get_lock("test_lock3", 20)
drop event закачка;
select release_lock("test_lock3");
release_lock("test_lock3")
1
set global event_scheduler=0;
select sleep(2);
sleep(2)
0
show processlist;
Id	User	Host	db	Command	Time	State	Info
1	root	localhost	events_test	Query	0	NULL	show processlist
drop database events_test;
+20 −0
Original line number Diff line number Diff line
@@ -184,5 +184,25 @@ proc CREATE TABLE `proc` (
  `comment` char(64) character set utf8 collate utf8_bin NOT NULL default '',
  PRIMARY KEY  (`db`,`name`,`type`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Stored Procedures'
show create table event;
Table	Create Table
event	CREATE TABLE `event` (
  `db` char(64) character set utf8 collate utf8_bin NOT NULL default '',
  `name` char(64) character set utf8 collate utf8_bin NOT NULL default '',
  `body` longblob NOT NULL,
  `definer` char(77) character set utf8 collate utf8_bin NOT NULL default '',
  `execute_at` datetime default NULL,
  `interval_value` int(11) default NULL,
  `interval_field` enum('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') default NULL,
  `created` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `modified` timestamp NOT NULL default '0000-00-00 00:00:00',
  `last_executed` datetime default NULL,
  `starts` datetime default NULL,
  `ends` datetime default NULL,
  `status` enum('ENABLED','DISABLED') NOT NULL default 'ENABLED',
  `on_completion` enum('DROP','PRESERVE') NOT NULL default 'DROP',
  `comment` varchar(64) character set utf8 collate utf8_bin NOT NULL default '',
  PRIMARY KEY  (`db`,`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Events'
show tables;
Tables_in_test
+78 −1
Original line number Diff line number Diff line
use test;
create database if not exists events_test;
use events_test;
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;
@@ -15,3 +16,79 @@ set max_allowed_packet=128000000;
select count(*) from t_event3;
drop event event3;
drop table t_event3;

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;

set global event_scheduler=0;
select count(*) from mysql.event;
select get_lock("test_lock1", 20);
create event закачка on schedule every 10 hour do select get_lock("test_lock1", 20);
select count(*) from mysql.event;
show processlist;
select release_lock("test_lock1");
drop event закачка;
select count(*) from mysql.event;

set global event_scheduler=1;
select get_lock("test_lock2", 20);
create event закачка on schedule every 10 hour do select get_lock("test_lock2", 20);
select sleep(2);
show processlist;
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);
select sleep(2);
show processlist;
set global event_scheduler=0;
select sleep(2);
show processlist;
select release_lock("test_lock2_1");
select sleep(2);
show processlist;
drop event закачка21;

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);
#show processlist;
#drop event закачка4;
#select release_lock("test_lock4");

set global event_scheduler=0;
select sleep(2);
show processlist;
#the following locks for some reason and is a bug, commented for now
#select count(*) from mysql.event;

drop database events_test;
+1 −1
Original line number Diff line number Diff line
@@ -85,7 +85,7 @@ INSERT INTO user VALUES ('localhost','', '','N','N','N','N','N','N','N','N','

-- disable_query_log

DROP TABLE db, host, user, func, plugin, tables_priv, columns_priv, procs_priv, help_category, help_keyword, help_relation, help_topic, proc, time_zone, time_zone_leap_second, time_zone_name, time_zone_transition, time_zone_transition_type;
DROP TABLE db, host, user, func, plugin, tables_priv, columns_priv, procs_priv, help_category, help_keyword, help_relation, help_topic, proc, time_zone, time_zone_leap_second, time_zone_name, time_zone_transition, time_zone_transition_type, event;

-- enable_query_log

Loading