Bug#32770: LAST_DAY() returns a DATE, but somehow internally keeps track of the TIME.

LAST_DAY() says it returns a DATE, not a DATETIME, but didn't zero the time fields.
Adapted from a patch kindly supplied by Claudio Cherubino.
parent 987ec3f3
...@@ -1282,4 +1282,7 @@ DATE_ADD('20071108', INTERVAL 1 DAY) ...@@ -1282,4 +1282,7 @@ DATE_ADD('20071108', INTERVAL 1 DAY)
select DATE_ADD(20071108, INTERVAL 1 DAY); select DATE_ADD(20071108, INTERVAL 1 DAY);
DATE_ADD(20071108, INTERVAL 1 DAY) DATE_ADD(20071108, INTERVAL 1 DAY)
2007-11-09 2007-11-09
select LAST_DAY('2007-12-06 08:59:19.05') - INTERVAL 1 SECOND;
LAST_DAY('2007-12-06 08:59:19.05') - INTERVAL 1 SECOND
2007-12-30 23:59:59
End of 5.0 tests End of 5.0 tests
...@@ -797,4 +797,11 @@ select DATE_ADD(20071108181000, INTERVAL 1 DAY); ...@@ -797,4 +797,11 @@ select DATE_ADD(20071108181000, INTERVAL 1 DAY);
select DATE_ADD('20071108', INTERVAL 1 DAY); select DATE_ADD('20071108', INTERVAL 1 DAY);
select DATE_ADD(20071108, INTERVAL 1 DAY); select DATE_ADD(20071108, INTERVAL 1 DAY);
#
# Bug#32770: LAST_DAY() returns a DATE, but somehow internally keeps
# track of the TIME.
#
select LAST_DAY('2007-12-06 08:59:19.05') - INTERVAL 1 SECOND;
--echo End of 5.0 tests --echo End of 5.0 tests
...@@ -3411,6 +3411,8 @@ bool Item_func_last_day::get_date(MYSQL_TIME *ltime, uint fuzzy_date) ...@@ -3411,6 +3411,8 @@ bool Item_func_last_day::get_date(MYSQL_TIME *ltime, uint fuzzy_date)
ltime->day= days_in_month[month_idx]; ltime->day= days_in_month[month_idx];
if ( month_idx == 1 && calc_days_in_year(ltime->year) == 366) if ( month_idx == 1 && calc_days_in_year(ltime->year) == 366)
ltime->day= 29; ltime->day= 29;
ltime->hour= ltime->minute= ltime->second= 0;
ltime->second_part= 0;
ltime->time_type= MYSQL_TIMESTAMP_DATE; ltime->time_type= MYSQL_TIMESTAMP_DATE;
return 0; return 0;
} }
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