sqlmesh 0.197.1.dev1__py3-none-any.whl → 0.197.1.dev2__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.197.1.dev1'
21
- __version_tuple__ = version_tuple = (0, 197, 1, 'dev1')
20
+ __version__ = version = '0.197.1.dev2'
21
+ __version_tuple__ = version_tuple = (0, 197, 1, 'dev2')
@@ -130,7 +130,6 @@ class BuiltInSchedulerConfig(_EngineAdapterStateSyncSchedulerConfig, BaseConfig)
130
130
  def create_plan_evaluator(self, context: GenericContext) -> PlanEvaluator:
131
131
  return BuiltInPlanEvaluator(
132
132
  state_sync=context.state_sync,
133
- snapshot_evaluator=context.snapshot_evaluator,
134
133
  create_scheduler=context.create_scheduler,
135
134
  default_catalog=context.default_catalog,
136
135
  console=context.console,
sqlmesh/core/context.py CHANGED
@@ -116,7 +116,7 @@ from sqlmesh.core.test import (
116
116
  run_tests,
117
117
  )
118
118
  from sqlmesh.core.user import User
119
- from sqlmesh.utils import UniqueKeyDict, Verbosity
119
+ from sqlmesh.utils import UniqueKeyDict, Verbosity, CorrelationId
120
120
  from sqlmesh.utils.concurrency import concurrent_apply_to_values
121
121
  from sqlmesh.utils.dag import DAG
122
122
  from sqlmesh.utils.date import (
@@ -418,7 +418,7 @@ class GenericContext(BaseContext, t.Generic[C]):
418
418
  self.config.get_state_connection(self.gateway) or self.connection_config
419
419
  )
420
420
 
421
- self._snapshot_evaluator: t.Optional[SnapshotEvaluator] = None
421
+ self._snapshot_evaluators: t.Dict[t.Optional[CorrelationId], SnapshotEvaluator] = {}
422
422
 
423
423
  self.console = get_console()
424
424
  setattr(self.console, "dialect", self.config.dialect)
@@ -446,18 +446,22 @@ class GenericContext(BaseContext, t.Generic[C]):
446
446
  self._engine_adapter = self.connection_config.create_engine_adapter()
447
447
  return self._engine_adapter
448
448
 
449
- @property
450
- def snapshot_evaluator(self) -> SnapshotEvaluator:
451
- if not self._snapshot_evaluator:
452
- self._snapshot_evaluator = SnapshotEvaluator(
449
+ def snapshot_evaluator(
450
+ self, correlation_id: t.Optional[CorrelationId] = None
451
+ ) -> SnapshotEvaluator:
452
+ # Cache snapshot evaluators by correlation_id to avoid old correlation_ids being attached to future Context operations
453
+ if correlation_id not in self._snapshot_evaluators:
454
+ self._snapshot_evaluators[correlation_id] = SnapshotEvaluator(
453
455
  {
454
- gateway: adapter.with_log_level(logging.INFO)
456
+ gateway: adapter.with_settings(
457
+ log_level=logging.INFO, correlation_id=correlation_id
458
+ )
455
459
  for gateway, adapter in self.engine_adapters.items()
456
460
  },
457
461
  ddl_concurrent_tasks=self.concurrent_tasks,
458
462
  selected_gateway=self.selected_gateway,
459
463
  )
460
- return self._snapshot_evaluator
464
+ return self._snapshot_evaluators[correlation_id]
461
465
 
462
466
  def execution_context(
463
467
  self,
@@ -538,7 +542,9 @@ class GenericContext(BaseContext, t.Generic[C]):
538
542
 
539
543
  return self.create_scheduler(snapshots)
540
544
 
541
- def create_scheduler(self, snapshots: t.Iterable[Snapshot]) -> Scheduler:
545
+ def create_scheduler(
546
+ self, snapshots: t.Iterable[Snapshot], correlation_id: t.Optional[CorrelationId] = None
547
+ ) -> Scheduler:
542
548
  """Creates the built-in scheduler.
543
549
 
544
550
  Args:
@@ -549,7 +555,7 @@ class GenericContext(BaseContext, t.Generic[C]):
549
555
  """
550
556
  return Scheduler(
551
557
  snapshots,
552
- self.snapshot_evaluator,
558
+ self.snapshot_evaluator(correlation_id),
553
559
  self.state_sync,
554
560
  default_catalog=self.default_catalog,
555
561
  max_workers=self.concurrent_tasks,
@@ -714,7 +720,7 @@ class GenericContext(BaseContext, t.Generic[C]):
714
720
  NotificationEvent.RUN_START, environment=environment
715
721
  )
716
722
  analytics_run_id = analytics.collector.on_run_start(
717
- engine_type=self.snapshot_evaluator.adapter.dialect,
723
+ engine_type=self.snapshot_evaluator().adapter.dialect,
718
724
  state_sync_type=self.state_sync.state_type(),
719
725
  )
720
726
  self._load_materializations()
@@ -1076,7 +1082,7 @@ class GenericContext(BaseContext, t.Generic[C]):
1076
1082
  and not parent_snapshot.categorized
1077
1083
  ]
1078
1084
 
1079
- df = self.snapshot_evaluator.evaluate_and_fetch(
1085
+ df = self.snapshot_evaluator().evaluate_and_fetch(
1080
1086
  snapshot,
1081
1087
  start=start,
1082
1088
  end=end,
@@ -1588,7 +1594,12 @@ class GenericContext(BaseContext, t.Generic[C]):
1588
1594
  default_catalog=self.default_catalog,
1589
1595
  console=self.console,
1590
1596
  )
1591
- explainer.evaluate(plan.to_evaluatable())
1597
+ explainer.evaluate(
1598
+ plan.to_evaluatable(),
1599
+ snapshot_evaluator=self.snapshot_evaluator(
1600
+ correlation_id=CorrelationId.from_plan_id(plan.plan_id)
1601
+ ),
1602
+ )
1592
1603
  return
1593
1604
 
1594
1605
  self.notification_target_manager.notify(
@@ -1902,7 +1913,7 @@ class GenericContext(BaseContext, t.Generic[C]):
1902
1913
  )
1903
1914
 
1904
1915
  return TableDiff(
1905
- adapter=adapter.with_log_level(logger.getEffectiveLevel()),
1916
+ adapter=adapter.with_settings(logger.getEffectiveLevel()),
1906
1917
  source=source,
1907
1918
  target=target,
1908
1919
  on=on,
@@ -2111,7 +2122,7 @@ class GenericContext(BaseContext, t.Generic[C]):
2111
2122
  errors = []
2112
2123
  skipped_count = 0
2113
2124
  for snapshot in snapshots:
2114
- for audit_result in self.snapshot_evaluator.audit(
2125
+ for audit_result in self.snapshot_evaluator().audit(
2115
2126
  snapshot=snapshot,
2116
2127
  start=start,
2117
2128
  end=end,
@@ -2143,7 +2154,7 @@ class GenericContext(BaseContext, t.Generic[C]):
2143
2154
  self.console.log_status_update(f"Got {error.count} results, expected 0.")
2144
2155
  if error.query:
2145
2156
  self.console.show_sql(
2146
- f"{error.query.sql(dialect=self.snapshot_evaluator.adapter.dialect)}"
2157
+ f"{error.query.sql(dialect=self.snapshot_evaluator().adapter.dialect)}"
2147
2158
  )
2148
2159
 
2149
2160
  self.console.log_status_update("Done.")
@@ -2335,11 +2346,14 @@ class GenericContext(BaseContext, t.Generic[C]):
2335
2346
 
2336
2347
  def close(self) -> None:
2337
2348
  """Releases all resources allocated by this context."""
2338
- if self._snapshot_evaluator:
2339
- self._snapshot_evaluator.close()
2349
+ for evaluator in self._snapshot_evaluators.values():
2350
+ evaluator.close()
2351
+
2340
2352
  if self._state_sync:
2341
2353
  self._state_sync.close()
2342
2354
 
2355
+ self._snapshot_evaluators.clear()
2356
+
2343
2357
  def _run(
2344
2358
  self,
2345
2359
  environment: str,
@@ -2390,7 +2404,11 @@ class GenericContext(BaseContext, t.Generic[C]):
2390
2404
 
2391
2405
  def _apply(self, plan: Plan, circuit_breaker: t.Optional[t.Callable[[], bool]]) -> None:
2392
2406
  self._scheduler.create_plan_evaluator(self).evaluate(
2393
- plan.to_evaluatable(), circuit_breaker=circuit_breaker
2407
+ plan.to_evaluatable(),
2408
+ snapshot_evaluator=self.snapshot_evaluator(
2409
+ correlation_id=CorrelationId.from_plan_id(plan.plan_id)
2410
+ ),
2411
+ circuit_breaker=circuit_breaker,
2394
2412
  )
2395
2413
 
2396
2414
  @python_api_analytics
@@ -2683,7 +2701,7 @@ class GenericContext(BaseContext, t.Generic[C]):
2683
2701
  )
2684
2702
 
2685
2703
  # Remove the expired snapshots tables
2686
- self.snapshot_evaluator.cleanup(
2704
+ self.snapshot_evaluator().cleanup(
2687
2705
  target_snapshots=cleanup_targets,
2688
2706
  on_complete=self.console.update_cleanup_progress,
2689
2707
  )
@@ -46,7 +46,7 @@ class AthenaEngineAdapter(PandasNativeFetchDFSupportMixin, RowDiffMixin):
46
46
  self, *args: t.Any, s3_warehouse_location: t.Optional[str] = None, **kwargs: t.Any
47
47
  ):
48
48
  # Need to pass s3_warehouse_location to the superclass so that it goes into _extra_config
49
- # which means that EngineAdapter.with_log_level() keeps this property when it makes a clone
49
+ # which means that EngineAdapter.with_settings() keeps this property when it makes a clone
50
50
  super().__init__(*args, s3_warehouse_location=s3_warehouse_location, **kwargs)
51
51
  self.s3_warehouse_location = s3_warehouse_location
52
52
 
@@ -39,7 +39,7 @@ from sqlmesh.core.engine_adapter.shared import (
39
39
  )
40
40
  from sqlmesh.core.model.kind import TimeColumn
41
41
  from sqlmesh.core.schema_diff import SchemaDiffer
42
- from sqlmesh.utils import columns_to_types_all_known, random_id
42
+ from sqlmesh.utils import columns_to_types_all_known, random_id, CorrelationId
43
43
  from sqlmesh.utils.connection_pool import create_connection_pool, ConnectionPool
44
44
  from sqlmesh.utils.date import TimeLike, make_inclusive, to_time_column
45
45
  from sqlmesh.utils.errors import (
@@ -123,6 +123,7 @@ class EngineAdapter:
123
123
  pre_ping: bool = False,
124
124
  pretty_sql: bool = False,
125
125
  shared_connection: bool = False,
126
+ correlation_id: t.Optional[CorrelationId] = None,
126
127
  **kwargs: t.Any,
127
128
  ):
128
129
  self.dialect = dialect.lower() or self.DIALECT
@@ -144,19 +145,21 @@ class EngineAdapter:
144
145
  self._pre_ping = pre_ping
145
146
  self._pretty_sql = pretty_sql
146
147
  self._multithreaded = multithreaded
148
+ self.correlation_id = correlation_id
147
149
 
148
- def with_log_level(self, level: int) -> EngineAdapter:
150
+ def with_settings(self, log_level: int, **kwargs: t.Any) -> EngineAdapter:
149
151
  adapter = self.__class__(
150
152
  self._connection_pool,
151
153
  dialect=self.dialect,
152
154
  sql_gen_kwargs=self._sql_gen_kwargs,
153
155
  default_catalog=self._default_catalog,
154
- execute_log_level=level,
156
+ execute_log_level=log_level,
155
157
  register_comments=self._register_comments,
156
158
  null_connection=True,
157
159
  multithreaded=self._multithreaded,
158
160
  pretty_sql=self._pretty_sql,
159
161
  **self._extra_config,
162
+ **kwargs,
160
163
  )
161
164
 
162
165
  return adapter
@@ -2211,6 +2214,9 @@ class EngineAdapter:
2211
2214
  else:
2212
2215
  sql = t.cast(str, e)
2213
2216
 
2217
+ if self.correlation_id:
2218
+ sql = f"/* {self.correlation_id} */ {sql}"
2219
+
2214
2220
  self._log_sql(
2215
2221
  sql,
2216
2222
  expression=e if isinstance(e, exp.Expression) else None,
@@ -49,7 +49,10 @@ logger = logging.getLogger(__name__)
49
49
  class PlanEvaluator(abc.ABC):
50
50
  @abc.abstractmethod
51
51
  def evaluate(
52
- self, plan: EvaluatablePlan, circuit_breaker: t.Optional[t.Callable[[], bool]] = None
52
+ self,
53
+ plan: EvaluatablePlan,
54
+ snapshot_evaluator: SnapshotEvaluator,
55
+ circuit_breaker: t.Optional[t.Callable[[], bool]] = None,
53
56
  ) -> None:
54
57
  """Evaluates a plan by pushing snapshots and backfilling data.
55
58
 
@@ -60,6 +63,8 @@ class PlanEvaluator(abc.ABC):
60
63
 
61
64
  Args:
62
65
  plan: The plan to evaluate.
66
+ snapshot_evaluator: The snapshot evaluator to use.
67
+ circuit_breaker: The circuit breaker to use.
63
68
  """
64
69
 
65
70
 
@@ -67,13 +72,11 @@ class BuiltInPlanEvaluator(PlanEvaluator):
67
72
  def __init__(
68
73
  self,
69
74
  state_sync: StateSync,
70
- snapshot_evaluator: SnapshotEvaluator,
71
75
  create_scheduler: t.Callable[[t.Iterable[Snapshot]], Scheduler],
72
76
  default_catalog: t.Optional[str],
73
77
  console: t.Optional[Console] = None,
74
78
  ):
75
79
  self.state_sync = state_sync
76
- self.snapshot_evaluator = snapshot_evaluator
77
80
  self.create_scheduler = create_scheduler
78
81
  self.default_catalog = default_catalog
79
82
  self.console = console or get_console()
@@ -82,9 +85,12 @@ class BuiltInPlanEvaluator(PlanEvaluator):
82
85
  def evaluate(
83
86
  self,
84
87
  plan: EvaluatablePlan,
88
+ snapshot_evaluator: SnapshotEvaluator,
85
89
  circuit_breaker: t.Optional[t.Callable[[], bool]] = None,
86
90
  ) -> None:
87
91
  self._circuit_breaker = circuit_breaker
92
+ self.snapshot_evaluator = snapshot_evaluator
93
+
88
94
  self.console.start_plan_evaluation(plan)
89
95
  analytics.collector.on_plan_apply_start(
90
96
  plan=plan,
@@ -20,6 +20,7 @@ from sqlmesh.core.snapshot.definition import (
20
20
  from sqlmesh.utils import Verbosity, rich as srich, to_snake_case
21
21
  from sqlmesh.utils.date import to_ts
22
22
  from sqlmesh.utils.errors import SQLMeshError
23
+ from sqlmesh.core.snapshot.evaluator import SnapshotEvaluator
23
24
 
24
25
 
25
26
  logger = logging.getLogger(__name__)
@@ -37,7 +38,10 @@ class PlanExplainer(PlanEvaluator):
37
38
  self.console = console or get_console()
38
39
 
39
40
  def evaluate(
40
- self, plan: EvaluatablePlan, circuit_breaker: t.Optional[t.Callable[[], bool]] = None
41
+ self,
42
+ plan: EvaluatablePlan,
43
+ snapshot_evaluator: SnapshotEvaluator,
44
+ circuit_breaker: t.Optional[t.Callable[[], bool]] = None,
41
45
  ) -> None:
42
46
  plan_stages = stages.build_plan_stages(plan, self.state_reader, self.default_catalog)
43
47
  explainer_console = _get_explainer_console(
sqlmesh/utils/__init__.py CHANGED
@@ -13,6 +13,7 @@ import traceback
13
13
  import types
14
14
  import typing as t
15
15
  import uuid
16
+ from dataclasses import dataclass
16
17
  from collections import defaultdict
17
18
  from contextlib import contextmanager
18
19
  from copy import deepcopy
@@ -382,3 +383,23 @@ def to_snake_case(name: str) -> str:
382
383
  return "".join(
383
384
  f"_{c.lower()}" if c.isupper() and idx != 0 else c.lower() for idx, c in enumerate(name)
384
385
  )
386
+
387
+
388
+ class JobType(Enum):
389
+ PLAN = "SQLMESH_PLAN"
390
+ RUN = "SQLMESH_RUN"
391
+
392
+
393
+ @dataclass(frozen=True)
394
+ class CorrelationId:
395
+ """ID that is added to each query in order to identify the job that created it."""
396
+
397
+ job_type: JobType
398
+ job_id: str
399
+
400
+ def __str__(self) -> str:
401
+ return f"{self.job_type.value}: {self.job_id}"
402
+
403
+ @classmethod
404
+ def from_plan_id(cls, plan_id: str) -> CorrelationId:
405
+ return CorrelationId(JobType.PLAN, plan_id)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlmesh
3
- Version: 0.197.1.dev1
3
+ Version: 0.197.1.dev2
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=fUjJ8gmiJ6WOMncj3Sa2FSpuCGULhCxJMMK857IK1hM,528
2
+ sqlmesh/_version.py,sha256=VHcLjo4OkNbL64WjH_o0x1rJEP5oRF1sSjBmMz2YOa4,528
3
3
  sqlmesh/magics.py,sha256=R9U0Mp9ZQhDYe751nxAQDLaMv3zLAR4HcTdIflKTmEE,41709
4
4
  sqlmesh/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  sqlmesh/cicd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -13,7 +13,7 @@ sqlmesh/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  sqlmesh/core/_typing.py,sha256=e1f7xO2aZCy38M_3VoDy-XI3shyd99-IFctgIFSgXWM,497
14
14
  sqlmesh/core/console.py,sha256=_B9rmOn0WbgP8DsST8Lg9ODGu9u0WA2D2jRrJRX0VMM,153805
15
15
  sqlmesh/core/constants.py,sha256=gUABXWYgH_XOSbaZAJsR5o1dmA61JDCvBDyxqqXX3LM,2630
16
- sqlmesh/core/context.py,sha256=a_t2RW9jmRfQ1UCV0gv7fGonNR3N94WYm9QlOAvhkpA,118540
16
+ sqlmesh/core/context.py,sha256=mkAceSQIwojrA4pgs23vJKJGEy7yL-Bk5a8E-bR02bM,119377
17
17
  sqlmesh/core/context_diff.py,sha256=TCzM8egBE35DskpouOB-GQM2Qf5iUHWbRgiB5yZ6tzg,21552
18
18
  sqlmesh/core/dialect.py,sha256=cS7JM0WeqjMfOIpZY7250ivCuyqHyHJi2Io2gezG8S4,49820
19
19
  sqlmesh/core/environment.py,sha256=7DbJX0r5nZRU3LhcgIxbSV-JosQYDjAt3V5Wc2Fpns8,13005
@@ -54,12 +54,12 @@ sqlmesh/core/config/naming.py,sha256=KVGaxUgswoQajXR_cHFJvgkmEFcU1V182GkOH1SJxuE
54
54
  sqlmesh/core/config/plan.py,sha256=wJEDfocMcKSMN0-5gVojjIcmJZ0376LJU3tkGMTm-Zc,1558
55
55
  sqlmesh/core/config/root.py,sha256=tZxArC4kjPqrt43R9uErH_awwwNQVaNIaTAb-ot9WiU,15529
56
56
  sqlmesh/core/config/run.py,sha256=rIK0QnN_vArrwps2TXGVEbvao2AnGZgzXo7EliJa42E,852
57
- sqlmesh/core/config/scheduler.py,sha256=k3BVMpy5ZrC05ZlyE3vec8ZGfTjUjWyfsKZtYgflbyA,7029
57
+ sqlmesh/core/config/scheduler.py,sha256=LETAHZ-dwW07Uhe8M12gCYwCrYqDSGTKRxSN-5-JACs,6970
58
58
  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
- sqlmesh/core/engine_adapter/athena.py,sha256=WBVAB_YzBJXdiqq51LTd2jmYoMtGrLmtsA8IrIFVnQ0,26199
62
- sqlmesh/core/engine_adapter/base.py,sha256=9dMfOQtgjTi551xM9Lxm5FK4MUoopvzwwgHjjDFnpzw,103788
61
+ sqlmesh/core/engine_adapter/athena.py,sha256=DMC94WfCH8m37cVPio43Q11J8RQE8tuf1nl0RtXZ_CM,26198
62
+ sqlmesh/core/engine_adapter/base.py,sha256=sG9Cq_dwzXmjBxx9RmuLrPhf85YkIbCAqYrHMBiDeow,104056
63
63
  sqlmesh/core/engine_adapter/base_postgres.py,sha256=DOsOdCJyQAVfA9S0GznuH0J1bonMqYVP_yJLDYcxFYM,6772
64
64
  sqlmesh/core/engine_adapter/bigquery.py,sha256=qJE8vHLKKAeWMvltmYaUvWS95jM_UEZ6UzYLlr58sGo,50424
65
65
  sqlmesh/core/engine_adapter/clickhouse.py,sha256=LoPdm_s_s-ZxS1XJPA3Et0iOHeJ1LgqTAFbwBdiqE7A,34912
@@ -96,8 +96,8 @@ 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=g07h-NOsOr_4spnOrlQ4KrFjh3RmbvHSydEuSOsShNc,41416
98
98
  sqlmesh/core/plan/definition.py,sha256=OxgbvkMGNdlvYF2BjFJt_lINsBw38Fq1IX25P8_Z_Z0,13734
99
- sqlmesh/core/plan/evaluator.py,sha256=DkpJ78R33_RBx5MVY13CcGU0x2-EcKWkcrETsjuyn10,20484
100
- sqlmesh/core/plan/explainer.py,sha256=BEtww_UVa1gMkzL6-y2yrcy1EMQ8MbkElvO6L6s_TYU,12011
99
+ sqlmesh/core/plan/evaluator.py,sha256=kmCCmEeRwt_SX6Bue2ulICqtJDVqgL4mqdhWrftOr5I,20669
100
+ sqlmesh/core/plan/explainer.py,sha256=mwAqLg6i7HIU_mZnyjqkR0wN3vMccuiRFjMn3y5qqTw,12137
101
101
  sqlmesh/core/plan/stages.py,sha256=5cvEbrQsw_cx1gayxwLRwkIehQPixrbUT9B4BbEOj3A,21972
102
102
  sqlmesh/core/snapshot/__init__.py,sha256=Z5HTetNCZGoKF1WAKXk4LWL9dc8EC8lwS2O4TtoBmt4,1317
103
103
  sqlmesh/core/snapshot/cache.py,sha256=bgqCR2hyf6r2A_8QP1EnXFK25gDX37-Zg0YeMuETWxg,3934
@@ -261,7 +261,7 @@ sqlmesh/migrations/v0081_update_partitioned_by.py,sha256=Rj9RDd7WBonbGfTJx3vAqSv
261
261
  sqlmesh/migrations/v0082_warn_if_incorrectly_duplicated_statements.py,sha256=K-Z0ghTCFSZuAYzNSUXF4L8axihPemM15EOXHcqkK3s,2489
262
262
  sqlmesh/migrations/v0083_use_sql_for_scd_time_data_type_data_hash.py,sha256=0r-SlncPec4TBpnQTeblPsiIjIOVKc10GjBVbFPGcFA,148
263
263
  sqlmesh/schedulers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
264
- sqlmesh/utils/__init__.py,sha256=hyuWXItTP_-QNczx66UyjGRLjh9E0XGjxSo-SyLgXrk,11060
264
+ sqlmesh/utils/__init__.py,sha256=51VqA2etTZ6kX54250s1hN5ui7D89OeUTUQ9kgMze7s,11554
265
265
  sqlmesh/utils/aws.py,sha256=krxyhrKtsMJDEjT567UbGZogjJ9JRHkvAV-Cg3FVndM,1062
266
266
  sqlmesh/utils/cache.py,sha256=GITQ3sldwG4vlI0wKIDI7yOr1CND1EI3necAmeCEW8g,4743
267
267
  sqlmesh/utils/concurrency.py,sha256=EMgEecfPFN9_2Wjz4TUksJngECGse7fnKVcLswkmhAk,9274
@@ -283,7 +283,7 @@ sqlmesh/utils/pydantic.py,sha256=I898jAFqa3qU6lG2uPpRebVFncOUo8ZrLWM_R3K3DHU,116
283
283
  sqlmesh/utils/rich.py,sha256=BpB47G0-JcU41LkGkeGKroexj4NOV5fox4-GOIXPgIc,3545
284
284
  sqlmesh/utils/windows.py,sha256=r7Yin4WEwbvH7sKA3hOJtRsclmscNuBeCklCfVPvtQs,611
285
285
  sqlmesh/utils/yaml.py,sha256=hvo5lmybYLcIx4p6CQwufS8X4MbwS60lEBnCmYJCXmU,2336
286
- sqlmesh-0.197.1.dev1.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
286
+ sqlmesh-0.197.1.dev2.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
287
287
  web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
288
288
  web/client/dist/index.html,sha256=kNpFjWxt34Pf-P-cROtPWi3GNSVk6zqA3eoN9tlZXI0,5472
289
289
  web/client/dist/assets/Audits-DKgXravk.js,sha256=SaVQhNlislD_yQc_KivO7SPi1JH0ts1GnDPD5Zssutw,1041
@@ -401,8 +401,8 @@ web/server/api/endpoints/models.py,sha256=ud-lRwriyI_OYg9tZchrBgeiXELiRTLNEodraf
401
401
  web/server/api/endpoints/modules.py,sha256=8hqqgonGay_mJmpCw0IdbjsPhWlQH2VLdKAqha-myac,468
402
402
  web/server/api/endpoints/plan.py,sha256=OYuQ_4dgbhG9ibTcX1a8mvYgH3ANxw9Fhbb4wg6QWqc,9222
403
403
  web/server/api/endpoints/table_diff.py,sha256=SCy3-pr5x6bEEiOaZGCDbiHQhpgxwmnz3Acqa2Ie6jI,2090
404
- sqlmesh-0.197.1.dev1.dist-info/METADATA,sha256=3T6hCp0Yg3lRlw8ElKqmUomOWbNue6OhVTeexd6KFYk,26686
405
- sqlmesh-0.197.1.dev1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
406
- sqlmesh-0.197.1.dev1.dist-info/entry_points.txt,sha256=pIYKtg-u-uO7BK_Y0qrdmfyj0bYrcMc3Xiqr5WE3VFk,121
407
- sqlmesh-0.197.1.dev1.dist-info/top_level.txt,sha256=bspjo5vjELQkuN0qKuTFIbsrUt3Zeo8D2mlKeHG1LdE,12
408
- sqlmesh-0.197.1.dev1.dist-info/RECORD,,
404
+ sqlmesh-0.197.1.dev2.dist-info/METADATA,sha256=EHomd7h3c5z0r4tYsUKJJTor9pqwX2_MO-NHNcGmHMI,26686
405
+ sqlmesh-0.197.1.dev2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
406
+ sqlmesh-0.197.1.dev2.dist-info/entry_points.txt,sha256=pIYKtg-u-uO7BK_Y0qrdmfyj0bYrcMc3Xiqr5WE3VFk,121
407
+ sqlmesh-0.197.1.dev2.dist-info/top_level.txt,sha256=bspjo5vjELQkuN0qKuTFIbsrUt3Zeo8D2mlKeHG1LdE,12
408
+ sqlmesh-0.197.1.dev2.dist-info/RECORD,,