summaryrefslogtreecommitdiffstats
path: root/sqlglot/optimizer/normalize_identifiers.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--sqlglot/optimizer/normalize_identifiers.py18
1 files changed, 17 insertions, 1 deletions
diff --git a/sqlglot/optimizer/normalize_identifiers.py b/sqlglot/optimizer/normalize_identifiers.py
index 54cf02b..32f3a92 100644
--- a/sqlglot/optimizer/normalize_identifiers.py
+++ b/sqlglot/optimizer/normalize_identifiers.py
@@ -22,6 +22,13 @@ 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.
+ It's possible to make this a no-op by adding a special comment next to the
+ identifier of interest:
+
+ SELECT a /* sqlglot.meta case_sensitive */ FROM table
+
+ In this example, the identifier `a` will not be normalized.
+
Note:
Some dialects (e.g. BigQuery) treat identifiers as case-insensitive even
when they're quoted, so in these cases all identifiers are normalized.
@@ -43,4 +50,13 @@ def normalize_identifiers(expression, dialect=None):
"""
if isinstance(expression, str):
expression = exp.to_identifier(expression)
- return expression.transform(Dialect.get_or_raise(dialect).normalize_identifier, copy=False)
+
+ dialect = Dialect.get_or_raise(dialect)
+
+ def _normalize(node: E) -> E:
+ if not node.meta.get("case_sensitive"):
+ exp.replace_children(node, _normalize)
+ node = dialect.normalize_identifier(node)
+ return node
+
+ return _normalize(expression)