From: Jon Olav Hauglid Date: October 4 2010 8:25am Subject: bzr push into mysql-5.5-runtime branch (jon.hauglid:3150 to 3151) Bug#51099 List-Archive: http://lists.mysql.com/commits/119789 X-Bug: 51099 Message-Id: <201010040826.o948Qj3p030114@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============4010709284509499340==" --===============4010709284509499340== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline 3151 Jon Olav Hauglid 2010-10-04 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 take this possibility into account. 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 3150 Dmitry Lenev 2010-09-30 Reverted a temporary workaround for bug #56405 "Deadlock in the MDL deadlock detector". It is no longer needed as a better fix for this bug has been pushed. modified: mysql-test/suite/perfschema/r/dml_setup_instruments.result sql/mdl.cc sql/mdl.h sql/sql_base.cc sql/sql_base.h sql/table.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-10-04 08:25:04 +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-10-04 08:25:04 +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-10-04 08:25:04 +0000 @@ -525,9 +525,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); + target_tbl->correspondent_table->multitable_view); my_error(ER_VIEW_DELETE_MERGE_VIEW, MYF(0), target_tbl->correspondent_table->view_db.str, target_tbl->correspondent_table->view_name.str); --===============4010709284509499340== 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: 8a6f5651bd5603972d04fb6b22bef6429c34d0c3 # timestamp: 2010-10-04 10:25:44 +0200 # source_branch: file:///export/home/x/mysql-5.5-bugfixing/ # base_revision_id: dmitry.lenev@stripped\ # bmit2vzuopz3r2ub # # Begin bundle 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 --===============4010709284509499340==--