summaryrefslogtreecommitdiffstats
path: root/sqlglot/optimizer/merge_subqueries.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2022-10-21 09:29:26 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2022-10-21 09:29:26 +0000
commit8b4272814fb4585be120f183eb7c26bb8acde974 (patch)
tree85d56a8f5ac4ac94ab924d5bbc578586eeb2a998 /sqlglot/optimizer/merge_subqueries.py
parentReleasing debian version 7.1.3-1. (diff)
downloadsqlglot-8b4272814fb4585be120f183eb7c26bb8acde974.tar.xz
sqlglot-8b4272814fb4585be120f183eb7c26bb8acde974.zip
Merging upstream version 9.0.1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sqlglot/optimizer/merge_subqueries.py')
-rw-r--r--sqlglot/optimizer/merge_subqueries.py16
1 files changed, 5 insertions, 11 deletions
diff --git a/sqlglot/optimizer/merge_subqueries.py b/sqlglot/optimizer/merge_subqueries.py
index 3c51c18..70e4629 100644
--- a/sqlglot/optimizer/merge_subqueries.py
+++ b/sqlglot/optimizer/merge_subqueries.py
@@ -70,15 +70,10 @@ def merge_ctes(expression, leave_tables_isolated=False):
inner_select = inner_scope.expression.unnest()
from_or_join = table.find_ancestor(exp.From, exp.Join)
if _mergeable(outer_scope, inner_select, leave_tables_isolated, from_or_join):
- node_to_replace = table
- if isinstance(node_to_replace.parent, exp.Alias):
- node_to_replace = node_to_replace.parent
- alias = node_to_replace.alias
- else:
- alias = table.name
+ alias = table.alias_or_name
_rename_inner_sources(outer_scope, inner_scope, alias)
- _merge_from(outer_scope, inner_scope, node_to_replace, alias)
+ _merge_from(outer_scope, inner_scope, table, alias)
_merge_expressions(outer_scope, inner_scope, alias)
_merge_joins(outer_scope, inner_scope, from_or_join)
_merge_where(outer_scope, inner_scope, from_or_join)
@@ -179,8 +174,8 @@ def _rename_inner_sources(outer_scope, inner_scope, alias):
if isinstance(source, exp.Subquery):
source.set("alias", exp.TableAlias(this=new_alias))
- elif isinstance(source, exp.Table) and isinstance(source.parent, exp.Alias):
- source.parent.set("alias", new_alias)
+ elif isinstance(source, exp.Table) and source.alias:
+ source.set("alias", new_alias)
elif isinstance(source, exp.Table):
source.replace(exp.alias_(source.copy(), new_alias))
@@ -206,8 +201,7 @@ def _merge_from(outer_scope, inner_scope, node_to_replace, alias):
tables = join_hint.find_all(exp.Table)
for table in tables:
if table.alias_or_name == node_to_replace.alias_or_name:
- new_table = new_subquery.this if isinstance(new_subquery, exp.Alias) else new_subquery
- table.set("this", exp.to_identifier(new_table.alias_or_name))
+ table.set("this", exp.to_identifier(new_subquery.alias_or_name))
outer_scope.remove_source(alias)
outer_scope.add_source(new_subquery.alias_or_name, inner_scope.sources[new_subquery.alias_or_name])