99
1010from sqlmesh .core import dialect as d
1111from sqlmesh .core .config .base import UpdateStrategy
12- from sqlmesh .core .model import Model , ModelKindName , load_model
13- from sqlmesh .dbt .column import ColumnConfig , yaml_to_columns
12+ from sqlmesh .core .model import (
13+ IncrementalByTimeRangeKind ,
14+ IncrementalByUniqueKeyKind ,
15+ Model ,
16+ ModelKind ,
17+ ModelKindName ,
18+ create_sql_model ,
19+ )
20+ from sqlmesh .dbt .column import (
21+ ColumnConfig ,
22+ column_descriptions_to_sqlmesh ,
23+ column_types_to_sqlmesh ,
24+ yaml_to_columns ,
25+ )
1426from sqlmesh .dbt .common import Dependencies , GeneralConfig
1527from sqlmesh .dbt .macros import MacroConfig , ref_method , source_method , var_method
1628from sqlmesh .dbt .seed import SeedConfig
@@ -108,6 +120,9 @@ def _validate_grants(cls, v: t.Dict[str, str]) -> t.Dict[str, t.List[str]]:
108120
109121 @validator ("columns" , pre = True )
110122 def _validate_columns (cls , v : t .Any ) -> t .Dict [str , ColumnConfig ]:
123+ if not isinstance (v , dict ) or all (isinstance (col , ColumnConfig ) for col in v .values ()):
124+ return v
125+
111126 return yaml_to_columns (v )
112127
113128 _FIELD_UPDATE_STRATEGY : t .ClassVar [t .Dict [str , UpdateStrategy ]] = {
@@ -132,22 +147,6 @@ def to_sqlmesh(
132147 macros : UniqueKeyDict [str , MacroConfig ],
133148 ) -> Model :
134149 """Converts the dbt model into a SQLMesh model."""
135- expressions = d .parse_model (
136- f"""
137- MODEL (
138- name { self .model_name } ,
139- kind { self .model_kind } ,
140- );
141- """
142- + self .sql ,
143- default_dialect = "" ,
144- )
145-
146- for jinja in expressions [1 :]:
147- # find all the refs here and filter the python env?
148- if isinstance (jinja , d .Jinja ):
149- pass
150-
151150 source_mapping = {config .config_name : config .source_name for config in sources .values ()}
152151 model_mapping = {name : config .model_name for name , config in models .items ()}
153152 model_mapping .update ({name : config .seed_name for name , config in seeds .items ()})
@@ -166,9 +165,15 @@ def to_sqlmesh(
166165 for ref in dependencies .refs
167166 }
168167
169- return load_model (
170- expressions ,
171- path = self .path ,
168+ expressions = d .parse (self .sql )
169+
170+ return create_sql_model (
171+ self .model_name ,
172+ expressions [- 1 ],
173+ kind = self .model_kind ,
174+ statements = expressions [0 :- 1 ],
175+ columns = column_types_to_sqlmesh (self .columns ) or None ,
176+ column_descriptions_ = column_descriptions_to_sqlmesh (self .columns ) or None ,
172177 python_env = python_env ,
173178 depends_on = depends_on ,
174179 start = self .start ,
@@ -186,7 +191,7 @@ def model_name(self) -> str:
186191 return "." .join (part for part in (schema , self .alias or self .table_name ) if part )
187192
188193 @property
189- def model_kind (self ) -> str :
194+ def model_kind (self ) -> ModelKind :
190195 """
191196 Get the sqlmesh ModelKind
192197
@@ -195,20 +200,20 @@ def model_kind(self) -> str:
195200 """
196201 materialization = self .materialized
197202 if materialization == Materialization .TABLE :
198- return ModelKindName .FULL . value
203+ return ModelKind ( name = ModelKindName .FULL )
199204 if materialization == Materialization .VIEW :
200- return ModelKindName .VIEW . value
205+ return ModelKind ( name = ModelKindName .VIEW )
201206 if materialization == Materialization .INCREMENTAL :
202207 if self .time_column :
203- return f" { ModelKindName . INCREMENTAL_BY_TIME_RANGE . value } (TIME_COLUMN { self .time_column } )"
208+ return IncrementalByTimeRangeKind ( time_column = self .time_column )
204209 if self .unique_key :
205- return f" { ModelKindName . INCREMENTAL_BY_UNIQUE_KEY . value } (UNIQUE_KEY ( { ',' . join ( self .unique_key )} ))"
210+ return IncrementalByUniqueKeyKind ( unique_key = self .unique_key )
206211 raise ConfigError (
207212 "SQLMesh ensures idempotent incremental loads and thus does not support append."
208213 " Add either an unique key (merge) or a time column (insert-overwrite)."
209214 )
210215 if materialization == Materialization .EPHEMERAL :
211- return ModelKindName .EMBEDDED . value
216+ return ModelKind ( name = ModelKindName .EMBEDDED )
212217 raise ConfigError (f"{ materialization .value } materialization not supported." )
213218
214219 def _all_dependencies (
0 commit comments