summaryrefslogtreecommitdiff
path: root/sql/sql_parse.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_parse.cc')
-rw-r--r--sql/sql_parse.cc11
1 files changed, 8 insertions, 3 deletions
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 2f4915c74f1..d0a970c98b7 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -3235,7 +3235,8 @@ mysql_init_query(THD *thd)
lex->select_lex.init_query();
lex->value_list.empty();
lex->param_list.empty();
- lex->unit.next= lex->unit.master= lex->unit.link_next= 0;
+ lex->unit.next= lex->unit.master= lex->unit.return_to=
+ lex->unit.link_next= 0;
lex->unit.prev= lex->unit.link_prev= 0;
lex->unit.global_parameters= lex->unit.slave= lex->current_select=
lex->all_selects_list= &lex->select_lex;
@@ -3283,9 +3284,9 @@ bool
mysql_new_select(LEX *lex, bool move_down)
{
SELECT_LEX *select_lex = new SELECT_LEX();
- select_lex->select_number= ++lex->thd->select_number;
if (!select_lex)
return 1;
+ select_lex->select_number= ++lex->thd->select_number;
select_lex->init_query();
select_lex->init_select();
if (move_down)
@@ -3297,9 +3298,13 @@ mysql_new_select(LEX *lex, bool move_down)
unit->init_query();
unit->init_select();
unit->thd= lex->thd;
- unit->include_down(lex->current_select);
+ if (lex->current_select->linkage == GLOBAL_OPTIONS_TYPE)
+ unit->include_neighbour(lex->current_select);
+ else
+ unit->include_down(lex->current_select);
unit->link_next= 0;
unit->link_prev= 0;
+ unit->return_to= lex->current_select;
select_lex->include_down(unit);
}
else