mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-6880 Can't define CURRENT_TIMESTAMP as default value for added column
ALTER TABLE: don't fill default values per row, do it once. And do it in two places - for copy_data_between_tables() and for online ALTER. Also, run function_defaults test both for MyISAM and for InnoDB.
This commit is contained in:
@ -1434,13 +1434,13 @@ drop table t1;
|
||||
SET TIME_ZONE = "+03:00";
|
||||
# 1970-01-01 03:16:40
|
||||
SET TIMESTAMP = 1000.123456;
|
||||
CREATE TABLE t1 ( a INT, b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) ENGINE = INNODB;
|
||||
CREATE TABLE t1 ( a INT, b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(11) DEFAULT NULL,
|
||||
`b` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 ( a ) VALUES ( 1 );
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
@ -1490,9 +1490,9 @@ a INT,
|
||||
b INT,
|
||||
ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY ( a, ts )
|
||||
) ENGINE = INNODB;
|
||||
);
|
||||
INSERT INTO t1( a, b, ts ) VALUES ( 1, 0, '2000-09-28 17:44:34' );
|
||||
CREATE TABLE t2 ( a INT ) ENGINE = INNODB;
|
||||
CREATE TABLE t2 ( a INT );
|
||||
INSERT INTO t2 VALUES ( 1 );
|
||||
UPDATE t1 STRAIGHT_JOIN t2
|
||||
SET t1.b = t1.b + 1
|
||||
@ -1521,8 +1521,19 @@ ALTER TABLE t1 ADD COLUMN c4 DATETIME ON UPDATE NOW() AFTER c3;
|
||||
ALTER TABLE t1 ADD COLUMN c5 DATETIME DEFAULT NOW() AFTER c4;
|
||||
ALTER TABLE t1 ADD COLUMN c6 DATETIME DEFAULT NOW() ON UPDATE NOW() AFTER c5;
|
||||
SELECT * FROM t1;
|
||||
a1 a2 a3 a4 a5 a6 b c1 c2 c3 c4 c5 c6
|
||||
0000-00-00 00:00:00 1970-01-01 03:16:40 1970-01-01 03:16:40 NULL 1970-01-01 03:16:40 1970-01-01 03:16:40 1 0000-00-00 00:00:00 1970-01-01 03:16:40 1970-01-01 03:16:40 NULL 1970-01-01 03:16:40 1970-01-01 03:16:40
|
||||
a1 0000-00-00 00:00:00
|
||||
a2 1970-01-01 03:16:40
|
||||
a3 1970-01-01 03:16:40
|
||||
a4 NULL
|
||||
a5 1970-01-01 03:16:40
|
||||
a6 1970-01-01 03:16:40
|
||||
b 1
|
||||
c1 0000-00-00 00:00:00
|
||||
c2 1970-01-01 03:16:40
|
||||
c3 1970-01-01 03:16:40
|
||||
c4 NULL
|
||||
c5 1970-01-01 03:16:40
|
||||
c6 1970-01-01 03:16:40
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE CURRENT_TIMESTAMP, b DATETIME DEFAULT NOW() );
|
||||
INSERT INTO t1 VALUES ();
|
||||
@ -2979,13 +2990,13 @@ drop table t1;
|
||||
SET TIME_ZONE = "+03:00";
|
||||
# 1970-01-01 03:16:40
|
||||
SET TIMESTAMP = 1000.123456;
|
||||
CREATE TABLE t1 ( a INT, b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)) ENGINE = INNODB;
|
||||
CREATE TABLE t1 ( a INT, b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6));
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(11) DEFAULT NULL,
|
||||
`b` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 ( a ) VALUES ( 1 );
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
@ -3035,9 +3046,9 @@ a INT,
|
||||
b INT,
|
||||
ts TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
|
||||
PRIMARY KEY ( a, ts )
|
||||
) ENGINE = INNODB;
|
||||
);
|
||||
INSERT INTO t1( a, b, ts ) VALUES ( 1, 0, '2000-09-28 17:44:34' );
|
||||
CREATE TABLE t2 ( a INT ) ENGINE = INNODB;
|
||||
CREATE TABLE t2 ( a INT );
|
||||
INSERT INTO t2 VALUES ( 1 );
|
||||
UPDATE t1 STRAIGHT_JOIN t2
|
||||
SET t1.b = t1.b + 1
|
||||
@ -3066,8 +3077,19 @@ ALTER TABLE t1 ADD COLUMN c4 DATETIME(6) ON UPDATE NOW(6) AFTER c3;
|
||||
ALTER TABLE t1 ADD COLUMN c5 DATETIME(6) DEFAULT NOW(6) AFTER c4;
|
||||
ALTER TABLE t1 ADD COLUMN c6 DATETIME(6) DEFAULT NOW(6) ON UPDATE NOW(6) AFTER c5;
|
||||
SELECT * FROM t1;
|
||||
a1 a2 a3 a4 a5 a6 b c1 c2 c3 c4 c5 c6
|
||||
0000-00-00 00:00:00.000000 1970-01-01 03:16:40.000000 1970-01-01 03:16:40.000000 NULL 1970-01-01 03:16:40.000000 1970-01-01 03:16:40.000000 1 0000-00-00 00:00:00.000000 1970-01-01 03:16:40.000000 1970-01-01 03:16:40.000000 NULL 1970-01-01 03:16:40.000000 1970-01-01 03:16:40.000000
|
||||
a1 0000-00-00 00:00:00.000000
|
||||
a2 1970-01-01 03:16:40.000000
|
||||
a3 1970-01-01 03:16:40.000000
|
||||
a4 NULL
|
||||
a5 1970-01-01 03:16:40.000000
|
||||
a6 1970-01-01 03:16:40.000000
|
||||
b 1
|
||||
c1 0000-00-00 00:00:00.000000
|
||||
c2 1970-01-01 03:16:40.000000
|
||||
c3 1970-01-01 03:16:40.000000
|
||||
c4 NULL
|
||||
c5 1970-01-01 03:16:40.000000
|
||||
c6 1970-01-01 03:16:40.000000
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT NOW(6) ON UPDATE CURRENT_TIMESTAMP(6), b DATETIME(6) DEFAULT NOW(6) );
|
||||
INSERT INTO t1 VALUES ();
|
||||
|
Reference in New Issue
Block a user