Skip to content
Permalink
Browse files

MDEV-15572: view.test, server crash with --big-tables=1

Check that table is really opened before cleanup using handler.
  • Loading branch information...
Oleksandr Byelkin
Oleksandr Byelkin committed Jul 11, 2019
1 parent 1a79a29 commit cc86a0bd11a436dfe4df0622481c571f83b1680a
Showing with 40 additions and 1 deletion.
  1. +15 −0 mysql-test/r/view.result
  2. +20 −0 mysql-test/t/view.test
  3. +5 −1 sql/sql_insert.cc
@@ -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.
# -----------------------------------------------------------------
@@ -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 # -----------------------------------------------------------------
@@ -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;
/*

0 comments on commit cc86a0b

Please sign in to comment.
You can’t perform that action at this time.