summaryrefslogtreecommitdiffstats
path: root/sqlglot/optimizer/optimizer.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2023-06-02 23:59:11 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2023-06-02 23:59:11 +0000
commitcaea5267cb8e1fea3702adbdf6f68fd37d13b3b7 (patch)
treef06f1da1ab3b6906beca1c3c7222d28ff00766ac /sqlglot/optimizer/optimizer.py
parentAdding upstream version 12.2.0. (diff)
downloadsqlglot-0c9fd0a27262a4b82d2347fe92db95748c7421d4.tar.xz
sqlglot-0c9fd0a27262a4b82d2347fe92db95748c7421d4.zip
Adding upstream version 15.0.0.upstream/15.0.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sqlglot/optimizer/optimizer.py')
-rw-r--r--sqlglot/optimizer/optimizer.py37
1 files changed, 20 insertions, 17 deletions
diff --git a/sqlglot/optimizer/optimizer.py b/sqlglot/optimizer/optimizer.py
index c165ffe..dbe33a2 100644
--- a/sqlglot/optimizer/optimizer.py
+++ b/sqlglot/optimizer/optimizer.py
@@ -10,36 +10,29 @@ from sqlglot.optimizer.canonicalize import canonicalize
from sqlglot.optimizer.eliminate_ctes import eliminate_ctes
from sqlglot.optimizer.eliminate_joins import eliminate_joins
from sqlglot.optimizer.eliminate_subqueries import eliminate_subqueries
-from sqlglot.optimizer.expand_multi_table_selects import expand_multi_table_selects
-from sqlglot.optimizer.isolate_table_selects import isolate_table_selects
-from sqlglot.optimizer.lower_identities import lower_identities
from sqlglot.optimizer.merge_subqueries import merge_subqueries
from sqlglot.optimizer.normalize import normalize
from sqlglot.optimizer.optimize_joins import optimize_joins
from sqlglot.optimizer.pushdown_predicates import pushdown_predicates
from sqlglot.optimizer.pushdown_projections import pushdown_projections
-from sqlglot.optimizer.qualify_columns import qualify_columns, validate_qualify_columns
-from sqlglot.optimizer.qualify_tables import qualify_tables
+from sqlglot.optimizer.qualify import qualify
+from sqlglot.optimizer.qualify_columns import quote_identifiers
from sqlglot.optimizer.simplify import simplify
from sqlglot.optimizer.unnest_subqueries import unnest_subqueries
from sqlglot.schema import ensure_schema
RULES = (
- lower_identities,
- qualify_tables,
- isolate_table_selects,
- qualify_columns,
+ qualify,
pushdown_projections,
- validate_qualify_columns,
normalize,
unnest_subqueries,
- expand_multi_table_selects,
pushdown_predicates,
optimize_joins,
eliminate_subqueries,
merge_subqueries,
eliminate_joins,
eliminate_ctes,
+ quote_identifiers,
annotate_types,
canonicalize,
simplify,
@@ -54,7 +47,7 @@ def optimize(
dialect: DialectType = None,
rules: t.Sequence[t.Callable] = RULES,
**kwargs,
-):
+) -> exp.Expression:
"""
Rewrite a sqlglot AST into an optimized form.
@@ -72,14 +65,23 @@ def optimize(
dialect: The dialect to parse the sql string.
rules: sequence of optimizer rules to use.
Many of the rules require tables and columns to be qualified.
- Do not remove qualify_tables or qualify_columns from the sequence of rules unless you know
- what you're doing!
+ Do not remove `qualify` from the sequence of rules unless you know what you're doing!
**kwargs: If a rule has a keyword argument with a same name in **kwargs, it will be passed in.
+
Returns:
- sqlglot.Expression: optimized expression
+ The optimized expression.
"""
schema = ensure_schema(schema or sqlglot.schema, dialect=dialect)
- possible_kwargs = {"db": db, "catalog": catalog, "schema": schema, **kwargs}
+ possible_kwargs = {
+ "db": db,
+ "catalog": catalog,
+ "schema": schema,
+ "dialect": dialect,
+ "isolate_tables": True, # needed for other optimizations to perform well
+ "quote_identifiers": False, # this happens in canonicalize
+ **kwargs,
+ }
+
expression = exp.maybe_parse(expression, dialect=dialect, copy=True)
for rule in rules:
# Find any additional rule parameters, beyond `expression`
@@ -88,4 +90,5 @@ def optimize(
param: possible_kwargs[param] for param in rule_params if param in possible_kwargs
}
expression = rule(expression, **rule_kwargs)
- return expression
+
+ return t.cast(exp.Expression, expression)