Skip to content

Commit a167f7a

Browse files
committed
Fix(bigquery): respect normalization strategy overrides
1 parent 5489e66 commit a167f7a

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

sqlglot/dialects/bigquery.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import typing as t
66

77
from sqlglot import exp, generator, parser, tokens, transforms
8+
from sqlglot._typing import E
89
from sqlglot.dialects.dialect import (
910
Dialect,
1011
NormalizationStrategy,
@@ -35,7 +36,7 @@
3536
from sqlglot.generator import unsupported_args
3637

3738
if t.TYPE_CHECKING:
38-
from sqlglot._typing import E, Lit
39+
from sqlglot._typing import Lit
3940

4041
from sqlglot.optimizer.annotate_types import TypeAnnotator
4142

@@ -440,7 +441,7 @@ class BigQuery(Dialect):
440441
def normalize_identifier(self, expression: E) -> E:
441442
if (
442443
isinstance(expression, exp.Identifier)
443-
and self.normalization_strategy is not NormalizationStrategy.CASE_SENSITIVE
444+
and self.normalization_strategy is self.NORMALIZATION_STRATEGY
444445
):
445446
parent = expression.parent
446447
while isinstance(parent, exp.Dot):
@@ -462,7 +463,9 @@ def normalize_identifier(self, expression: E) -> E:
462463
if not case_sensitive:
463464
expression.set("this", expression.this.lower())
464465

465-
return expression
466+
return t.cast(E, expression)
467+
468+
return super().normalize_identifier(expression)
466469

467470
class Tokenizer(tokens.Tokenizer):
468471
QUOTES = ["'", '"', '"""', "'''"]

tests/dialects/test_bigquery.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from sqlglot.parser import logger as parser_logger
1717
from tests.dialects.test_dialect import Validator
1818
from sqlglot.optimizer.annotate_types import annotate_types
19+
from sqlglot.optimizer.qualify import qualify
1920

2021

2122
class TestBigQuery(Validator):
@@ -2382,3 +2383,9 @@ def test_annotate_timestamps(self):
23822383

23832384
for select in annotated.selects:
23842385
self.assertEqual(select.type.sql("bigquery"), "TIMESTAMP")
2386+
2387+
def test_override_normalization_strategy(self):
2388+
sql = "SELECT * FROM p.d.t"
2389+
ast = self.parse_one(sql)
2390+
qualified = qualify(ast, dialect="bigquery,normalization_strategy=uppercase")
2391+
self.assertEqual(qualified.sql("bigquery"), "SELECT * FROM `P`.`D`.`T` AS `T`")

0 commit comments

Comments
 (0)