mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
MDEV-452 Add full support for auto-initialized/updated timestamp and datetime
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.
This commit is contained in:
132
mysql-test/suite/rpl/r/rpl_function_defaults.result
Normal file
132
mysql-test/suite/rpl/r/rpl_function_defaults.result
Normal file
@ -0,0 +1,132 @@
|
||||
#
|
||||
# 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
|
Reference in New Issue
Block a user