Skip to content
Permalink
Browse files
MDEV-16891 EVENTs created with SQL_MODE=ORACLE fail to execute
  • Loading branch information
abarkov committed Aug 7, 2018
1 parent cb1945d commit 4cbadae
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 3 deletions.
@@ -0,0 +1,16 @@
set sql_mode='ORACLE';
#
# MDEV-16891 EVENTs created with SQL_MODE=ORACLE fail to execute
#
SET GLOBAL event_scheduler=off;
SET sql_mode='ORACLE';
CREATE TABLE t1 (a TIMESTAMP);
CREATE EVENT e1
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MICROSECOND
DO INSERT INTO t1 VALUES(NOW());
SET GLOBAL event_scheduler=on;
SELECT COUNT(*) FROM t1;
COUNT(*)
1
DROP TABLE t1;
SET GLOBAL event_scheduler=off;
@@ -0,0 +1,29 @@
-- source include/not_embedded.inc

set sql_mode='ORACLE';

--echo #
--echo # MDEV-16891 EVENTs created with SQL_MODE=ORACLE fail to execute
--echo #

SET GLOBAL event_scheduler=off;

SET sql_mode='ORACLE';
CREATE TABLE t1 (a TIMESTAMP);
CREATE EVENT e1
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MICROSECOND
DO INSERT INTO t1 VALUES(NOW());
SET GLOBAL event_scheduler=on;

let $wait_timeout = 10;
let $wait_condition =
SELECT COUNT(*) = 0
FROM INFORMATION_SCHEMA.EVENTS
WHERE event_schema = 'test' AND event_name = 'e1';
--source include/wait_condition.inc

SELECT COUNT(*) FROM t1;
DROP TABLE t1;


SET GLOBAL event_scheduler=off;
@@ -1284,7 +1284,11 @@ Event_job_data::construct_sp_sql(THD *thd, String *sp_sql)
*/
sp_sql->append(STRING_WITH_LEN("() SQL SECURITY INVOKER "));

if (thd->variables.sql_mode & MODE_ORACLE)
sp_sql->append(STRING_WITH_LEN(" AS BEGIN "));
sp_sql->append(&body);
if (thd->variables.sql_mode & MODE_ORACLE)
sp_sql->append(STRING_WITH_LEN("; END"));

DBUG_RETURN(thd->is_fatal_error);
}
@@ -1387,9 +1391,6 @@ Event_job_data::execute(THD *thd, bool drop)
goto end;
}

if (construct_sp_sql(thd, &sp_sql))
goto end;

/*
Set up global thread attributes to reflect the properties of
this Event. We can simply reset these instead of usual
@@ -1401,6 +1402,9 @@ Event_job_data::execute(THD *thd, bool drop)
thd->variables.sql_mode= sql_mode;
thd->variables.time_zone= time_zone;

if (construct_sp_sql(thd, &sp_sql))
goto end;

thd->set_query(sp_sql.c_ptr_safe(), sp_sql.length());

{

0 comments on commit 4cbadae

Please sign in to comment.