Commit 2557f80f authored by unknown's avatar unknown
Browse files

fix for bug#16410 (Events: CREATE EVENT is legal in a CREATE TRIGGER statement)

WL#1034 (Internal CRON)
(post-post-review updates)



mysql-test/r/events.result:
  update results file
mysql-test/t/events.test:
  add test for Bug #16410  Events: CREATE EVENT is legal in a CREATE TRIGGER statement
sql/sp_head.cc:
  CREATE/ALTER/DROP event mean explicit commit, so they are not allowed in
  a FUNCTION/TRIGGER. Fixes bug#16410
sql/sql_parse.cc:
  - end active transaction for CREATE/ALTER/DROP EVENT because
    they are DDL statements.
parent 098ae02a
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -361,4 +361,8 @@ show processlist;
Id	User	Host	db	Command	Time	State	Info
#	root	localhost	events_test	Query	#	NULL	show processlist
drop event закачка21;
create table t_16 (s1 int);
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;
ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger.
drop table t_16;
drop database events_test;
+11 −0
Original line number Diff line number Diff line
@@ -323,6 +323,17 @@ select release_lock("test_lock2_1");
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
####

##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);
+3 −0
Original line number Diff line number Diff line
@@ -255,6 +255,9 @@ sp_get_flags_for_command(LEX *lex)
  case SQLCOM_ALTER_FUNCTION:
  case SQLCOM_DROP_PROCEDURE:
  case SQLCOM_DROP_FUNCTION:
  case SQLCOM_CREATE_EVENT:
  case SQLCOM_ALTER_EVENT:
  case SQLCOM_DROP_EVENT:
    flags= sp_head::HAS_COMMIT_OR_ROLLBACK;
    break;
  default:
+6 −0
Original line number Diff line number Diff line
@@ -3773,6 +3773,12 @@ mysql_execute_command(THD *thd)
                       is_schema_db(lex->et->dbname.str)))
        break;

      if (end_active_trans(thd))
      {
        res= -1;
        break;
      }

      switch (lex->sql_command) {
      case SQLCOM_CREATE_EVENT:
        res= evex_create_event(thd, lex->et, (uint) lex->create_info.options,