From a5eff044cb8543cc207ec51965a1d8fd51dd0576 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 3 Nov 2022 18:31:42 +0100 Subject: [PATCH] MDEV-22602 Disable UPDATE CASCADE for SQL constraints fix it for named constraints too --- mysql-test/suite/innodb/r/foreign_key.result | 2 ++ mysql-test/suite/innodb/t/foreign_key.test | 2 ++ sql/sql_table.cc | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/innodb/r/foreign_key.result b/mysql-test/suite/innodb/r/foreign_key.result index f8f389a32cf..851deb69fa5 100644 --- a/mysql-test/suite/innodb/r/foreign_key.result +++ b/mysql-test/suite/innodb/r/foreign_key.result @@ -943,6 +943,8 @@ DROP TABLE t1; # # TODO: enable them after MDEV-16417 is finished create or replace table t1 (a int primary key) engine=innodb; +create or replace table t2 (a int, constraint foo check(a > 0), foreign key(a) references t1(a) on update cascade) engine=innodb; +ERROR HY000: Function or expression 'a' cannot be used in the CHECK clause of `foo` create or replace table t2 (a int, check(a > 0), foreign key(a) references t1(a) on update cascade) engine=innodb; ERROR HY000: Function or expression 'a' cannot be used in the CHECK clause of `CONSTRAINT_1` create or replace table t1 (f1 int, f2 date, f3 date, key(f1,f3,f2)) engine=innodb; diff --git a/mysql-test/suite/innodb/t/foreign_key.test b/mysql-test/suite/innodb/t/foreign_key.test index 321c78a5598..135f8d7b024 100644 --- a/mysql-test/suite/innodb/t/foreign_key.test +++ b/mysql-test/suite/innodb/t/foreign_key.test @@ -971,6 +971,8 @@ DROP TABLE t1; --echo # TODO: enable them after MDEV-16417 is finished create or replace table t1 (a int primary key) engine=innodb; --error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED +create or replace table t2 (a int, constraint foo check(a > 0), foreign key(a) references t1(a) on update cascade) engine=innodb; +--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED create or replace table t2 (a int, check(a > 0), foreign key(a) references t1(a) on update cascade) engine=innodb; create or replace table t1 (f1 int, f2 date, f3 date, key(f1,f3,f2)) engine=innodb; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 519a5f38868..dbab4c0067c 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -4622,7 +4622,7 @@ without_overlaps_err: my_error(ER_TOO_LONG_IDENT, MYF(0), check->name.str); DBUG_RETURN(TRUE); } - if (check_expression(check, &check->name, VCOL_CHECK_TABLE)) + if (check_expression(check, &check->name, VCOL_CHECK_TABLE, alter_info)) DBUG_RETURN(TRUE); } }