mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Fix for bug #22229: Bug in DATE_ADD()
From the manual: date arithmetic operations require complete dates and do not work with incomplete dates such as '2006-07-00' or badly malformed dates. mysql-test/r/func_time.result: Fix for bug #22229: Bug in DATE_ADD() - test result. mysql-test/t/func_time.test: Fix for bug #22229: Bug in DATE_ADD() - test case. sql/item_timefunc.cc: Fix for bug #22229: Bug in DATE_ADD() - Item_func_str_to_date::get_date() should return NULL if TIME_NO_ZERO_DATE flag is set and year||month||day is 0.
This commit is contained in:
@@ -1076,3 +1076,6 @@ fmtddate field2
|
|||||||
Sep-4 12:00AM abcd
|
Sep-4 12:00AM abcd
|
||||||
DROP TABLE testBug8868;
|
DROP TABLE testBug8868;
|
||||||
SET NAMES DEFAULT;
|
SET NAMES DEFAULT;
|
||||||
|
select str_to_date('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE;
|
||||||
|
str_to_date('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE
|
||||||
|
NULL
|
||||||
|
@@ -620,3 +620,9 @@ SELECT DATE_FORMAT(field1,'%b-%e %l:%i%p') as fmtddate, field2 FROM testBug8868;
|
|||||||
DROP TABLE testBug8868;
|
DROP TABLE testBug8868;
|
||||||
|
|
||||||
SET NAMES DEFAULT;
|
SET NAMES DEFAULT;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #22229: bug in DATE_ADD()
|
||||||
|
#
|
||||||
|
|
||||||
|
select str_to_date('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE;
|
||||||
|
@@ -3193,7 +3193,9 @@ bool Item_func_str_to_date::get_date(TIME *ltime, uint fuzzy_date)
|
|||||||
date_time_format.format.str= (char*) format->ptr();
|
date_time_format.format.str= (char*) format->ptr();
|
||||||
date_time_format.format.length= format->length();
|
date_time_format.format.length= format->length();
|
||||||
if (extract_date_time(&date_time_format, val->ptr(), val->length(),
|
if (extract_date_time(&date_time_format, val->ptr(), val->length(),
|
||||||
ltime, cached_timestamp_type, 0, "datetime"))
|
ltime, cached_timestamp_type, 0, "datetime") ||
|
||||||
|
((fuzzy_date & TIME_NO_ZERO_DATE) &&
|
||||||
|
(ltime->year == 0 || ltime->month == 0 || ltime->day == 0)))
|
||||||
goto null_date;
|
goto null_date;
|
||||||
if (cached_timestamp_type == MYSQL_TIMESTAMP_TIME && ltime->day)
|
if (cached_timestamp_type == MYSQL_TIMESTAMP_TIME && ltime->day)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user