sqlmesh 0.209.1.dev14__py3-none-any.whl → 0.209.1.dev16__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
@@ -1,14 +1,7 @@
1
1
  # file generated by setuptools-scm
2
2
  # don't change, don't track in version control
3
3
 
4
- __all__ = [
5
- "__version__",
6
- "__version_tuple__",
7
- "version",
8
- "version_tuple",
9
- "__commit_id__",
10
- "commit_id",
11
- ]
4
+ __all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
12
5
 
13
6
  TYPE_CHECKING = False
14
7
  if TYPE_CHECKING:
@@ -16,19 +9,13 @@ if TYPE_CHECKING:
16
9
  from typing import Union
17
10
 
18
11
  VERSION_TUPLE = Tuple[Union[int, str], ...]
19
- COMMIT_ID = Union[str, None]
20
12
  else:
21
13
  VERSION_TUPLE = object
22
- COMMIT_ID = object
23
14
 
24
15
  version: str
25
16
  __version__: str
26
17
  __version_tuple__: VERSION_TUPLE
27
18
  version_tuple: VERSION_TUPLE
28
- commit_id: COMMIT_ID
29
- __commit_id__: COMMIT_ID
30
19
 
31
- __version__ = version = '0.209.1.dev14'
32
- __version_tuple__ = version_tuple = (0, 209, 1, 'dev14')
33
-
34
- __commit_id__ = commit_id = None
20
+ __version__ = version = '0.209.1.dev16'
21
+ __version_tuple__ = version_tuple = (0, 209, 1, 'dev16')
@@ -1,8 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
+ import re
4
5
  import typing as t
5
- from functools import partial
6
+ from functools import cached_property, partial
6
7
  from sqlglot import exp
7
8
 
8
9
  from sqlmesh.core.engine_adapter.base_postgres import BasePostgresEngineAdapter
@@ -112,11 +113,8 @@ class PostgresEngineAdapter(
112
113
  **kwargs: t.Any,
113
114
  ) -> None:
114
115
  # Merge isn't supported until Postgres 15
115
- merge_impl = (
116
- super().merge
117
- if self._connection_pool.get().server_version >= 150000
118
- else partial(logical_merge, self)
119
- )
116
+ major, minor = self.server_version
117
+ merge_impl = super().merge if major >= 15 else partial(logical_merge, self)
120
118
  merge_impl( # type: ignore
121
119
  target_table,
122
120
  source_table,
@@ -125,3 +123,13 @@ class PostgresEngineAdapter(
125
123
  when_matched=when_matched,
126
124
  merge_filter=merge_filter,
127
125
  )
126
+
127
+ @cached_property
128
+ def server_version(self) -> t.Tuple[int, int]:
129
+ """Lazily fetch and cache major and minor server version"""
130
+ if result := self.fetchone("SHOW server_version"):
131
+ server_version, *_ = result
132
+ match = re.search(r"(\d+)\.(\d+)", server_version)
133
+ if match:
134
+ return int(match.group(1)), int(match.group(2))
135
+ return 0, 0
@@ -372,25 +372,31 @@ class SnapshotState:
372
372
  Args:
373
373
  next_auto_restatement_ts: A dictionary of snapshot name version to the next auto restatement timestamp.
374
374
  """
375
+ next_auto_restatement_ts_deleted = []
376
+ next_auto_restatement_ts_filtered = {}
377
+ for k, v in next_auto_restatement_ts.items():
378
+ if v is None:
379
+ next_auto_restatement_ts_deleted.append(k)
380
+ else:
381
+ next_auto_restatement_ts_filtered[k] = v
382
+
375
383
  for where in snapshot_name_version_filter(
376
384
  self.engine_adapter,
377
- next_auto_restatement_ts,
385
+ next_auto_restatement_ts_deleted,
378
386
  column_prefix="snapshot",
379
387
  alias=None,
380
388
  batch_size=self.SNAPSHOT_BATCH_SIZE,
381
389
  ):
382
390
  self.engine_adapter.delete_from(self.auto_restatements_table, where=where)
383
391
 
384
- next_auto_restatement_ts_filtered = {
385
- k: v for k, v in next_auto_restatement_ts.items() if v is not None
386
- }
387
392
  if not next_auto_restatement_ts_filtered:
388
393
  return
389
394
 
390
- self.engine_adapter.insert_append(
395
+ self.engine_adapter.merge(
391
396
  self.auto_restatements_table,
392
397
  _auto_restatements_to_df(next_auto_restatement_ts_filtered),
393
398
  columns_to_types=self._auto_restatement_columns_to_types,
399
+ unique_key=(exp.column("snapshot_name"), exp.column("snapshot_version")),
394
400
  )
395
401
 
396
402
  def count(self) -> int:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlmesh
3
- Version: 0.209.1.dev14
3
+ Version: 0.209.1.dev16
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=bHG9Na0Ngc7db0PR46aKmXwZV8939jGLj8kRw2qwQDE,723
2
+ sqlmesh/_version.py,sha256=4Mu3IvkM85xxXlyuqCYfaducuxHPKHdTCXnlsA7DPls,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
@@ -68,7 +68,7 @@ sqlmesh/core/engine_adapter/duckdb.py,sha256=bv1kfcaDtYlAtJBjxxfteG-dIf31-6r-Nip
68
68
  sqlmesh/core/engine_adapter/mixins.py,sha256=2f6I97iRoeEX2c_BB5Pu8ruIrozwtCZPrxN3a-ANBr8,22495
69
69
  sqlmesh/core/engine_adapter/mssql.py,sha256=N-l9RReP45hg9CNKCQTrg4BmwKtN-v9xK68JJW-xYc8,17647
70
70
  sqlmesh/core/engine_adapter/mysql.py,sha256=lVC-siXZK3iSfqCmBjZNw8uy09Z8la8v8_oUZ-E2OwI,6966
71
- sqlmesh/core/engine_adapter/postgres.py,sha256=4eXBDKXb6uiu8B7nD60b2p9pbkc8Z1Ycgavw7Necxj4,4626
71
+ sqlmesh/core/engine_adapter/postgres.py,sha256=-FgNIb9r0QXxmtbnbJ3GXhFz7JhewCfXEQk5qkiVqUE,5016
72
72
  sqlmesh/core/engine_adapter/redshift.py,sha256=RdEPTBmW2zrruiY7mbbbCJnvTCKHcHBep1MgpXoOZl4,17005
73
73
  sqlmesh/core/engine_adapter/risingwave.py,sha256=GY0u085TWerl8kTRNJpEutdD5FBsoPijQ0CcOkWOJEE,2359
74
74
  sqlmesh/core/engine_adapter/shared.py,sha256=pvYU-sC2WEIOENm4oG4UrOCWXF56h-FEmlAqAR8TYoA,13500
@@ -115,7 +115,7 @@ sqlmesh/core/state_sync/db/environment.py,sha256=iTxrdNlKB36S54PUdlqEqlxiAZJtKNE
115
115
  sqlmesh/core/state_sync/db/facade.py,sha256=WWditN46A9DXHDcHT7kUZaCfkkjcaDfMC9qO1EfH4Og,25266
116
116
  sqlmesh/core/state_sync/db/interval.py,sha256=aMQSF42bVOUU05g7oizcrKR6TBVzR6TJppxzlxkmJFU,17985
117
117
  sqlmesh/core/state_sync/db/migrator.py,sha256=2LNUwOBNFkA1ntp-Z93S_OWxFQhOBj3ZD_ZqPCyPEAE,18139
118
- sqlmesh/core/state_sync/db/snapshot.py,sha256=x7JxtOttjE9NccWfjIWURixR2y8AT6OjgEL6FiQV1Jc,29586
118
+ sqlmesh/core/state_sync/db/snapshot.py,sha256=NsgMbiQGfu64l6zVEO5Ci5CD_A1nCjmkfRIP6cf6bUY,29845
119
119
  sqlmesh/core/state_sync/db/utils.py,sha256=204OpT3ISFPCwWP9Aqq8nr6ETl24sbG5uOyo86IJv6E,3819
120
120
  sqlmesh/core/state_sync/db/version.py,sha256=fl5g1tNMYu8O6WTN4J3bciwjGq0c5nZlRDlxxRKGU78,2210
121
121
  sqlmesh/core/test/__init__.py,sha256=e83TJPwPRR_rAG29Y0OVbZb-5oWVBzz-_wrcd22Qk10,418
@@ -265,8 +265,8 @@ sqlmesh/migrations/v0084_normalize_quote_when_matched_and_merge_filter.py,sha256
265
265
  sqlmesh/migrations/v0085_deterministic_repr.py,sha256=mkbZV0rzXJ5bmN1Y75kFI9T6gbnx_sy-zn_UzbOL1Sg,4265
266
266
  sqlmesh/migrations/v0086_check_deterministic_bug.py,sha256=WiYcmhQD434GXWiiakQtcy9ESmB35spXMltV43nvU7Q,2953
267
267
  sqlmesh/migrations/v0087_normalize_blueprint_variables.py,sha256=GI6KKA-6PtONUoOnyvLpRTUmPjbpa-CKhDa0iqJW01U,4421
268
- sqlmesh/migrations/v0088_add_virtual_environment_mode.py,sha256=rm6k7CRy2uHozo1Oy17D8WhiV1JldPNCpJ8PukoHSwM,122
269
268
  sqlmesh/migrations/v0088_warn_about_variable_python_env_diffs.py,sha256=zCLT6Yqwny73SlfACWjO1bZfs8lZ7gJBov5Iz4akwiQ,3254
269
+ sqlmesh/migrations/v0089_add_virtual_environment_mode.py,sha256=rm6k7CRy2uHozo1Oy17D8WhiV1JldPNCpJ8PukoHSwM,122
270
270
  sqlmesh/schedulers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
271
271
  sqlmesh/utils/__init__.py,sha256=51VqA2etTZ6kX54250s1hN5ui7D89OeUTUQ9kgMze7s,11554
272
272
  sqlmesh/utils/aws.py,sha256=krxyhrKtsMJDEjT567UbGZogjJ9JRHkvAV-Cg3FVndM,1062
@@ -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.dev14.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
294
+ sqlmesh-0.209.1.dev16.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.dev14.dist-info/METADATA,sha256=dL1K4Bz229XuuJr3I_ZJNxFcMBlII5PcA4wJIxAGHHw,26686
417
- sqlmesh-0.209.1.dev14.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
418
- sqlmesh-0.209.1.dev14.dist-info/entry_points.txt,sha256=sHAf6tQczIM8xZoduN4qaUjV7QEPVUUW_LCT8EDUMv4,155
419
- sqlmesh-0.209.1.dev14.dist-info/top_level.txt,sha256=RQ-33FPe2IgL0rgossAfJkCRtqslz9b7wFARqiWLC5Q,24
420
- sqlmesh-0.209.1.dev14.dist-info/RECORD,,
416
+ sqlmesh-0.209.1.dev16.dist-info/METADATA,sha256=LoLr0pM2D6yfZeuWFu4MGt1XUeluS72i0AC7ojNT4K8,26686
417
+ sqlmesh-0.209.1.dev16.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
418
+ sqlmesh-0.209.1.dev16.dist-info/entry_points.txt,sha256=sHAf6tQczIM8xZoduN4qaUjV7QEPVUUW_LCT8EDUMv4,155
419
+ sqlmesh-0.209.1.dev16.dist-info/top_level.txt,sha256=RQ-33FPe2IgL0rgossAfJkCRtqslz9b7wFARqiWLC5Q,24
420
+ sqlmesh-0.209.1.dev16.dist-info/RECORD,,