Commit ed93e55b authored by Alexander Barkov's avatar Alexander Barkov

MDEV-5975 Prepared statements with DATE literals do not honor NO_ZERO_IN_DATE

parent 046ae9f5
......@@ -613,3 +613,31 @@ t1 CREATE TABLE `t1` (
`TIMESTAMP'2001-01-00 00:00:00'` datetime DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1;
#
# MDEV-5975 Prepared statements with DATE literals do not honor NO_ZERO_IN_DATE
#
SET sql_mode=DEFAULT;
PREPARE stmt FROM "SELECT (SELECT DATE'2001-00-00') AS c";
EXECUTE stmt;
c
2001-00-00
SET sql_mode='no_zero_in_date';
EXECUTE stmt;
c
NULL
Warnings:
Warning 1292 Incorrect datetime value: '2001-00-00'
DEALLOCATE PREPARE stmt;
SET sql_mode=DEFAULT;
PREPARE stmt FROM "SELECT (SELECT TIMESTAMP'2001-00-00 10:20:30') AS c";
EXECUTE stmt;
c
2001-00-00 10:20:30
SET sql_mode='no_zero_in_date';
EXECUTE stmt;
c
NULL
Warnings:
Warning 1292 Incorrect datetime value: '2001-00-00 10:20:30'
DEALLOCATE PREPARE stmt;
SET sql_mode=DEFAULT;
......@@ -326,3 +326,21 @@ CREATE TABLE t1 AS SELECT
TIMESTAMP'2001-01-00 00:00:00';
SHOW CREATE TABLE t1;
DROP TABLE t1;
--echo #
--echo # MDEV-5975 Prepared statements with DATE literals do not honor NO_ZERO_IN_DATE
--echo #
SET sql_mode=DEFAULT;
PREPARE stmt FROM "SELECT (SELECT DATE'2001-00-00') AS c";
EXECUTE stmt;
SET sql_mode='no_zero_in_date';
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET sql_mode=DEFAULT;
PREPARE stmt FROM "SELECT (SELECT TIMESTAMP'2001-00-00 10:20:30') AS c";
EXECUTE stmt;
SET sql_mode='no_zero_in_date';
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET sql_mode=DEFAULT;
......@@ -6509,6 +6509,7 @@ void Item_date_literal::print(String *str, enum_query_type query_type)
bool Item_date_literal::get_date(MYSQL_TIME *ltime, ulonglong fuzzy_date)
{
DBUG_ASSERT(fixed);
fuzzy_date |= sql_mode_for_dates(current_thd);
*ltime= cached_time;
return (null_value= check_date_with_warn(ltime, fuzzy_date,
MYSQL_TIMESTAMP_ERROR));
......@@ -6528,6 +6529,7 @@ void Item_datetime_literal::print(String *str, enum_query_type query_type)
bool Item_datetime_literal::get_date(MYSQL_TIME *ltime, ulonglong fuzzy_date)
{
DBUG_ASSERT(fixed);
fuzzy_date |= sql_mode_for_dates(current_thd);
*ltime= cached_time;
return (null_value= check_date_with_warn(ltime, fuzzy_date,
MYSQL_TIMESTAMP_ERROR));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment