DATEDIFF with a 0000-00-00 argument produces different result in 5.1-micro
Bug #738096 reported by
Philip Stoev
This bug affects 1 person
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
MariaDB |
Won't Fix
|
Medium
|
Sergei Golubchik |
Bug Description
The following expression:
SELECT DATEDIFF( '2004-08-07' , DATE ( '0000-00-00 00:00:00'));
returns NULL in 5.1-micro and 732165 in mysql-5.1
In this case it seems safer and backward compatible to allow people to use the 0000-00-00 date in datediff calculations. It is plausible that such an expression can occur in a real life query.
Related branches
lp:~maria-captains/maria/5.1-micro
(Merged)
Changed in maria: | |
milestone: | none → 5.3 |
assignee: | nobody → Sergei (sergii) |
Changed in maria: | |
status: | Confirmed → Won't Fix |
To post a comment you must log in.
This is an old inconsistency (DATEDIFF() is implemented internally via TO_DAYS())
mysql> select to_days( date('0000- 00-00') ), to_days( '0000-00- 00'); ------- ------- ------- --+---- ------- ------- -----+ date('0000- 00-00') ) | to_days( '0000-00- 00') | ------- ------- ------- --+---- ------- ------- -----+ ------- ------- ------- --+---- ------- ------- -----+
+------
| to_days(
+------
| 0 | NULL |
+------
The first behavior is tested in the func_time.test.
TO_DAYS() does not want its argument to be a zero date, and it uses TIME_NO_ZERO_DATE to indicate that:
longlong Item_func_ to_days: :val_int( ) date(<ime, TIME_NO_ZERO_DATE)) ltime.year, ltime.month, ltime.day) ;
{
MYSQL_TIME ltime;
if (get_arg0_
return 0;
return (longlong) calc_daynr(
}
But DATE() function (which is Item_date_ typecast: :get_date( )) was ignoring the second argument, basically violating caller's requirements. That's why it was possible to get a zero date via DATE(), but not from a string directly.
The bug appeared because DATE() is now fixed to obey caller's requirements. I see two solutions for this bug:
* allow TO_DAYS() to take a zero date
* change the status of this bug to be "Won't Fix"