From: Jon Olav Hauglid Date: September 27 2010 3:25pm Subject: bzr commit into mysql-5.5-runtime branch (jon.hauglid:3146) Bug#51099 List-Archive: http://lists.mysql.com/commits/119182 X-Bug: 51099 Message-Id: <201009271533.o8RDrddk026778@rcsinet13.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0005629179455884428==" --===============0005629179455884428== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/x/mysql-5.5-runtime-bug51099/ based on revid:jon.hauglid@stripped 3146 Jon Olav Hauglid 2010-09-27 Bug #51099 Assertion in mysql_multi_delete_prepare() This assert was triggered if DELETE was done on a view that referenced another view which in turn (directly or indirectly) referenced more than one table. Delete from a view referencing more than one table (a join view) is not supported and is supposed to give ER_VIEW_DELETE_MERGE_VIEW error. Before this error was reported from the multi table delete code, an assert verified that the view from the DELETE statement had more than one underlying table. However, this assert did not take into account that the view could refer to another view which in turn referenced the actual tables. This patch fixes the problem by adjusting the assert to only verify that we are trying to insert into a view, rather than also try to verify there are more than one underlying table. This problem was only noticeable on debug builds of the server. On release builds, ER_VIEW_DELETE_MERGE_VIEW was correctly reported. 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-08-30 22:22:01 +0000 +++ b/mysql-test/r/delete.result 2010-09-27 15:25:26 +0000 @@ -509,3 +509,18 @@ CREATE TABLE t3 LIKE t1; DELETE FROM t1.*, test.t2.*, a.* USING t1, t2, t3 AS a; DROP TABLE t1, t2, t3; End of 5.1 tests +# +# Bug#51099 Assertion in mysql_multi_delete_prepare() +# +DROP TABLE IF EXISTS t1, t2; +DROP VIEW IF EXISTS v1, v2; +CREATE TABLE t1(a INT); +CREATE TABLE t2(b INT); +CREATE VIEW v1 AS SELECT a, b FROM t1, t2; +CREATE VIEW v2 AS SELECT a FROM v1; +DELETE FROM v2; +ERROR HY000: Can not delete from join view 'test.v2' +DELETE v2 FROM v2; +ERROR HY000: Can not delete from join view 'test.v2' +DROP VIEW v2, v1; +DROP TABLE t1, t2; === modified file 'mysql-test/t/delete.test' --- a/mysql-test/t/delete.test 2010-08-30 22:22:01 +0000 +++ b/mysql-test/t/delete.test 2010-09-27 15:25:26 +0000 @@ -554,3 +554,29 @@ DELETE FROM t1.*, test.t2.*, a.* USING t DROP TABLE t1, t2, t3; --echo End of 5.1 tests + + +--echo # +--echo # Bug#51099 Assertion in mysql_multi_delete_prepare() +--echo # + +--disable_warnings +DROP TABLE IF EXISTS t1, t2; +DROP VIEW IF EXISTS v1, v2; +--enable_warnings + +CREATE TABLE t1(a INT); +CREATE TABLE t2(b INT); +CREATE VIEW v1 AS SELECT a, b FROM t1, t2; +CREATE VIEW v2 AS SELECT a FROM v1; + +# This is a normal delete +--error ER_VIEW_DELETE_MERGE_VIEW +DELETE FROM v2; +# This is a multi table delete, check that we get the same error +# This caused the assertion. +--error ER_VIEW_DELETE_MERGE_VIEW +DELETE v2 FROM v2; + +DROP VIEW v2, v1; +DROP TABLE t1, t2; === modified file 'sql/sql_delete.cc' --- a/sql/sql_delete.cc 2010-07-28 11:17:19 +0000 +++ b/sql/sql_delete.cc 2010-09-27 15:25:26 +0000 @@ -524,10 +524,7 @@ int mysql_multi_delete_prepare(THD *thd) { if (!(target_tbl->table= target_tbl->correspondent_table->table)) { - DBUG_ASSERT(target_tbl->correspondent_table->view && - target_tbl->correspondent_table->merge_underlying_list && - target_tbl->correspondent_table->merge_underlying_list-> - next_local); + DBUG_ASSERT(target_tbl->correspondent_table->view); my_error(ER_VIEW_DELETE_MERGE_VIEW, MYF(0), target_tbl->correspondent_table->view_db.str, target_tbl->correspondent_table->view_name.str); --===============0005629179455884428== 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-5.5-runtime-bug51099/ # testament_sha1: 754e7958aca8a4017182b71728a40b12ca3d9a4c # timestamp: 2010-09-27 17:25:30 +0200 # source_branch: file:///export/home/x/mysql-5.5-bugfixing/ # base_revision_id: jon.hauglid@stripped\ # e1b5fpajkv23cab3 # # Begin bundle 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 4u5IpwoSEAwIZQA= --===============0005629179455884428==--