From: Date: July 3 2009 10:40am Subject: bzr commit into mysql-5.1-bugteam branch (Sergey.Glukhov:2995) List-Archive: http://lists.mysql.com/commits/77861 Message-Id: <0KM7006F99J0MV00@fe-emea-10.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_yssboRR02pcZ3n7g8jwfKg)" --Boundary_(ID_yssboRR02pcZ3n7g8jwfKg) MIME-version: 1.0 Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT Content-disposition: inline #At file:///home/gluh/MySQL/mysql-5.1-bugteam/ based on revid:sergey.glukhov@stripped 2995 Sergey Glukhov 2009-07-03 [merge] 5.0-bugteam->5.1-bugteam merge @ mysql-test/r/view.result 5.0-bugteam->5.1-bugteam merge @ mysql-test/t/view.test 5.0-bugteam->5.1-bugteam merge @ sql/sql_insert.cc 5.0-bugteam->5.1-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:25:36 +0000 +++ b/mysql-test/r/view.result 2009-07-03 08:39:22 +0000 @@ -3718,6 +3718,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:25:36 +0000 +++ b/mysql-test/t/view.test 2009-07-03 08:39:22 +0000 @@ -3703,6 +3703,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-22 14:01:42 +0000 +++ b/sql/sql_insert.cc 2009-07-03 08:39:22 +0000 @@ -1116,6 +1116,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 @@ -1264,9 +1291,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_yssboRR02pcZ3n7g8jwfKg) 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-5.1-bugteam/ # testament_sha1: 5c32f757810c33f5686bc2d854a262c703cc3200 # timestamp: 2009-07-03 13:40:14 +0500 # source_branch: bzr+ssh://sgluhov@stripped/bzrroot\ # /server/mysql-5.1-bugteam/ # base_revision_id: sergey.glukhov@stripped\ # hlae0y0upf3dvzx4 # # Begin bundle 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 /8XckU4UJCI6nPsA --Boundary_(ID_yssboRR02pcZ3n7g8jwfKg)--