From 4128ec48522534732d16a74cda006dc794748042 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 7 Jul 2011 16:28:26 +0300 Subject: Fix bug lp:806943 Analysis: This bug is yet another incarnation of the generic problem where optimization of the outer query triggers evaluation of a subquery, and this evaluation performs a destructive change to the subquery plan. Specifically a temp table is created for the DISTINCT operation that replaces the original subquery table. Later, select_describe() attempts to print the table name, however, there is no corresponding TABLE_LIST object to the internal temp table, so we get a crash. Execution works fine because it is not interested in the corresponding TABLE_LIST object (or its name). Solution: Similar to other such bugs, block the evaluation of expensive Items in convert_const_to_int(). --- mysql-test/t/subselect4.test | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'mysql-test/t/subselect4.test') diff --git a/mysql-test/t/subselect4.test b/mysql-test/t/subselect4.test index 69ef5ffbd21..1cc3a7314a3 100644 --- a/mysql-test/t/subselect4.test +++ b/mysql-test/t/subselect4.test @@ -1461,4 +1461,37 @@ WHERE t2.f2 = (SELECT f2 FROM t3 drop table t1,t2,t3,t4; +--echo # +--echo # LP BUG#806943 Second crash with select_describe with nested subqueries in maria-5.3 +--echo # + +CREATE TABLE t1 ( f4 int) ; +INSERT INTO t1 VALUES (0),(0); + +CREATE TABLE t2 ( f2 int) ; + +CREATE TABLE t3 ( f1 int NOT NULL ); + +CREATE TABLE t4 ( f2 int, f3 int) ; +INSERT INTO t4 VALUES (8,0),(3,0); + +EXPLAIN SELECT * +FROM t2, t3 +WHERE t3.f1 = ( + SELECT SUM( f2 ) + FROM t4 + WHERE EXISTS ( + SELECT DISTINCT f4 + FROM t1)); +SELECT * +FROM t2, t3 +WHERE t3.f1 = ( + SELECT SUM( f2 ) + FROM t4 + WHERE EXISTS ( + SELECT DISTINCT f4 + FROM t1)); + +drop table t1, t2, t3, t4; + set optimizer_switch=@subselect4_tmp; -- cgit v1.2.1