mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-30 04:26:45 +03:00 
			
		
		
		
	Updated MySQL time handling code to react correctly on UTC leap second additions. MySQL functions that return the OS current time, like e.g. CURDATE(), NOW() etc will return :59:59 instead of :59:60 or 59:61. As a result the reader will receive :59:59 for 2 or 3 consecutive seconds during the leap second. This fix will not affect the values returned by UNIX_TIMESTAMP() for leap seconds. But note that when converting the value returned by UNIX_TIMESTAMP() to broken down time the correction of leap seconds will still be applied. Note that this fix will make a difference *only* if the OS is specially configured to return leap seconds from the OS time calls or when using a MySQL time zone defintion that has leap seconds. Even after this change date/time literals (or other broken down time representations) with leap seconds (ending on :59:60 or 59:61) will still be considered illegal and discarded by the server with an error or a warning depending on the sql mode. Added a test case to demonstrate the effect of the fix. mysql-test/r/timezone3.result: Bug #39920: test case mysql-test/std_data/Moscow_leap: Bug #39920: updated the Moscow time zone to Dr. Olson's tzdata 2008i to accomodate for the 2008 leap second mysql-test/t/timezone3.test: Bug #39920: test case sql/tztime.cc: Bug #39920: adjust leap seconds (:60 or :61) to :59 sql/tztime.h: Bug #39920: adjust leap seconds (:60 or :61) to :59
		
			
				
	
	
		
			50 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| drop table if exists t1;
 | |
| create table t1 (i int, c varchar(20));
 | |
| insert into t1 values
 | |
| (unix_timestamp("2004-01-01 00:00:00"), "2004-01-01 00:00:00");
 | |
| insert into t1 values
 | |
| (unix_timestamp("2004-03-28 01:59:59"), "2004-03-28 01:59:59"),
 | |
| (unix_timestamp("2004-03-28 02:30:00"), "2004-03-28 02:30:00"),
 | |
| (unix_timestamp("2004-03-28 03:00:00"), "2004-03-28 03:00:00");
 | |
| insert into t1 values
 | |
| (unix_timestamp('2004-05-01 00:00:00'),'2004-05-01 00:00:00');
 | |
| insert into t1 values
 | |
| (unix_timestamp('2004-10-31 01:00:00'),'2004-10-31 01:00:00'),
 | |
| (unix_timestamp('2004-10-31 02:00:00'),'2004-10-31 02:00:00'),
 | |
| (unix_timestamp('2004-10-31 02:59:59'),'2004-10-31 02:59:59'),
 | |
| (unix_timestamp('2004-10-31 04:00:00'),'2004-10-31 04:00:00'),
 | |
| (unix_timestamp('2004-10-31 02:59:59'),'2004-10-31 02:59:59');
 | |
| 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
 | |
| 1080428421	2004-03-28 01:59:59	2004-03-28 01:59:59
 | |
| 1080428422	2004-03-28 03:00:00	2004-03-28 02:30:00
 | |
| 1080428422	2004-03-28 03:00:00	2004-03-28 03:00:00
 | |
| 1083355222	2004-05-01 00:00:00	2004-05-01 00:00:00
 | |
| 1099170022	2004-10-31 01:00:00	2004-10-31 01:00:00
 | |
| 1099177222	2004-10-31 02:00:00	2004-10-31 02:00:00
 | |
| 1099180821	2004-10-31 02:59:59	2004-10-31 02:59:59
 | |
| 1099184422	2004-10-31 04:00:00	2004-10-31 04:00:00
 | |
| 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);
 | |
| select * from t1;
 | |
| 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
 |