diff options
author | Alexander Barkov <bar@mariadb.org> | 2017-10-18 14:11:55 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.org> | 2017-10-18 14:11:55 +0400 |
commit | 30e7d6709f7fb0f70a07c80a1a06614ca23da5f4 (patch) | |
tree | 9ba11fd32d82ac5c1364a537532ac896c4dd2058 /sql/sql_lex.cc | |
parent | 75aabd03d57f85d63d57b25a239b4f930a3ae3c0 (diff) | |
parent | 3bc094d32a360b7d51600cf11bc4ce24117ecb78 (diff) | |
download | mariadb-git-30e7d6709f7fb0f70a07c80a1a06614ca23da5f4.tar.gz |
Merge remote-tracking branch 'origin/10.2' into bb-10.2-ext
Diffstat (limited to 'sql/sql_lex.cc')
-rw-r--r-- | sql/sql_lex.cc | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index a479fc9fe30..5f198e40254 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -2392,6 +2392,30 @@ st_select_lex_node *st_select_lex_node:: insert_chain_before( return this; } + +/* + Detach the node from its master and attach it to a new master +*/ + +void st_select_lex_node::move_as_slave(st_select_lex_node *new_master) +{ + exclude_from_tree(); + if (new_master->slave) + { + st_select_lex_node *curr= new_master->slave; + for ( ; curr->next ; curr= curr->next) ; + prev= &curr->next; + } + else + { + prev= &new_master->slave; + new_master->slave= this; + } + next= 0; + master= new_master; +} + + /* Exclude a node from the tree lex structure, but leave it in the global list of nodes. @@ -4521,7 +4545,8 @@ void st_select_lex::set_explain_type(bool on_the_fly) pos_in_table_list=NULL for e.g. post-join aggregation JOIN_TABs. */ if (tab->table && tab->table->pos_in_table_list && - tab->table->pos_in_table_list->with) + tab->table->pos_in_table_list->with && + tab->table->pos_in_table_list->with->is_recursive) { uses_cte= true; break; |