Skip to content

Commit

Permalink
MDEV-15572: view.test, server crash with --big-tables=1
Browse files Browse the repository at this point in the history
Check that table is really opened before cleanup using handler.
  • Loading branch information
sanja-byelkin committed Jul 18, 2019
1 parent 1a79a29 commit cc86a0b
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 1 deletion.
15 changes: 15 additions & 0 deletions mysql-test/r/view.result
Original file line number Diff line number Diff line change
Expand Up @@ -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.
# -----------------------------------------------------------------
Expand Down
20 changes: 20 additions & 0 deletions mysql-test/t/view.test
Original file line number Diff line number Diff line change
Expand Up @@ -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 # -----------------------------------------------------------------
Expand Down
6 changes: 5 additions & 1 deletion sql/sql_insert.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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;
/*
Expand Down

0 comments on commit cc86a0b

Please sign in to comment.