sqlmesh 0.209.1.dev18__py3-none-any.whl → 0.209.1.dev20__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
sqlmesh/_version.py CHANGED
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.209.1.dev18'
21
- __version_tuple__ = version_tuple = (0, 209, 1, 'dev18')
20
+ __version__ = version = '0.209.1.dev20'
21
+ __version_tuple__ = version_tuple = (0, 209, 1, 'dev20')
@@ -1497,7 +1497,6 @@ class EngineAdapter:
1497
1497
  table_description: t.Optional[str] = None,
1498
1498
  column_descriptions: t.Optional[t.Dict[str, str]] = None,
1499
1499
  truncate: bool = False,
1500
- is_restatement: bool = False,
1501
1500
  **kwargs: t.Any,
1502
1501
  ) -> None:
1503
1502
  self._scd_type_2(
@@ -1514,7 +1513,6 @@ class EngineAdapter:
1514
1513
  table_description=table_description,
1515
1514
  column_descriptions=column_descriptions,
1516
1515
  truncate=truncate,
1517
- is_restatement=is_restatement,
1518
1516
  **kwargs,
1519
1517
  )
1520
1518
 
@@ -1533,7 +1531,6 @@ class EngineAdapter:
1533
1531
  table_description: t.Optional[str] = None,
1534
1532
  column_descriptions: t.Optional[t.Dict[str, str]] = None,
1535
1533
  truncate: bool = False,
1536
- is_restatement: bool = False,
1537
1534
  **kwargs: t.Any,
1538
1535
  ) -> None:
1539
1536
  self._scd_type_2(
@@ -1550,7 +1547,6 @@ class EngineAdapter:
1550
1547
  table_description=table_description,
1551
1548
  column_descriptions=column_descriptions,
1552
1549
  truncate=truncate,
1553
- is_restatement=is_restatement,
1554
1550
  **kwargs,
1555
1551
  )
1556
1552
 
@@ -1561,7 +1557,6 @@ class EngineAdapter:
1561
1557
  unique_key: t.Sequence[exp.Expression],
1562
1558
  valid_from_col: exp.Column,
1563
1559
  valid_to_col: exp.Column,
1564
- start: TimeLike,
1565
1560
  execution_time: t.Union[TimeLike, exp.Column],
1566
1561
  invalidate_hard_deletes: bool = True,
1567
1562
  updated_at_col: t.Optional[exp.Column] = None,
@@ -1572,7 +1567,6 @@ class EngineAdapter:
1572
1567
  table_description: t.Optional[str] = None,
1573
1568
  column_descriptions: t.Optional[t.Dict[str, str]] = None,
1574
1569
  truncate: bool = False,
1575
- is_restatement: bool = False,
1576
1570
  **kwargs: t.Any,
1577
1571
  ) -> None:
1578
1572
  def remove_managed_columns(
@@ -1757,17 +1751,9 @@ class EngineAdapter:
1757
1751
  existing_rows_query = exp.select(*table_columns, exp.true().as_("_exists")).from_(
1758
1752
  target_table
1759
1753
  )
1760
-
1761
1754
  if truncate:
1762
1755
  existing_rows_query = existing_rows_query.limit(0)
1763
1756
 
1764
- # Only set cleanup_ts if is_restatement is True and truncate is False (this to enable full restatement)
1765
- cleanup_ts = (
1766
- to_time_column(start, time_data_type, self.dialect, nullable=True)
1767
- if is_restatement and not truncate
1768
- else None
1769
- )
1770
-
1771
1757
  with source_queries[0] as source_query:
1772
1758
  prefixed_columns_to_types = []
1773
1759
  for column in columns_to_types:
@@ -1804,41 +1790,12 @@ class EngineAdapter:
1804
1790
  # Historical Records that Do Not Change
1805
1791
  .with_(
1806
1792
  "static",
1807
- existing_rows_query.where(valid_to_col.is_(exp.Null()).not_())
1808
- if cleanup_ts is None
1809
- else existing_rows_query.where(
1810
- exp.and_(
1811
- valid_to_col.is_(exp.Null().not_()),
1812
- valid_to_col < cleanup_ts,
1813
- ),
1814
- ),
1793
+ existing_rows_query.where(valid_to_col.is_(exp.Null()).not_()),
1815
1794
  )
1816
1795
  # Latest Records that can be updated
1817
1796
  .with_(
1818
1797
  "latest",
1819
- existing_rows_query.where(valid_to_col.is_(exp.Null()))
1820
- if cleanup_ts is None
1821
- else exp.select(
1822
- *(
1823
- to_time_column(
1824
- exp.null(), time_data_type, self.dialect, nullable=True
1825
- ).as_(col)
1826
- if col == valid_to_col.name
1827
- else exp.column(col)
1828
- for col in columns_to_types
1829
- ),
1830
- exp.true().as_("_exists"),
1831
- )
1832
- .from_(target_table)
1833
- .where(
1834
- exp.and_(
1835
- valid_from_col <= cleanup_ts,
1836
- exp.or_(
1837
- valid_to_col.is_(exp.null()),
1838
- valid_to_col >= cleanup_ts,
1839
- ),
1840
- )
1841
- ),
1798
+ existing_rows_query.where(valid_to_col.is_(exp.Null())),
1842
1799
  )
1843
1800
  # Deleted records which can be used to determine `valid_from` for undeleted source records
1844
1801
  .with_(
@@ -256,7 +256,6 @@ class TrinoEngineAdapter(
256
256
  unique_key: t.Sequence[exp.Expression],
257
257
  valid_from_col: exp.Column,
258
258
  valid_to_col: exp.Column,
259
- start: TimeLike,
260
259
  execution_time: t.Union[TimeLike, exp.Column],
261
260
  invalidate_hard_deletes: bool = True,
262
261
  updated_at_col: t.Optional[exp.Column] = None,
@@ -267,7 +266,6 @@ class TrinoEngineAdapter(
267
266
  table_description: t.Optional[str] = None,
268
267
  column_descriptions: t.Optional[t.Dict[str, str]] = None,
269
268
  truncate: bool = False,
270
- is_restatement: bool = False,
271
269
  **kwargs: t.Any,
272
270
  ) -> None:
273
271
  if columns_to_types and self.current_catalog_type == "delta_lake":
@@ -279,7 +277,6 @@ class TrinoEngineAdapter(
279
277
  unique_key,
280
278
  valid_from_col,
281
279
  valid_to_col,
282
- start,
283
280
  execution_time,
284
281
  invalidate_hard_deletes,
285
282
  updated_at_col,
@@ -290,7 +287,6 @@ class TrinoEngineAdapter(
290
287
  table_description,
291
288
  column_descriptions,
292
289
  truncate,
293
- is_restatement,
294
290
  **kwargs,
295
291
  )
296
292
 
@@ -141,6 +141,7 @@ class ModelKindMixin:
141
141
  self.is_incremental_unmanaged
142
142
  or self.is_incremental_by_unique_key
143
143
  or self.is_incremental_by_partition
144
+ or self.is_scd_type_2
144
145
  or self.is_managed
145
146
  or self.is_full
146
147
  or self.is_view
@@ -155,6 +155,7 @@ class PlanBuilder:
155
155
 
156
156
  self._backfill_models = backfill_models
157
157
  self._end = end or default_end
158
+ self._default_start = default_start
158
159
  self._apply = apply
159
160
  self._console = console or get_console()
160
161
  self._choices: t.Dict[SnapshotId, SnapshotChangeCategory] = {}
@@ -802,6 +803,25 @@ class PlanBuilder:
802
803
  f"Plan end date: '{time_like_to_str(end)}' cannot be in the future (execution time: '{time_like_to_str(self.execution_time)}')"
803
804
  )
804
805
 
806
+ # Validate model-specific start/end dates
807
+ if (start := self.start or self._default_start) and (end := self.end):
808
+ start_ts = to_datetime(start)
809
+ end_ts = to_datetime(end)
810
+ if start_ts > end_ts:
811
+ models_to_check: t.Set[str] = (
812
+ set(self._backfill_models or [])
813
+ | set(self._context_diff.modified_snapshots.keys())
814
+ | {s.name for s in self._context_diff.added}
815
+ | set((self._end_override_per_model or {}).keys())
816
+ )
817
+ for model_name in models_to_check:
818
+ if snapshot := self._model_fqn_to_snapshot.get(model_name):
819
+ if snapshot.node.start is None or to_datetime(snapshot.node.start) > end_ts:
820
+ raise PlanError(
821
+ f"Model '{model_name}': Start date / time '({time_like_to_str(start_ts)})' can't be greater than end date / time '({time_like_to_str(end_ts)})'.\n"
822
+ f"Set the `start` attribute in your project config model defaults to avoid this issue."
823
+ )
824
+
805
825
  def _ensure_no_broken_references(self) -> None:
806
826
  for snapshot in self._context_diff.snapshots.values():
807
827
  broken_references = {
@@ -235,11 +235,6 @@ class BuiltInPlanEvaluator(PlanEvaluator):
235
235
  return
236
236
 
237
237
  scheduler = self.create_scheduler(stage.all_snapshots.values(), self.snapshot_evaluator)
238
- # Convert model name restatements to snapshot ID restatements
239
- restatements_by_snapshot_id = {
240
- stage.all_snapshots[name].snapshot_id: interval
241
- for name, interval in plan.restatements.items()
242
- }
243
238
  errors, _ = scheduler.run_merged_intervals(
244
239
  merged_intervals=stage.snapshot_to_intervals,
245
240
  deployability_index=stage.deployability_index,
@@ -248,7 +243,6 @@ class BuiltInPlanEvaluator(PlanEvaluator):
248
243
  circuit_breaker=self._circuit_breaker,
249
244
  start=plan.start,
250
245
  end=plan.end,
251
- restatements=restatements_by_snapshot_id,
252
246
  )
253
247
  if errors:
254
248
  raise PlanError("Plan application failed.")
sqlmesh/core/scheduler.py CHANGED
@@ -161,7 +161,6 @@ class Scheduler:
161
161
  deployability_index: DeployabilityIndex,
162
162
  batch_index: int,
163
163
  environment_naming_info: t.Optional[EnvironmentNamingInfo] = None,
164
- is_restatement: bool = False,
165
164
  **kwargs: t.Any,
166
165
  ) -> t.List[AuditResult]:
167
166
  """Evaluate a snapshot and add the processed interval to the state sync.
@@ -193,7 +192,6 @@ class Scheduler:
193
192
  snapshots=snapshots,
194
193
  deployability_index=deployability_index,
195
194
  batch_index=batch_index,
196
- is_restatement=is_restatement,
197
195
  **kwargs,
198
196
  )
199
197
  audit_results = self._audit_snapshot(
@@ -373,7 +371,6 @@ class Scheduler:
373
371
  end: t.Optional[TimeLike] = None,
374
372
  run_environment_statements: bool = False,
375
373
  audit_only: bool = False,
376
- restatements: t.Optional[t.Dict[SnapshotId, Interval]] = None,
377
374
  ) -> t.Tuple[t.List[NodeExecutionFailedError[SchedulingUnit]], t.List[SchedulingUnit]]:
378
375
  """Runs precomputed batches of missing intervals.
379
376
 
@@ -450,10 +447,6 @@ class Scheduler:
450
447
  execution_time=execution_time,
451
448
  )
452
449
  else:
453
- # Determine if this snapshot and interval is a restatement (for SCD type 2)
454
- is_restatement = (
455
- restatements is not None and snapshot.snapshot_id in restatements
456
- )
457
450
  audit_results = self.evaluate(
458
451
  snapshot=snapshot,
459
452
  environment_naming_info=environment_naming_info,
@@ -462,7 +455,6 @@ class Scheduler:
462
455
  execution_time=execution_time,
463
456
  deployability_index=deployability_index,
464
457
  batch_index=batch_idx,
465
- is_restatement=is_restatement,
466
458
  )
467
459
 
468
460
  evaluation_duration_ms = now_timestamp() - execution_start_ts
@@ -671,7 +663,6 @@ class Scheduler:
671
663
  end=end,
672
664
  run_environment_statements=run_environment_statements,
673
665
  audit_only=audit_only,
674
- restatements=remove_intervals,
675
666
  )
676
667
 
677
668
  return CompletionStatus.FAILURE if errors else CompletionStatus.SUCCESS
@@ -837,21 +837,6 @@ class Snapshot(PydanticModel, SnapshotInfoMixin):
837
837
 
838
838
  removal_interval = expanded_removal_interval
839
839
 
840
- # SCD Type 2 validation that end date is the latest interval if it was provided
841
- if not is_preview and self.is_scd_type_2 and self.intervals:
842
- requested_start, requested_end = removal_interval
843
- latest_end = self.intervals[-1][1]
844
- if requested_end < latest_end:
845
- from sqlmesh.core.console import get_console
846
-
847
- get_console().log_warning(
848
- f"SCD Type 2 model '{self.model.name}' does not support end date in restatements.\n"
849
- f"Requested end date [{to_ts(requested_end)}] is less than the latest interval end date.\n"
850
- f"The requested end date will be ignored. Using the latest interval end instead: [{to_ts(latest_end)}]"
851
- )
852
-
853
- removal_interval = self.inclusive_exclusive(requested_start, latest_end, strict)
854
-
855
840
  return removal_interval
856
841
 
857
842
  @property
@@ -140,7 +140,6 @@ class SnapshotEvaluator:
140
140
  snapshots: t.Dict[str, Snapshot],
141
141
  deployability_index: t.Optional[DeployabilityIndex] = None,
142
142
  batch_index: int = 0,
143
- is_restatement: bool = False,
144
143
  **kwargs: t.Any,
145
144
  ) -> t.Optional[str]:
146
145
  """Renders the snapshot's model, executes it and stores the result in the snapshot's physical table.
@@ -166,7 +165,6 @@ class SnapshotEvaluator:
166
165
  snapshots,
167
166
  deployability_index=deployability_index,
168
167
  batch_index=batch_index,
169
- is_restatement=is_restatement,
170
168
  **kwargs,
171
169
  )
172
170
  if result is None or isinstance(result, str):
@@ -624,7 +622,6 @@ class SnapshotEvaluator:
624
622
  limit: t.Optional[int] = None,
625
623
  deployability_index: t.Optional[DeployabilityIndex] = None,
626
624
  batch_index: int = 0,
627
- is_restatement: bool = False,
628
625
  **kwargs: t.Any,
629
626
  ) -> DF | str | None:
630
627
  """Renders the snapshot's model and executes it. The return value depends on whether the limit was specified.
@@ -697,7 +694,6 @@ class SnapshotEvaluator:
697
694
  end=end,
698
695
  execution_time=execution_time,
699
696
  physical_properties=rendered_physical_properties,
700
- is_restatement=is_restatement,
701
697
  )
702
698
  else:
703
699
  logger.info(
@@ -719,7 +715,6 @@ class SnapshotEvaluator:
719
715
  end=end,
720
716
  execution_time=execution_time,
721
717
  physical_properties=rendered_physical_properties,
722
- is_restatement=is_restatement,
723
718
  )
724
719
 
725
720
  with (
@@ -1840,8 +1835,6 @@ class SCDType2Strategy(MaterializableStrategy):
1840
1835
  table_description=model.description,
1841
1836
  column_descriptions=model.column_descriptions,
1842
1837
  truncate=is_first_insert,
1843
- start=kwargs["start"],
1844
- is_restatement=kwargs.get("is_restatement", False),
1845
1838
  )
1846
1839
  elif isinstance(model.kind, SCDType2ByColumnKind):
1847
1840
  self.adapter.scd_type_2_by_column(
@@ -1859,8 +1852,6 @@ class SCDType2Strategy(MaterializableStrategy):
1859
1852
  table_description=model.description,
1860
1853
  column_descriptions=model.column_descriptions,
1861
1854
  truncate=is_first_insert,
1862
- start=kwargs["start"],
1863
- is_restatement=kwargs.get("is_restatement", False),
1864
1855
  )
1865
1856
  else:
1866
1857
  raise SQLMeshError(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlmesh
3
- Version: 0.209.1.dev18
3
+ Version: 0.209.1.dev20
4
4
  Summary: Next-generation data transformation framework
5
5
  Author-email: "TobikoData Inc." <engineering@tobikodata.com>
6
6
  License: Apache License
@@ -1,5 +1,5 @@
1
1
  sqlmesh/__init__.py,sha256=QjwaamJIdW7voXoS880yAx7tHm-Im4_mqGA-XJgafos,7631
2
- sqlmesh/_version.py,sha256=VXqoS95PazQMdQuI-Ud6xRAzmn1s_sL1yIIWZt5amJI,530
2
+ sqlmesh/_version.py,sha256=-H124qfvPmI-6kz_ewhkcpnhct8LluB7Bi6p9mziUtI,530
3
3
  sqlmesh/magics.py,sha256=bEzYqXHcM0P3CjyUZ1O9arlmXAdLAhoglKbQ29fD9AE,41842
4
4
  sqlmesh/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  sqlmesh/cicd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -24,7 +24,7 @@ sqlmesh/core/node.py,sha256=3ChBz1PIMJhp-jzed_GLBrtmEF2v_BVDEM5WNe0ssPk,14658
24
24
  sqlmesh/core/notification_target.py,sha256=PPGoDrgbRKxr27vJEu03XqNTQLYTw0ZF_b0yAapxGeI,16158
25
25
  sqlmesh/core/reference.py,sha256=k7OSkLqTjPR8WJjNeFj0xAJ297nZUMgb_iTVwKRRKjc,4875
26
26
  sqlmesh/core/renderer.py,sha256=PMUmmtwqk3FA5lN-16OWl6buCbrVa1M8NIgRXCYEB8k,26805
27
- sqlmesh/core/scheduler.py,sha256=CeI-15GrraLUI5YO8fQUACj7WG7dY6otE4TaJOp2_IU,41041
27
+ sqlmesh/core/scheduler.py,sha256=I30K5NyeM5HuZxyZ62Vgs1VoMWPNA0gev0nveWugmLM,40544
28
28
  sqlmesh/core/schema_diff.py,sha256=Sp2MoqAngp-yTYevkLaf9jb26SuAdGXoZ54g5MjWowU,30516
29
29
  sqlmesh/core/schema_loader.py,sha256=_Pq2RSw91uthqv1vNi_eHmLlzhtGz_APMJ0wAJZYuvk,3677
30
30
  sqlmesh/core/selector.py,sha256=CBuCbaFzidinaoS66o4MY9F-1C3k9YddNMyUv-5Z2i8,12815
@@ -59,7 +59,7 @@ sqlmesh/core/config/ui.py,sha256=jsO-S6_d9NkLZGG5pT4mgKgxMF34KzkDociZAMvCX3U,278
59
59
  sqlmesh/core/engine_adapter/__init__.py,sha256=two_WTs4UnSNp-fscJh8vOunJq0Xi37EuDuMjKsKuNE,2281
60
60
  sqlmesh/core/engine_adapter/_typing.py,sha256=_63pYCThfC39UtPVHY3N0H6qJ1YBT32OqwwR3swolGM,1037
61
61
  sqlmesh/core/engine_adapter/athena.py,sha256=AS1w_l_VrFZsc2CIicElg1dtS9y6q5hHHmTg4ECH-xs,26453
62
- sqlmesh/core/engine_adapter/base.py,sha256=qefboMkuzRn4ctUyuMZiFtL3tSHBZoMzKcpm_90Nvxw,107386
62
+ sqlmesh/core/engine_adapter/base.py,sha256=wwbWWmNv3T0caxp76rw8J1BVwhSaF6joL7-D75w6zsA,105632
63
63
  sqlmesh/core/engine_adapter/base_postgres.py,sha256=DOsOdCJyQAVfA9S0GznuH0J1bonMqYVP_yJLDYcxFYM,6772
64
64
  sqlmesh/core/engine_adapter/bigquery.py,sha256=JR7YhT4h6POqE6DhNeBxT83zzDyuHR-dBh3fnmavt18,52811
65
65
  sqlmesh/core/engine_adapter/clickhouse.py,sha256=LoPdm_s_s-ZxS1XJPA3Et0iOHeJ1LgqTAFbwBdiqE7A,34912
@@ -74,7 +74,7 @@ sqlmesh/core/engine_adapter/risingwave.py,sha256=GY0u085TWerl8kTRNJpEutdD5FBsoPi
74
74
  sqlmesh/core/engine_adapter/shared.py,sha256=pvYU-sC2WEIOENm4oG4UrOCWXF56h-FEmlAqAR8TYoA,13500
75
75
  sqlmesh/core/engine_adapter/snowflake.py,sha256=IEEzepxNpfqBIMe4ziz2k8fjOcJPeQPZyM3XljymAj0,28874
76
76
  sqlmesh/core/engine_adapter/spark.py,sha256=sYkVOPS0X43UPbI0z7Hh_EpKlI36qkOcr4NNFOTQlLs,21045
77
- sqlmesh/core/engine_adapter/trino.py,sha256=Tws3GxqnC6BmXFohqru1TDxsgPH-21qV6Oky7FaaLpE,15908
77
+ sqlmesh/core/engine_adapter/trino.py,sha256=7WdLFlT0AyD5NF0EDP7GqX0SHF8sTm7cafBZxk84cmY,15798
78
78
  sqlmesh/core/linter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
79
  sqlmesh/core/linter/definition.py,sha256=JDJTkhByUw4Tr3nF-BOHKFAx_eASQqEqzX6AUVQUz8I,5659
80
80
  sqlmesh/core/linter/helpers.py,sha256=Bv11aGRIrnv9Ym9fudy3XQB0k-FvchkLtBTkGI91SEw,6504
@@ -89,22 +89,22 @@ sqlmesh/core/model/cache.py,sha256=csun0RJguHzKX6-qITcOs4fVP4f8_Ts8qiUVV4sHY6Q,7
89
89
  sqlmesh/core/model/common.py,sha256=xCMdwkJXnwjE9-56wNb1HiER0KHmWbBzc2Tm--2u168,25610
90
90
  sqlmesh/core/model/decorator.py,sha256=bL-JuNrdBAikZSjVxnXqeB9i0e9qC7jm7yLjwiZ38aU,9470
91
91
  sqlmesh/core/model/definition.py,sha256=IxapmZQkSPFpqGA9_mfzA5xGu1AZVxgsR0P1f1-ngus,113980
92
- sqlmesh/core/model/kind.py,sha256=uN73ycANfM94CxcOdkUTclLansNvwo3wySkkl--QzY0,36322
92
+ sqlmesh/core/model/kind.py,sha256=dLIR49W5gh482ExcXz1UY81vqsudakhqAUL1XN7nrlk,36356
93
93
  sqlmesh/core/model/meta.py,sha256=PCYfLMevlWExRHQtYs1H_158x3I5K-yUXbdjRzH2YQw,20212
94
94
  sqlmesh/core/model/schema.py,sha256=_HMYfzK9wWXh7_CQDIIGnuQUD4aiX3o5D2cRp2sERzc,3387
95
95
  sqlmesh/core/model/seed.py,sha256=a0M-1zY1gOkN5ph2GQyataEdBSCtq50YjeFk2LyvInI,5058
96
96
  sqlmesh/core/plan/__init__.py,sha256=NKSvM7ZBVjw9ho3J65M1wFvG3KURB8PJ0FHHLmtSF44,443
97
- sqlmesh/core/plan/builder.py,sha256=CliBMyjTFTp4pVjV04ocxjLh3i0LjJevWdarZj3af8A,40954
97
+ sqlmesh/core/plan/builder.py,sha256=vAfziTkuM4Oq2s-flqScQf-Mac-i21YVmLpKL_I3b0c,42176
98
98
  sqlmesh/core/plan/common.py,sha256=xchdSb_XqQBu0S6OqnpeLBR5XB8Rmr9FRCfO_v4Tl50,768
99
99
  sqlmesh/core/plan/definition.py,sha256=yrX_uZMXi29ltkuowWhNUOi1kd0Uq0TQoM574EI6JHo,14019
100
- sqlmesh/core/plan/evaluator.py,sha256=0oqepq0qZ_tPhAye6Q9gLenBD_8yE3E8AAwt553lz7U,22163
100
+ sqlmesh/core/plan/evaluator.py,sha256=B8ugjmOze7uwAnFxO266u7E72IpJyK_VHHqTwLcCODs,21869
101
101
  sqlmesh/core/plan/explainer.py,sha256=aBkvtM9eog_2NIglazSDdG_i9TTCdFSVOkCw5N8O-1k,12028
102
102
  sqlmesh/core/plan/stages.py,sha256=ZxaHdV6G1P8g9fk2kgsFBGJFe8JPPICdoG_8U1FbklY,23743
103
103
  sqlmesh/core/snapshot/__init__.py,sha256=Z5HTetNCZGoKF1WAKXk4LWL9dc8EC8lwS2O4TtoBmt4,1317
104
104
  sqlmesh/core/snapshot/cache.py,sha256=bgqCR2hyf6r2A_8QP1EnXFK25gDX37-Zg0YeMuETWxg,3934
105
105
  sqlmesh/core/snapshot/categorizer.py,sha256=qGG5870mu1jR2whKisSBH_GFbsyh96RnzJDgkN7DV9g,2482
106
- sqlmesh/core/snapshot/definition.py,sha256=dbx9n4vI1Zdddiu6EXB-eM6KjSsepnpVWdjC_2aPcrg,91305
107
- sqlmesh/core/snapshot/evaluator.py,sha256=h0WoXKWj4ZrehBDJty8AsQ7mq5xvUCCywdpRjH9B1d8,92460
106
+ sqlmesh/core/snapshot/definition.py,sha256=RRlpahl5hfzcR34X8L6_xLR5X5e3ihPwWZKkS7wg2gE,90433
107
+ sqlmesh/core/snapshot/evaluator.py,sha256=lgqSiG65sOEXSsxQ3Nx5rrcbJgWXgqE9lSWUEHMRZd0,92025
108
108
  sqlmesh/core/state_sync/__init__.py,sha256=B60xj-_Xk-4jas3UphLvwkuf04G-9AyGckcblXE0aRg,869
109
109
  sqlmesh/core/state_sync/base.py,sha256=AdqWmbhnvRFqVcFK6L01uCvpBVAYGuMrm4P0D3u_NaU,18334
110
110
  sqlmesh/core/state_sync/cache.py,sha256=0AsYdQyBqbLdJvkBQ-hDAipsvnn_jSps-nya-Q4XeL0,5337
@@ -291,7 +291,7 @@ sqlmesh/utils/pydantic.py,sha256=o_NsXbIpDqNpUA1Uc5xF0ZzoXQYYB0DfHwdRxBwXPNk,120
291
291
  sqlmesh/utils/rich.py,sha256=cwQ5nJ6sgz64xHtoh6_ec7ReV5YpsOGhMtUJnwoRfEI,3549
292
292
  sqlmesh/utils/windows.py,sha256=r7Yin4WEwbvH7sKA3hOJtRsclmscNuBeCklCfVPvtQs,611
293
293
  sqlmesh/utils/yaml.py,sha256=hvo5lmybYLcIx4p6CQwufS8X4MbwS60lEBnCmYJCXmU,2336
294
- sqlmesh-0.209.1.dev18.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
294
+ sqlmesh-0.209.1.dev20.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
295
295
  sqlmesh_dbt/__init__.py,sha256=awYS5y5mz-1NUmx6i5h5NSTJ7tidRl9NC0FAnFWSF6U,350
296
296
  sqlmesh_dbt/cli.py,sha256=Ekn77WLMmyyr31aoDoWrZp5DS0rfiddy7pNohBK8G0s,2115
297
297
  sqlmesh_dbt/console.py,sha256=1B0B5_R1DlrEkyWVDl8G78-B6_K-ZtLPsQEhqPCfLEU,188
@@ -413,8 +413,8 @@ web/server/api/endpoints/models.py,sha256=kwj0s7uve3iZSMfmjkoPVMFMeY1sD0peTeyrWf
413
413
  web/server/api/endpoints/modules.py,sha256=8hqqgonGay_mJmpCw0IdbjsPhWlQH2VLdKAqha-myac,468
414
414
  web/server/api/endpoints/plan.py,sha256=bbbY50W_2MsZSTxOHWMKz0tbIm75nsRSlPy8GI2fg9Q,9306
415
415
  web/server/api/endpoints/table_diff.py,sha256=SCy3-pr5x6bEEiOaZGCDbiHQhpgxwmnz3Acqa2Ie6jI,2090
416
- sqlmesh-0.209.1.dev18.dist-info/METADATA,sha256=DhsqsAAfCLUo_qjBGTON1HbyNiXLjtm-eXvr1DlrUso,26686
417
- sqlmesh-0.209.1.dev18.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
418
- sqlmesh-0.209.1.dev18.dist-info/entry_points.txt,sha256=sHAf6tQczIM8xZoduN4qaUjV7QEPVUUW_LCT8EDUMv4,155
419
- sqlmesh-0.209.1.dev18.dist-info/top_level.txt,sha256=RQ-33FPe2IgL0rgossAfJkCRtqslz9b7wFARqiWLC5Q,24
420
- sqlmesh-0.209.1.dev18.dist-info/RECORD,,
416
+ sqlmesh-0.209.1.dev20.dist-info/METADATA,sha256=WILYB84ir6JQNMNVdb_10I4O_f95kPqfM_YrUx0pKks,26686
417
+ sqlmesh-0.209.1.dev20.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
418
+ sqlmesh-0.209.1.dev20.dist-info/entry_points.txt,sha256=sHAf6tQczIM8xZoduN4qaUjV7QEPVUUW_LCT8EDUMv4,155
419
+ sqlmesh-0.209.1.dev20.dist-info/top_level.txt,sha256=RQ-33FPe2IgL0rgossAfJkCRtqslz9b7wFARqiWLC5Q,24
420
+ sqlmesh-0.209.1.dev20.dist-info/RECORD,,