Commit 33b6bab8 authored by unknown's avatar unknown
Browse files

Fix for bug #23616: Week() changed behaviour between 5.0.22 and 5.0.24

Consider double values as legal date{time} function's arguments
(i.e. allow dates in internal format YYYYMMDDHHMMSS.XXXXXX).


mysql-test/r/func_sapdb.result:
  Fix for bug #23616: Week() changed behaviour between 5.0.22 and 5.0.24
    - result adjusted.
mysql-test/r/func_time.result:
  Fix for bug #23616: Week() changed behaviour between 5.0.22 and 5.0.24
    - test result.
mysql-test/t/func_time.test:
  Fix for bug #23616: Week() changed behaviour between 5.0.22 and 5.0.24
    - test case.
sql-common/my_time.c:
  Fix for bug #23616: Week() changed behaviour between 5.0.22 and 5.0.24
    - consider '.' as an acceptable separator for dates like YYYYYMMDDHHMMSS.XXXXXX
parent 0f462179
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -229,9 +229,7 @@ a
10000
select microsecond(19971231235959.01) as a;
a
0
Warnings:
Warning	1292	Truncated incorrect time value: '19971231235959.01'
10000
select date_add("1997-12-31",INTERVAL "10.09" SECOND_MICROSECOND) as a;
a
1997-12-31 00:00:10.090000
+4 −0
Original line number Diff line number Diff line
@@ -854,4 +854,8 @@ H
select last_day('0000-00-00');
last_day('0000-00-00')
NULL
select isnull(week(now() + 0)), isnull(week(now() + 0.2)),
week(20061108), week(20061108.01), week(20061108085411.000002);
isnull(week(now() + 0))	isnull(week(now() + 0.2))	week(20061108)	week(20061108.01)	week(20061108085411.000002)
0	0	45	45	45
End of 4.1 tests
+7 −0
Original line number Diff line number Diff line
@@ -492,4 +492,11 @@ union

select last_day('0000-00-00');

#
# Bug 23616: datetime functions with double argumets
#

select isnull(week(now() + 0)), isnull(week(now() + 0.2)),
  week(20061108), week(20061108.01), week(20061108085411.000002);

--echo End of 4.1 tests
+1 −1
Original line number Diff line number Diff line
@@ -145,7 +145,7 @@ str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time,
  digits= (uint) (pos-str);
  start_loop= 0;                                /* Start of scan loop */
  date_len[format_position[0]]= 0;              /* Length of year field */
  if (pos == end)
  if (pos == end || *pos == '.')
  {
    /* Found date in internal format (only numbers like YYYYMMDD) */
    year_length= (digits == 4 || digits == 8 || digits >= 14) ? 4 : 2;