Commit 8f543b5e authored by unknown's avatar unknown
Browse files

BUG#15101 SYSDATE() disregards SET TIMESTAMP.

   After the ChangeSet 1.1892.20.1 2005/08/24 (Bug #12562) SYSDATE() is not an alias
   of NOW() and is unsafe for replication.
   `SYSDATE()' backward compatible aliasing clashes with the idea #12562 
   fix. To make it safe-replicatable we have to either use RBR or to restore
   the pre-5.0 style.
   --sysdate-is-now command line flag was introduced to provide backward compatibility.


sql/mysqld.cc:
  New option to force SYSDATE's backward compatible with 4.1 aliasing to NOW (not default)
sql/sql_class.h:
  new slot to fill at init time and check at parse
sql/sql_yacc.yy:
  calling NOW's branches when --sysdate-is-now
mysql-test/r/sysdate_is_now.result:
  New BitKeeper file ``mysql-test/r/sysdate_is_now.result''
mysql-test/t/sysdate_is_now-master.opt:
  New BitKeeper file ``mysql-test/t/sysdate_is_now-master.opt''
mysql-test/t/sysdate_is_now.test:
  New BitKeeper file ``mysql-test/t/sysdate_is_now.test''
parent 69636739
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
set timestamp=1;
SELECT sleep(1),NOW()-SYSDATE() as zero;
sleep(1)	zero
0	0
+1 −0
Original line number Diff line number Diff line
--sysdate-is-now
+11 −0
Original line number Diff line number Diff line
#
# BUG#15101 restore aliasing of SYSDATE to NOW in 5.0
# this feature is activated via --sysdate-is-now mysqld init opt
#
# To test here
# 1. SYSDATE() does not distiguish from NOW()
# 2. SYSDATE() obeys set timestamp

set timestamp=1;
SELECT sleep(1),NOW()-SYSDATE() as zero;
# End of 5.0 tests
+5 −0
Original line number Diff line number Diff line
@@ -4578,6 +4578,7 @@ enum options_mysqld
  OPT_DATETIME_FORMAT,
  OPT_LOG_QUERIES_NOT_USING_INDEXES,
  OPT_DEFAULT_TIME_ZONE,
  OPT_SYSDATE_IS_NOW,
  OPT_OPTIMIZER_SEARCH_DEPTH,
  OPT_OPTIMIZER_PRUNE_LEVEL,
  OPT_UPDATABLE_VIEWS_WITH_LIMIT,
@@ -5935,6 +5936,10 @@ The minimum value for this variable is 4096.",
   (gptr*) &max_system_variables.net_wait_timeout, 0, GET_ULONG,
   REQUIRED_ARG, NET_WAIT_TIMEOUT, 1, IF_WIN(INT_MAX32/1000, LONG_TIMEOUT),
   0, 1, 0},
  {"sysdate-is-now", OPT_SYSDATE_IS_NOW,
   "Non-default flag to alias SYSDATE() to NOW() to be safe-replicatable. Since 5.0 SYSDATE returns a `dynamic' value different for different invocation even within a query",
   (gptr*) &global_system_variables.sysdate_is_now,
   0, 0, GET_BOOL, NO_ARG, 0, 0, 1, 0, 1, 0},
  {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
};

+1 −0
Original line number Diff line number Diff line
@@ -585,6 +585,7 @@ struct system_variables
  DATE_TIME_FORMAT *date_format;
  DATE_TIME_FORMAT *datetime_format;
  DATE_TIME_FORMAT *time_format;
  my_bool sysdate_is_now;
};


Loading