Skip to content

Commit 3c894be

Browse files
refactor to run pre post statements methods
1 parent d6a7ec2 commit 3c894be

File tree

1 file changed

+55
-10
lines changed

1 file changed

+55
-10
lines changed

sqlmesh/core/snapshot/evaluator.py

Lines changed: 55 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -748,8 +748,10 @@ def _evaluate_snapshot(
748748
adapter.transaction(),
749749
adapter.session(snapshot.model.render_session_properties(**render_statements_kwargs)),
750750
):
751-
if not snapshot.is_dbt_custom:
752-
adapter.execute(model.render_pre_statements(**render_statements_kwargs))
751+
evaluation_strategy = _evaluation_strategy(snapshot, adapter)
752+
evaluation_strategy.run_pre_statements(
753+
snapshot=snapshot, render_kwargs=render_statements_kwargs
754+
)
753755

754756
if not target_table_exists or (model.is_seed and not snapshot.intervals):
755757
# Only create the empty table if the columns were provided explicitly by the user
@@ -819,8 +821,9 @@ def _evaluate_snapshot(
819821
batch_index=batch_index,
820822
)
821823

822-
if not snapshot.is_dbt_custom:
823-
adapter.execute(model.render_post_statements(**render_statements_kwargs))
824+
evaluation_strategy.run_post_statements(
825+
snapshot=snapshot, render_kwargs=render_statements_kwargs
826+
)
824827

825828
return wap_id
826829

@@ -1435,8 +1438,10 @@ def _execute_create(
14351438
**create_render_kwargs,
14361439
"table_mapping": {snapshot.name: table_name},
14371440
}
1438-
if run_pre_post_statements and not snapshot.is_dbt_custom:
1439-
adapter.execute(snapshot.model.render_pre_statements(**create_render_kwargs))
1441+
if run_pre_post_statements:
1442+
evaluation_strategy.run_pre_statements(
1443+
snapshot=snapshot, render_kwargs=create_render_kwargs
1444+
)
14401445
evaluation_strategy.create(
14411446
table_name=table_name,
14421447
model=snapshot.model,
@@ -1447,8 +1452,10 @@ def _execute_create(
14471452
dry_run=dry_run,
14481453
physical_properties=rendered_physical_properties,
14491454
)
1450-
if run_pre_post_statements and not snapshot.is_dbt_custom:
1451-
adapter.execute(snapshot.model.render_post_statements(**create_render_kwargs))
1455+
if run_pre_post_statements:
1456+
evaluation_strategy.run_post_statements(
1457+
snapshot=snapshot, render_kwargs=create_render_kwargs
1458+
)
14521459

14531460
def _can_clone(self, snapshot: Snapshot, deployability_index: DeployabilityIndex) -> bool:
14541461
adapter = self.get_adapter(snapshot.model.gateway)
@@ -1548,7 +1555,7 @@ def _evaluation_strategy(snapshot: SnapshotInfoLike, adapter: EngineAdapter) ->
15481555
if hasattr(snapshot, "model") and isinstance(
15491556
(model_kind := snapshot.model.kind), DbtCustomKind
15501557
):
1551-
return DbtCustomMaterialization(
1558+
return DbtCustomMaterializationStrategy(
15521559
adapter=adapter,
15531560
materialization_name=model_kind.materialization,
15541561
materialization_template=model_kind.definition,
@@ -1696,6 +1703,24 @@ def demote(self, view_name: str, **kwargs: t.Any) -> None:
16961703
view_name: The name of the target view in the virtual layer.
16971704
"""
16981705

1706+
@abc.abstractmethod
1707+
def run_pre_statements(self, snapshot: Snapshot, render_kwargs: t.Any) -> None:
1708+
"""Executes the snapshot's pre statements.
1709+
1710+
Args:
1711+
snapshot: The target snapshot.
1712+
render_kwargs: Additional key-value arguments to pass when rendering the statements.
1713+
"""
1714+
1715+
@abc.abstractmethod
1716+
def run_post_statements(self, snapshot: Snapshot, render_kwargs: t.Any) -> None:
1717+
"""Executes the snapshot's post statements.
1718+
1719+
Args:
1720+
snapshot: The target snapshot.
1721+
render_kwargs: Additional key-value arguments to pass when rendering the statements.
1722+
"""
1723+
16991724

17001725
class SymbolicStrategy(EvaluationStrategy):
17011726
def insert(
@@ -1757,6 +1782,12 @@ def promote(
17571782
def demote(self, view_name: str, **kwargs: t.Any) -> None:
17581783
pass
17591784

1785+
def run_pre_statements(self, snapshot: Snapshot, render_kwargs: t.Dict[str, t.Any]) -> None:
1786+
pass
1787+
1788+
def run_post_statements(self, snapshot: Snapshot, render_kwargs: t.Dict[str, t.Any]) -> None:
1789+
pass
1790+
17601791

17611792
class EmbeddedStrategy(SymbolicStrategy):
17621793
def promote(
@@ -1804,6 +1835,12 @@ def demote(self, view_name: str, **kwargs: t.Any) -> None:
18041835
logger.info("Dropping view '%s'", view_name)
18051836
self.adapter.drop_view(view_name, cascade=False)
18061837

1838+
def run_pre_statements(self, snapshot: Snapshot, render_kwargs: t.Any) -> None:
1839+
self.adapter.execute(snapshot.model.render_pre_statements(**render_kwargs))
1840+
1841+
def run_post_statements(self, snapshot: Snapshot, render_kwargs: t.Any) -> None:
1842+
self.adapter.execute(snapshot.model.render_post_statements(**render_kwargs))
1843+
18071844

18081845
class MaterializableStrategy(PromotableStrategy, abc.ABC):
18091846
def create(
@@ -2610,7 +2647,7 @@ def get_custom_materialization_type_or_raise(
26102647
raise SQLMeshError(f"Custom materialization '{name}' not present in the Python environment")
26112648

26122649

2613-
class DbtCustomMaterialization(MaterializableStrategy):
2650+
class DbtCustomMaterializationStrategy(MaterializableStrategy):
26142651
def __init__(
26152652
self,
26162653
adapter: EngineAdapter,
@@ -2675,6 +2712,14 @@ def append(
26752712
**kwargs,
26762713
)
26772714

2715+
def run_pre_statements(self, snapshot: Snapshot, render_kwargs: t.Any) -> None:
2716+
# in dbt custom materialisations it's up to the user when to run the pre hooks
2717+
pass
2718+
2719+
def run_post_statements(self, snapshot: Snapshot, render_kwargs: t.Any) -> None:
2720+
# in dbt custom materialisations it's up to the user when to run the post hooks
2721+
pass
2722+
26782723
def _execute_materialization(
26792724
self,
26802725
table_name: str,

0 commit comments

Comments
 (0)