From: Date: July 3 2009 10:45am Subject: bzr push into mysql-5.1-bugteam branch (Sergey.Glukhov:2993 to 2995) List-Archive: http://lists.mysql.com/commits/77863 Message-Id: <0KM7006S89S8MV30@fe-emea-10.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_8jVC7Glg3YZfcEpEj7Hcbg)" --Boundary_(ID_8jVC7Glg3YZfcEpEj7Hcbg) MIME-version: 1.0 Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT Content-disposition: inline 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 2994 Sergey Glukhov 2009-07-03 Bug#42364 SHOW ERRORS returns empty resultset after dropping non existent table enabled message storing into error message list for 'drop table' command @ mysql-test/r/warnings.result test result @ mysql-test/t/warnings.test test case @ sql/sql_table.cc We should skip error sending then we should return warnings to client as some functions may send its own errors, so we should set no_warnings_for_error= 0 only in case of warning. The fix is to enable message storing into error message list for 'drop table' command(only for error case). @ tests/mysql_client_test.c test fix modified: mysql-test/r/warnings.result mysql-test/t/warnings.test sql/sql_table.cc tests/mysql_client_test.c 2993 Bernt M. Johnsen 2009-07-03 [merge] automerge modified: mysql-test/r/partition.result mysql-test/suite/rpl/t/rpl_sp.test mysql-test/t/partition.test sql/item.cc sql/sql_partition.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/r/warnings.result' --- a/mysql-test/r/warnings.result 2009-02-16 11:38:15 +0000 +++ b/mysql-test/r/warnings.result 2009-07-03 08:22:06 +0000 @@ -313,4 +313,9 @@ ERROR 22001: Data too long for column 'c insert into t2 values(@q); ERROR 22001: Data too long for column 'c_tinyblob' at row 1 drop table t1, t2; +DROP TABLE t1; +ERROR 42S02: Unknown table 't1' +SHOW ERRORS; +Level Code Message +Error 1051 Unknown table 't1' 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 'mysql-test/t/warnings.test' --- a/mysql-test/t/warnings.test 2009-02-05 09:49:32 +0000 +++ b/mysql-test/t/warnings.test 2009-07-03 08:22:06 +0000 @@ -225,4 +225,11 @@ insert into t2 values(@q); drop table t1, t2; +# +# Bug#42364 SHOW ERRORS returns empty resultset after dropping non existent table +# +--error ER_BAD_TABLE_ERROR +DROP TABLE t1; +SHOW ERRORS; + --echo End of 5.0 tests === 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); } === modified file 'sql/sql_table.cc' --- a/sql/sql_table.cc 2009-06-29 14:00:47 +0000 +++ b/sql/sql_table.cc 2009-07-03 08:22:06 +0000 @@ -1995,6 +1995,7 @@ int mysql_rm_table_part2(THD *thd, TABLE pthread_mutex_unlock(&LOCK_open); thd->thread_specific_used|= tmp_table_deleted; error= 0; + thd->no_warnings_for_error= 0; if (wrong_tables.length()) { if (!foreign_key_error) @@ -2056,7 +2057,6 @@ int mysql_rm_table_part2(THD *thd, TABLE err_with_placeholders: unlock_table_names(thd, tables, (TABLE_LIST*) 0); pthread_mutex_unlock(&LOCK_open); - thd->no_warnings_for_error= 0; DBUG_RETURN(error); } === modified file 'tests/mysql_client_test.c' --- a/tests/mysql_client_test.c 2009-07-01 12:32:04 +0000 +++ b/tests/mysql_client_test.c 2009-07-03 08:22:06 +0000 @@ -4769,6 +4769,8 @@ static void test_errors() result= mysql_store_result(mysql); mytest(result); + DIE_UNLESS(mysql_num_rows(result) == 1); + (void) my_process_result_set(result); mysql_free_result(result); } --Boundary_(ID_8jVC7Glg3YZfcEpEj7Hcbg) 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:45:46 +0500 # source_branch: bzr+ssh://sgluhov@stripped/bzrroot\ # /server/mysql-5.1-bugteam/ # base_revision_id: bernt.johnsen@stripped\ # 4mmotptrkcpa3skh # # Begin bundle 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 --Boundary_(ID_8jVC7Glg3YZfcEpEj7Hcbg)--