diff options
author | Alexander Barkov <bar@mariadb.com> | 2018-08-09 11:08:11 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.com> | 2018-08-09 11:08:11 +0400 |
commit | ffdae1a960330ed86c83125792cffb8093d25410 (patch) | |
tree | 9c181e7339cf13fe0ebc88269736db8c82900457 /sql/item_timefunc.cc | |
parent | 3f01c4fbd4c99adaf9d3277bea8542755047ead4 (diff) | |
download | mariadb-git-ffdae1a960330ed86c83125792cffb8093d25410.tar.gz |
MDEV-16926 CAST(COALESCE(year_field)) returns wrong value
Diffstat (limited to 'sql/item_timefunc.cc')
-rw-r--r-- | sql/item_timefunc.cc | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index abb143add8d..84db154566a 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -2528,17 +2528,14 @@ bool Item_datetime_typecast::get_date(MYSQL_TIME *ltime, ulonglong fuzzy_date) bool Item_func_makedate::get_date(MYSQL_TIME *ltime, ulonglong fuzzy_date) { DBUG_ASSERT(fixed == 1); - long daynr= (long) args[1]->val_int(); - long year= (long) args[0]->val_int(); - long days; + long year, days, daynr= (long) args[1]->val_int(); - if (args[0]->null_value || args[1]->null_value || - year < 0 || year > 9999 || daynr <= 0) + VYear vyear(args[0]); + if (vyear.is_null() || args[1]->null_value || vyear.truncated() || daynr <= 0) goto err; - if (year < 100) + if ((year= (long) vyear.year()) < 100) year= year_2000_handling(year); - days= calc_daynr(year,1,1) + daynr - 1; if (get_date_from_daynr(days, <ime->year, <ime->month, <ime->day)) goto err; |