[Maria-developers] bzr commit into MariaDB 5.1, with Maria 1.5:maria branch (monty:2826) Bug#44987
#At lp:maria based on revid:monty@askmonty.org-20100309192224-ycijqc2xxv8v9dai 2826 Michael Widenius 2010-03-10 Fix for: Bug#44987 DELETE IGNORE and FK constraint - Now DELETE IGNORE skips over rows with a foreign key constraints (as it was supposed to do) modified: mysql-test/r/foreign_key.result mysql-test/t/foreign_key.test sql/sql_delete.cc per-file messages: mysql-test/r/foreign_key.result Test case for Bug#44987 DELETE IGNORE and FK constraint mysql-test/t/foreign_key.test Test case for Bug#44987 DELETE IGNORE and FK constraint sql/sql_delete.cc Firx for Bug#44987 DELETE IGNORE and FK constraint Now DELETE IGNORE skips over rows with a foreign key constraints (as it was supposed to do) Bug fix inspired by: Moritz Mertinkat === modified file 'mysql-test/r/foreign_key.result' --- a/mysql-test/r/foreign_key.result 2001-09-28 05:05:54 +0000 +++ b/mysql-test/r/foreign_key.result 2010-03-10 13:39:02 +0000 @@ -1,4 +1,4 @@ -drop table if exists t1; +drop table if exists t1,t2; create table t1 ( a int not null references t2, b int not null references t2 (c), @@ -13,3 +13,30 @@ foreign key (a,b) references t3 (c,d) on create index a on t1 (a); create unique index b on t1 (a,b); drop table t1; +create table t1 (id int primary key) engine = innodb; +create table t2 (id int PRIMARY KEY, FOREIGN KEY (id) REFERENCES t1(id)) engine=innodb; +insert into t1 values (1), (2), (3), (4), (5), (6); +insert into t2 values (3), (5); +delete from t1; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`id`) REFERENCES `t1` (`id`)) +select * from t1; +id +1 +2 +3 +4 +5 +6 +delete ignore from t1; +Warnings: +Error 1451 Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`id`) REFERENCES `t1` (`id`)) +Error 1451 Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`id`) REFERENCES `t1` (`id`)) +select row_count(); +row_count() +-1 +select * from t1; +id +3 +5 +drop table t2; +drop table t1; === modified file 'mysql-test/t/foreign_key.test' --- a/mysql-test/t/foreign_key.test 2005-07-28 00:22:47 +0000 +++ b/mysql-test/t/foreign_key.test 2010-03-10 13:39:02 +0000 @@ -2,8 +2,10 @@ # Test syntax of foreign keys # +-- source include/have_innodb.inc + --disable_warnings -drop table if exists t1; +drop table if exists t1,t2; --enable_warnings create table t1 ( @@ -23,3 +25,23 @@ create unique index b on t1 (a,b); drop table t1; # End of 4.1 tests + +# +# Test DELETE IGNORE +# Bug#44987 DELETE IGNORE and FK constraint +# + +create table t1 (id int primary key) engine = innodb; +create table t2 (id int PRIMARY KEY, FOREIGN KEY (id) REFERENCES t1(id)) engine=innodb; +insert into t1 values (1), (2), (3), (4), (5), (6); +insert into t2 values (3), (5); + +--error 1451 +delete from t1; +select * from t1; + +delete ignore from t1; +select row_count(); +select * from t1; +drop table t2; +drop table t1; === modified file 'sql/sql_delete.cc' --- a/sql/sql_delete.cc 2010-02-10 19:06:24 +0000 +++ b/sql/sql_delete.cc 2010-03-10 13:39:02 +0000 @@ -335,8 +335,11 @@ bool mysql_delete(THD *thd, TABLE_LIST * InnoDB it can fail in a FOREIGN KEY error or an out-of-tablespace error. */ - error= 1; - break; + if (!select_lex->no_error) + { + error= 1; + break; + } } } else
participants (1)
-
Michael Widenius