From 1ba35900d661ef789257193541d472ced62d464c Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 24 Oct 2003 20:09:57 +0300 Subject: [PATCH 1/2] made 'TODO' --- sql/sql_parse.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index e8870b20d99..c4f70a6bfb3 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -3668,7 +3668,6 @@ mysql_new_select(LEX *lex, bool move_down) unit->link_prev= 0; unit->return_to= lex->current_select; select_lex->include_down(unit); - // TODO: assign resolve_mode for fake subquery after merging with new tree } else { @@ -3688,6 +3687,7 @@ mysql_new_select(LEX *lex, bool move_down) fake->make_empty_select(); fake->linkage= GLOBAL_OPTIONS_TYPE; fake->select_limit= lex->thd->variables.select_limit; + fake->resolve_mode= SELECT_LEX::SELECT_MODE; } } From d679b52e0fdef5f7dfc8117a6bd3e2db1c922f1a Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 25 Oct 2003 16:29:35 +0300 Subject: [PATCH 2/2] fixed unlinking SELECT methods --- sql/sql_lex.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 5b05bf096cb..352a79843a9 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -1112,8 +1112,11 @@ void st_select_lex_unit::exclude_level() SELECT_LEX_UNIT *units= 0, **units_last= &units; for (SELECT_LEX *sl= first_select(); sl; sl= sl->next_select()) { + // unlink current level from global SELECTs list if (sl->link_prev && (*sl->link_prev= sl->link_next)) sl->link_next->link_prev= sl->link_prev; + + // bring up underlay levels SELECT_LEX_UNIT **last= 0; for (SELECT_LEX_UNIT *u= sl->first_inner_unit(); u; u= u->next_unit()) { @@ -1128,11 +1131,20 @@ void st_select_lex_unit::exclude_level() } if (units) { + // include brought up levels in place of current (*prev)= units; (*units_last)= (SELECT_LEX_UNIT*)next; + if (next) + next->prev= (SELECT_LEX_NODE**)units_last; + units->prev= prev; } else + { + // exclude currect unit from list of nodes (*prev)= next; + if (next) + next->prev= prev; + } } @@ -1147,15 +1159,20 @@ void st_select_lex_unit::exclude_tree() SELECT_LEX_UNIT *units= 0, **units_last= &units; for (SELECT_LEX *sl= first_select(); sl; sl= sl->next_select()) { + // unlink current level from global SELECTs list if (sl->link_prev && (*sl->link_prev= sl->link_next)) sl->link_next->link_prev= sl->link_prev; + // unlink underlay levels for (SELECT_LEX_UNIT *u= sl->first_inner_unit(); u; u= u->next_unit()) { u->exclude_level(); } } + // exclude currect unit from list of nodes (*prev)= next; + if (next) + next->prev= prev; }