From 8f88a01462641cbf930b3c43b780565d0fb7d37e Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Thu, 22 Jun 2023 20:53:34 +0200 Subject: Merging upstream version 16.4.0. Signed-off-by: Daniel Baumann --- sqlglot/optimizer/normalize_identifiers.py | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) (limited to 'sqlglot/optimizer/normalize_identifiers.py') diff --git a/sqlglot/optimizer/normalize_identifiers.py b/sqlglot/optimizer/normalize_identifiers.py index 1e5c104..99e605d 100644 --- a/sqlglot/optimizer/normalize_identifiers.py +++ b/sqlglot/optimizer/normalize_identifiers.py @@ -1,12 +1,15 @@ -from sqlglot import exp from sqlglot._typing import E -from sqlglot.dialects.dialect import RESOLVES_IDENTIFIERS_AS_UPPERCASE, DialectType +from sqlglot.dialects.dialect import Dialect, DialectType def normalize_identifiers(expression: E, dialect: DialectType = None) -> E: """ - Normalize all unquoted identifiers to either lower or upper case, depending on - the dialect. This essentially makes those identifiers case-insensitive. + Normalize all unquoted identifiers to either lower or upper case, depending + on the dialect. This essentially makes those identifiers case-insensitive. + + Note: + Some dialects (e.g. BigQuery) treat identifiers as case-insensitive even + when they're quoted, so in these cases all identifiers are normalized. Example: >>> import sqlglot @@ -21,16 +24,4 @@ def normalize_identifiers(expression: E, dialect: DialectType = None) -> E: Returns: The transformed expression. """ - return expression.transform(_normalize, dialect, copy=False) - - -def _normalize(node: exp.Expression, dialect: DialectType = None) -> exp.Expression: - if isinstance(node, exp.Identifier) and not node.quoted: - node.set( - "this", - node.this.upper() - if dialect in RESOLVES_IDENTIFIERS_AS_UPPERCASE - else node.this.lower(), - ) - - return node + return expression.transform(Dialect.get_or_raise(dialect).normalize_identifier, copy=False) -- cgit v1.2.3