mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
port of fixes for bug-20577 and 46362 for TO_SECONDS
This commit is contained in:
@@ -944,8 +944,29 @@ longlong Item_func_to_days::val_int()
|
||||
longlong Item_func_to_seconds::val_int_endpoint(bool left_endp,
|
||||
bool *incl_endp)
|
||||
{
|
||||
longlong res= val_int();
|
||||
return null_value ? LONGLONG_MIN : res;
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
MYSQL_TIME ltime;
|
||||
longlong seconds;
|
||||
longlong days;
|
||||
int dummy; /* unused */
|
||||
if (get_arg0_date(<ime, TIME_FUZZY_DATE))
|
||||
{
|
||||
/* got NULL, leave the incl_endp intact */
|
||||
return LONGLONG_MIN;
|
||||
}
|
||||
seconds= ltime.hour * 3600L + ltime.minute * 60 + ltime.second;
|
||||
seconds= ltime.neg ? -seconds : seconds;
|
||||
days= (longlong) calc_daynr(ltime.year, ltime.month, ltime.day);
|
||||
seconds+= days * 24L * 3600L;
|
||||
/* Set to NULL if invalid date, but keep the value */
|
||||
null_value= check_date(<ime,
|
||||
(ltime.year || ltime.month || ltime.day),
|
||||
(TIME_NO_ZERO_IN_DATE | TIME_NO_ZERO_DATE),
|
||||
&dummy);
|
||||
/*
|
||||
Even if the evaluation return NULL, seconds is useful for pruning
|
||||
*/
|
||||
return seconds;
|
||||
}
|
||||
|
||||
longlong Item_func_to_seconds::val_int()
|
||||
@@ -956,10 +977,10 @@ longlong Item_func_to_seconds::val_int()
|
||||
longlong days;
|
||||
if (get_arg0_date(<ime, TIME_NO_ZERO_DATE))
|
||||
return 0;
|
||||
seconds=ltime.hour*3600L+ltime.minute*60+ltime.second;
|
||||
seconds= ltime.hour * 3600L + ltime.minute * 60 + ltime.second;
|
||||
seconds=ltime.neg ? -seconds : seconds;
|
||||
days= (longlong) calc_daynr(ltime.year,ltime.month,ltime.day);
|
||||
return (seconds + days * (24L * 3600L));
|
||||
days= (longlong) calc_daynr(ltime.year, ltime.month, ltime.day);
|
||||
return seconds + days * 24L * 3600L;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -992,10 +1013,9 @@ enum_monotonicity_info Item_func_to_seconds::get_monotonicity_info() const
|
||||
{
|
||||
if (args[0]->type() == Item::FIELD_ITEM)
|
||||
{
|
||||
if (args[0]->field_type() == MYSQL_TYPE_DATE)
|
||||
return MONOTONIC_STRICT_INCREASING;
|
||||
if (args[0]->field_type() == MYSQL_TYPE_DATETIME)
|
||||
return MONOTONIC_INCREASING;
|
||||
if (args[0]->field_type() == MYSQL_TYPE_DATE ||
|
||||
args[0]->field_type() == MYSQL_TYPE_DATETIME)
|
||||
return MONOTONIC_STRICT_INCREASING_NOT_NULL;
|
||||
}
|
||||
return NON_MONOTONIC;
|
||||
}
|
||||
|
Reference in New Issue
Block a user