sqlmesh 0.201.1.dev1__py3-none-any.whl → 0.201.1.dev3__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.201.1.dev1'
21
- __version_tuple__ = version_tuple = (0, 201, 1, 'dev1')
20
+ __version__ = version = '0.201.1.dev3'
21
+ __version_tuple__ = version_tuple = (0, 201, 1, 'dev3')
@@ -1462,6 +1462,7 @@ class EngineAdapter:
1462
1462
  table_description: t.Optional[str] = None,
1463
1463
  column_descriptions: t.Optional[t.Dict[str, str]] = None,
1464
1464
  truncate: bool = False,
1465
+ is_restatement: bool = False,
1465
1466
  **kwargs: t.Any,
1466
1467
  ) -> None:
1467
1468
  self._scd_type_2(
@@ -1478,6 +1479,7 @@ class EngineAdapter:
1478
1479
  table_description=table_description,
1479
1480
  column_descriptions=column_descriptions,
1480
1481
  truncate=truncate,
1482
+ is_restatement=is_restatement,
1481
1483
  **kwargs,
1482
1484
  )
1483
1485
 
@@ -1496,6 +1498,7 @@ class EngineAdapter:
1496
1498
  table_description: t.Optional[str] = None,
1497
1499
  column_descriptions: t.Optional[t.Dict[str, str]] = None,
1498
1500
  truncate: bool = False,
1501
+ is_restatement: bool = False,
1499
1502
  **kwargs: t.Any,
1500
1503
  ) -> None:
1501
1504
  self._scd_type_2(
@@ -1512,6 +1515,7 @@ class EngineAdapter:
1512
1515
  table_description=table_description,
1513
1516
  column_descriptions=column_descriptions,
1514
1517
  truncate=truncate,
1518
+ is_restatement=is_restatement,
1515
1519
  **kwargs,
1516
1520
  )
1517
1521
 
@@ -1533,6 +1537,7 @@ class EngineAdapter:
1533
1537
  table_description: t.Optional[str] = None,
1534
1538
  column_descriptions: t.Optional[t.Dict[str, str]] = None,
1535
1539
  truncate: bool = False,
1540
+ is_restatement: bool = False,
1536
1541
  **kwargs: t.Any,
1537
1542
  ) -> None:
1538
1543
  def remove_managed_columns(
@@ -1718,13 +1723,15 @@ class EngineAdapter:
1718
1723
  target_table
1719
1724
  )
1720
1725
 
1721
- cleanup_ts = None
1722
1726
  if truncate:
1723
1727
  existing_rows_query = existing_rows_query.limit(0)
1724
- else:
1725
- # If truncate is false it is not the first insert
1726
- # Determine the cleanup timestamp for restatement or a regular incremental run
1727
- cleanup_ts = to_time_column(start, time_data_type, self.dialect, nullable=True)
1728
+
1729
+ # Only set cleanup_ts if is_restatement is True and truncate is False (this to enable full restatement)
1730
+ cleanup_ts = (
1731
+ to_time_column(start, time_data_type, self.dialect, nullable=True)
1732
+ if is_restatement and not truncate
1733
+ else None
1734
+ )
1728
1735
 
1729
1736
  with source_queries[0] as source_query:
1730
1737
  prefixed_columns_to_types = []
@@ -1763,7 +1770,7 @@ class EngineAdapter:
1763
1770
  .with_(
1764
1771
  "static",
1765
1772
  existing_rows_query.where(valid_to_col.is_(exp.Null()).not_())
1766
- if truncate
1773
+ if cleanup_ts is None
1767
1774
  else existing_rows_query.where(
1768
1775
  exp.and_(
1769
1776
  valid_to_col.is_(exp.Null().not_()),
@@ -1775,7 +1782,7 @@ class EngineAdapter:
1775
1782
  .with_(
1776
1783
  "latest",
1777
1784
  existing_rows_query.where(valid_to_col.is_(exp.Null()))
1778
- if truncate
1785
+ if cleanup_ts is None
1779
1786
  else exp.select(
1780
1787
  *(
1781
1788
  to_time_column(
@@ -134,6 +134,10 @@ class BigQueryEngineAdapter(InsertOverwriteWithMergeMixin, ClusteredByMixin, Row
134
134
  }
135
135
  if self._extra_config.get("maximum_bytes_billed"):
136
136
  params["maximum_bytes_billed"] = self._extra_config.get("maximum_bytes_billed")
137
+ if self.correlation_id:
138
+ # BigQuery label keys must be lowercase
139
+ key = self.correlation_id.job_type.value.lower()
140
+ params["labels"] = {key: self.correlation_id.job_id}
137
141
  return params
138
142
 
139
143
  @property
@@ -204,6 +208,11 @@ class BigQueryEngineAdapter(InsertOverwriteWithMergeMixin, ClusteredByMixin, Row
204
208
  "Invalid value for `session_properties.query_label`. Must be an array or tuple."
205
209
  )
206
210
 
211
+ if self.correlation_id:
212
+ parsed_query_label.append(
213
+ (self.correlation_id.job_type.value.lower(), self.correlation_id.job_id)
214
+ )
215
+
207
216
  if parsed_query_label:
208
217
  query_label_str = ",".join([":".join(label) for label in parsed_query_label])
209
218
  query = f'SET @@query_label = "{query_label_str}";SELECT 1;'
@@ -267,6 +267,7 @@ class TrinoEngineAdapter(
267
267
  table_description: t.Optional[str] = None,
268
268
  column_descriptions: t.Optional[t.Dict[str, str]] = None,
269
269
  truncate: bool = False,
270
+ is_restatement: bool = False,
270
271
  **kwargs: t.Any,
271
272
  ) -> None:
272
273
  if columns_to_types and self.current_catalog_type == "delta_lake":
@@ -289,6 +290,7 @@ class TrinoEngineAdapter(
289
290
  table_description,
290
291
  column_descriptions,
291
292
  truncate,
293
+ is_restatement,
292
294
  **kwargs,
293
295
  )
294
296
 
@@ -234,6 +234,11 @@ class BuiltInPlanEvaluator(PlanEvaluator):
234
234
  return
235
235
 
236
236
  scheduler = self.create_scheduler(stage.all_snapshots.values(), self.snapshot_evaluator)
237
+ # Convert model name restatements to snapshot ID restatements
238
+ restatements_by_snapshot_id = {
239
+ stage.all_snapshots[name].snapshot_id: interval
240
+ for name, interval in plan.restatements.items()
241
+ }
237
242
  errors, _ = scheduler.run_merged_intervals(
238
243
  merged_intervals=stage.snapshot_to_intervals,
239
244
  deployability_index=stage.deployability_index,
@@ -242,6 +247,7 @@ class BuiltInPlanEvaluator(PlanEvaluator):
242
247
  circuit_breaker=self._circuit_breaker,
243
248
  start=plan.start,
244
249
  end=plan.end,
250
+ restatements=restatements_by_snapshot_id,
245
251
  )
246
252
  if errors:
247
253
  raise PlanError("Plan application failed.")
sqlmesh/core/scheduler.py CHANGED
@@ -161,6 +161,7 @@ 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,
164
165
  **kwargs: t.Any,
165
166
  ) -> t.List[AuditResult]:
166
167
  """Evaluate a snapshot and add the processed interval to the state sync.
@@ -192,6 +193,7 @@ class Scheduler:
192
193
  snapshots=snapshots,
193
194
  deployability_index=deployability_index,
194
195
  batch_index=batch_index,
196
+ is_restatement=is_restatement,
195
197
  **kwargs,
196
198
  )
197
199
  audit_results = self._audit_snapshot(
@@ -371,6 +373,7 @@ class Scheduler:
371
373
  end: t.Optional[TimeLike] = None,
372
374
  run_environment_statements: bool = False,
373
375
  audit_only: bool = False,
376
+ restatements: t.Optional[t.Dict[SnapshotId, Interval]] = None,
374
377
  ) -> t.Tuple[t.List[NodeExecutionFailedError[SchedulingUnit]], t.List[SchedulingUnit]]:
375
378
  """Runs precomputed batches of missing intervals.
376
379
 
@@ -447,6 +450,10 @@ class Scheduler:
447
450
  execution_time=execution_time,
448
451
  )
449
452
  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
+ )
450
457
  audit_results = self.evaluate(
451
458
  snapshot=snapshot,
452
459
  environment_naming_info=environment_naming_info,
@@ -455,6 +462,7 @@ class Scheduler:
455
462
  execution_time=execution_time,
456
463
  deployability_index=deployability_index,
457
464
  batch_index=batch_idx,
465
+ is_restatement=is_restatement,
458
466
  )
459
467
 
460
468
  evaluation_duration_ms = now_timestamp() - execution_start_ts
@@ -663,6 +671,7 @@ class Scheduler:
663
671
  end=end,
664
672
  run_environment_statements=run_environment_statements,
665
673
  audit_only=audit_only,
674
+ restatements=remove_intervals,
666
675
  )
667
676
 
668
677
  return CompletionStatus.FAILURE if errors else CompletionStatus.SUCCESS
@@ -140,6 +140,7 @@ 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,
143
144
  **kwargs: t.Any,
144
145
  ) -> t.Optional[str]:
145
146
  """Renders the snapshot's model, executes it and stores the result in the snapshot's physical table.
@@ -165,6 +166,7 @@ class SnapshotEvaluator:
165
166
  snapshots,
166
167
  deployability_index=deployability_index,
167
168
  batch_index=batch_index,
169
+ is_restatement=is_restatement,
168
170
  **kwargs,
169
171
  )
170
172
  if result is None or isinstance(result, str):
@@ -622,6 +624,7 @@ class SnapshotEvaluator:
622
624
  limit: t.Optional[int] = None,
623
625
  deployability_index: t.Optional[DeployabilityIndex] = None,
624
626
  batch_index: int = 0,
627
+ is_restatement: bool = False,
625
628
  **kwargs: t.Any,
626
629
  ) -> DF | str | None:
627
630
  """Renders the snapshot's model and executes it. The return value depends on whether the limit was specified.
@@ -694,6 +697,7 @@ class SnapshotEvaluator:
694
697
  end=end,
695
698
  execution_time=execution_time,
696
699
  physical_properties=rendered_physical_properties,
700
+ is_restatement=is_restatement,
697
701
  )
698
702
  else:
699
703
  logger.info(
@@ -715,6 +719,7 @@ class SnapshotEvaluator:
715
719
  end=end,
716
720
  execution_time=execution_time,
717
721
  physical_properties=rendered_physical_properties,
722
+ is_restatement=is_restatement,
718
723
  )
719
724
 
720
725
  with (
@@ -1833,6 +1838,7 @@ class SCDType2Strategy(MaterializableStrategy):
1833
1838
  column_descriptions=model.column_descriptions,
1834
1839
  truncate=is_first_insert,
1835
1840
  start=kwargs["start"],
1841
+ is_restatement=kwargs.get("is_restatement", False),
1836
1842
  )
1837
1843
  elif isinstance(model.kind, SCDType2ByColumnKind):
1838
1844
  self.adapter.scd_type_2_by_column(
@@ -1851,6 +1857,7 @@ class SCDType2Strategy(MaterializableStrategy):
1851
1857
  column_descriptions=model.column_descriptions,
1852
1858
  truncate=is_first_insert,
1853
1859
  start=kwargs["start"],
1860
+ is_restatement=kwargs.get("is_restatement", False),
1854
1861
  )
1855
1862
  else:
1856
1863
  raise SQLMeshError(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlmesh
3
- Version: 0.201.1.dev1
3
+ Version: 0.201.1.dev3
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=wWb0WF0HqqOTVtFmZQ_YD72bQI0-lNwObrfk_adzW1w,528
2
+ sqlmesh/_version.py,sha256=1tTr8NASXh9g0FtenQtx6UvZoEwK-N9sry6pOINtvwU,528
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=SVE1THHK1UVdPPHjmqNbBVIjmEYcK8tz5pWh1ss8xGs,26684
27
- sqlmesh/core/scheduler.py,sha256=I30K5NyeM5HuZxyZ62Vgs1VoMWPNA0gev0nveWugmLM,40544
27
+ sqlmesh/core/scheduler.py,sha256=CeI-15GrraLUI5YO8fQUACj7WG7dY6otE4TaJOp2_IU,41041
28
28
  sqlmesh/core/schema_diff.py,sha256=Sp2MoqAngp-yTYevkLaf9jb26SuAdGXoZ54g5MjWowU,30516
29
29
  sqlmesh/core/schema_loader.py,sha256=lvrI9k7hr1P4X4E6t3U-KrcuvdQuw0UdNlN90P2s52w,3563
30
30
  sqlmesh/core/selector.py,sha256=CBuCbaFzidinaoS66o4MY9F-1C3k9YddNMyUv-5Z2i8,12815
@@ -59,9 +59,9 @@ 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=vCnqWyZCUsLVZArCdyEQywvAliwFCDDbGMig7EyOaTU,104361
62
+ sqlmesh/core/engine_adapter/base.py,sha256=QUHO4z-5IibBD1pKPfYr04yTroDZ4katsV-GHUmFC-Y,104590
63
63
  sqlmesh/core/engine_adapter/base_postgres.py,sha256=DOsOdCJyQAVfA9S0GznuH0J1bonMqYVP_yJLDYcxFYM,6772
64
- sqlmesh/core/engine_adapter/bigquery.py,sha256=qJE8vHLKKAeWMvltmYaUvWS95jM_UEZ6UzYLlr58sGo,50424
64
+ sqlmesh/core/engine_adapter/bigquery.py,sha256=hkEbCiWYy6qS9VHwOZ67yn1t50apWOoV8mn2tetjIVE,50809
65
65
  sqlmesh/core/engine_adapter/clickhouse.py,sha256=LoPdm_s_s-ZxS1XJPA3Et0iOHeJ1LgqTAFbwBdiqE7A,34912
66
66
  sqlmesh/core/engine_adapter/databricks.py,sha256=8ZExPIeT3dDh9MTJW8udvmh9LiY-f9HkRAN1Q5Qebhs,14541
67
67
  sqlmesh/core/engine_adapter/duckdb.py,sha256=TlSFSWNzUfjGdhuMyCi1CLwhBaEKyNKtasub9OsYwrc,5199
@@ -74,7 +74,7 @@ sqlmesh/core/engine_adapter/risingwave.py,sha256=GY0u085TWerl8kTRNJpEutdD5FBsoPi
74
74
  sqlmesh/core/engine_adapter/shared.py,sha256=zL2W2t9af9mo80aSO0fz5TqV6mY8_kI5VYLswbKdZyk,13369
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=Ik5yOW_gYahVq6ksZPzE2Um-5J4A2AJv-QZiZYUPeP8,15842
77
+ sqlmesh/core/engine_adapter/trino.py,sha256=Tws3GxqnC6BmXFohqru1TDxsgPH-21qV6Oky7FaaLpE,15908
78
78
  sqlmesh/core/linter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
79
  sqlmesh/core/linter/definition.py,sha256=pXDxl8TxTGNuVc1B5ywYmaH7dDjsoMRvCtLCK_co-ek,5567
80
80
  sqlmesh/core/linter/helpers.py,sha256=ygumMRAShxHITK_5vI64tHJoEa2mAdKen5hlMxaXKoQ,5022
@@ -96,14 +96,14 @@ sqlmesh/core/model/seed.py,sha256=a0M-1zY1gOkN5ph2GQyataEdBSCtq50YjeFk2LyvInI,50
96
96
  sqlmesh/core/plan/__init__.py,sha256=NKSvM7ZBVjw9ho3J65M1wFvG3KURB8PJ0FHHLmtSF44,443
97
97
  sqlmesh/core/plan/builder.py,sha256=TQVSGiGbQi9tro0tBlcL2f5BEvyOYNiLuB3yz8PRUzA,41859
98
98
  sqlmesh/core/plan/definition.py,sha256=yrX_uZMXi29ltkuowWhNUOi1kd0Uq0TQoM574EI6JHo,14019
99
- sqlmesh/core/plan/evaluator.py,sha256=OS6ayFwb_o1CBccVfiWPse8ecpI4nCcV8Ubr9yEp7yE,21527
99
+ sqlmesh/core/plan/evaluator.py,sha256=KOBZD9-hn1vVpFR9WGSIu2gt-C66R6--bwA6GxgNick,21821
100
100
  sqlmesh/core/plan/explainer.py,sha256=aBkvtM9eog_2NIglazSDdG_i9TTCdFSVOkCw5N8O-1k,12028
101
101
  sqlmesh/core/plan/stages.py,sha256=JN7rwo6ibY5Ctqof3Us7Eu2x85n5GXH0rCA47BBvP1o,22228
102
102
  sqlmesh/core/snapshot/__init__.py,sha256=Z5HTetNCZGoKF1WAKXk4LWL9dc8EC8lwS2O4TtoBmt4,1317
103
103
  sqlmesh/core/snapshot/cache.py,sha256=bgqCR2hyf6r2A_8QP1EnXFK25gDX37-Zg0YeMuETWxg,3934
104
104
  sqlmesh/core/snapshot/categorizer.py,sha256=qGG5870mu1jR2whKisSBH_GFbsyh96RnzJDgkN7DV9g,2482
105
105
  sqlmesh/core/snapshot/definition.py,sha256=DwYTNcDfPQUQ1osF_63SdicSj7oqVjtmPPEzqwsxDLU,85748
106
- sqlmesh/core/snapshot/evaluator.py,sha256=CPjpzUmFwjM9wTECe6KJB5FaY2C7LwxvFT9fXSorfTs,91489
106
+ sqlmesh/core/snapshot/evaluator.py,sha256=9l73YNKTEu9N91JTSxnxLqQo-lAaX6ihPxVNi4wUfFQ,91846
107
107
  sqlmesh/core/state_sync/__init__.py,sha256=B60xj-_Xk-4jas3UphLvwkuf04G-9AyGckcblXE0aRg,869
108
108
  sqlmesh/core/state_sync/base.py,sha256=AdqWmbhnvRFqVcFK6L01uCvpBVAYGuMrm4P0D3u_NaU,18334
109
109
  sqlmesh/core/state_sync/cache.py,sha256=0AsYdQyBqbLdJvkBQ-hDAipsvnn_jSps-nya-Q4XeL0,5337
@@ -284,7 +284,7 @@ sqlmesh/utils/pydantic.py,sha256=o_NsXbIpDqNpUA1Uc5xF0ZzoXQYYB0DfHwdRxBwXPNk,120
284
284
  sqlmesh/utils/rich.py,sha256=cwQ5nJ6sgz64xHtoh6_ec7ReV5YpsOGhMtUJnwoRfEI,3549
285
285
  sqlmesh/utils/windows.py,sha256=r7Yin4WEwbvH7sKA3hOJtRsclmscNuBeCklCfVPvtQs,611
286
286
  sqlmesh/utils/yaml.py,sha256=hvo5lmybYLcIx4p6CQwufS8X4MbwS60lEBnCmYJCXmU,2336
287
- sqlmesh-0.201.1.dev1.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
287
+ sqlmesh-0.201.1.dev3.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
288
288
  web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
289
289
  web/client/dist/index.html,sha256=DAv6ABGogw4xRLb0T_92WP_S7XWyqVhwBgGKWtuQwU4,5472
290
290
  web/client/dist/assets/Audits-BuHAmFO8.js,sha256=zbYUF6WdUGMbnMm01GMNPb7xAJwj-o5wMdL56vPo2qE,1041
@@ -402,8 +402,8 @@ web/server/api/endpoints/models.py,sha256=kwj0s7uve3iZSMfmjkoPVMFMeY1sD0peTeyrWf
402
402
  web/server/api/endpoints/modules.py,sha256=8hqqgonGay_mJmpCw0IdbjsPhWlQH2VLdKAqha-myac,468
403
403
  web/server/api/endpoints/plan.py,sha256=bbbY50W_2MsZSTxOHWMKz0tbIm75nsRSlPy8GI2fg9Q,9306
404
404
  web/server/api/endpoints/table_diff.py,sha256=SCy3-pr5x6bEEiOaZGCDbiHQhpgxwmnz3Acqa2Ie6jI,2090
405
- sqlmesh-0.201.1.dev1.dist-info/METADATA,sha256=vWHfmSD4VYjZggUvLfXm1xg9zr9EXfb1XMaC_N9Jf5Q,26678
406
- sqlmesh-0.201.1.dev1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
407
- sqlmesh-0.201.1.dev1.dist-info/entry_points.txt,sha256=pIYKtg-u-uO7BK_Y0qrdmfyj0bYrcMc3Xiqr5WE3VFk,121
408
- sqlmesh-0.201.1.dev1.dist-info/top_level.txt,sha256=bspjo5vjELQkuN0qKuTFIbsrUt3Zeo8D2mlKeHG1LdE,12
409
- sqlmesh-0.201.1.dev1.dist-info/RECORD,,
405
+ sqlmesh-0.201.1.dev3.dist-info/METADATA,sha256=XGPAejnoSVf067feuPqNfZeRZvbU29oMrREeTSD7QVo,26678
406
+ sqlmesh-0.201.1.dev3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
407
+ sqlmesh-0.201.1.dev3.dist-info/entry_points.txt,sha256=pIYKtg-u-uO7BK_Y0qrdmfyj0bYrcMc3Xiqr5WE3VFk,121
408
+ sqlmesh-0.201.1.dev3.dist-info/top_level.txt,sha256=bspjo5vjELQkuN0qKuTFIbsrUt3Zeo8D2mlKeHG1LdE,12
409
+ sqlmesh-0.201.1.dev3.dist-info/RECORD,,