Bug#57704 Cleanup code dies with void TABLE::set_keyread(bool): Assertion `file' failed.
This bug was introduced in this revision: kostja@sun.com-20100727102553-b4n2ojcyfj79l2x7 ("A pre-requisite patch for the fix for Bug#52044.") It happens because close_thread_tables() is now called in open_and_lock_tables upon failure. Hence, table is no longer open when optimizer tries to do cleanup. Fix: Make sure to do cleanup in st_select_lex_unit::prepare() upon failure. This way, cleanup() is called before tables are released.
This commit is contained in:
parent
05e307ae00
commit
117c19c262
@ -5005,3 +5005,15 @@ SELECT * FROM t2 UNION SELECT * FROM t2
|
|||||||
ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE));
|
ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE));
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
#
|
||||||
|
# Bug #57704: Cleanup code dies with void TABLE::set_keyread(bool):
|
||||||
|
# Assertion `file' failed.
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
SELECT 1 FROM
|
||||||
|
(SELECT ROW(
|
||||||
|
(SELECT 1 FROM t1 RIGHT JOIN
|
||||||
|
(SELECT 1 FROM t1, t1 t2) AS d ON 1),
|
||||||
|
1) FROM t1) AS e;
|
||||||
|
ERROR 21000: Operand should contain 1 column(s)
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -3946,3 +3946,21 @@ DROP TABLE t1,t2;
|
|||||||
--enable_result_log
|
--enable_result_log
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug #57704: Cleanup code dies with void TABLE::set_keyread(bool):
|
||||||
|
--echo # Assertion `file' failed.
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
|
||||||
|
--error ER_OPERAND_COLUMNS
|
||||||
|
SELECT 1 FROM
|
||||||
|
(SELECT ROW(
|
||||||
|
(SELECT 1 FROM t1 RIGHT JOIN
|
||||||
|
(SELECT 1 FROM t1, t1 t2) AS d ON 1),
|
||||||
|
1) FROM t1) AS e;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
|
@ -434,6 +434,7 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
|
|||||||
|
|
||||||
err:
|
err:
|
||||||
thd_arg->lex->current_select= lex_select_save;
|
thd_arg->lex->current_select= lex_select_save;
|
||||||
|
(void) cleanup();
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user