Commit 948bb3e6 authored by Magne Mahre's avatar Magne Mahre

Bug#42664: Sign ignored for TIME types when not comparing as longlong

      
Another code-path dropped sign of TIME, presuming all time is positive.
      
Minds sign now. Patch depends on ChangeSet for 42661.
parent 491b8fc7
...@@ -85,6 +85,7 @@ sec_to_time(time_to_sec(t)) ...@@ -85,6 +85,7 @@ sec_to_time(time_to_sec(t))
13:00:00 13:00:00
09:00:00 09:00:00
drop table t1; drop table t1;
End of 4.1 tests
select cast('100:55:50' as time) < cast('24:00:00' as time); select cast('100:55:50' as time) < cast('24:00:00' as time);
cast('100:55:50' as time) < cast('24:00:00' as time) cast('100:55:50' as time) < cast('24:00:00' as time)
0 0
...@@ -138,3 +139,27 @@ CAST(c AS TIME) ...@@ -138,3 +139,27 @@ CAST(c AS TIME)
00:00:00 00:00:00
DROP TABLE t1; DROP TABLE t1;
End of 5.0 tests End of 5.0 tests
CREATE TABLE t1 (f1 TIME);
INSERT INTO t1 VALUES ('24:00:00');
SELECT '24:00:00' = (SELECT f1 FROM t1);
'24:00:00' = (SELECT f1 FROM t1)
1
SELECT CAST('24:00:00' AS TIME) = (SELECT f1 FROM t1);
CAST('24:00:00' AS TIME) = (SELECT f1 FROM t1)
1
SELECT CAST('-24:00:00' AS TIME) = (SELECT f1 FROM t1);
CAST('-24:00:00' AS TIME) = (SELECT f1 FROM t1)
0
TRUNCATE t1;
INSERT INTO t1 VALUES ('-24:00:00');
SELECT CAST('24:00:00' AS TIME) = (SELECT f1 FROM t1);
CAST('24:00:00' AS TIME) = (SELECT f1 FROM t1)
0
SELECT CAST('-24:00:00' AS TIME) = (SELECT f1 FROM t1);
CAST('-24:00:00' AS TIME) = (SELECT f1 FROM t1)
1
SELECT '-24:00:00' = (SELECT f1 FROM t1);
'-24:00:00' = (SELECT f1 FROM t1)
1
DROP TABLE t1;
End of 6.0 tests
...@@ -39,7 +39,7 @@ drop table t1; ...@@ -39,7 +39,7 @@ drop table t1;
# SELECT CAST(0.2359591234567e+30 AS TIME); # SELECT CAST(0.2359591234567e+30 AS TIME);
# ########################################################## # ##########################################################
# End of 4.1 tests --echo End of 4.1 tests
# #
# Bug#29555: Comparing time values as strings may lead to a wrong result. # Bug#29555: Comparing time values as strings may lead to a wrong result.
...@@ -90,3 +90,22 @@ DROP TABLE t1; ...@@ -90,3 +90,22 @@ DROP TABLE t1;
--echo End of 5.0 tests --echo End of 5.0 tests
#
# Bug#42664 - Sign ignored for TIME types when not comparing as longlong
#
CREATE TABLE t1 (f1 TIME);
INSERT INTO t1 VALUES ('24:00:00');
SELECT '24:00:00' = (SELECT f1 FROM t1);
SELECT CAST('24:00:00' AS TIME) = (SELECT f1 FROM t1);
SELECT CAST('-24:00:00' AS TIME) = (SELECT f1 FROM t1);
TRUNCATE t1;
INSERT INTO t1 VALUES ('-24:00:00');
SELECT CAST('24:00:00' AS TIME) = (SELECT f1 FROM t1);
SELECT CAST('-24:00:00' AS TIME) = (SELECT f1 FROM t1);
SELECT '-24:00:00' = (SELECT f1 FROM t1);
DROP TABLE t1;
--echo End of 6.0 tests
...@@ -829,7 +829,8 @@ get_time_value(THD *thd, Item ***item_arg, Item **cache_arg, ...@@ -829,7 +829,8 @@ get_time_value(THD *thd, Item ***item_arg, Item **cache_arg,
else else
{ {
*is_null= item->get_time(&ltime); *is_null= item->get_time(&ltime);
value= !*is_null ? (longlong) TIME_to_ulonglong_datetime(&ltime) : 0; value= !*is_null ? (longlong) TIME_to_ulonglong_datetime(&ltime) *
(ltime.neg ? -1 : 1) : 0;
} }
/* /*
Do not cache GET_USER_VAR() function as its const_item() may return TRUE Do not cache GET_USER_VAR() function as its const_item() may return TRUE
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment