From e2661bdbba9d81f00fb6ef5bdfeee343b3496ee2 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 8 Nov 2003 16:43:16 +0400 Subject: [PATCH] Fix for bug #1727 ( Crash in EXPLAIN & UNION & derived) another version of the fix. Here i removed a loop that seems to be superfluous mysql-test/r/derived.result: appropriate test result added mysql-test/t/derived.test: test case for the bug 1727 sql/sql_lex.cc: we don't need loop here --- mysql-test/r/derived.result | 17 +++++++++++++++++ mysql-test/t/derived.test | 6 ++++++ sql/sql_lex.cc | 31 ++----------------------------- 3 files changed, 25 insertions(+), 29 deletions(-) diff --git a/mysql-test/r/derived.result b/mysql-test/r/derived.result index 37742893c2b..c59b68e4c4d 100644 --- a/mysql-test/r/derived.result +++ b/mysql-test/r/derived.result @@ -228,3 +228,20 @@ id select_type table type possible_keys key key_len ref rows Extra 2 DERIVED t1 ALL NULL NULL NULL NULL 2 Using where 3 DEPENDENT SUBQUERY B ALL NULL NULL NULL NULL 2 Using where drop table t1; +create table t1 (a int); +insert into t1 values (1),(2); +select * from ( select * from t1 union select * from t1) a,(select * from t1 union select * from t1) b; +a a +1 1 +2 1 +1 2 +2 2 +explain select * from ( select * from t1 union select * from t1) a,(select * from t1 union select * from t1) b; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL NULL NULL NULL NULL 2 +1 PRIMARY ALL NULL NULL NULL NULL 2 +4 DERIVED t1 ALL NULL NULL NULL NULL 2 +5 UNION t1 ALL NULL NULL NULL NULL 2 +2 DERIVED t1 ALL NULL NULL NULL NULL 2 +3 UNION t1 ALL NULL NULL NULL NULL 2 +drop table t1; diff --git a/mysql-test/t/derived.test b/mysql-test/t/derived.test index 80b131ac6fe..ca881f73a4f 100644 --- a/mysql-test/t/derived.test +++ b/mysql-test/t/derived.test @@ -132,3 +132,9 @@ insert into t1 VALUES(1,1,1), (2,2,1); select count(*) from t1 INNER JOIN (SELECT A.E1, A.E2, A.E3 FROM t1 AS A WHERE A.E3 = (SELECT MAX(B.E3) FROM t1 AS B WHERE A.E2 = B.E2)) AS THEMAX ON t1.E1 = THEMAX.E2 AND t1.E1 = t1.E2; explain select count(*) from t1 INNER JOIN (SELECT A.E1, A.E2, A.E3 FROM t1 AS A WHERE A.E3 = (SELECT MAX(B.E3) FROM t1 AS B WHERE A.E2 = B.E2)) AS THEMAX ON t1.E1 = THEMAX.E2 AND t1.E1 = t1.E2; drop table t1; + +create table t1 (a int); +insert into t1 values (1),(2); +select * from ( select * from t1 union select * from t1) a,(select * from t1 union select * from t1) b; +explain select * from ( select * from t1 union select * from t1) a,(select * from t1 union select * from t1) b; +drop table t1; diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index a55b801a0fc..5fa6c088a16 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -1269,28 +1269,6 @@ bool st_select_lex::test_limit() return(0); } - - - - - - - - - - - - - - - - - - - - - - /* Interface method of table list creation for query @@ -1315,13 +1293,8 @@ bool st_select_lex_unit::create_total_list(THD *thd, st_lex *lex, bool check_derived) { *result= 0; - for (SELECT_LEX_UNIT *unit= this; unit; unit= unit->next_unit()) - { - if ((res= unit->create_total_list_n_last_return(thd, lex, &result, - check_derived))) - return res; - } - return 0; + res= create_total_list_n_last_return(thd, lex, &result, check_derived); + return res; } /*