--source include/have_innodb.inc --echo # --echo # MDEV-31086 MODIFY COLUMN can break FK constraints, and --echo # lead to unrestorable dumps --echo # CREATE TABLE t1( id SERIAL, msg VARCHAR(100) CHARACTER SET utf8mb3, KEY(msg))ENGINE=InnoDB; --error ER_CANT_CREATE_TABLE CREATE TABLE t2( id SERIAL, msg varchar(100) CHARACTER SET utf8mb4, CONSTRAINT fk_t1 FOREIGN KEY (msg) REFERENCES t1 (msg))ENGINE=InnoDB; CREATE TABLE t2( id SERIAL, msg varchar(100) CHARACTER SET utf8mb3, msg_1 varchar(100) CHARACTER SET utf8mb3, INDEX (msg_1), INDEX (msg), CONSTRAINT fk_t1 FOREIGN KEY (msg) REFERENCES t1 (msg) ON DELETE CASCADE)ENGINE=InnoDB; # Changing column used in FK constraint SET FOREIGN_KEY_CHECKS=1; --error ER_FK_COLUMN_CANNOT_CHANGE ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(200) character set utf8mb3, ALGORITHM=COPY; --error ER_FK_COLUMN_CANNOT_CHANGE ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(200) character set utf8mb3, ALGORITHM=INPLACE; SET FOREIGN_KEY_CHECKS=0; --error ER_FK_COLUMN_CANNOT_CHANGE ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(200) character set utf8mb3, ALGORITHM=COPY; --error ER_FK_COLUMN_CANNOT_CHANGE ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(400) character set utf8mb3, ALGORITHM=INPLACE; # Changing column charset used in FK constraint SET FOREIGN_KEY_CHECKS=1; --error ER_FK_COLUMN_CANNOT_CHANGE ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(100) CHARACTER SET utf8mb4, ALGORITHM=COPY; --error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(100) CHARACTER SET utf8mb4, ALGORITHM=INPLACE; SET FOREIGN_KEY_CHECKS=0; --error ER_FK_COLUMN_CANNOT_CHANGE ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(100) CHARACTER SET utf8mb4,ALGORITHM=COPY; --error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(100) CHARACTER SET utf8mb4,ALGORITHM=INPLACE; # Modify the column in the newly added foreign constraint SET FOREIGN_KEY_CHECKS=1; --error ER_CANT_CREATE_TABLE ALTER TABLE t2 ADD CONSTRAINT FOREIGN KEY(msg_1) REFERENCES t1(msg),MODIFY COLUMN msg_1 VARCHAR(100) CHARACTER SET utf8mb4, ALGORITHM=COPY; --error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON ALTER TABLE t2 ADD CONSTRAINT FOREIGN KEY(msg_1) REFERENCES t1(msg),MODIFY COLUMN msg_1 VARCHAR(100) CHARACTER SET utf8mb4, ALGORITHM=INPLACE; SET FOREIGN_KEY_CHECKS=0; --error ER_CANT_CREATE_TABLE ALTER TABLE t2 ADD CONSTRAINT FOREIGN KEY(msg_1) REFERENCES t1(msg),MODIFY COLUMN msg_1 VARCHAR(100) CHARACTER SET utf8mb4, ALGORITHM=COPY; --error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON ALTER TABLE t2 ADD CONSTRAINT FOREIGN KEY(msg_1) REFERENCES t1(msg),MODIFY COLUMN msg_1 VARCHAR(100) CHARACTER SET utf8mb4, ALGORITHM=INPLACE; --error ER_FK_COLUMN_CANNOT_CHANGE ALTER TABLE t2 ADD CONSTRAINT FOREIGN KEY(msg_1) REFERENCES t1(msg),MODIFY COLUMN msg_1 VARCHAR(200) CHARACTER SET utf8mb3, ALGORITHM=INPLACE; # Change referenced table column SET FOREIGN_KEY_CHECKS=1; # Change referenced column length --error ER_FK_COLUMN_CANNOT_CHANGE_CHILD ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb3, ALGORITHM=COPY; --error ER_FK_COLUMN_CANNOT_CHANGE_CHILD ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb3, ALGORITHM=INPLACE; # Change referenced column character set --error ER_FK_COLUMN_CANNOT_CHANGE_CHILD ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb4, ALGORITHM=COPY; --error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb4, ALGORITHM=INPLACE; SET FOREIGN_KEY_CHECKS=0; # Change referenced column length --error ER_FK_COLUMN_CANNOT_CHANGE_CHILD ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb3, ALGORITHM=COPY; --error ER_FK_COLUMN_CANNOT_CHANGE_CHILD ALTER TABLE t1 MODIFY msg VARCHAR(400) CHARSET utf8mb3, ALGORITHM=INPLACE; # Change referenced column character set --error ER_FK_COLUMN_CANNOT_CHANGE_CHILD ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb4, ALGORITHM=COPY; --error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb4, ALGORITHM=INPLACE; # Correct way to change character set in foreign key constraint SET FOREIGN_KEY_CHECKS=0; ALTER TABLE t2 DROP FOREIGN KEY fk_t1, MODIFY msg VARCHAR(200) CHARSET utf8mb4, ALGORITHM=COPY; ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb4, ALGORITHM=COPY; ALTER TABLE t2 ADD CONSTRAINT FOREIGN KEY (msg) REFERENCES t1(msg), aLGORITHM=INPLACE; SET FOREIGN_KEY_CHECKS=1; DROP TABLE t2, t1; --echo # --echo # MDEV-31869 Server aborts when table does drop column --echo # CREATE TABLE t (a VARCHAR(40), b INT, C INT) ENGINE=InnoDB; ALTER TABLE t MODIFY a VARCHAR(50), DROP b; DROP TABLE t; --echo # --echo # MDEV-32060 Server aborts when table doesn't --echo # have referenced index --echo # SET SESSION FOREIGN_KEY_CHECKS = OFF; CREATE TABLE t1 (a VARCHAR(16) KEY, FOREIGN KEY(a) REFERENCES t2(b)) ENGINE=InnoDB; # Following SQL is allowed in 10.6 --error ER_CANT_CREATE_TABLE CREATE TABLE t2 (b VARCHAR(8)) ENGINE=InnoDB; SET SESSION FOREIGN_KEY_CHECKS = ON; --error ER_NO_SUCH_TABLE ALTER TABLE t2 MODIFY b VARCHAR(16), ADD KEY(b); --error ER_BAD_TABLE_ERROR DROP TABLE t2, t1; --echo # End of 10.4 tests