1
0
Fork 0
sqlglot/sqlglot/optimizer/isolate_table_selects.py
Daniel Baumann 08ecea3adf
Merging upstream version 6.1.1.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-02-13 08:04:41 +01:00

29 lines
902 B
Python

from sqlglot import alias, exp
from sqlglot.errors import OptimizeError
from sqlglot.optimizer.scope import traverse_scope
def isolate_table_selects(expression):
for scope in traverse_scope(expression):
if len(scope.selected_sources) == 1:
continue
for (_, source) in scope.selected_sources.values():
if not isinstance(source, exp.Table):
continue
if not isinstance(source.parent, exp.Alias):
raise OptimizeError("Tables require an alias. Run qualify_tables optimization.")
parent = source.parent
parent.replace(
exp.select("*")
.from_(
alias(source, source.name or parent.alias, table=True),
copy=False,
)
.subquery(parent.alias, copy=False)
)
return expression