|
30 | 30 | from sqlmesh.core.audit import Audit |
31 | 31 | from sqlmesh.core.engine_adapter import EngineAdapter, TransactionType |
32 | 32 | from sqlmesh.core.environment import Environment |
33 | | -from sqlmesh.core.model import Model, SeedModel |
| 33 | +from sqlmesh.core.model import Model, ModelKindName, SeedModel |
34 | 34 | from sqlmesh.core.snapshot import ( |
35 | 35 | Intervals, |
36 | 36 | Snapshot, |
@@ -87,6 +87,7 @@ def __init__( |
87 | 87 | "identifier": exp.DataType.build("text"), |
88 | 88 | "version": exp.DataType.build("text"), |
89 | 89 | "snapshot": exp.DataType.build("text"), |
| 90 | + "kind_name": exp.DataType.build("text"), |
90 | 91 | } |
91 | 92 |
|
92 | 93 | self._environment_columns_to_types = { |
@@ -239,6 +240,17 @@ def snapshots_exist(self, snapshot_ids: t.Iterable[SnapshotIdLike]) -> t.Set[Sna |
239 | 240 | ) |
240 | 241 | } |
241 | 242 |
|
| 243 | + def models_exist(self, names: t.Iterable[str], exclude_external: bool = False) -> t.Set[str]: |
| 244 | + query = ( |
| 245 | + exp.select("name") |
| 246 | + .from_(self.snapshots_table) |
| 247 | + .where(exp.column("name").isin(*names)) |
| 248 | + .distinct() |
| 249 | + ) |
| 250 | + if exclude_external: |
| 251 | + query = query.where(exp.column("kind_name").neq(ModelKindName.EXTERNAL.value)) |
| 252 | + return {name for name, in self.engine_adapter.fetchall(query)} |
| 253 | + |
242 | 254 | def reset(self) -> None: |
243 | 255 | """Resets the state store to the state when it was first initialized.""" |
244 | 256 | self.engine_adapter.drop_table(self.snapshots_table) |
@@ -821,6 +833,7 @@ def _snapshots_to_df(snapshots: t.Iterable[Snapshot]) -> pd.DataFrame: |
821 | 833 | "identifier": snapshot.identifier, |
822 | 834 | "version": snapshot.version, |
823 | 835 | "snapshot": snapshot.json(exclude={"intervals", "dev_intervals"}), |
| 836 | + "kind_name": snapshot.model_kind_name.value, |
824 | 837 | } |
825 | 838 | for snapshot in snapshots |
826 | 839 | ] |
|
0 commit comments