Commit a9e6af8d authored by unknown's avatar unknown
Browse files

manual merge


sql/event_timed.cc:
  Auto merged
parents be423af4 bcc6821b
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
create database if not exists events_test;
use events_test;

set @a=3;
CREATE PROCEDURE p_16 () CREATE EVENT e_16 ON SCHEDULE EVERY @a SECOND DO SET @a=5;
call p_16();
@@ -14,6 +15,13 @@ CALL p_16();
ERROR HY000: Event 'e_16' already exists
DROP PROCEDURE p_16;
DROP EVENT e_16;

create event e_55 on schedule at 99990101000000 do drop table t;
ERROR HY000: Incorrect AT value: '99990101000000'
create event e_55 on schedule every 10 hour starts 99990101000000 do drop table t;
ERROR HY000: Incorrect STARTS value: '99990101000000'
create event e_55 on schedule every 10 minute ends 99990101000000 do drop table t;
ERROR HY000: ENDS is either invalid or before STARTS
set global event_scheduler=0;
"Wait a bit to settle down"
delete from mysql.event;
+13 −0
Original line number Diff line number Diff line
@@ -21,6 +21,19 @@ DROP EVENT e_16;
# END   - BUG#16408: Events: crash for an event in a procedure
#

#
# Start - 16396: Events: Distant-future dates become past dates
#
--error 1503
create event e_55 on schedule at 99990101000000 do drop table t;
--error 1503
create event e_55 on schedule every 10 hour starts 99990101000000 do drop table t;
--error 1521
create event e_55 on schedule every 10 minute ends 99990101000000 do drop table t;
#
# End  -  16396: Events: Distant-future dates become past dates
#

#
# Start - 16407: Events: Changes in sql_mode won't be taken into account
#
+33 −8
Original line number Diff line number Diff line
@@ -151,6 +151,7 @@ Event_timed::init_execute_at(THD *thd, Item *expr)
{
  my_bool not_used;
  TIME ltime;
  my_time_t t;

  TIME time_tmp;
  DBUG_ENTER("Event_timed::init_execute_at");
@@ -174,12 +175,18 @@ Event_timed::init_execute_at(THD *thd, Item *expr)
      TIME_to_ulonglong_datetime(&time_tmp))
    DBUG_RETURN(EVEX_BAD_PARAMS);


  /*
    This may result in a 1970-01-01 date if ltime is > 2037-xx-xx.
    CONVERT_TZ has similar problem.
    mysql_priv.h currently lists 
      #define TIMESTAMP_MAX_YEAR 2038 (see TIME_to_timestamp())
  */
  my_tz_UTC->gmt_sec_to_TIME(&ltime, TIME_to_timestamp(thd,&ltime, &not_used));
  my_tz_UTC->gmt_sec_to_TIME(&ltime,t=TIME_to_timestamp(thd,&ltime,&not_used));
  if (!t)
  {
    DBUG_PRINT("error", ("Execute AT after year 2037"));
    DBUG_RETURN(ER_WRONG_VALUE);
  }

  execute_at_null= FALSE;
  execute_at= ltime;
@@ -302,6 +309,7 @@ Event_timed::init_interval(THD *thd, Item *expr, interval_type new_interval)
  RETURNS
    0                  OK
    EVEX_PARSE_ERROR   fix_fields failed
    EVEX_BAD_PARAMS    starts before now
*/

int
@@ -309,6 +317,7 @@ Event_timed::init_starts(THD *thd, Item *new_starts)
{
  my_bool not_used;
  TIME ltime, time_tmp;
  my_time_t t;

  DBUG_ENTER("Event_timed::init_starts");

@@ -329,10 +338,17 @@ Event_timed::init_starts(THD *thd, Item *new_starts)
    DBUG_RETURN(EVEX_BAD_PARAMS);

  /*
    This may result in a 1970-01-01 date if ltime is > 2037-xx-xx
    CONVERT_TZ has similar problem
    This may result in a 1970-01-01 date if ltime is > 2037-xx-xx.
    CONVERT_TZ has similar problem.
    mysql_priv.h currently lists 
      #define TIMESTAMP_MAX_YEAR 2038 (see TIME_to_timestamp())
  */
  my_tz_UTC->gmt_sec_to_TIME(&ltime, TIME_to_timestamp(thd, &ltime, &not_used));
  my_tz_UTC->gmt_sec_to_TIME(&ltime,t=TIME_to_timestamp(thd, &ltime, &not_used));
  if (!t)
  {
    DBUG_PRINT("error", ("STARTS after year 2037"));
    DBUG_RETURN(EVEX_BAD_PARAMS);
  }

  starts= ltime;
  starts_null= FALSE;
@@ -359,6 +375,7 @@ Event_timed::init_starts(THD *thd, Item *new_starts)
  RETURNS
    0                  OK
    EVEX_PARSE_ERROR   fix_fields failed
    ER_WRONG_VALUE     starts distant date (after year 2037)
    EVEX_BAD_PARAMS    ENDS before STARTS
*/

@@ -367,6 +384,7 @@ Event_timed::init_ends(THD *thd, Item *new_ends)
{
  TIME ltime, ltime_now;
  my_bool not_used;
  my_time_t t;

  DBUG_ENTER("Event_timed::init_ends");

@@ -378,11 +396,18 @@ Event_timed::init_ends(THD *thd, Item *new_ends)
    DBUG_RETURN(EVEX_BAD_PARAMS);

  /*
    This may result in a 1970-01-01 date if ltime is > 2037-xx-xx ?
    CONVERT_TZ has similar problem ?
    This may result in a 1970-01-01 date if ltime is > 2037-xx-xx.
    CONVERT_TZ has similar problem.
    mysql_priv.h currently lists 
      #define TIMESTAMP_MAX_YEAR 2038 (see TIME_to_timestamp())
  */
  DBUG_PRINT("info", ("get the UTC time"));
  my_tz_UTC->gmt_sec_to_TIME(&ltime, TIME_to_timestamp(thd, &ltime, &not_used));
  my_tz_UTC->gmt_sec_to_TIME(&ltime,t=TIME_to_timestamp(thd, &ltime, &not_used));
  if (!t)
  {
    DBUG_PRINT("error", ("ENDS after year 2037"));
    DBUG_RETURN(EVEX_BAD_PARAMS);
  }

  /* Check whether ends is after starts */
  DBUG_PRINT("info", ("ENDS after STARTS?"));