diff options
Diffstat (limited to 'sql/sql_lex.cc')
-rw-r--r-- | sql/sql_lex.cc | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 65644b93331..c50321ebed7 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -1062,6 +1062,31 @@ void st_select_lex_node::exclude() */ } +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()) + { + if (sl->link_prev && (*sl->link_prev= sl->link_next)) + sl->link_next->link_prev= sl->link_prev; + SELECT_LEX_UNIT **last= 0; + for (SELECT_LEX_UNIT *u= sl->first_inner_unit(); u; u= u->next_unit()) + last= (SELECT_LEX_UNIT**)&(u->next); + if (last) + { + (*units_last)= sl->first_inner_unit(); + units_last= last; + } + } + if (units) + { + (*prev)= units; + (*units_last)= (SELECT_LEX_UNIT*)next; + } + else + (*prev)= next; +} + st_select_lex* st_select_lex_node::select_lex() { DBUG_ENTER("st_select_lex_node::select_lex (never should be called)"); |