mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Merge 5.3->5.5
pending merges: Alexander Barkov 2013-12-02 MDEV-4857 Wrong result of HOUR('1 00:00:00')
This commit is contained in:
@@ -365,7 +365,7 @@ extract(DAY_MINUTE FROM "02 10:11:12")
|
|||||||
21011
|
21011
|
||||||
select extract(DAY_SECOND FROM "225 10:11:12");
|
select extract(DAY_SECOND FROM "225 10:11:12");
|
||||||
extract(DAY_SECOND FROM "225 10:11:12")
|
extract(DAY_SECOND FROM "225 10:11:12")
|
||||||
8385959
|
34225959
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1292 Truncated incorrect time value: '225 10:11:12'
|
Warning 1292 Truncated incorrect time value: '225 10:11:12'
|
||||||
select extract(HOUR FROM "1999-01-02 10:11:12");
|
select extract(HOUR FROM "1999-01-02 10:11:12");
|
||||||
@@ -1025,7 +1025,7 @@ Note 1105 Cast to unsigned converted negative integer to it's positive complemen
|
|||||||
Warning 1292 Truncated incorrect time value: '18446744073709551615:00:00'
|
Warning 1292 Truncated incorrect time value: '18446744073709551615:00:00'
|
||||||
SELECT EXTRACT(HOUR FROM '100000:02:03');
|
SELECT EXTRACT(HOUR FROM '100000:02:03');
|
||||||
EXTRACT(HOUR FROM '100000:02:03')
|
EXTRACT(HOUR FROM '100000:02:03')
|
||||||
838
|
22
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1292 Truncated incorrect time value: '100000:02:03'
|
Warning 1292 Truncated incorrect time value: '100000:02:03'
|
||||||
CREATE TABLE t1(f1 TIME);
|
CREATE TABLE t1(f1 TIME);
|
||||||
@@ -2347,3 +2347,30 @@ DROP TABLE t1;
|
|||||||
SELECT MAKETIME(0, 0, -0.1);
|
SELECT MAKETIME(0, 0, -0.1);
|
||||||
MAKETIME(0, 0, -0.1)
|
MAKETIME(0, 0, -0.1)
|
||||||
NULL
|
NULL
|
||||||
|
#
|
||||||
|
# MDEV-4857 Wrong result of HOUR('1 00:00:00')
|
||||||
|
#
|
||||||
|
SELECT HOUR('1 02:00:00'), HOUR('26:00:00');
|
||||||
|
HOUR('1 02:00:00') HOUR('26:00:00')
|
||||||
|
26 26
|
||||||
|
SELECT HOUR(TIME'1 02:00:00'), HOUR(TIME'26:00:00');
|
||||||
|
HOUR(TIME'1 02:00:00') HOUR(TIME'26:00:00')
|
||||||
|
26 26
|
||||||
|
SELECT HOUR(TIME('1 02:00:00')), HOUR(TIME('26:00:00'));
|
||||||
|
HOUR(TIME('1 02:00:00')) HOUR(TIME('26:00:00'))
|
||||||
|
26 26
|
||||||
|
SELECT DAY(TIME('1 02:00:00')), DAY(TIME('26:00:00'));
|
||||||
|
DAY(TIME('1 02:00:00')) DAY(TIME('26:00:00'))
|
||||||
|
0 0
|
||||||
|
SELECT EXTRACT(HOUR FROM '1 02:00:00'), EXTRACT(HOUR FROM '26:00:00');
|
||||||
|
EXTRACT(HOUR FROM '1 02:00:00') EXTRACT(HOUR FROM '26:00:00')
|
||||||
|
2 2
|
||||||
|
SELECT EXTRACT(HOUR FROM TIME'1 02:00:00'), EXTRACT(HOUR FROM TIME'26:00:00');
|
||||||
|
EXTRACT(HOUR FROM TIME'1 02:00:00') EXTRACT(HOUR FROM TIME'26:00:00')
|
||||||
|
2 2
|
||||||
|
SELECT EXTRACT(HOUR FROM TIME('1 02:00:00')), EXTRACT(HOUR FROM TIME('26:00:00'));
|
||||||
|
EXTRACT(HOUR FROM TIME('1 02:00:00')) EXTRACT(HOUR FROM TIME('26:00:00'))
|
||||||
|
2 2
|
||||||
|
SELECT EXTRACT(DAY FROM TIME('1 02:00:00')), EXTRACT(DAY FROM TIME('26:00:00'));
|
||||||
|
EXTRACT(DAY FROM TIME('1 02:00:00')) EXTRACT(DAY FROM TIME('26:00:00'))
|
||||||
|
1 1
|
||||||
|
@@ -1435,3 +1435,15 @@ DROP TABLE t1;
|
|||||||
--echo #
|
--echo #
|
||||||
SELECT MAKETIME(0, 0, -0.1);
|
SELECT MAKETIME(0, 0, -0.1);
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-4857 Wrong result of HOUR('1 00:00:00')
|
||||||
|
--echo #
|
||||||
|
SELECT HOUR('1 02:00:00'), HOUR('26:00:00');
|
||||||
|
SELECT HOUR(TIME'1 02:00:00'), HOUR(TIME'26:00:00');
|
||||||
|
SELECT HOUR(TIME('1 02:00:00')), HOUR(TIME('26:00:00'));
|
||||||
|
SELECT DAY(TIME('1 02:00:00')), DAY(TIME('26:00:00'));
|
||||||
|
|
||||||
|
SELECT EXTRACT(HOUR FROM '1 02:00:00'), EXTRACT(HOUR FROM '26:00:00');
|
||||||
|
SELECT EXTRACT(HOUR FROM TIME'1 02:00:00'), EXTRACT(HOUR FROM TIME'26:00:00');
|
||||||
|
SELECT EXTRACT(HOUR FROM TIME('1 02:00:00')), EXTRACT(HOUR FROM TIME('26:00:00'));
|
||||||
|
SELECT EXTRACT(DAY FROM TIME('1 02:00:00')), EXTRACT(DAY FROM TIME('26:00:00'));
|
||||||
|
@@ -645,8 +645,8 @@ fractional:
|
|||||||
|
|
||||||
l_time->year= 0; /* For protocol::store_time */
|
l_time->year= 0; /* For protocol::store_time */
|
||||||
l_time->month= 0;
|
l_time->month= 0;
|
||||||
l_time->day= date[0];
|
l_time->day= 0;
|
||||||
l_time->hour= date[1];
|
l_time->hour= date[1] + date[0] * 24; /* Mix days and hours */
|
||||||
l_time->minute= date[2];
|
l_time->minute= date[2];
|
||||||
l_time->second= date[3];
|
l_time->second= date[3];
|
||||||
l_time->second_part= date[4];
|
l_time->second_part= date[4];
|
||||||
|
@@ -159,7 +159,9 @@ public:
|
|||||||
Item **item, uint nitems);
|
Item **item, uint nitems);
|
||||||
inline bool get_arg0_time(MYSQL_TIME *ltime)
|
inline bool get_arg0_time(MYSQL_TIME *ltime)
|
||||||
{
|
{
|
||||||
return (null_value=args[0]->get_time(ltime));
|
null_value= args[0]->get_time(ltime);
|
||||||
|
DBUG_ASSERT(ltime->time_type != MYSQL_TIMESTAMP_TIME || ltime->day == 0);
|
||||||
|
return null_value;
|
||||||
}
|
}
|
||||||
bool is_null() {
|
bool is_null() {
|
||||||
update_null_value();
|
update_null_value();
|
||||||
|
@@ -2142,6 +2142,10 @@ longlong Item_extract::val_int()
|
|||||||
return 0;
|
return 0;
|
||||||
neg= ltime.neg ? -1 : 1;
|
neg= ltime.neg ? -1 : 1;
|
||||||
|
|
||||||
|
DBUG_ASSERT(ltime.time_type != MYSQL_TIMESTAMP_TIME || ltime.day == 0);
|
||||||
|
if (ltime.time_type == MYSQL_TIMESTAMP_TIME)
|
||||||
|
time_to_daytime_interval(<ime);
|
||||||
|
|
||||||
switch (int_type) {
|
switch (int_type) {
|
||||||
case INTERVAL_YEAR: return ltime.year;
|
case INTERVAL_YEAR: return ltime.year;
|
||||||
case INTERVAL_YEAR_MONTH: return ltime.year*100L+ltime.month;
|
case INTERVAL_YEAR_MONTH: return ltime.year*100L+ltime.month;
|
||||||
|
@@ -1085,3 +1085,22 @@ int my_time_compare(MYSQL_TIME *a, MYSQL_TIME *b)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Convert a TIME value to DAY-TIME interval, e.g. for extraction:
|
||||||
|
EXTRACT(DAY FROM x), EXTRACT(HOUR FROM x), etc.
|
||||||
|
Moves full days from ltime->hour to ltime->day.
|
||||||
|
Note, time_type is set to MYSQL_TIMESTAMP_NONE, to make sure that
|
||||||
|
the structure is not used for anything else other than extraction:
|
||||||
|
non-extraction TIME functions expect zero day value!
|
||||||
|
*/
|
||||||
|
void time_to_daytime_interval(MYSQL_TIME *ltime)
|
||||||
|
{
|
||||||
|
DBUG_ASSERT(ltime->time_type == MYSQL_TIMESTAMP_TIME);
|
||||||
|
DBUG_ASSERT(ltime->year == 0);
|
||||||
|
DBUG_ASSERT(ltime->month == 0);
|
||||||
|
DBUG_ASSERT(ltime->day == 0);
|
||||||
|
ltime->day= ltime->hour / 24;
|
||||||
|
ltime->hour%= 24;
|
||||||
|
ltime->time_type= MYSQL_TIMESTAMP_NONE;
|
||||||
|
}
|
||||||
|
@@ -33,6 +33,7 @@ typedef struct st_known_date_time_format KNOWN_DATE_TIME_FORMAT;
|
|||||||
|
|
||||||
ulong convert_period_to_month(ulong period);
|
ulong convert_period_to_month(ulong period);
|
||||||
ulong convert_month_to_period(ulong month);
|
ulong convert_month_to_period(ulong month);
|
||||||
|
void time_to_daytime_interval(MYSQL_TIME *l_time);
|
||||||
bool get_date_from_daynr(long daynr,uint *year, uint *month, uint *day);
|
bool get_date_from_daynr(long daynr,uint *year, uint *month, uint *day);
|
||||||
my_time_t TIME_to_timestamp(THD *thd, const MYSQL_TIME *t, uint *error_code);
|
my_time_t TIME_to_timestamp(THD *thd, const MYSQL_TIME *t, uint *error_code);
|
||||||
bool str_to_time_with_warn(CHARSET_INFO *cs, const char *str, uint length,
|
bool str_to_time_with_warn(CHARSET_INFO *cs, const char *str, uint length,
|
||||||
|
Reference in New Issue
Block a user