mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
bc4a456758
Generalized support for auto-updated and/or auto-initialized timestamp and datetime columns. This patch is a reimplementation of MySQL's "WL#5874: CURRENT_TIMESTAMP as DEFAULT for DATETIME columns". In order to ease future merges, this implementation reused few function and variable names from MySQL's patch, however the implementation is quite different. TODO: The only unresolved problem in this patch is the semantics of LOAD DATA for TIMESTAMP and DATETIME columns in the cases when there are missing or NULL columns. I couldn't fully comprehend the logic behind MySQL's behavior and its relationship with their own documentation, so I left the results to be more consistent with all other LOAD cases. The problematic test cases can be seen by running the test file function_defaults, and observing the test case differences. Those were left on purpose for discussion.
132 lines
3.7 KiB
Text
132 lines
3.7 KiB
Text
#
|
|
# Test of function defaults on replicated tables.
|
|
#
|
|
include/master-slave.inc
|
|
[connection master]
|
|
connection master
|
|
SET TIME_ZONE="+10:30";
|
|
SET TIMESTAMP=123456.789123;
|
|
SELECT CURRENT_TIMESTAMP;
|
|
CURRENT_TIMESTAMP
|
|
1970-01-02 20:47:36
|
|
connection slave
|
|
SET TIME_ZONE="+00:00";
|
|
SET TIMESTAMP=987654321.123456;
|
|
SELECT CURRENT_TIMESTAMP;
|
|
CURRENT_TIMESTAMP
|
|
2001-04-19 04:25:21
|
|
connection master
|
|
CREATE TABLE t1 (
|
|
a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
b TIMESTAMP(1) NOT NULL DEFAULT CURRENT_TIMESTAMP(1),
|
|
c TIMESTAMP(2) NOT NULL DEFAULT CURRENT_TIMESTAMP(2),
|
|
d TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
e TIMESTAMP(4) NOT NULL DEFAULT CURRENT_TIMESTAMP(4),
|
|
f TIMESTAMP(5) NOT NULL DEFAULT CURRENT_TIMESTAMP(5),
|
|
g TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
|
h DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
i DATETIME(1) DEFAULT CURRENT_TIMESTAMP(1),
|
|
j DATETIME(2) DEFAULT CURRENT_TIMESTAMP(2),
|
|
k DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3),
|
|
l DATETIME(4) DEFAULT CURRENT_TIMESTAMP(4),
|
|
m DATETIME(5) DEFAULT CURRENT_TIMESTAMP(5),
|
|
n DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
|
|
o INT
|
|
);
|
|
INSERT INTO t1 ( o ) VALUES ( 1 );
|
|
CREATE TABLE t2 (
|
|
a TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
|
|
b TIMESTAMP(1) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(1),
|
|
c TIMESTAMP(2) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(2),
|
|
d TIMESTAMP(3) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(3),
|
|
e TIMESTAMP(4) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(4),
|
|
f TIMESTAMP(5) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(5),
|
|
g TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
|
|
h DATETIME ON UPDATE CURRENT_TIMESTAMP,
|
|
i DATETIME(1) ON UPDATE CURRENT_TIMESTAMP(1),
|
|
j DATETIME(2) ON UPDATE CURRENT_TIMESTAMP(2),
|
|
k DATETIME(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
l DATETIME(4) ON UPDATE CURRENT_TIMESTAMP(4),
|
|
m DATETIME(5) ON UPDATE CURRENT_TIMESTAMP(5),
|
|
n DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
|
|
o INT
|
|
);
|
|
INSERT INTO t2 ( o ) VALUES ( 1 );
|
|
sync_slave_with_master
|
|
connection slave
|
|
SELECT * FROM t1;
|
|
a 1970-01-02 10:17:36
|
|
b 1970-01-02 10:17:36.7
|
|
c 1970-01-02 10:17:36.78
|
|
d 1970-01-02 10:17:36.789
|
|
e 1970-01-02 10:17:36.7891
|
|
f 1970-01-02 10:17:36.78912
|
|
g 1970-01-02 10:17:36.789123
|
|
h 1970-01-02 20:47:36
|
|
i 1970-01-02 20:47:36.7
|
|
j 1970-01-02 20:47:36.78
|
|
k 1970-01-02 20:47:36.789
|
|
l 1970-01-02 20:47:36.7891
|
|
m 1970-01-02 20:47:36.78912
|
|
n 1970-01-02 20:47:36.789123
|
|
o 1
|
|
SELECT * FROM t2;
|
|
a 0000-00-00 00:00:00
|
|
b 0000-00-00 00:00:00.0
|
|
c 0000-00-00 00:00:00.00
|
|
d 0000-00-00 00:00:00.000
|
|
e 0000-00-00 00:00:00.0000
|
|
f 0000-00-00 00:00:00.00000
|
|
g 0000-00-00 00:00:00.000000
|
|
h NULL
|
|
i NULL
|
|
j NULL
|
|
k NULL
|
|
l NULL
|
|
m NULL
|
|
n NULL
|
|
o 1
|
|
connection master
|
|
SET TIMESTAMP=1234567890.123456;
|
|
SELECT CURRENT_TIMESTAMP;
|
|
CURRENT_TIMESTAMP
|
|
2009-02-14 10:01:30
|
|
UPDATE t1 SET o = 2;
|
|
UPDATE t2 SET o = 2;
|
|
sync_slave_with_master
|
|
connection slave
|
|
SELECT * FROM t1;
|
|
a 1970-01-02 10:17:36
|
|
b 1970-01-02 10:17:36.7
|
|
c 1970-01-02 10:17:36.78
|
|
d 1970-01-02 10:17:36.789
|
|
e 1970-01-02 10:17:36.7891
|
|
f 1970-01-02 10:17:36.78912
|
|
g 1970-01-02 10:17:36.789123
|
|
h 1970-01-02 20:47:36
|
|
i 1970-01-02 20:47:36.7
|
|
j 1970-01-02 20:47:36.78
|
|
k 1970-01-02 20:47:36.789
|
|
l 1970-01-02 20:47:36.7891
|
|
m 1970-01-02 20:47:36.78912
|
|
n 1970-01-02 20:47:36.789123
|
|
o 2
|
|
SELECT * FROM t2;
|
|
a 2009-02-13 23:31:30
|
|
b 2009-02-13 23:31:30.1
|
|
c 2009-02-13 23:31:30.12
|
|
d 2009-02-13 23:31:30.123
|
|
e 2009-02-13 23:31:30.1234
|
|
f 2009-02-13 23:31:30.12345
|
|
g 2009-02-13 23:31:30.123456
|
|
h 2009-02-14 10:01:30
|
|
i 2009-02-14 10:01:30.1
|
|
j 2009-02-14 10:01:30.12
|
|
k 2009-02-14 10:01:30.123
|
|
l 2009-02-14 10:01:30.1234
|
|
m 2009-02-14 10:01:30.12345
|
|
n 2009-02-14 10:01:30.123456
|
|
o 2
|
|
connection master
|
|
DROP TABLE t1, t2;
|
|
include/rpl_end.inc
|