summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/cast.result9
-rw-r--r--mysql-test/t/cast.test10
-rw-r--r--sql/item_timefunc.cc7
3 files changed, 26 insertions, 0 deletions
diff --git a/mysql-test/r/cast.result b/mysql-test/r/cast.result
index ccf75f68e88..636e2603f9b 100644
--- a/mysql-test/r/cast.result
+++ b/mysql-test/r/cast.result
@@ -178,3 +178,12 @@ aaa aa
aab aa
aac aa
DROP TABLE t1;
+select date_add(cast('2004-12-30 12:00:00' as date), interval 0 hour);
+date_add(cast('2004-12-30 12:00:00' as date), interval 0 hour)
+2004-12-30 00:00:00
+select timediff(cast('2004-12-30 12:00:00' as time), '12:00:00');
+timediff(cast('2004-12-30 12:00:00' as time), '12:00:00')
+00:00:00
+select timediff(cast('1 12:00:00' as time), '12:00:00');
+timediff(cast('1 12:00:00' as time), '12:00:00')
+24:00:00
diff --git a/mysql-test/t/cast.test b/mysql-test/t/cast.test
index e5681dedbac..23bba7d5aff 100644
--- a/mysql-test/t/cast.test
+++ b/mysql-test/t/cast.test
@@ -108,3 +108,13 @@ SELECT a, CAST(a AS CHAR(3)) FROM t1 ORDER BY CAST(a AS CHAR(2)), a;
SELECT a, CAST(a AS UNSIGNED) FROM t1 ORDER BY CAST(a AS CHAR) ;
SELECT a, CAST(a AS CHAR(2)) FROM t1 ORDER BY CAST(a AS CHAR(3)), a;
DROP TABLE t1;
+
+#
+# Test for bug #6914 "Problems using time()/date() output in expressions".
+# When we are casting datetime value to DATE/TIME we should throw away
+# time/date parts (correspondingly).
+#
+select date_add(cast('2004-12-30 12:00:00' as date), interval 0 hour);
+select timediff(cast('2004-12-30 12:00:00' as time), '12:00:00');
+# Still we should not throw away "days" part of time value
+select timediff(cast('1 12:00:00' as time), '12:00:00');
diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc
index 84a9e01ed2a..054a9966e73 100644
--- a/sql/item_timefunc.cc
+++ b/sql/item_timefunc.cc
@@ -2183,6 +2183,12 @@ String *Item_datetime_typecast::val_str(String *str)
bool Item_time_typecast::get_time(TIME *ltime)
{
bool res= get_arg0_time(ltime);
+ /*
+ For MYSQL_TIMESTAMP_TIME value we can have non-zero day part,
+ which we should not lose.
+ */
+ if (ltime->time_type == MYSQL_TIMESTAMP_DATETIME)
+ ltime->year= ltime->month= ltime->day= 0;
ltime->time_type= MYSQL_TIMESTAMP_TIME;
return res;
}
@@ -2206,6 +2212,7 @@ String *Item_time_typecast::val_str(String *str)
bool Item_date_typecast::get_date(TIME *ltime, uint fuzzy_date)
{
bool res= get_arg0_date(ltime,1);
+ ltime->hour= ltime->minute= ltime->second= ltime->second_part= 0;
ltime->time_type= MYSQL_TIMESTAMP_DATE;
return res;
}