Commit 4c02f402 authored by unknown's avatar unknown
Browse files

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.
parent 0ace2b44
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1076,3 +1076,6 @@ fmtddate field2
Sep-4 12:00AM	abcd
DROP TABLE testBug8868;
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
+6 −0
Original line number Diff line number Diff line
@@ -620,3 +620,9 @@ SELECT DATE_FORMAT(field1,'%b-%e %l:%i%p') as fmtddate, field2 FROM testBug8868;
DROP TABLE testBug8868;

SET NAMES DEFAULT;

#
# Bug #22229: bug in DATE_ADD()
#

select str_to_date('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE;
+3 −1
Original line number Diff line number Diff line
@@ -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.length= format->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;
  if (cached_timestamp_type == MYSQL_TIMESTAMP_TIME && ltime->day)
  {