Skip to content

Commit 935a163

Browse files
committed
MDEV-17244 MAKETIME(900,0,0.111) returns a wrong result
1 parent 0c6455a commit 935a163

File tree

3 files changed

+145
-3
lines changed

3 files changed

+145
-3
lines changed

mysql-test/r/func_time.result

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2706,5 +2706,118 @@ Warning 1292 Truncated incorrect time value: '9223372036854775807:00:00'
27062706
Warning 1292 Truncated incorrect time value: '-9223372036854775808:00:00'
27072707
DROP TABLE t1;
27082708
#
2709+
# MDEV-17244 MAKETIME(900,0,0.111) returns a wrong result
2710+
#
2711+
SELECT MAKETIME(900,0,0);
2712+
MAKETIME(900,0,0)
2713+
838:59:59
2714+
Warnings:
2715+
Warning 1292 Truncated incorrect time value: '900:00:00'
2716+
SELECT MAKETIME(900,0,0.1);
2717+
MAKETIME(900,0,0.1)
2718+
838:59:59.9
2719+
Warnings:
2720+
Warning 1292 Truncated incorrect time value: '900:00:00'
2721+
SELECT MAKETIME(900,0,0.11);
2722+
MAKETIME(900,0,0.11)
2723+
838:59:59.99
2724+
Warnings:
2725+
Warning 1292 Truncated incorrect time value: '900:00:00'
2726+
SELECT MAKETIME(900,0,0.111);
2727+
MAKETIME(900,0,0.111)
2728+
838:59:59.999
2729+
Warnings:
2730+
Warning 1292 Truncated incorrect time value: '900:00:00'
2731+
SELECT MAKETIME(900,0,0.1111);
2732+
MAKETIME(900,0,0.1111)
2733+
838:59:59.9999
2734+
Warnings:
2735+
Warning 1292 Truncated incorrect time value: '900:00:00'
2736+
SELECT MAKETIME(900,0,0.11111);
2737+
MAKETIME(900,0,0.11111)
2738+
838:59:59.99999
2739+
Warnings:
2740+
Warning 1292 Truncated incorrect time value: '900:00:00'
2741+
SELECT MAKETIME(900,0,0.111111);
2742+
MAKETIME(900,0,0.111111)
2743+
838:59:59.999999
2744+
Warnings:
2745+
Warning 1292 Truncated incorrect time value: '900:00:00'
2746+
SELECT MAKETIME(900,0,0.1111111);
2747+
MAKETIME(900,0,0.1111111)
2748+
838:59:59.999999
2749+
Warnings:
2750+
Warning 1292 Truncated incorrect time value: '900:00:00'
2751+
SELECT MAKETIME(900,0,0.11111111);
2752+
MAKETIME(900,0,0.11111111)
2753+
838:59:59.999999
2754+
Warnings:
2755+
Warning 1292 Truncated incorrect time value: '900:00:00'
2756+
SELECT MAKETIME(900,0,0.111111111);
2757+
MAKETIME(900,0,0.111111111)
2758+
838:59:59.999999
2759+
Warnings:
2760+
Warning 1292 Truncated incorrect time value: '900:00:00'
2761+
SELECT MAKETIME(900,0,EXP(1));
2762+
MAKETIME(900,0,EXP(1))
2763+
838:59:59.999999
2764+
Warnings:
2765+
Warning 1292 Truncated incorrect time value: '900:00:02'
2766+
SELECT MAKETIME(-900,0,0);
2767+
MAKETIME(-900,0,0)
2768+
-838:59:59
2769+
Warnings:
2770+
Warning 1292 Truncated incorrect time value: '-900:00:00'
2771+
SELECT MAKETIME(-900,0,0.1);
2772+
MAKETIME(-900,0,0.1)
2773+
-838:59:59.9
2774+
Warnings:
2775+
Warning 1292 Truncated incorrect time value: '-900:00:00'
2776+
SELECT MAKETIME(-900,0,0.11);
2777+
MAKETIME(-900,0,0.11)
2778+
-838:59:59.99
2779+
Warnings:
2780+
Warning 1292 Truncated incorrect time value: '-900:00:00'
2781+
SELECT MAKETIME(-900,0,0.111);
2782+
MAKETIME(-900,0,0.111)
2783+
-838:59:59.999
2784+
Warnings:
2785+
Warning 1292 Truncated incorrect time value: '-900:00:00'
2786+
SELECT MAKETIME(-900,0,0.1111);
2787+
MAKETIME(-900,0,0.1111)
2788+
-838:59:59.9999
2789+
Warnings:
2790+
Warning 1292 Truncated incorrect time value: '-900:00:00'
2791+
SELECT MAKETIME(-900,0,0.11111);
2792+
MAKETIME(-900,0,0.11111)
2793+
-838:59:59.99999
2794+
Warnings:
2795+
Warning 1292 Truncated incorrect time value: '-900:00:00'
2796+
SELECT MAKETIME(-900,0,0.111111);
2797+
MAKETIME(-900,0,0.111111)
2798+
-838:59:59.999999
2799+
Warnings:
2800+
Warning 1292 Truncated incorrect time value: '-900:00:00'
2801+
SELECT MAKETIME(-900,0,0.1111111);
2802+
MAKETIME(-900,0,0.1111111)
2803+
-838:59:59.999999
2804+
Warnings:
2805+
Warning 1292 Truncated incorrect time value: '-900:00:00'
2806+
SELECT MAKETIME(-900,0,0.11111111);
2807+
MAKETIME(-900,0,0.11111111)
2808+
-838:59:59.999999
2809+
Warnings:
2810+
Warning 1292 Truncated incorrect time value: '-900:00:00'
2811+
SELECT MAKETIME(-900,0,0.111111111);
2812+
MAKETIME(-900,0,0.111111111)
2813+
-838:59:59.999999
2814+
Warnings:
2815+
Warning 1292 Truncated incorrect time value: '-900:00:00'
2816+
SELECT MAKETIME(-900,0,EXP(1));
2817+
MAKETIME(-900,0,EXP(1))
2818+
-838:59:59.999999
2819+
Warnings:
2820+
Warning 1292 Truncated incorrect time value: '-900:00:02'
2821+
#
27092822
# End of 5.5 tests
27102823
#

mysql-test/t/func_time.test

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1654,6 +1654,34 @@ INSERT INTO t1 VALUES (1e30),(-1e30);
16541654
SELECT MAKETIME(a,0,0) FROM t1;
16551655
DROP TABLE t1;
16561656

1657+
--echo #
1658+
--echo # MDEV-17244 MAKETIME(900,0,0.111) returns a wrong result
1659+
--echo #
1660+
1661+
SELECT MAKETIME(900,0,0);
1662+
SELECT MAKETIME(900,0,0.1);
1663+
SELECT MAKETIME(900,0,0.11);
1664+
SELECT MAKETIME(900,0,0.111);
1665+
SELECT MAKETIME(900,0,0.1111);
1666+
SELECT MAKETIME(900,0,0.11111);
1667+
SELECT MAKETIME(900,0,0.111111);
1668+
SELECT MAKETIME(900,0,0.1111111);
1669+
SELECT MAKETIME(900,0,0.11111111);
1670+
SELECT MAKETIME(900,0,0.111111111);
1671+
SELECT MAKETIME(900,0,EXP(1));
1672+
1673+
SELECT MAKETIME(-900,0,0);
1674+
SELECT MAKETIME(-900,0,0.1);
1675+
SELECT MAKETIME(-900,0,0.11);
1676+
SELECT MAKETIME(-900,0,0.111);
1677+
SELECT MAKETIME(-900,0,0.1111);
1678+
SELECT MAKETIME(-900,0,0.11111);
1679+
SELECT MAKETIME(-900,0,0.111111);
1680+
SELECT MAKETIME(-900,0,0.1111111);
1681+
SELECT MAKETIME(-900,0,0.11111111);
1682+
SELECT MAKETIME(-900,0,0.111111111);
1683+
SELECT MAKETIME(-900,0,EXP(1));
1684+
16571685

16581686
--echo #
16591687
--echo # End of 5.5 tests

sql/item_timefunc.cc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2765,9 +2765,10 @@ bool Item_func_maketime::get_date(MYSQL_TIME *ltime, ulonglong fuzzy_date)
27652765
}
27662766
else
27672767
{
2768-
ltime->hour= TIME_MAX_HOUR;
2769-
ltime->minute= TIME_MAX_MINUTE;
2770-
ltime->second= TIME_MAX_SECOND;
2768+
// use check_time_range() to set ltime to the max value depending on dec
2769+
int unused;
2770+
ltime->hour= TIME_MAX_HOUR + 1;
2771+
check_time_range(ltime, decimals, &unused);
27712772
char buf[28];
27722773
char *ptr= longlong10_to_str(hour.value(), buf, hour.is_unsigned() ? 10 : -10);
27732774
int len = (int)(ptr - buf) + sprintf(ptr, ":%02u:%02u", (uint)minute, (uint)second);

0 commit comments

Comments
 (0)