diff options
author | Oleksandr Byelkin <sanja@mariadb.com> | 2019-07-11 14:50:50 +0200 |
---|---|---|
committer | Oleksandr Byelkin <sanja@mariadb.com> | 2019-07-18 10:01:53 +0200 |
commit | cc86a0bd11a436dfe4df0622481c571f83b1680a (patch) | |
tree | 6678675e05db8d4c0587e21521f7d655ca33ae51 | |
parent | 1a79a29c87eca4dffa393796b7dc4deb62eb0865 (diff) | |
download | mariadb-git-cc86a0bd11a436dfe4df0622481c571f83b1680a.tar.gz |
MDEV-15572: view.test, server crash with --big-tables=1
Check that table is really opened before cleanup using handler.
-rw-r--r-- | mysql-test/r/view.result | 15 | ||||
-rw-r--r-- | mysql-test/t/view.test | 20 | ||||
-rw-r--r-- | sql/sql_insert.cc | 6 |
3 files changed, 40 insertions, 1 deletions
diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result index 7fc3c48c3a0..98692a0b8ee 100644 --- a/mysql-test/r/view.result +++ b/mysql-test/r/view.result @@ -5732,6 +5732,21 @@ t37, t38, t39, t40, t41, t42, t43, t44, t45, t46, t47, t48, t49, t50, t51, t52, t53, t54, t55, t56, t57, t58, t59,t60; drop view v60; +# +# MDEV-15572: view.test, server crash with --big-tables=1 +# +set @save_big_tables=@@big_tables; +set big_tables=ON; +CREATE TABLE t1 ( f1 int , f2 int , f3 int , f4 int); +CREATE TABLE t2 ( f1 int , f2 int , f3 int , f4 int); +CREATE VIEW v1 AS +SELECT t2.f1, t1.f2, t2.f3, t2.f4 FROM (t1 JOIN t2); +REPLACE INTO v1 (f1, f2, f3, f4) +SELECT f1, f2, f3, f4 FROM t1; +ERROR HY000: Can not modify more than one base table through a join view 'test.v1' +drop view v1; +drop table t1, t2; +set big_tables=@save_big_tables; # ----------------------------------------------------------------- # -- End of 5.5 tests. # ----------------------------------------------------------------- diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test index 835f12957d4..0c4680eb5d2 100644 --- a/mysql-test/t/view.test +++ b/mysql-test/t/view.test @@ -5674,6 +5674,26 @@ t46, t47, t48, t49, t50, t51, t52, t53, t54, t55, t56, t57, t58, t59,t60; drop view v60; +--echo # +--echo # MDEV-15572: view.test, server crash with --big-tables=1 +--echo # + +set @save_big_tables=@@big_tables; +set big_tables=ON; +CREATE TABLE t1 ( f1 int , f2 int , f3 int , f4 int); +CREATE TABLE t2 ( f1 int , f2 int , f3 int , f4 int); + +CREATE VIEW v1 AS + SELECT t2.f1, t1.f2, t2.f3, t2.f4 FROM (t1 JOIN t2); + +--error ER_VIEW_MULTIUPDATE +REPLACE INTO v1 (f1, f2, f3, f4) + SELECT f1, f2, f3, f4 FROM t1; + +drop view v1; +drop table t1, t2; +set big_tables=@save_big_tables; + --echo # ----------------------------------------------------------------- --echo # -- End of 5.5 tests. --echo # ----------------------------------------------------------------- diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 8f5ef0b531c..ddf9bd155a9 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -3743,8 +3743,12 @@ void select_insert::abort_result_set() { example), no table will have been opened and therefore 'table' will be NULL. In that case, we still need to execute the rollback and the end of the function. + + If it fail due to inability to insert in multi-table view for example, + table will be assigned with view table structure, but that table will + not be opened really (it is dummy to check fields types & Co). */ - if (table) + if (table && table->file->get_table()) { bool changed, transactional_table; /* |