From: Date: July 3 2009 10:43am Subject: bzr commit into mysql-pe branch (Sergey.Glukhov:3426) List-Archive: http://lists.mysql.com/commits/77866 Message-Id: <0KM70036P9OR7QC0@fe-emea-09.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_vubKLxh9iJmCtNJ5ih+QSA)" --Boundary_(ID_vubKLxh9iJmCtNJ5ih+QSA) MIME-version: 1.0 Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT Content-disposition: inline #At file:///home/gluh/MySQL/mysql-6.0-bugteam/ based on revid:sergey.glukhov@stripped 3426 Sergey Glukhov 2009-07-03 [merge] 5.1-bugteam->6.0-bugteam merge @ mysql-test/r/view.result 5.1-bugteam->6.0-bugteam merge @ mysql-test/t/view.test 5.1-bugteam->6.0-bugteam merge @ sql/sql_insert.cc 5.1-bugteam->6.0-bugteam merge modified: mysql-test/r/view.result mysql-test/t/view.test sql/sql_insert.cc === modified file 'mysql-test/r/view.result' --- a/mysql-test/r/view.result 2009-05-19 04:47:24 +0000 +++ b/mysql-test/r/view.result 2009-07-03 08:42:46 +0000 @@ -3719,6 +3719,117 @@ DROP TABLE t1; # -- End of test case for Bug#40825 +# +# Bug #45806 crash when replacing into a view with a join! +# +CREATE TABLE t1(a INT UNIQUE); +CREATE VIEW v1 AS SELECT t1.a FROM t1, t1 AS a; +INSERT INTO t1 VALUES (1), (2); +REPLACE INTO v1(a) SELECT 1 FROM t1,t1 AS c; +SELECT * FROM v1; +a +1 +2 +1 +2 +REPLACE INTO v1(a) SELECT 3 FROM t1,t1 AS c; +SELECT * FROM v1; +a +1 +2 +3 +1 +2 +3 +1 +2 +3 +DELETE FROM t1 WHERE a=3; +INSERT INTO v1(a) SELECT 1 FROM t1,t1 AS c +ON DUPLICATE KEY UPDATE `v1`.`a`= 1; +SELECT * FROM v1; +a +1 +2 +1 +2 +CREATE VIEW v2 AS SELECT t1.a FROM t1, v1 AS a; +REPLACE INTO v2(a) SELECT 1 FROM t1,t1 AS c; +SELECT * FROM v2; +a +1 +2 +1 +2 +1 +2 +1 +2 +REPLACE INTO v2(a) SELECT 3 FROM t1,t1 AS c; +SELECT * FROM v2; +a +1 +2 +3 +1 +2 +3 +1 +2 +3 +1 +2 +3 +1 +2 +3 +1 +2 +3 +1 +2 +3 +1 +2 +3 +1 +2 +3 +INSERT INTO v2(a) SELECT 1 FROM t1,t1 AS c +ON DUPLICATE KEY UPDATE `v2`.`a`= 1; +SELECT * FROM v2; +a +1 +2 +3 +1 +2 +3 +1 +2 +3 +1 +2 +3 +1 +2 +3 +1 +2 +3 +1 +2 +3 +1 +2 +3 +1 +2 +3 +DROP VIEW v1; +DROP VIEW v2; +DROP TABLE t1; +# -- End of test case for Bug#45806 # ----------------------------------------------------------------- # -- End of 5.0 tests. # ----------------------------------------------------------------- === modified file 'mysql-test/t/view.test' --- a/mysql-test/t/view.test 2009-05-19 04:47:24 +0000 +++ b/mysql-test/t/view.test 2009-07-03 08:42:46 +0000 @@ -3704,6 +3704,38 @@ DROP TABLE t1; --echo # -- End of test case for Bug#40825 --echo +--echo # +--echo # Bug #45806 crash when replacing into a view with a join! +--echo # +CREATE TABLE t1(a INT UNIQUE); +CREATE VIEW v1 AS SELECT t1.a FROM t1, t1 AS a; +INSERT INTO t1 VALUES (1), (2); + +REPLACE INTO v1(a) SELECT 1 FROM t1,t1 AS c; +SELECT * FROM v1; +REPLACE INTO v1(a) SELECT 3 FROM t1,t1 AS c; +SELECT * FROM v1; +DELETE FROM t1 WHERE a=3; +INSERT INTO v1(a) SELECT 1 FROM t1,t1 AS c +ON DUPLICATE KEY UPDATE `v1`.`a`= 1; +SELECT * FROM v1; + +CREATE VIEW v2 AS SELECT t1.a FROM t1, v1 AS a; + +REPLACE INTO v2(a) SELECT 1 FROM t1,t1 AS c; +SELECT * FROM v2; +REPLACE INTO v2(a) SELECT 3 FROM t1,t1 AS c; +SELECT * FROM v2; +INSERT INTO v2(a) SELECT 1 FROM t1,t1 AS c +ON DUPLICATE KEY UPDATE `v2`.`a`= 1; +SELECT * FROM v2; + +DROP VIEW v1; +DROP VIEW v2; +DROP TABLE t1; + +--echo # -- End of test case for Bug#45806 + --echo # ----------------------------------------------------------------- --echo # -- End of 5.0 tests. --echo # ----------------------------------------------------------------- === modified file 'sql/sql_insert.cc' --- a/sql/sql_insert.cc 2009-06-23 11:37:39 +0000 +++ b/sql/sql_insert.cc 2009-07-03 08:42:46 +0000 @@ -1142,6 +1142,33 @@ static bool mysql_prepare_insert_check_t /* + Get extra info for tables we insert into + + @param table table(TABLE object) we insert into, + might be NULL in case of view + @param table(TABLE_LIST object) or view we insert into +*/ + +static void prepare_for_positional_update(TABLE *table, TABLE_LIST *tables) +{ + if (table) + { + if(table->reginfo.lock_type != TL_WRITE_DELAYED) + table->prepare_for_position(); + return; + } + + DBUG_ASSERT(tables->view); + List_iterator it(*tables->view_tables); + TABLE_LIST *tbl; + while ((tbl= it++)) + prepare_for_positional_update(tbl->table, tbl); + + return; +} + + +/* Prepare items in INSERT statement SYNOPSIS @@ -1290,9 +1317,8 @@ bool mysql_prepare_insert(THD *thd, TABL Only call prepare_for_posistion() if we are not performing a DELAYED operation. It will instead be executed by delayed insert thread. */ - if ((duplic == DUP_UPDATE || duplic == DUP_REPLACE) && - (table->reginfo.lock_type != TL_WRITE_DELAYED)) - table->prepare_for_position(); + if (duplic == DUP_UPDATE || duplic == DUP_REPLACE) + prepare_for_positional_update(table, table_list); DBUG_RETURN(FALSE); } --Boundary_(ID_vubKLxh9iJmCtNJ5ih+QSA) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name="bzr/sergey.glukhov@stripped" Content-transfer-encoding: 7BIT Content-disposition: inline; filename="bzr/sergey.glukhov@stripped" # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: sergey.glukhov@stripped # target_branch: file:///home/gluh/MySQL/mysql-6.0-bugteam/ # testament_sha1: abacb372542a9f2355d47a083b40686d93574943 # timestamp: 2009-07-03 13:43:41 +0500 # source_branch: file:///home/gluh/MySQL/mysql-5.1-bugteam/ # base_revision_id: sergey.glukhov@stripped\ # 7hcsbiaw091ieyb3 # # Begin bundle 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 fIA= --Boundary_(ID_vubKLxh9iJmCtNJ5ih+QSA)--