diff options
Diffstat (limited to 'sqlglot/optimizer/scope.py')
-rw-r--r-- | sqlglot/optimizer/scope.py | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/sqlglot/optimizer/scope.py b/sqlglot/optimizer/scope.py index a3f08d5..16cd548 100644 --- a/sqlglot/optimizer/scope.py +++ b/sqlglot/optimizer/scope.py @@ -323,9 +323,14 @@ class Scope: sources in the current scope. """ if self._external_columns is None: - self._external_columns = [ - c for c in self.columns if c.table not in self.selected_sources - ] + if isinstance(self.expression, exp.Union): + left, right = self.union_scopes + self._external_columns = left.external_columns + right.external_columns + else: + self._external_columns = [ + c for c in self.columns if c.table not in self.selected_sources + ] + return self._external_columns @property @@ -477,11 +482,12 @@ def traverse_scope(expression: exp.Expression) -> t.List[Scope]: Args: expression (exp.Expression): expression to traverse + Returns: list[Scope]: scope instances """ if isinstance(expression, exp.Unionable) or ( - isinstance(expression, exp.DDL) and isinstance(expression.expression, exp.Subqueryable) + isinstance(expression, exp.DDL) and isinstance(expression.expression, exp.Unionable) ): return list(_traverse_scope(Scope(expression))) |