diff options
Diffstat (limited to 'sqlglot/optimizer/qualify_columns.py')
-rw-r--r-- | sqlglot/optimizer/qualify_columns.py | 21 |
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): |