summaryrefslogtreecommitdiffstats
path: root/sqlglot/optimizer/normalize_identifiers.py
diff options
context:
space:
mode:
Diffstat (limited to 'sqlglot/optimizer/normalize_identifiers.py')
-rw-r--r--sqlglot/optimizer/normalize_identifiers.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/sqlglot/optimizer/normalize_identifiers.py b/sqlglot/optimizer/normalize_identifiers.py
index 99e605d..9d4860e 100644
--- a/sqlglot/optimizer/normalize_identifiers.py
+++ b/sqlglot/optimizer/normalize_identifiers.py
@@ -1,8 +1,23 @@
+from __future__ import annotations
+
+import typing as t
+
+from sqlglot import exp
from sqlglot._typing import E
from sqlglot.dialects.dialect import Dialect, DialectType
+@t.overload
def normalize_identifiers(expression: E, dialect: DialectType = None) -> E:
+ ...
+
+
+@t.overload
+def normalize_identifiers(expression: str, dialect: DialectType = None) -> exp.Expression:
+ ...
+
+
+def normalize_identifiers(expression, dialect=None):
"""
Normalize all unquoted identifiers to either lower or upper case, depending
on the dialect. This essentially makes those identifiers case-insensitive.
@@ -16,6 +31,8 @@ def normalize_identifiers(expression: E, dialect: DialectType = None) -> E:
>>> expression = sqlglot.parse_one('SELECT Bar.A AS A FROM "Foo".Bar')
>>> normalize_identifiers(expression).sql()
'SELECT bar.a AS a FROM "Foo".bar'
+ >>> normalize_identifiers("foo", dialect="snowflake").sql(dialect="snowflake")
+ 'FOO'
Args:
expression: The expression to transform.
@@ -24,4 +41,5 @@ def normalize_identifiers(expression: E, dialect: DialectType = None) -> E:
Returns:
The transformed expression.
"""
+ expression = exp.maybe_parse(expression, dialect=dialect)
return expression.transform(Dialect.get_or_raise(dialect).normalize_identifier, copy=False)