Skip to content

Commit 777fcd2

Browse files
committed
Fix: Support dialects with normalization strategies for dbt projects (#4330)
1 parent 3cb8b32 commit 777fcd2

File tree

4 files changed

+23
-5
lines changed

4 files changed

+23
-5
lines changed

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
@@ -3945,6 +3945,14 @@ def test_dbt_requirements(sushi_dbt_context: Context):
39453945
assert sushi_dbt_context.requirements["dbt-duckdb"].startswith("1.")
39463946

39473947

3948+
@time_machine.travel("2023-01-08 15:00:00 UTC")
3949+
def test_dbt_dialect_with_normalization_strategy(init_and_plan_context: t.Callable):
3950+
context, _ = init_and_plan_context(
3951+
"tests/fixtures/dbt/sushi_test", config="test_config_with_normalization_strategy"
3952+
)
3953+
assert context.default_dialect == "duckdb,normalization_strategy=LOWERCASE"
3954+
3955+
39483956
@pytest.mark.parametrize(
39493957
"context_fixture",
39503958
["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
@@ -2045,7 +2045,7 @@ def my_model(context, **kwargs):
20452045
m = model.get_registry()["my_model"].model(
20462046
module_path=Path("."),
20472047
path=Path("."),
2048-
dialect="duckdb",
2048+
dialect="duckdb,normalization_strategy=LOWERCASE",
20492049
)
20502050

20512051
assert list(m.pre_statements) == [
@@ -2055,14 +2055,14 @@ def my_model(context, **kwargs):
20552055
d.parse_one("DROP TABLE x"),
20562056
]
20572057
assert m.enabled
2058-
assert m.dialect == "duckdb"
2058+
assert m.dialect == "duckdb,normalization_strategy=lowercase"
20592059
assert m.depends_on == {'"foo"', '"bar"."baz"'}
2060-
assert m.columns_to_types == {"col": exp.DataType.build("int")}
2060+
assert m.columns_to_types == {"COL": exp.DataType.build("int")}
20612061
assert_exp_eq(
20622062
m.ctas_query(),
20632063
"""
20642064
SELECT
2065-
CAST(NULL AS INT) AS "col"
2065+
CAST(NULL AS INT) AS "COL"
20662066
FROM (VALUES
20672067
(1)) AS t(dummy)
20682068
WHERE

tests/fixtures/dbt/sushi_test/config.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,10 @@
1919
default_scheduler=AirflowSchedulerConfig(),
2020
variables=variables,
2121
)
22+
23+
24+
test_config_with_normalization_strategy = sqlmesh_config(
25+
Path(__file__).parent,
26+
variables=variables,
27+
model_defaults=ModelDefaultsConfig(dialect="duckdb,normalization_strategy=LOWERCASE"),
28+
)

0 commit comments

Comments
 (0)