1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

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

This commit is contained in:
Alexander Barkov
2018-08-07 11:55:51 +04:00
parent cb1945dd0d
commit 4cbadaeaea
3 changed files with 52 additions and 3 deletions

View File

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

View File

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

View File

@ -1284,7 +1284,11 @@ Event_job_data::construct_sp_sql(THD *thd, String *sp_sql)
*/ */
sp_sql->append(STRING_WITH_LEN("() SQL SECURITY INVOKER ")); 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); sp_sql->append(&body);
if (thd->variables.sql_mode & MODE_ORACLE)
sp_sql->append(STRING_WITH_LEN("; END"));
DBUG_RETURN(thd->is_fatal_error); DBUG_RETURN(thd->is_fatal_error);
} }
@ -1387,9 +1391,6 @@ Event_job_data::execute(THD *thd, bool drop)
goto end; goto end;
} }
if (construct_sp_sql(thd, &sp_sql))
goto end;
/* /*
Set up global thread attributes to reflect the properties of Set up global thread attributes to reflect the properties of
this Event. We can simply reset these instead of usual 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.sql_mode= sql_mode;
thd->variables.time_zone= time_zone; 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()); thd->set_query(sp_sql.c_ptr_safe(), sp_sql.length());
{ {