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
3425 Sergey Glukhov 2009-07-03 [merge]
5.1-bugteam->6.0-bugteam merge
@ mysql-test/r/warnings.result
5.1-bugteam->6.0-bugteam merge
@ mysql-test/t/warnings.test
5.1-bugteam->6.0-bugteam merge
@ tests/mysql_client_test.c
5.1-bugteam->6.0-bugteam merge
modified:
mysql-test/r/warnings.result
mysql-test/t/warnings.test
tests/mysql_client_test.c
3424 Bernt M. Johnsen 2009-07-03 [merge]
Prepare for push
modified:
mysql-test/r/sp-fib.result
mysql-test/t/sp-fib.test
=== 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/r/warnings.result'
--- a/mysql-test/r/warnings.result 2009-02-19 14:10:58 +0000
+++ b/mysql-test/r/warnings.result 2009-07-03 08:31:12 +0000
@@ -310,4 +310,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: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 'mysql-test/t/warnings.test'
--- a/mysql-test/t/warnings.test 2009-02-05 10:05:23 +0000
+++ b/mysql-test/t/warnings.test 2009-07-03 08:31:12 +0000
@@ -220,4 +220,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-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<TABLE_LIST> 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);
}
=== modified file 'tests/mysql_client_test.c'
--- a/tests/mysql_client_test.c 2009-07-01 12:34:23 +0000
+++ b/tests/mysql_client_test.c 2009-07-03 08:31:12 +0000
@@ -5358,6 +5358,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);
}
Attachment: [text/bzr-bundle] bzr/sergey.glukhov@sun.com-20090703084246-enrwy4y38vlnumrw.bundle
| Thread |
|---|
| • bzr push into mysql-pe branch (Sergey.Glukhov:3424 to 3426) | Sergey Glukhov | 3 Jul 2009 |