Skip to content

Commit 4e5f664

Browse files
refactor (optimizer): make generic all optimizer rules who don't change the Expr input
1 parent 9d84348 commit 4e5f664

5 files changed

Lines changed: 13 additions & 9 deletions

File tree

sqlglot/optimizer/eliminate_subqueries.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@
66
from sqlglot import expressions as exp
77
from sqlglot.helper import find_new_name
88
from sqlglot.optimizer.scope import Scope, build_scope
9+
from sqlglot._typing import E
910

1011
if t.TYPE_CHECKING:
1112
ExistingCTEsMapping = dict[exp.Expr, str]
1213
TakenNameMapping = dict[str, t.Union[Scope, exp.Expr]]
1314

1415

15-
def eliminate_subqueries(expression: exp.Expr) -> exp.Expr:
16+
def eliminate_subqueries(expression: E) -> E:
1617
"""
1718
Rewrite derived tables as CTES, deduplicating if possible.
1819

sqlglot/optimizer/optimize_joins.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33

44
from sqlglot import exp
55
from sqlglot.errors import OptimizeError
6+
from sqlglot._typing import E
67
from sqlglot.helper import tsort
78

89
JOIN_ATTRS = ("on", "side", "kind", "using", "method")
910

1011

11-
def optimize_joins(expression: exp.Expr) -> exp.Expr:
12+
def optimize_joins(expression: E) -> E:
1213
"""
1314
Removes cross joins if possible and reorder joins based on predicate dependencies.
1415
@@ -58,7 +59,7 @@ def optimize_joins(expression: exp.Expr) -> exp.Expr:
5859
return expression
5960

6061

61-
def reorder_joins(expression: exp.Expr) -> exp.Expr:
62+
def reorder_joins(expression: E) -> E:
6263
"""
6364
Reorder joins by topological sort order based on predicate references.
6465
"""
@@ -84,7 +85,7 @@ def reorder_joins(expression: exp.Expr) -> exp.Expr:
8485
return expression
8586

8687

87-
def normalize(expression: exp.Expr) -> exp.Expr:
88+
def normalize(expression: E) -> E:
8889
"""
8990
Remove INNER and OUTER from joins as they are optional.
9091
"""

sqlglot/optimizer/qualify.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@
1313
)
1414
from sqlglot.optimizer.qualify_tables import qualify_tables
1515
from sqlglot.schema import Schema, ensure_schema
16+
from sqlglot._typing import E
1617

1718

1819
def qualify(
19-
expression: exp.Expr,
20+
expression: E,
2021
dialect: DialectType = None,
2122
db: str | None = None,
2223
catalog: str | None = None,
@@ -33,7 +34,7 @@ def qualify(
3334
canonicalize_table_aliases: bool = False,
3435
on_qualify: t.Callable[[exp.Expr], None] | None = None,
3536
sql: str | None = None,
36-
) -> exp.Expr:
37+
) -> E:
3738
"""
3839
Rewrite sqlglot AST to have normalized and qualified tables and columns.
3940

sqlglot/optimizer/qualify_columns.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@
1919

2020

2121
def qualify_columns(
22-
expression: exp.Expr,
22+
expression: E,
2323
schema: dict[str, object] | Schema,
2424
expand_alias_refs: bool = True,
2525
expand_stars: bool = True,
2626
infer_schema: bool | None = None,
2727
allow_partial_qualification: bool = False,
2828
dialect: DialectType = None,
29-
) -> exp.Expr:
29+
) -> E:
3030
"""
3131
Rewrite sqlglot AST to have fully qualified columns.
3232

sqlglot/optimizer/unnest_subqueries.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
from sqlglot import exp
33
from sqlglot.helper import name_sequence
44
from sqlglot.optimizer.scope import ScopeType, find_in_scope, traverse_scope
5+
from sqlglot._typing import E
56

67

7-
def unnest_subqueries(expression: exp.Expr) -> exp.Expr:
8+
def unnest_subqueries(expression: E) -> E:
89
"""
910
Rewrite sqlglot AST to convert some predicates with subqueries into joins.
1011

0 commit comments

Comments
 (0)