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.
This commit is contained in:
parent
c1feaf8d8a
commit
b95ae56b9f
@ -4453,6 +4453,25 @@ UPDATE t2 SET d=7;
|
|||||||
DROP TRIGGER tr;
|
DROP TRIGGER tr;
|
||||||
DROP VIEW v;
|
DROP VIEW v;
|
||||||
DROP TABLE t1,t2,t3;
|
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.
|
# -- End of 5.3 tests.
|
||||||
# -----------------------------------------------------------------
|
# -----------------------------------------------------------------
|
||||||
|
@ -4394,6 +4394,32 @@ DROP TRIGGER tr;
|
|||||||
DROP VIEW v;
|
DROP VIEW v;
|
||||||
DROP TABLE t1,t2,t3;
|
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 # -----------------------------------------------------------------
|
||||||
--echo # -- End of 5.3 tests.
|
--echo # -- End of 5.3 tests.
|
||||||
--echo # -----------------------------------------------------------------
|
--echo # -----------------------------------------------------------------
|
||||||
|
@ -2727,7 +2727,7 @@ void subselect_uniquesubquery_engine::cleanup()
|
|||||||
{
|
{
|
||||||
DBUG_ENTER("subselect_uniquesubquery_engine::cleanup");
|
DBUG_ENTER("subselect_uniquesubquery_engine::cleanup");
|
||||||
/* Tell handler we don't need the index anymore */
|
/* 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();
|
tab->table->file->ha_index_end();
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
@ -15116,6 +15116,7 @@ free_tmp_table(THD *thd, TABLE *entry)
|
|||||||
else
|
else
|
||||||
entry->file->ha_delete_table(entry->s->table_name.str);
|
entry->file->ha_delete_table(entry->s->table_name.str);
|
||||||
delete entry->file;
|
delete entry->file;
|
||||||
|
entry->file= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* free blobs */
|
/* free blobs */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user