summaryrefslogtreecommitdiffstats
path: root/sqlglot/optimizer/qualify_columns.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2023-04-07 12:35:04 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2023-04-07 12:35:04 +0000
commitfb7e79eb4c8d6e22b7324de4bb1ea9cd11b8da7c (patch)
tree476513580a6824dfe34364f98f0dbf7f66d188f4 /sqlglot/optimizer/qualify_columns.py
parentReleasing debian version 11.4.5-1. (diff)
downloadsqlglot-fb7e79eb4c8d6e22b7324de4bb1ea9cd11b8da7c.tar.xz
sqlglot-fb7e79eb4c8d6e22b7324de4bb1ea9cd11b8da7c.zip
Merging upstream version 11.5.2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
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):