From fb7e79eb4c8d6e22b7324de4bb1ea9cd11b8da7c Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 7 Apr 2023 14:35:04 +0200 Subject: Merging upstream version 11.5.2. Signed-off-by: Daniel Baumann --- sqlglot/optimizer/qualify_columns.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'sqlglot/optimizer/qualify_columns.py') 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): -- cgit v1.2.3