Skip to content

Commit 983aff7

Browse files
authored
Fix: Support dialects with normalization strategies for dbt projects (#4330)
1 parent 767755e commit 983aff7

4 files changed

Lines changed: 22 additions & 5 deletions

File tree

sqlmesh/dbt/builtin.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from dbt import version
1313
from dbt.adapters.base import BaseRelation, Column
1414
from ruamel.yaml import YAMLError
15+
from sqlglot import Dialect
1516

1617
from sqlmesh.core.engine_adapter import EngineAdapter
1718
from sqlmesh.core.snapshot.definition import DeployabilityIndex
@@ -49,7 +50,9 @@ def warn(self, msg: str) -> str:
4950
class Api:
5051
def __init__(self, dialect: t.Optional[str]) -> None:
5152
if dialect:
52-
config_class = TARGET_TYPE_TO_CONFIG_CLASS[dialect]
53+
config_class = TARGET_TYPE_TO_CONFIG_CLASS[
54+
Dialect.get_or_raise(dialect).__class__.__name__.lower()
55+
]
5356
self.Relation = config_class.relation_class
5457
self.Column = config_class.column_class
5558
self.quote_policy = config_class.quote_policy

tests/core/test_integration.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4263,6 +4263,14 @@ def test_dbt_requirements(sushi_dbt_context: Context):
42634263
assert sushi_dbt_context.requirements["dbt-duckdb"].startswith("1.")
42644264

42654265

4266+
@time_machine.travel("2023-01-08 15:00:00 UTC")
4267+
def test_dbt_dialect_with_normalization_strategy(init_and_plan_context: t.Callable):
4268+
context, _ = init_and_plan_context(
4269+
"tests/fixtures/dbt/sushi_test", config="test_config_with_normalization_strategy"
4270+
)
4271+
assert context.default_dialect == "duckdb,normalization_strategy=LOWERCASE"
4272+
4273+
42664274
@pytest.mark.parametrize(
42674275
"context_fixture",
42684276
["sushi_context", "sushi_dbt_context", "sushi_test_dbt_context", "sushi_no_default_catalog"],

tests/core/test_model.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2221,7 +2221,7 @@ def my_model(context, **kwargs):
22212221
m = model.get_registry()["my_model"].model(
22222222
module_path=Path("."),
22232223
path=Path("."),
2224-
dialect="duckdb",
2224+
dialect="duckdb,normalization_strategy=LOWERCASE",
22252225
)
22262226

22272227
assert list(m.pre_statements) == [
@@ -2231,14 +2231,14 @@ def my_model(context, **kwargs):
22312231
d.parse_one("DROP TABLE x"),
22322232
]
22332233
assert m.enabled
2234-
assert m.dialect == "duckdb"
2234+
assert m.dialect == "duckdb,normalization_strategy=lowercase"
22352235
assert m.depends_on == {'"foo"', '"bar"."baz"'}
2236-
assert m.columns_to_types == {"col": exp.DataType.build("int")}
2236+
assert m.columns_to_types == {"COL": exp.DataType.build("int")}
22372237
assert_exp_eq(
22382238
m.ctas_query(),
22392239
"""
22402240
SELECT
2241-
CAST(NULL AS INT) AS "col"
2241+
CAST(NULL AS INT) AS "COL"
22422242
FROM (VALUES
22432243
(1)) AS t(dummy)
22442244
WHERE

tests/fixtures/dbt/sushi_test/config.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,9 @@
1212

1313

1414
test_config = config
15+
16+
test_config_with_normalization_strategy = sqlmesh_config(
17+
Path(__file__).parent,
18+
variables=variables,
19+
model_defaults=ModelDefaultsConfig(dialect="duckdb,normalization_strategy=LOWERCASE"),
20+
)

0 commit comments

Comments
 (0)