From: Date: November 27 2008 7:20pm Subject: bzr commit into mysql-5.1 branch (gshchepa:2708) Bug#40745 List-Archive: http://lists.mysql.com/commits/60098 X-Bug: 40745 Message-Id: <20081127182138.69B7240CBE0@localhost.localdomain> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7BIT #At file:///work/bzr/5.1-40745/ based on revid:vvaintroub@stripped 2708 Gleb Shchepa 2008-11-27 Bug #40745: Error during WHERE clause calculation in UPDATE leads to an assertion failure Any run-time error in stored function (like recursive function call or update of table that is already updating by statement which invoked this stored function etc.) that was used in some expression of the single-table UPDATE statement caused an assertion failure. Multiple-table UPDATE (as well as INSERT and both single- and multiple-table DELETE) are not affected. modified: mysql-test/r/update.result mysql-test/t/update.test sql/sql_update.cc per-file messages: mysql-test/r/update.result Added test case for bug #40745. mysql-test/t/update.test Added test case for bug #40745. sql/sql_update.cc Bug #40745: Error during WHERE clause calculation in UPDATE leads to an assertion failure The mysql_update function has been updated to take into account the status of invoked stored functions before setting the status of whole UPDATE query to OK. === modified file 'mysql-test/r/update.result' --- a/mysql-test/r/update.result 2007-04-27 08:42:15 +0000 +++ b/mysql-test/r/update.result 2008-11-27 18:20:44 +0000 @@ -491,4 +491,13 @@ update t1 join t2 on (t1.a=t2.a) set t1. affected rows: 127 info: Rows matched: 128 Changed: 127 Warnings: 0 drop table t1,t2; +CREATE FUNCTION f1() RETURNS INT RETURN f1(); +CREATE TABLE t1 (i INT); +INSERT INTO t1 VALUES (1); +UPDATE t1 SET i = 3 WHERE f1(); +ERROR HY000: Recursive stored functions and triggers are not allowed. +UPDATE t1 SET i = f1(); +ERROR HY000: Recursive stored functions and triggers are not allowed. +DROP TABLE t1; +DROP FUNCTION f1; End of 5.0 tests === modified file 'mysql-test/t/update.test' --- a/mysql-test/t/update.test 2007-04-23 14:22:33 +0000 +++ b/mysql-test/t/update.test 2008-11-27 18:20:44 +0000 @@ -430,4 +430,21 @@ drop table t1,t2; connection default; disconnect con1; +# +# Bug #40745: Error during WHERE clause calculation in UPDATE +# leads to an assertion failure +# + +CREATE FUNCTION f1() RETURNS INT RETURN f1(); +CREATE TABLE t1 (i INT); +INSERT INTO t1 VALUES (1); + +--error ER_SP_NO_RECURSION +UPDATE t1 SET i = 3 WHERE f1(); +--error ER_SP_NO_RECURSION +UPDATE t1 SET i = f1(); + +DROP TABLE t1; +DROP FUNCTION f1; + --echo End of 5.0 tests === modified file 'sql/sql_update.cc' --- a/sql/sql_update.cc 2008-10-09 15:57:41 +0000 +++ b/sql/sql_update.cc 2008-11-27 18:20:44 +0000 @@ -715,6 +715,11 @@ int mysql_update(THD *thd, else table->file->unlock_row(); thd->row_count++; + if (thd->is_error()) + { + error= 1; + break; + } } dup_key_found= 0; /*