diff options
author | Igor Babaev <igor@askmonty.org> | 2012-04-07 02:29:04 -0700 |
---|---|---|
committer | Igor Babaev <igor@askmonty.org> | 2012-04-07 02:29:04 -0700 |
commit | b95ae56b9f47cc19d3498d4be3142b2449a04600 (patch) | |
tree | 847bcf8624f1e569ab03db01bf7d596b7d848ac7 | |
parent | c1feaf8d8a7ac15554e2db6c4b2222517447fe3d (diff) | |
download | mariadb-git-b95ae56b9f47cc19d3498d4be3142b2449a04600.tar.gz |
Fixed LP bug #972973.
When the function free_tmp_table deletes the handler object for
a temporary table the field TABLE::file for this table should be
set to NULL. Otherwise an assertion failure may occur.
-rw-r--r-- | mysql-test/r/view.result | 19 | ||||
-rw-r--r-- | mysql-test/t/view.test | 26 | ||||
-rw-r--r-- | sql/item_subselect.cc | 2 | ||||
-rw-r--r-- | sql/sql_select.cc | 1 |
4 files changed, 47 insertions, 1 deletions
diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result index b4e6f194058..a1b36c323c7 100644 --- a/mysql-test/r/view.result +++ b/mysql-test/r/view.result @@ -4453,6 +4453,25 @@ UPDATE t2 SET d=7; DROP TRIGGER tr; DROP VIEW v; DROP TABLE t1,t2,t3; +# +# BUG#972943: Assertion failure with INSERT SELECT within a trigger +# that uses derived table and materialized view +# +CREATE TABLE t1 (a int, b int); +INSERT INTO t1 VALUES (1,0), (2,8); +CREATE ALGORITHM=TEMPTABLE VIEW v1 +AS SELECT * FROM t1; +CREATE TABLE t2 (c int); +CREATE TABLE t3 (d int, e int); +CREATE TRIGGER tr BEFORE INSERT ON t2 FOR EACH ROW +INSERT INTO t3 +SELECT t1.* +FROM (SELECT * FROM t1 WHERE b IN (SELECT b FROM v1)) AS alias1, t1 +WHERE t1.a = 3 OR t1.a > 5; +INSERT INTO t2 VALUES (1); +DROP TRIGGER tr; +DROP VIEW v1; +DROP TABLE t1,t2,t3; # ----------------------------------------------------------------- # -- End of 5.3 tests. # ----------------------------------------------------------------- diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test index 4820e0ac173..93e0cce8a5d 100644 --- a/mysql-test/t/view.test +++ b/mysql-test/t/view.test @@ -4394,6 +4394,32 @@ DROP TRIGGER tr; DROP VIEW v; DROP TABLE t1,t2,t3; +--echo # +--echo # BUG#972943: Assertion failure with INSERT SELECT within a trigger +--echo # that uses derived table and materialized view +--echo # + +CREATE TABLE t1 (a int, b int); +INSERT INTO t1 VALUES (1,0), (2,8); + +CREATE ALGORITHM=TEMPTABLE VIEW v1 + AS SELECT * FROM t1; + +CREATE TABLE t2 (c int); +CREATE TABLE t3 (d int, e int); + +CREATE TRIGGER tr BEFORE INSERT ON t2 FOR EACH ROW + INSERT INTO t3 + SELECT t1.* + FROM (SELECT * FROM t1 WHERE b IN (SELECT b FROM v1)) AS alias1, t1 + WHERE t1.a = 3 OR t1.a > 5; + +INSERT INTO t2 VALUES (1); + +DROP TRIGGER tr; +DROP VIEW v1; +DROP TABLE t1,t2,t3; + --echo # ----------------------------------------------------------------- --echo # -- End of 5.3 tests. --echo # ----------------------------------------------------------------- diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index c4055606039..a1059f68097 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -2727,7 +2727,7 @@ void subselect_uniquesubquery_engine::cleanup() { DBUG_ENTER("subselect_uniquesubquery_engine::cleanup"); /* Tell handler we don't need the index anymore */ - if (tab->table->file->inited) + if (tab->table->file && tab->table->file->inited) tab->table->file->ha_index_end(); DBUG_VOID_RETURN; } diff --git a/sql/sql_select.cc b/sql/sql_select.cc index a29b6f90be0..1049fc93d01 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -15116,6 +15116,7 @@ free_tmp_table(THD *thd, TABLE *entry) else entry->file->ha_delete_table(entry->s->table_name.str); delete entry->file; + entry->file= 0; } /* free blobs */ |