From: Date: May 24 2007 4:04am Subject: bk commit into 5.0 tree (igor:1.2500) BUG#28561 List-Archive: http://lists.mysql.com/commits/27249 X-Bug: 28561 Message-Id: <20070524020419.60D152F91E8@olga.mysql.com> Below is the list of changes that have just been committed into a local 5.0 repository of igor. When igor does a push these changes will be propagated to the main repository and, within 24 hours after the push, to the public repository. For information on how to access the public repository see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html ChangeSet@stripped, 2007-05-23 19:04:12-07:00, igor@stripped +3 -0 Fixed bug #28561: assertion abort for update on multi-table view with CHECK OPTION and a subquery in WHERE condition. The abort was triggered by setting the value of join->tables for subqueries in the function JOIN::cleanup. This function was called after an invocation of the JOIN::join_free method for subqueries used in WHERE condition. mysql-test/r/view.result@stripped, 2007-05-23 19:04:09-07:00, igor@stripped +10 -0 Added a test case for bug #28561. mysql-test/t/view.test@stripped, 2007-05-23 19:04:09-07:00, igor@stripped +19 -0 Added a test case for bug #28561. sql/sql_select.cc@stripped, 2007-05-23 19:04:10-07:00, igor@stripped +0 -1 Fixed bug #28561: assertion abort for update on multi-table view with CHECK OPTION and a subquery in WHERE condition. The abort was triggered by setting the value of join->tables for subqueries in the function JOIN::cleanup. This function was called after an invocation of the JOIN::join_free method for subqueries used in WHERE condition. Setting the value of join->tables to for a subquery created serious problems for checking WHERE condition after update of the multi-table view as this check is performed in the do_select function right after a call of the JOIN::join_free method. In fact setting join->tables to 0 in JOIN::cleanup is not needed anywhere in the current code. # This is a BitKeeper patch. What follows are the unified diffs for the # set of deltas contained in the patch. The rest of the patch, the part # that BitKeeper cares about, is below these diffs. # User: igor # Host: olga.mysql.com # Root: /home/igor/dev-opt/mysql-5.0-opt-bug28561 --- 1.523/sql/sql_select.cc 2007-05-23 19:04:19 -07:00 +++ 1.524/sql/sql_select.cc 2007-05-23 19:04:19 -07:00 @@ -6375,7 +6375,6 @@ for (tab= join_tab, end= tab+tables; tab != end; tab++) tab->cleanup(); table= 0; - tables= 0; } else { --- 1.200/mysql-test/r/view.result 2007-05-23 19:04:19 -07:00 +++ 1.201/mysql-test/r/view.result 2007-05-23 19:04:19 -07:00 @@ -3367,4 +3367,14 @@ View Create View v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(1.23456789 as decimal(8,0)) AS `col` DROP VIEW v1; +CREATE TABLE t1 (id int); +CREATE TABLE t2 (id int, c int DEFAULT 0); +INSERT INTO t1 (id) VALUES (1); +INSERT INTO t2 (id) VALUES (1); +CREATE VIEW v1 AS +SELECT t2.c FROM t1, t2 +WHERE t1.id=t2.id AND 1 IN (SELECT id FROM t1) WITH CHECK OPTION; +UPDATE v1 SET c=1; +DROP VIEW v1; +DROP TABLE t1,t2; End of 5.0 tests. --- 1.183/mysql-test/t/view.test 2007-05-23 19:04:19 -07:00 +++ 1.184/mysql-test/t/view.test 2007-05-23 19:04:19 -07:00 @@ -3233,4 +3233,23 @@ SHOW CREATE VIEW v1; DROP VIEW v1; +# +# Bug #28561: update on multi-table view with CHECK OPTION and +# a subquery in WHERE condition +# + +CREATE TABLE t1 (id int); +CREATE TABLE t2 (id int, c int DEFAULT 0); +INSERT INTO t1 (id) VALUES (1); +INSERT INTO t2 (id) VALUES (1); + +CREATE VIEW v1 AS + SELECT t2.c FROM t1, t2 + WHERE t1.id=t2.id AND 1 IN (SELECT id FROM t1) WITH CHECK OPTION; + +UPDATE v1 SET c=1; + +DROP VIEW v1; +DROP TABLE t1,t2; + --echo End of 5.0 tests.