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..4ae37076a1cb 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -20916,9 +20916,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; }