From: Jon Olav Hauglid Date: February 2 2011 10:32am Subject: bzr commit into mysql-trunk branch (jon.hauglid:3590) Bug#58709 List-Archive: http://lists.mysql.com/commits/130197 X-Bug: 58709 Message-Id: <201102021033.p128msrp017747@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2915347759052480300==" --===============2915347759052480300== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/x/mysql-trunk-bug58709/ based on revid:tor.didriksen@stripped 3590 Jon Olav Hauglid 2011-02-02 Bug #58709 assert in mysql_execute_command The triggered assert checks that either an error has been reported or the statement has been killed if execution of a stored routine fails. It was triggered if a stored routine had a DELETE IGNORE statement which failed but due to IGNORE had not reported any error. This patch fixes the problem by changing mysql_delete() to return a value indicating failure only if an error has been reported or the statement has been killed. Test case added to delete.test. modified: mysql-test/r/delete.result mysql-test/t/delete.test sql/sql_delete.cc === modified file 'mysql-test/r/delete.result' --- a/mysql-test/r/delete.result 2010-10-04 08:25:04 +0000 +++ b/mysql-test/r/delete.result 2011-02-02 10:32:21 +0000 @@ -524,3 +524,26 @@ DELETE v2 FROM v2; ERROR HY000: Can not delete from join view 'test.v2' DROP VIEW v2, v1; DROP TABLE t1, t2; +# +# Bug#58709 assert in mysql_execute_command +# +DROP TABLE IF EXISTS t2, t1; +DROP PROCEDURE IF EXISTS p1; +CREATE TABLE t1 (i INT PRIMARY KEY) engine=InnoDB; +CREATE TABLE t2 (i INT, FOREIGN KEY (i) REFERENCES t1 (i) ON DELETE NO ACTION) engine=InnoDB; +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +DELETE IGNORE FROM t1 WHERE i = 1; +Warnings: +Error 1451 Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`i`) REFERENCES `t1` (`i`) ON DELETE NO ACTION) +CREATE PROCEDURE p1() DELETE IGNORE FROM t1 WHERE i = 1; +CALL p1(); +Warnings: +Error 1451 Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`i`) REFERENCES `t1` (`i`) ON DELETE NO ACTION) +PREPARE stm FROM 'CALL p1()'; +EXECUTE stm; +Warnings: +Error 1451 Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`i`) REFERENCES `t1` (`i`) ON DELETE NO ACTION) +DEALLOCATE PREPARE stm; +DROP TABLE t2, t1; +DROP PROCEDURE p1; === modified file 'mysql-test/t/delete.test' --- a/mysql-test/t/delete.test 2010-10-04 08:25:04 +0000 +++ b/mysql-test/t/delete.test 2011-02-02 10:32:21 +0000 @@ -580,3 +580,33 @@ DELETE v2 FROM v2; DROP VIEW v2, v1; DROP TABLE t1, t2; + + +--echo # +--echo # Bug#58709 assert in mysql_execute_command +--echo # + +--disable_warnings +DROP TABLE IF EXISTS t2, t1; +DROP PROCEDURE IF EXISTS p1; +--enable_warnings + +CREATE TABLE t1 (i INT PRIMARY KEY) engine=InnoDB; +CREATE TABLE t2 (i INT, FOREIGN KEY (i) REFERENCES t1 (i) ON DELETE NO ACTION) engine=InnoDB; + +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); + +DELETE IGNORE FROM t1 WHERE i = 1; + +CREATE PROCEDURE p1() DELETE IGNORE FROM t1 WHERE i = 1; +# This triggered the assert +CALL p1(); + +PREPARE stm FROM 'CALL p1()'; +# This also triggered the assert +EXECUTE stm; +DEALLOCATE PREPARE stm; + +DROP TABLE t2, t1; +DROP PROCEDURE p1; === modified file 'sql/sql_delete.cc' --- a/sql/sql_delete.cc 2010-12-17 09:41:21 +0000 +++ b/sql/sql_delete.cc 2011-02-02 10:32:21 +0000 @@ -1,4 +1,4 @@ -/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -413,7 +413,7 @@ cleanup: my_ok(thd, deleted); DBUG_PRINT("info",("%ld records deleted",(long) deleted)); } - DBUG_RETURN(error >= 0 || thd->is_error()); + DBUG_RETURN(thd->is_error() || thd->killed); } --===============2915347759052480300== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jon.hauglid@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jon.hauglid@stripped # target_branch: file:///export/home/x/mysql-trunk-bug58709/ # testament_sha1: 0308a1833538d0bca2a5dee67e063846da4f4a32 # timestamp: 2011-02-02 11:32:26 +0100 # base_revision_id: tor.didriksen@stripped\ # 9pvozmc78k2cgbgj # # Begin bundle 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 cA== --===============2915347759052480300==--