From bcb61e6860ae71cbc7e07cc5c956da1542bf5db8 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 4 May 2006 19:31:10 +0300 Subject: [PATCH 1/3] Fix for Bug#11326. mysql-test/r/date_formats.result: Added test cases for Bug#11326 mysql-test/t/date_formats.test: Added test cases for Bug#11326 --- mysql-test/r/date_formats.result | 18 ++++++++++++++++++ mysql-test/t/date_formats.test | 11 +++++++++++ sql/item_timefunc.cc | 3 ++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/date_formats.result b/mysql-test/r/date_formats.result index 014eeed27e7..edfe17b0cb4 100644 --- a/mysql-test/r/date_formats.result +++ b/mysql-test/r/date_formats.result @@ -473,3 +473,21 @@ NULL select str_to_date( 1, IF(1=1,NULL,NULL) ); str_to_date( 1, IF(1=1,NULL,NULL) ) NULL +SELECT TIME_FORMAT("24:00:00", '%r'); +TIME_FORMAT("24:00:00", '%r') +12:00:00 AM +SELECT TIME_FORMAT("00:00:00", '%r'); +TIME_FORMAT("00:00:00", '%r') +12:00:00 AM +SELECT TIME_FORMAT("12:00:00", '%r'); +TIME_FORMAT("12:00:00", '%r') +12:00:00 PM +SELECT TIME_FORMAT("15:00:00", '%r'); +TIME_FORMAT("15:00:00", '%r') +03:00:00 PM +SELECT TIME_FORMAT("01:00:00", '%r'); +TIME_FORMAT("01:00:00", '%r') +01:00:00 AM +SELECT TIME_FORMAT("25:00:00", '%r'); +TIME_FORMAT("25:00:00", '%r') +01:00:00 AM diff --git a/mysql-test/t/date_formats.test b/mysql-test/t/date_formats.test index 78b4482a94a..143cddbc4fe 100644 --- a/mysql-test/t/date_formats.test +++ b/mysql-test/t/date_formats.test @@ -276,3 +276,14 @@ select str_to_date( 1, NULL ); select str_to_date( NULL, 1 ); select str_to_date( 1, IF(1=1,NULL,NULL) ); # End of 4.1 tests + +# +# Bug#11326 +# + +SELECT TIME_FORMAT("24:00:00", '%r'); +SELECT TIME_FORMAT("00:00:00", '%r'); +SELECT TIME_FORMAT("12:00:00", '%r'); +SELECT TIME_FORMAT("15:00:00", '%r'); +SELECT TIME_FORMAT("01:00:00", '%r'); +SELECT TIME_FORMAT("25:00:00", '%r'); diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index f3d6858755c..f26b5aae37a 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -620,7 +620,8 @@ bool make_date_time(DATE_TIME_FORMAT *format, TIME *l_time, case 'r': length= my_sprintf(intbuff, (intbuff, - (l_time->hour < 12) ? "%02d:%02d:%02d AM" : "%02d:%02d:%02d PM", + ((l_time->hour % 24) < 12) ? + "%02d:%02d:%02d AM" : "%02d:%02d:%02d PM", (l_time->hour+11)%12+1, l_time->minute, l_time->second)); From 02dcc76e3754887cb838cdfd8e1b11e8bd21094d Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 4 May 2006 20:19:37 +0300 Subject: [PATCH 2/3] Fixed Bug#11324: TIME_FORMAT using "%l:%i" returns 36:00 with 24:00:00 in TIME column mysql-test/r/date_formats.result: Added test case for Bug#11324, "TIME_FORMAT using "%l:%i" returns 36:00 with 24:00:00 in TIME column" mysql-test/t/date_formats.test: Added test case for Bug#11324, "TIME_FORMAT using "%l:%i" returns 36:00 with 24:00:00 in TIME column" --- mysql-test/r/date_formats.result | 18 ++++++++++++++++++ mysql-test/t/date_formats.test | 11 +++++++++++ sql/item_timefunc.cc | 2 +- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/date_formats.result b/mysql-test/r/date_formats.result index edfe17b0cb4..24abdfcf148 100644 --- a/mysql-test/r/date_formats.result +++ b/mysql-test/r/date_formats.result @@ -491,3 +491,21 @@ TIME_FORMAT("01:00:00", '%r') SELECT TIME_FORMAT("25:00:00", '%r'); TIME_FORMAT("25:00:00", '%r') 01:00:00 AM +SELECT TIME_FORMAT("00:00:00", '%l %p'); +TIME_FORMAT("00:00:00", '%l %p') +12 AM +SELECT TIME_FORMAT("01:00:00", '%l %p'); +TIME_FORMAT("01:00:00", '%l %p') +1 AM +SELECT TIME_FORMAT("12:00:00", '%l %p'); +TIME_FORMAT("12:00:00", '%l %p') +12 PM +SELECT TIME_FORMAT("23:00:00", '%l %p'); +TIME_FORMAT("23:00:00", '%l %p') +11 PM +SELECT TIME_FORMAT("24:00:00", '%l %p'); +TIME_FORMAT("24:00:00", '%l %p') +12 AM +SELECT TIME_FORMAT("25:00:00", '%l %p'); +TIME_FORMAT("25:00:00", '%l %p') +1 AM diff --git a/mysql-test/t/date_formats.test b/mysql-test/t/date_formats.test index 143cddbc4fe..f3d507e69e6 100644 --- a/mysql-test/t/date_formats.test +++ b/mysql-test/t/date_formats.test @@ -287,3 +287,14 @@ SELECT TIME_FORMAT("12:00:00", '%r'); SELECT TIME_FORMAT("15:00:00", '%r'); SELECT TIME_FORMAT("01:00:00", '%r'); SELECT TIME_FORMAT("25:00:00", '%r'); + +# +# Bug#11324 +# + +SELECT TIME_FORMAT("00:00:00", '%l %p'); +SELECT TIME_FORMAT("01:00:00", '%l %p'); +SELECT TIME_FORMAT("12:00:00", '%l %p'); +SELECT TIME_FORMAT("23:00:00", '%l %p'); +SELECT TIME_FORMAT("24:00:00", '%l %p'); +SELECT TIME_FORMAT("25:00:00", '%l %p'); diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index f26b5aae37a..670fb94fc2c 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -609,7 +609,7 @@ bool make_date_time(DATE_TIME_FORMAT *format, TIME *l_time, break; case 'l': days_i= l_time->hour/24; - hours_i= (l_time->hour%24 + 11)%12+1 + 24*days_i; + hours_i= (l_time->hour%24 + 11)%12+1; length= int10_to_str(hours_i, intbuff, 10) - intbuff; str->append_with_prefill(intbuff, length, 1, '0'); break; From 16022e635c2ce712f8003ca7ee109bd3c4539d7f Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 5 May 2006 00:27:12 +0300 Subject: [PATCH 3/3] Added more comments to the test cases. --- mysql-test/t/date_formats.test | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mysql-test/t/date_formats.test b/mysql-test/t/date_formats.test index 94a192e12f2..c3dd68abb86 100644 --- a/mysql-test/t/date_formats.test +++ b/mysql-test/t/date_formats.test @@ -280,6 +280,10 @@ select str_to_date( 1, IF(1=1,NULL,NULL) ); # # Bug#11326 +# TIME_FORMAT using "%r" returns wrong hour using 24:00:00 in TIME column +# +# This tests that 24:00:00 does not return PM, when it should be AM. +# Some other values are being tested same time. # SELECT TIME_FORMAT("24:00:00", '%r'); @@ -291,6 +295,10 @@ SELECT TIME_FORMAT("25:00:00", '%r'); # # Bug#11324 +# TIME_FORMAT using "%l:%i" returns 36:00 with 24:00:00 in TIME column +# +# This tests that 24:00:00 does not change to "36:00 AM". Testing +# some other values same time. # SELECT TIME_FORMAT("00:00:00", '%l %p');