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_cte.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_cte.cc')
-rw-r--r-- | sql/sql_cte.cc | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/sql/sql_cte.cc b/sql/sql_cte.cc index c163044547f..54a56103d21 100644 --- a/sql/sql_cte.cc +++ b/sql/sql_cte.cc @@ -990,7 +990,7 @@ With_element *st_select_lex::find_table_def_in_with_clauses(TABLE_LIST *table) been done yet. */ if (with_elem && sl->master_unit() == with_elem->spec) - break; + break; With_clause *with_clause=sl->get_with_clause(); if (with_clause) { @@ -1038,13 +1038,21 @@ bool TABLE_LIST::set_as_with_table(THD *thd, With_element *with_elem) } with= with_elem; if (!with_elem->is_referenced() || with_elem->is_recursive) + { derived= with_elem->spec; + if (derived->get_master() != select_lex && + !is_with_table_recursive_reference()) + { + derived->move_as_slave(select_lex); + } + } else { if(!(derived= with_elem->clone_parsed_spec(thd, this))) return true; derived->with_element= with_elem; } + derived->first_select()->linkage= DERIVED_TABLE_TYPE; with_elem->inc_references(); return false; } |