Commit 8f8183ee authored by Georgi Kodinov's avatar Georgi Kodinov
Browse files

merged bug 39920 and 5.1-main to 5.1-bugteam

parents 25e64167 f2a317b6
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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
+1.64 KiB (2.61 KiB)

File changed.

No diff preview for this file type.

+12 −0
Original line number Diff line number Diff line
@@ -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
+21 −0
Original line number Diff line number Diff line
@@ -1072,6 +1072,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);
}


@@ -1156,6 +1157,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);
}


@@ -1259,6 +1261,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);
}


@@ -2279,6 +2282,24 @@ my_tz_find(THD *thd, const String *name)
}


/**
  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) */


+3 −0
Original line number Diff line number Diff line
@@ -55,6 +55,9 @@ class Time_zone: public Sql_alloc
    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;