summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.org>2017-11-07 15:03:58 +0400
committerAlexander Barkov <bar@mariadb.org>2017-11-07 15:03:58 +0400
commitfff7fc500b3ab0ead49685cbd1310d5b2dfa0972 (patch)
treef9a9af9b7f146c6b1678039e6ecff35a9eab3727 /sql
parent8128ae48eff6029d29d6c1c509f04994614a0571 (diff)
downloadmariadb-git-fff7fc500b3ab0ead49685cbd1310d5b2dfa0972.tar.gz
MDEV-10817 CAST(MAX(DATE'2001-01-01') AS TIME) returns a wrong result
Diffstat (limited to 'sql')
-rw-r--r--sql/item_func.h7
-rw-r--r--sql/item_sum.cc12
-rw-r--r--sql/item_sum.h1
3 files changed, 20 insertions, 0 deletions
diff --git a/sql/item_func.h b/sql/item_func.h
index bee6dc4e524..ef703456818 100644
--- a/sql/item_func.h
+++ b/sql/item_func.h
@@ -2367,6 +2367,13 @@ public:
return sp_result_field->val_decimal(dec_buf);
}
+ bool get_date(MYSQL_TIME *ltime, ulonglong fuzzydate)
+ {
+ if (execute())
+ return true;
+ return sp_result_field->get_date(ltime, fuzzydate);
+ }
+
String *val_str(String *str)
{
String buf;
diff --git a/sql/item_sum.cc b/sql/item_sum.cc
index df09beeb274..20237435ba6 100644
--- a/sql/item_sum.cc
+++ b/sql/item_sum.cc
@@ -2065,6 +2065,18 @@ void Item_sum_hybrid::clear()
null_value= 1;
}
+bool
+Item_sum_hybrid::get_date(MYSQL_TIME *ltime, ulonglong fuzzydate)
+{
+ DBUG_ASSERT(fixed == 1);
+ if (null_value)
+ return 0;
+ bool retval= value->get_date(ltime, fuzzydate);
+ if ((null_value= value->null_value))
+ DBUG_ASSERT(retval == true);
+ return retval;
+}
+
double Item_sum_hybrid::val_real()
{
DBUG_ASSERT(fixed == 1);
diff --git a/sql/item_sum.h b/sql/item_sum.h
index 0c655ded153..5c446e5779d 100644
--- a/sql/item_sum.h
+++ b/sql/item_sum.h
@@ -1037,6 +1037,7 @@ protected:
double val_real();
longlong val_int();
my_decimal *val_decimal(my_decimal *);
+ bool get_date(MYSQL_TIME *ltime, ulonglong fuzzydate);
void reset_field();
String *val_str(String *);
bool keep_field_type(void) const { return 1; }