diff --git a/mysql-test/r/check_constraints.result b/mysql-test/r/check_constraints.result index 52a4c06b3ee5..372a5b79ddd5 100644 --- a/mysql-test/r/check_constraints.result +++ b/mysql-test/r/check_constraints.result @@ -1259,6 +1259,16 @@ ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITH ALTER TABLE t1 MODIFY COLUMN f1 INT DEFAULT 20, algorithm=copy; ERROR HY000: Check constraint 't1_chk_1' is violated. DROP TABLE t1; +# +# Bug#121124 - An unrelated CHECK constraint on DATETIME should not +# prevent an online ENUM extension. +# +CREATE TABLE t1 (e ENUM('a','b') NOT NULL, d DATETIME(6), +CONSTRAINT ck CHECK (d IS NULL)); +ALTER TABLE t1 MODIFY e ENUM('a','b','c') NOT NULL, ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY e ENUM('a','b','c','d') NOT NULL, ALGORITHM=INPLACE; +ALTER TABLE t1 MODIFY d DATETIME(6) DEFAULT NULL, ALGORITHM=INPLACE; +DROP TABLE t1; #----------------------------------------------------------------------- # Test case to verify check constraint with CHANGE COLUMN syntax. #----------------------------------------------------------------------- diff --git a/mysql-test/t/check_constraints.test b/mysql-test/t/check_constraints.test index d48890722599..4312104a0d24 100644 --- a/mysql-test/t/check_constraints.test +++ b/mysql-test/t/check_constraints.test @@ -789,6 +789,18 @@ ALTER TABLE t1 MODIFY COLUMN f1 INT DEFAULT 20, algorithm=copy; DROP TABLE t1; +--echo # +--echo # Bug#121124 - An unrelated CHECK constraint on DATETIME should not +--echo # prevent an online ENUM extension. +--echo # +CREATE TABLE t1 (e ENUM('a','b') NOT NULL, d DATETIME(6), + CONSTRAINT ck CHECK (d IS NULL)); +ALTER TABLE t1 MODIFY e ENUM('a','b','c') NOT NULL, ALGORITHM=INSTANT; +ALTER TABLE t1 MODIFY e ENUM('a','b','c','d') NOT NULL, ALGORITHM=INPLACE; +ALTER TABLE t1 MODIFY d DATETIME(6) DEFAULT NULL, ALGORITHM=INPLACE; +DROP TABLE t1; + + --echo #----------------------------------------------------------------------- --echo # Test case to verify check constraint with CHANGE COLUMN syntax. --echo #----------------------------------------------------------------------- diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 5dc08f44e998..d9b8eb990b83 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -7580,8 +7580,7 @@ static bool prepare_key( Create_field *sql_field; while ((sql_field = it++) && my_strcasecmp(system_charset_info, first_col->get_field_name(), - sql_field->field_name)) - ; + sql_field->field_name)); if (!sql_field) { my_error(ER_KEY_COLUMN_DOES_NOT_EXITS, MYF(0), first_col->get_field_name()); @@ -19204,8 +19203,7 @@ bool mysql_alter_table(THD *thd, const char *new_db, const char *new_name, mysql_rename_table( thd, old_db_type, alter_ctx.db, backup_name, alter_ctx.db, backup_name, *schema, alter_ctx.db, alter_ctx.alias, - FN_FROM_IS_TMP | NO_FK_CHECKS | NO_FK_RENAME | NO_CC_RENAME)) - ; + FN_FROM_IS_TMP | NO_FK_CHECKS | NO_FK_RENAME | NO_CC_RENAME)); } goto err_with_mdl; } @@ -20916,9 +20914,10 @@ static bool is_any_check_constraints_evaluation_required( continue; // Check if data type is changed. - if (!my_strcasecmp(system_charset_info, itm_fld->field_name, + if (fld.change && + !my_strcasecmp(system_charset_info, itm_fld->field_name, fld.field_name) && - (itm_fld->data_type() != fld.sql_type)) + (itm_fld->data_type() != real_type_to_type(fld.sql_type))) return true; }