Commit 2e17ce5d authored by Tatiana A. Nurnberg's avatar Tatiana A. Nurnberg

Bug#42662: maketime() and signedness

merge and additional clarifications

mysql-test/r/func_sapdb.result:
  Update test for 42661/42662 to use both TIME(...) and CAST(... AS TIME).
  They go through the same code-path here, but may not in the future, and
  besides, it's clearer this way.
mysql-test/t/func_sapdb.test:
  Update test for 42661/42662 to use both TIME(...) and CAST(... AS TIME).
  They go through the same code-path here, but may not in the future, and
  besides, it's clearer this way.
sql/item_timefunc.cc:
  - fix SEC_TO_TIME(...) for signed values
  - fix TIME(...) and CAST(... AS TIME) for signed values
parents 84ae9eca a9160776
......@@ -282,3 +282,33 @@ TIMEDIFF(TIME('17:59:00'),TIME('17:00:00')),
TIMEDIFF(TIME('17:00:00'),TIME('17:59:00'));
1Eq 1NEq1 1NEq2 2Eq 2NEq1 2NEq2 3Eq 3NEq1 3NEq2 Time0 Time00 Literal0000 TIMEDIFF(TIME('17:59:00'),TIME('17:00:00')) TIMEDIFF(TIME('17:00:00'),TIME('17:59:00'))
1 0 0 1 0 0 1 0 0 00:00:00 00:00:00 00:00:00 00:59:00 -00:59:00
SELECT sec_to_time(3020399)=time('838:59:59');
sec_to_time(3020399)=time('838:59:59')
1
SELECT sec_to_time(-3020399)=time('-838:59:59');
sec_to_time(-3020399)=time('-838:59:59')
1
SELECT sec_to_time(-3020399)='-838:59:59';
sec_to_time(-3020399)='-838:59:59'
1
SELECT time(sec_to_time(-3020399))=time('-838:59:59');
time(sec_to_time(-3020399))=time('-838:59:59')
1
SELECT time(sec_to_time(-3020399))=time('-838:59:58');
time(sec_to_time(-3020399))=time('-838:59:58')
0
SELECT maketime(-1,0,1)='-01:00:01';
maketime(-1,0,1)='-01:00:01'
1
SELECT TIME(maketime(-1,0,1))=TIME('-01:00:01');
TIME(maketime(-1,0,1))=TIME('-01:00:01')
1
SELECT maketime(-1,0,1)=TIME('-01:00:01');
maketime(-1,0,1)=TIME('-01:00:01')
1
SELECT maketime(1,0,1)=TIME('01:00:01');
maketime(1,0,1)=TIME('01:00:01')
1
SELECT maketime(1,0,1)=TIME('01:00:02');
maketime(1,0,1)=TIME('01:00:02')
0
......@@ -169,4 +169,26 @@ SELECT TIMEDIFF(TIME('17:00:00'),TIME('17:00:00'))=TIME('00:00:00') AS 1Eq,
TIMEDIFF(TIME('17:59:00'),TIME('17:00:00')),
TIMEDIFF(TIME('17:00:00'),TIME('17:59:00'));
#
# Bug#42661 - sec_to_time() and signedness
#
SELECT sec_to_time(3020399)=TIME('838:59:59');
SELECT sec_to_time(-3020399)=TIME('-838:59:59');
SELECT sec_to_time(-3020399)='-838:59:59';
SELECT time(sec_to_time(-3020399))=TIME('-838:59:59');
SELECT time(sec_to_time(-3020399))=TIME('-838:59:58');
#
# Bug#42662 - maketime() and signedness
#
# TIME(...) and CAST(... AS TIME) go through the same code-path here,
# but we'll explicitly show show that both work in case the ever changes.
SELECT maketime(-1,0,1)='-01:00:01';
SELECT TIME(maketime(-1,0,1))=CAST('-01:00:01' AS TIME);
SELECT maketime(-1,0,1)=CAST('-01:00:01' AS TIME);
SELECT maketime(1,0,1)=CAST('01:00:01' AS TIME);
SELECT maketime(1,0,1)=CAST('01:00:02' AS TIME);
# End of 5.0 tests
......@@ -1730,7 +1730,7 @@ longlong Item_func_sec_to_time::val_int()
sec_to_time(arg_val, args[0]->unsigned_flag, &ltime);
return (ltime.neg ? -1 : 1) *
((ltime.hour)*10000 + ltime.minute*100 + ltime.second);
(longlong) ((ltime.hour)*10000 + ltime.minute*100 + ltime.second);
}
......@@ -2648,7 +2648,8 @@ longlong Item_time_typecast::val_int()
null_value= 1;
return 0;
}
return ltime.hour * 10000L + ltime.minute * 100 + ltime.second;
return (ltime.neg ? -1 : 1) *
(longlong) ((ltime.hour)*10000 + ltime.minute*100 + ltime.second);
}
String *Item_time_typecast::val_str(String *str)
......
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