From: Martin Hansson Date: August 31 2010 8:41am Subject: bzr commit into mysql-5.1-bugteam branch (martin.hansson:3497) Bug#54543 List-Archive: http://lists.mysql.com/commits/117184 X-Bug: 54543 Message-Id: <20100831084105.AB08713F6C0@scott> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0503169000765683955==" --===============0503169000765683955== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///data0/martin/bzr/bug54543/5.1bt-commit/ based on revid:gshchepa@stripped 3497 Martin Hansson 2010-08-31 Bug#54543: update ignore with incorrect subquery leads to assertion failure: inited==INDEX When an error occurs while sending the data in a temporary table there was no cleanup performed. This caused a failed assertion in the case when different access methods were used for populating the table vs. retrieving the data from the table if IGNORE was specified and sql_safe_updates = 0. In this case execution continues, but the handler expects to continue with the access method used for row retrieval. Fixed by doing the cleanup even if errors occur. modified: mysql-test/r/multi_update.result mysql-test/t/multi_update.test sql/sql_select.cc === modified file 'mysql-test/r/multi_update.result' --- a/mysql-test/r/multi_update.result 2010-05-24 13:54:08 +0000 +++ b/mysql-test/r/multi_update.result 2010-08-31 08:41:02 +0000 @@ -639,4 +639,25 @@ SET SESSION sql_safe_updates = 1; UPDATE IGNORE t1, t1 t1a SET t1.a = 1 WHERE t1a.a = 1; ERROR HY000: You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column DROP TABLE t1; +# +# update ignore with incorrect subquery leads to assertion failure: +# inited==INDEX +# +SET SESSION sql_safe_updates = 0; +CREATE TABLE t1 ( a INT ); +INSERT INTO t1 VALUES (1), (2); +CREATE TABLE t2 ( a INT ); +INSERT INTO t2 VALUES (1), (2); +CREATE TABLE t3 ( a INT ); +INSERT INTO t3 VALUES (1), (2); +SET @v = 1; +# Should not crash +UPDATE IGNORE +( SELECT ( SELECT COUNT(*) FROM t1 GROUP BY a, @v ) a FROM t2 ) x, t3 +SET t3.a = 0; +Warnings: +Error 1242 Subquery returns more than 1 row +Error 1242 Subquery returns more than 1 row +DROP TABLE t1, t2, t3; +SET SESSION sql_safe_updates = DEFAULT; end of tests === modified file 'mysql-test/t/multi_update.test' --- a/mysql-test/t/multi_update.test 2010-05-24 13:54:08 +0000 +++ b/mysql-test/t/multi_update.test 2010-08-31 08:41:02 +0000 @@ -651,5 +651,28 @@ SET SESSION sql_safe_updates = 1; UPDATE IGNORE t1, t1 t1a SET t1.a = 1 WHERE t1a.a = 1; DROP TABLE t1; +--echo # +--echo # update ignore with incorrect subquery leads to assertion failure: +--echo # inited==INDEX +--echo # +SET SESSION sql_safe_updates = 0; +CREATE TABLE t1 ( a INT ); +INSERT INTO t1 VALUES (1), (2); + +CREATE TABLE t2 ( a INT ); +INSERT INTO t2 VALUES (1), (2); + +CREATE TABLE t3 ( a INT ); +INSERT INTO t3 VALUES (1), (2); + +SET @v = 1; + +--echo # Should not crash +UPDATE IGNORE + ( SELECT ( SELECT COUNT(*) FROM t1 GROUP BY a, @v ) a FROM t2 ) x, t3 +SET t3.a = 0; + +DROP TABLE t1, t2, t3; +SET SESSION sql_safe_updates = DEFAULT; --echo end of tests === modified file 'sql/sql_select.cc' --- a/sql/sql_select.cc 2010-08-26 09:31:04 +0000 +++ b/sql/sql_select.cc 2010-08-31 08:41:02 +0000 @@ -11080,6 +11080,11 @@ Next_select_func setup_end_select_func(J /** Make a join of all tables and write it on socket or to table. + @param table Temporary table for GROUP BY, may be null. If the table is + specified, aggregates are used with GROUP BY and an index is used to + retrieve rows, the handler is initialized for index read here. The query + block is also set to reference the temporary table. + @retval 0 if ok @retval @@ -11176,7 +11181,12 @@ do_select(JOIN *join,List *fields, DBUG_PRINT("info",("%ld records output", (long) join->send_records)); } else + { rc= -1; + if (table == NULL) + join->join_free(); + } + if (table) { int tmp, new_errno= 0; --===============0503169000765683955== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/martin.hansson@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: martin.hansson@stripped\ # c3q1ki93k8v1k84w # target_branch: file:///data0/martin/bzr/bug54543/5.1bt-commit/ # testament_sha1: 446946676791b54443edc3b431455ac6cf35f6b2 # timestamp: 2010-08-31 10:41:05 +0200 # base_revision_id: gshchepa@stripped # # Begin bundle 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 NgaSkE0CXBAymEpP8XckU4UJDFpVMBA= --===============0503169000765683955==--