diff --git a/mysql-test/main/column_compression.result b/mysql-test/main/column_compression.result index 5b35d70a24d..26d72fac41f 100644 --- a/mysql-test/main/column_compression.result +++ b/mysql-test/main/column_compression.result @@ -1323,7 +1323,7 @@ LENGTH(a) SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( - `a` blob /*M!100301 COMPRESSED*/ NOT NULL DEFAULT '' + `a` blob /*M!100301 COMPRESSED*/ NOT NULL ) ENGINE=CSV DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" DROP TABLE t1; @@ -3051,3 +3051,55 @@ REPLACE INTO t VALUES ('abcdefghijklm'); UPDATE t SET c=MID(c,2,4); DROP TABLE t; # End of 10.6 tests +# +# MDEV-40417 A column with compression enabled automatically adds DEFAULT '' +# +CREATE TABLE t ( +c1 LONGTEXT COMPRESSED NOT NULL, +nc1 LONGTEXT NOT NULL, +c2 LONGTEXT COMPRESSED NOT NULL DEFAULT '', +nc2 LONGTEXT NOT NULL DEFAULT '', +c3 VARCHAR(100) COMPRESSED NOT NULL, +nc3 VARCHAR(100) NOT NULL +) ENGINE=InnoDB; +SHOW CREATE TABLE t; +Table Create Table +t CREATE TABLE `t` ( + `c1` longtext /*M!100301 COMPRESSED*/ NOT NULL, + `nc1` longtext NOT NULL, + `c2` longtext /*M!100301 COMPRESSED*/ NOT NULL DEFAULT '', + `nc2` longtext NOT NULL DEFAULT '', + `c3` varchar(100) /*M!100301 COMPRESSED*/ NOT NULL, + `nc3` varchar(100) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +SELECT COLUMN_NAME, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS +WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t' ORDER BY ORDINAL_POSITION; +COLUMN_NAME COLUMN_DEFAULT +c1 NULL +nc1 NULL +c2 '' +nc2 '' +c3 NULL +nc3 NULL +# A compressed column must be as mandatory as an uncompressed one +INSERT INTO t (nc1) VALUES ('x'); +ERROR HY000: Field 'c1' doesn't have a default value +INSERT INTO t (c1, nc1, nc3) VALUES ('x', 'x', 'x'); +ERROR HY000: Field 'c3' doesn't have a default value +INSERT INTO t (c1, nc1, c3, nc3) VALUES ('x', 'x', 'x', 'x'); +SELECT * FROM t; +c1 nc1 c2 nc2 c3 nc3 +x x x x +DROP TABLE t; +# ALTER TABLE must not add an implicit default either +CREATE TABLE t (c LONGTEXT COMPRESSED NOT NULL DEFAULT 'x') ENGINE=InnoDB; +ALTER TABLE t MODIFY c LONGTEXT COMPRESSED NOT NULL; +ALTER TABLE t ADD c2 VARCHAR(100) COMPRESSED NOT NULL; +SHOW CREATE TABLE t; +Table Create Table +t CREATE TABLE `t` ( + `c` longtext /*M!100301 COMPRESSED*/ NOT NULL, + `c2` varchar(100) /*M!100301 COMPRESSED*/ NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +DROP TABLE t; +# End of 10.11 tests diff --git a/mysql-test/main/column_compression.test b/mysql-test/main/column_compression.test index 2aba8862c66..e45f6dddef9 100644 --- a/mysql-test/main/column_compression.test +++ b/mysql-test/main/column_compression.test @@ -594,3 +594,37 @@ UPDATE t SET c=MID(c,2,4); DROP TABLE t; --echo # End of 10.6 tests + +--echo # +--echo # MDEV-40417 A column with compression enabled automatically adds DEFAULT '' +--echo # + +CREATE TABLE t ( + c1 LONGTEXT COMPRESSED NOT NULL, + nc1 LONGTEXT NOT NULL, + c2 LONGTEXT COMPRESSED NOT NULL DEFAULT '', + nc2 LONGTEXT NOT NULL DEFAULT '', + c3 VARCHAR(100) COMPRESSED NOT NULL, + nc3 VARCHAR(100) NOT NULL +) ENGINE=InnoDB; +SHOW CREATE TABLE t; +SELECT COLUMN_NAME, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS +WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t' ORDER BY ORDINAL_POSITION; + +--echo # A compressed column must be as mandatory as an uncompressed one +--error ER_NO_DEFAULT_FOR_FIELD +INSERT INTO t (nc1) VALUES ('x'); +--error ER_NO_DEFAULT_FOR_FIELD +INSERT INTO t (c1, nc1, nc3) VALUES ('x', 'x', 'x'); +INSERT INTO t (c1, nc1, c3, nc3) VALUES ('x', 'x', 'x', 'x'); +SELECT * FROM t; +DROP TABLE t; + +--echo # ALTER TABLE must not add an implicit default either +CREATE TABLE t (c LONGTEXT COMPRESSED NOT NULL DEFAULT 'x') ENGINE=InnoDB; +ALTER TABLE t MODIFY c LONGTEXT COMPRESSED NOT NULL; +ALTER TABLE t ADD c2 VARCHAR(100) COMPRESSED NOT NULL; +SHOW CREATE TABLE t; +DROP TABLE t; + +--echo # End of 10.11 tests