mariadb/mysql-test/suite/rpl/r/rpl_function_defaults.result
unknown bc4a456758 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.
2012-10-17 15:43:56 +03:00

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