Skip to content

Commit dcf440b

Browse files
authored
Fix: Consider the depends_on property provided by a user when determining whether a model depends on the past (#2323)
1 parent 8f5c5e0 commit dcf440b

File tree

1 file changed

+27
-22
lines changed

1 file changed

+27
-22
lines changed

sqlmesh/core/model/definition.py

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -544,14 +544,14 @@ def update_schema(
544544
{col: dtype.sql(dialect=self.dialect) for col, dtype in mapping_schema.items()},
545545
)
546546

547-
@property
547+
@cached_property
548548
def depends_on(self) -> t.Set[str]:
549549
"""All of the upstream dependencies referenced in the model's query, excluding self references.
550550
551551
Returns:
552552
A list of all the upstream table names.
553553
"""
554-
return self.depends_on_ or set()
554+
return self._full_depends_on - {self.fqn}
555555

556556
@property
557557
def columns_to_types(self) -> t.Optional[t.Dict[str, exp.DataType]]:
@@ -617,13 +617,7 @@ def is_seed(self) -> bool:
617617
def depends_on_past(self) -> bool:
618618
if self.kind.is_incremental_by_unique_key:
619619
return True
620-
621-
query = self.render_query(optimize=False)
622-
if query is None:
623-
return False
624-
return self.fqn in d.find_tables(
625-
query, default_catalog=self.default_catalog, dialect=self.dialect
626-
)
620+
return self.fqn in self._full_depends_on
627621

628622
@property
629623
def forward_only(self) -> bool:
@@ -811,6 +805,18 @@ def is_model(self) -> bool:
811805
def _additional_metadata(self) -> t.List[str]:
812806
return []
813807

808+
@cached_property
809+
def _full_depends_on(self) -> t.Set[str]:
810+
depends_on = self.depends_on_ or set()
811+
812+
query = self.render_query(optimize=False)
813+
if query is not None:
814+
depends_on |= d.find_tables(
815+
query, default_catalog=self.default_catalog, dialect=self.dialect
816+
)
817+
818+
return depends_on
819+
814820

815821
class _SqlBasedModel(_Model):
816822
pre_statements_: t.Optional[t.List[exp.Expression]] = Field(
@@ -982,19 +988,6 @@ def render_definition(self, include_python: bool = True) -> t.List[exp.Expressio
982988
def is_sql(self) -> bool:
983989
return True
984990

985-
@cached_property
986-
def depends_on(self) -> t.Set[str]:
987-
depends_on = self.depends_on_ or set()
988-
989-
query = self.render_query(optimize=False)
990-
if query is not None:
991-
depends_on |= d.find_tables(
992-
query, default_catalog=self.default_catalog, dialect=self.dialect
993-
)
994-
995-
depends_on -= {self.fqn}
996-
return depends_on
997-
998991
@property
999992
def columns_to_types(self) -> t.Optional[t.Dict[str, exp.DataType]]:
1000993
if self.columns_to_types_ is not None:
@@ -1225,6 +1218,10 @@ def seed_path(self) -> Path:
12251218
return self._path.parent / seed_path
12261219
return seed_path
12271220

1221+
@cached_property
1222+
def depends_on(self) -> t.Set[str]:
1223+
return (self.depends_on_ or set()) - {self.fqn}
1224+
12281225
@property
12291226
def depends_on_past(self) -> bool:
12301227
return False
@@ -1379,6 +1376,14 @@ def is_breaking_change(self, previous: Model) -> t.Optional[bool]:
13791376
return False
13801377
return None
13811378

1379+
@property
1380+
def depends_on(self) -> t.Set[str]:
1381+
return set()
1382+
1383+
@property
1384+
def depends_on_past(self) -> bool:
1385+
return False
1386+
13821387

13831388
Model = t.Union[SqlModel, SeedModel, PythonModel, ExternalModel]
13841389

0 commit comments

Comments
 (0)