mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 20:07:13 +02:00
MDEV-454 Addition of a time interval reduces the resulting value
1. Field_newdate::get_date should refuse to return a date with zeros when TIME_NO_ZERO_IN_DATE is set, not when TIME_FUZZY_DATE is unset 2. Item_func_to_days and Item_date_add_interval can only work with valid dates, no zeros allowed.
This commit is contained in:
parent
a44331ab34
commit
3444e8e925
4 changed files with 22 additions and 3 deletions
10
mysql-test/r/adddate_454.result
Normal file
10
mysql-test/r/adddate_454.result
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
create table t1 (d date);
|
||||
insert into t1 values ('2012-00-00');
|
||||
select * from t1;
|
||||
d
|
||||
2012-00-00
|
||||
update t1 set d = adddate(d, interval 1 day);
|
||||
select * from t1;
|
||||
d
|
||||
NULL
|
||||
drop table t1;
|
||||
9
mysql-test/t/adddate_454.test
Normal file
9
mysql-test/t/adddate_454.test
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
#
|
||||
# MDEV-454 Addition of a time interval reduces the resulting value
|
||||
#
|
||||
create table t1 (d date);
|
||||
insert into t1 values ('2012-00-00');
|
||||
select * from t1;
|
||||
update t1 set d = adddate(d, interval 1 day);
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
|
@ -5789,7 +5789,7 @@ bool Field_newdate::get_date(MYSQL_TIME *ltime,uint fuzzydate)
|
|||
if (!tmp)
|
||||
return fuzzydate & TIME_NO_ZERO_DATE;
|
||||
if (!ltime->month || !ltime->day)
|
||||
return !(fuzzydate & TIME_FUZZY_DATE);
|
||||
return fuzzydate & TIME_NO_ZERO_IN_DATE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -751,7 +751,7 @@ longlong Item_func_to_days::val_int()
|
|||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
MYSQL_TIME ltime;
|
||||
if (get_arg0_date(<ime, TIME_NO_ZERO_DATE))
|
||||
if (get_arg0_date(<ime, TIME_NO_ZERO_DATE | TIME_NO_ZERO_IN_DATE))
|
||||
return 0;
|
||||
return (longlong) calc_daynr(ltime.year,ltime.month,ltime.day);
|
||||
}
|
||||
|
|
@ -1932,7 +1932,7 @@ bool Item_date_add_interval::get_date(MYSQL_TIME *ltime, uint fuzzy_date)
|
|||
{
|
||||
INTERVAL interval;
|
||||
|
||||
if (args[0]->get_date(ltime, TIME_NO_ZERO_DATE | TIME_FUZZY_DATE) ||
|
||||
if (args[0]->get_date(ltime, TIME_NO_ZERO_DATE | TIME_FUZZY_DATE | TIME_NO_ZERO_IN_DATE) ||
|
||||
get_interval_value(args[1], int_type, &value, &interval))
|
||||
return (null_value=1);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue