diff options
author | unknown <tnurnberg@salvation.intern.azundris.com> | 2006-08-10 15:37:24 +0200 |
---|---|---|
committer | unknown <tnurnberg@salvation.intern.azundris.com> | 2006-08-10 15:37:24 +0200 |
commit | fa1641e1f3c68e240d79099ae9a3a1346997e4d4 (patch) | |
tree | 50f526c96f9941c2dafbea672fcf826a762e03d1 /sql/item_timefunc.cc | |
parent | d2aa274ac96c8fb98611c9bdd0469e3e8fb32a9f (diff) | |
download | mariadb-git-fa1641e1f3c68e240d79099ae9a3a1346997e4d4.tar.gz |
Bug#19844: time_format in Union truncates values
time_format() claimed %H and %k would return at most two digits
(hours 0-23), but this coincided neither with actual behaviour
nor with docs. this is not visible in simple queries; forcing
a temp-table is probably the easiest way to see this. adjusted
the return-length appropriately; the alternative would be to
adjust the docs to say that behaviour for > 99 hours is undefined.
---
Bug#19844: time_format in Union truncates values
time_format() claimed %H and %k would return at most two digits
(hours 0-23), but this coincided neither with actual behaviour
nor with docs. this is not visible in simple queries; forcing
a temp-table is probably the easiest way to see this. adjusted
the return-length appropriately; the alternative would be to
adjust the docs to say that behaviour for > 99 hours is undefined.
mysql-test/r/func_time.result:
Bug#19844: time_format in Union truncates values
show time_format() handles %H and %k correctly four > 99 hours
mysql-test/t/func_time.test:
Bug#19844: time_format in Union truncates values
show time_format() handles %H and %k correctly four > 99 hours
sql/item_timefunc.cc:
Bug#19844: time_format in Union truncates values
unbreak promises we make about field-length of %H and %k in
time_format() so they coincide with the actual range rather
than just 0..23. the docs say we must operate outside that
range, so we'd better do it right.
---
Bug#19844: time_format in Union truncates values
unbreak promises we make about field-length of %H and %k in
time_format() so they coincide with the actual range rather
than just 0..23. the docs say we must operate outside that
range, so we'd better do it right.
One digit values are padded to two digits with %H, "longer"
values are handled correctly up to seven digits including
any sign.
(clarified comments as per jimw's suggestion.)
Diffstat (limited to 'sql/item_timefunc.cc')
-rw-r--r-- | sql/item_timefunc.cc | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index 44d9b422263..febc92e34f6 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -1600,14 +1600,12 @@ uint Item_func_date_format::format_length(const String *format) case 'u': /* week (00..52), where week starts with Monday */ case 'V': /* week 1..53 used with 'x' */ case 'v': /* week 1..53 used with 'x', where week starts with Monday */ - case 'H': /* hour (00..23) */ case 'y': /* year, numeric, 2 digits */ case 'm': /* month, numeric */ case 'd': /* day (of the month), numeric */ case 'h': /* hour (01..12) */ case 'I': /* --||-- */ case 'i': /* minutes, numeric */ - case 'k': /* hour ( 0..23) */ case 'l': /* hour ( 1..12) */ case 'p': /* locale's AM or PM */ case 'S': /* second (00..61) */ @@ -1616,6 +1614,10 @@ uint Item_func_date_format::format_length(const String *format) case 'e': /* day (0..31) */ size += 2; break; + case 'k': /* hour ( 0..23) */ + case 'H': /* hour (00..23; value > 23 OK, padding always 2-digit) */ + size += 7; /* docs allow > 23, range depends on sizeof(unsigned int) */ + break; case 'r': /* time, 12-hour (hh:mm:ss [AP]M) */ size += 11; break; |