summaryrefslogtreecommitdiffstats
path: root/sqlglot/optimizer/qualify_columns.py
diff options
context:
space:
mode:
Diffstat (limited to 'sqlglot/optimizer/qualify_columns.py')
-rw-r--r--sqlglot/optimizer/qualify_columns.py21
1 files changed, 13 insertions, 8 deletions
diff --git a/sqlglot/optimizer/qualify_columns.py b/sqlglot/optimizer/qualify_columns.py
index 5e40cf3..6eae2b5 100644
--- a/sqlglot/optimizer/qualify_columns.py
+++ b/sqlglot/optimizer/qualify_columns.py
@@ -143,12 +143,12 @@ def _expand_alias_refs(scope, resolver):
selects = {}
# Replace references to select aliases
- def transform(node, *_):
+ def transform(node, source_first=True):
if isinstance(node, exp.Column) and not node.table:
table = resolver.get_table(node.name)
# Source columns get priority over select aliases
- if table:
+ if source_first and table:
node.set("table", table)
return node
@@ -163,16 +163,21 @@ def _expand_alias_refs(scope, resolver):
select = select.this
return select.copy()
+ node.set("table", table)
+ elif isinstance(node, exp.Expression) and not isinstance(node, exp.Subqueryable):
+ exp.replace_children(node, transform, source_first)
+
return node
for select in scope.expression.selects:
- select.transform(transform, copy=False)
-
- for modifier in ("where", "group"):
- part = scope.expression.args.get(modifier)
+ transform(select)
- if part:
- part.transform(transform, copy=False)
+ for modifier, source_first in (
+ ("where", True),
+ ("group", True),
+ ("having", False),
+ ):
+ transform(scope.expression.args.get(modifier), source_first=source_first)
def _expand_group_by(scope, resolver):