mirror of
https://github.com/MariaDB/server.git
synced 2025-02-20 12:23:10 +01:00

This patch extends the timestamp from 2038-01-19 03:14:07.999999 to 2106-02-07 06:28:15.999999 for 64 bit hardware and OS where 'long' is 64 bits. This is true for 64 bit Linux but not for Windows. This is done by treating the 32 bit stored int as unsigned instead of signed. This is safe as MariaDB has never accepted dates before the epoch (1970). The benefit of this approach that for normal timestamp the storage is compatible with earlier version. However for tables using system versioning we before stored a timestamp with the year 2038 as the 'max timestamp', which is used to detect current values. This patch stores the new 2106 year max value as the max timestamp. This means that old tables using system versioning needs to be updated with mariadb-upgrade when moving them to 11.4. That will be done in a separate commit.
86 lines
3 KiB
Text
86 lines
3 KiB
Text
show variables like "system_time_zone";
|
|
Variable_name Value
|
|
system_time_zone MET
|
|
#
|
|
# Test unix timestamp
|
|
#
|
|
select @a:=FROM_UNIXTIME(1);
|
|
@a:=FROM_UNIXTIME(1)
|
|
1970-01-01 01:00:01
|
|
select unix_timestamp(@a);
|
|
unix_timestamp(@a)
|
|
1
|
|
#
|
|
# Test of some values, including some with daylight saving time
|
|
#
|
|
CREATE TABLE t1 (ts int);
|
|
INSERT INTO t1 (ts) VALUES (Unix_timestamp('2002-10-27 01:00'));
|
|
INSERT INTO t1 (ts) VALUES (Unix_timestamp('2002-10-27 02:00'));
|
|
INSERT INTO t1 (ts) VALUES (Unix_timestamp('2002-10-27 03:00'));
|
|
INSERT INTO t1 (ts) VALUES (Unix_timestamp('2002-10-27 02:00'));
|
|
INSERT INTO t1 (ts) VALUES (Unix_timestamp('2002-10-27 01:00'));
|
|
INSERT INTO t1 (ts) VALUES (Unix_timestamp('2002-10-27 02:00'));
|
|
INSERT INTO t1 (ts) VALUES (Unix_timestamp('2003-03-30 02:59:59'));
|
|
INSERT INTO t1 (ts) VALUES (Unix_timestamp('2003-03-30 03:00:00'));
|
|
INSERT INTO t1 (ts) VALUES (Unix_timestamp('2003-03-30 03:59:59'));
|
|
INSERT INTO t1 (ts) VALUES (Unix_timestamp('2003-03-30 04:00:01'));
|
|
SELECT ts,from_unixtime(ts) FROM t1;
|
|
ts from_unixtime(ts)
|
|
1035673200 2002-10-27 01:00:00
|
|
1035680400 2002-10-27 02:00:00
|
|
1035684000 2002-10-27 03:00:00
|
|
1035680400 2002-10-27 02:00:00
|
|
1035673200 2002-10-27 01:00:00
|
|
1035680400 2002-10-27 02:00:00
|
|
1048986000 2003-03-30 03:00:00
|
|
1048986000 2003-03-30 03:00:00
|
|
1048989599 2003-03-30 03:59:59
|
|
1048989601 2003-03-30 04:00:01
|
|
DROP TABLE t1;
|
|
#
|
|
# Test of warning for spring time-gap values for system time zone
|
|
#
|
|
CREATE TABLE t1 (ts timestamp);
|
|
INSERT INTO t1 (ts) VALUES ('2003-03-30 01:59:59'),
|
|
('2003-03-30 02:59:59'),
|
|
('2003-03-30 03:00:00');
|
|
Warnings:
|
|
Warning 1299 Invalid TIMESTAMP value in column 'ts' at row 2
|
|
DROP TABLE t1;
|
|
#
|
|
# Test for fix for Bug#2523 Check that boundary dates are processed correctly.
|
|
#
|
|
select unix_timestamp('1970-01-01 01:00:00'),
|
|
unix_timestamp('1970-01-01 01:00:01');
|
|
unix_timestamp('1970-01-01 01:00:00') unix_timestamp('1970-01-01 01:00:01')
|
|
0 1
|
|
select unix_timestamp('1969-12-31 23:59:59'), unix_timestamp('1970-01-01 00:00:00'), unix_timestamp('1970-01-01 00:59:59');
|
|
unix_timestamp('1969-12-31 23:59:59') unix_timestamp('1970-01-01 00:00:00') unix_timestamp('1970-01-01 00:59:59')
|
|
NULL NULL NULL
|
|
#
|
|
# End of 4.1 tests
|
|
#
|
|
#
|
|
# MDEV-27393 Timezone tables cannot have descending indexes
|
|
#
|
|
call mtr.add_suppression('mysql.time_zone_transition_type table is incorrectly defined or corrupted');
|
|
alter table mysql.time_zone_transition_type drop primary key;
|
|
alter table mysql.time_zone_transition_type add primary key (time_zone_id,transition_type_id desc);
|
|
SET @@time_zone='Japan';
|
|
ERROR HY000: Unknown or incorrect time zone: 'Japan'
|
|
alter table mysql.time_zone_transition_type drop primary key;
|
|
alter table mysql.time_zone_transition_type add primary key (time_zone_id,transition_type_id);
|
|
#
|
|
# End of 10.8 tests
|
|
#
|
|
#
|
|
# MDEV-31684 Add timezone information to DATE_FORMAT
|
|
#
|
|
# using system time
|
|
SET @@time_zone= default;
|
|
SELECT DATE_FORMAT('2009-11-01 22:23:00', '%z %Z') AS current_timezone;
|
|
current_timezone
|
|
+0100 MET
|
|
SELECT DATE_FORMAT('2008-06-04 02:23:00', '%z %Z') AS current_timezone;
|
|
current_timezone
|
|
+0200 MEST
|