mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
merged bug 39920 to 5.0-bugteam
This commit is contained in:
commit
7114fde7c0
5 changed files with 45 additions and 0 deletions
|
@ -17,6 +17,9 @@ insert into t1 values
|
|||
insert into t1 values
|
||||
(unix_timestamp('1981-07-01 03:59:59'),'1981-07-01 03:59:59'),
|
||||
(unix_timestamp('1981-07-01 04:00:00'),'1981-07-01 04:00:00');
|
||||
insert into t1 values
|
||||
(unix_timestamp('2009-01-01 02:59:59'),'2009-01-01 02:59:59'),
|
||||
(unix_timestamp('2009-01-01 03:00:00'),'2009-01-01 03:00:00');
|
||||
select i, from_unixtime(i), c from t1;
|
||||
i from_unixtime(i) c
|
||||
1072904422 2004-01-01 00:00:00 2004-01-01 00:00:00
|
||||
|
@ -31,6 +34,8 @@ i from_unixtime(i) c
|
|||
1099180821 2004-10-31 02:59:59 2004-10-31 02:59:59
|
||||
362793608 1981-07-01 03:59:59 1981-07-01 03:59:59
|
||||
362793610 1981-07-01 04:00:00 1981-07-01 04:00:00
|
||||
1230768022 2009-01-01 02:59:59 2009-01-01 02:59:59
|
||||
1230768024 2009-01-01 03:00:00 2009-01-01 03:00:00
|
||||
drop table t1;
|
||||
create table t1 (ts timestamp);
|
||||
insert into t1 values (19730101235900), (20040101235900);
|
||||
|
@ -39,3 +44,6 @@ ts
|
|||
1973-01-01 23:59:00
|
||||
2004-01-01 23:59:00
|
||||
drop table t1;
|
||||
SELECT FROM_UNIXTIME(1230768022), FROM_UNIXTIME(1230768023), FROM_UNIXTIME(1230768024);
|
||||
FROM_UNIXTIME(1230768022) FROM_UNIXTIME(1230768023) FROM_UNIXTIME(1230768024)
|
||||
2009-01-01 02:59:59 2009-01-01 02:59:59 2009-01-01 03:00:00
|
||||
|
|
Binary file not shown.
|
@ -45,6 +45,10 @@ insert into t1 values
|
|||
(unix_timestamp('1981-07-01 03:59:59'),'1981-07-01 03:59:59'),
|
||||
(unix_timestamp('1981-07-01 04:00:00'),'1981-07-01 04:00:00');
|
||||
|
||||
insert into t1 values
|
||||
(unix_timestamp('2009-01-01 02:59:59'),'2009-01-01 02:59:59'),
|
||||
(unix_timestamp('2009-01-01 03:00:00'),'2009-01-01 03:00:00');
|
||||
|
||||
select i, from_unixtime(i), c from t1;
|
||||
drop table t1;
|
||||
|
||||
|
@ -58,4 +62,12 @@ insert into t1 values (19730101235900), (20040101235900);
|
|||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Test Bug #39920: MySQL cannot deal with Leap Second expression in string
|
||||
# literal
|
||||
#
|
||||
|
||||
# 2009-01-01 02:59:59, 2009-01-01 02:59:60 and 2009-01-01 03:00:00
|
||||
SELECT FROM_UNIXTIME(1230768022), FROM_UNIXTIME(1230768023), FROM_UNIXTIME(1230768024);
|
||||
|
||||
# End of 4.1 tests
|
||||
|
|
|
@ -1073,6 +1073,7 @@ Time_zone_system::gmt_sec_to_TIME(MYSQL_TIME *tmp, my_time_t t) const
|
|||
localtime_r(&tmp_t, &tmp_tm);
|
||||
localtime_to_TIME(tmp, &tmp_tm);
|
||||
tmp->time_type= MYSQL_TIMESTAMP_DATETIME;
|
||||
adjust_leap_second(tmp);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1157,6 +1158,7 @@ Time_zone_utc::gmt_sec_to_TIME(MYSQL_TIME *tmp, my_time_t t) const
|
|||
gmtime_r(&tmp_t, &tmp_tm);
|
||||
localtime_to_TIME(tmp, &tmp_tm);
|
||||
tmp->time_type= MYSQL_TIMESTAMP_DATETIME;
|
||||
adjust_leap_second(tmp);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1260,6 +1262,7 @@ void
|
|||
Time_zone_db::gmt_sec_to_TIME(MYSQL_TIME *tmp, my_time_t t) const
|
||||
{
|
||||
::gmt_sec_to_TIME(tmp, t, tz_info);
|
||||
adjust_leap_second(tmp);
|
||||
}
|
||||
|
||||
|
||||
|
@ -2373,6 +2376,25 @@ Time_zone *my_tz_find_with_opening_tz_tables(THD *thd, const String *name)
|
|||
DBUG_RETURN(tz);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Convert leap seconds into non-leap
|
||||
|
||||
This function will convert the leap seconds added by the OS to
|
||||
non-leap seconds, e.g. 23:59:59, 23:59:60 -> 23:59:59, 00:00:01 ...
|
||||
This check is not checking for years on purpose : although it's not a
|
||||
complete check this way it doesn't require looking (and having installed)
|
||||
the leap seconds table.
|
||||
|
||||
@param[in,out] broken down time structure as filled in by the OS
|
||||
*/
|
||||
|
||||
void Time_zone::adjust_leap_second(MYSQL_TIME *t)
|
||||
{
|
||||
if (t->second == 60 || t->second == 61)
|
||||
t->second= 59;
|
||||
}
|
||||
|
||||
#endif /* !defined(TESTTIME) && !defined(TZINFO2SQL) */
|
||||
|
||||
|
||||
|
|
|
@ -55,6 +55,9 @@ public:
|
|||
allocated on MEM_ROOT and should not require destruction.
|
||||
*/
|
||||
virtual ~Time_zone() {};
|
||||
|
||||
protected:
|
||||
static inline void adjust_leap_second(MYSQL_TIME *t);
|
||||
};
|
||||
|
||||
extern Time_zone * my_tz_UTC;
|
||||
|
|
Loading…
Reference in a new issue