sqlmesh 0.196.4.dev14__py3-none-any.whl → 0.196.5.dev1__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 +2 -2
- sqlmesh/core/engine_adapter/mssql.py +85 -2
- {sqlmesh-0.196.4.dev14.dist-info → sqlmesh-0.196.5.dev1.dist-info}/METADATA +1 -1
- {sqlmesh-0.196.4.dev14.dist-info → sqlmesh-0.196.5.dev1.dist-info}/RECORD +8 -8
- {sqlmesh-0.196.4.dev14.dist-info → sqlmesh-0.196.5.dev1.dist-info}/WHEEL +0 -0
- {sqlmesh-0.196.4.dev14.dist-info → sqlmesh-0.196.5.dev1.dist-info}/entry_points.txt +0 -0
- {sqlmesh-0.196.4.dev14.dist-info → sqlmesh-0.196.5.dev1.dist-info}/licenses/LICENSE +0 -0
- {sqlmesh-0.196.4.dev14.dist-info → sqlmesh-0.196.5.dev1.dist-info}/top_level.txt +0 -0
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.196.
|
|
21
|
-
__version_tuple__ = version_tuple = (0, 196,
|
|
20
|
+
__version__ = version = '0.196.5.dev1'
|
|
21
|
+
__version_tuple__ = version_tuple = (0, 196, 5, 'dev1')
|
|
@@ -6,11 +6,13 @@ import typing as t
|
|
|
6
6
|
|
|
7
7
|
from sqlglot import exp
|
|
8
8
|
|
|
9
|
-
from sqlmesh.core.dialect import to_schema
|
|
9
|
+
from sqlmesh.core.dialect import to_schema, add_table
|
|
10
10
|
from sqlmesh.core.engine_adapter.base import (
|
|
11
11
|
EngineAdapterWithIndexSupport,
|
|
12
12
|
EngineAdapter,
|
|
13
13
|
InsertOverwriteStrategy,
|
|
14
|
+
MERGE_SOURCE_ALIAS,
|
|
15
|
+
MERGE_TARGET_ALIAS,
|
|
14
16
|
)
|
|
15
17
|
from sqlmesh.core.engine_adapter.mixins import (
|
|
16
18
|
GetCurrentCatalogFromFunctionMixin,
|
|
@@ -32,7 +34,7 @@ from sqlmesh.core.schema_diff import SchemaDiffer
|
|
|
32
34
|
|
|
33
35
|
if t.TYPE_CHECKING:
|
|
34
36
|
from sqlmesh.core._typing import SchemaName, TableName
|
|
35
|
-
from sqlmesh.core.engine_adapter._typing import DF, Query
|
|
37
|
+
from sqlmesh.core.engine_adapter._typing import DF, Query, QueryOrDF
|
|
36
38
|
|
|
37
39
|
|
|
38
40
|
@set_catalog()
|
|
@@ -188,6 +190,87 @@ class MSSQLEngineAdapter(
|
|
|
188
190
|
)
|
|
189
191
|
super().drop_schema(schema_name, ignore_if_not_exists=ignore_if_not_exists, cascade=False)
|
|
190
192
|
|
|
193
|
+
def merge(
|
|
194
|
+
self,
|
|
195
|
+
target_table: TableName,
|
|
196
|
+
source_table: QueryOrDF,
|
|
197
|
+
columns_to_types: t.Optional[t.Dict[str, exp.DataType]],
|
|
198
|
+
unique_key: t.Sequence[exp.Expression],
|
|
199
|
+
when_matched: t.Optional[exp.Whens] = None,
|
|
200
|
+
merge_filter: t.Optional[exp.Expression] = None,
|
|
201
|
+
) -> None:
|
|
202
|
+
source_queries, columns_to_types = self._get_source_queries_and_columns_to_types(
|
|
203
|
+
source_table, columns_to_types, target_table=target_table
|
|
204
|
+
)
|
|
205
|
+
columns_to_types = columns_to_types or self.columns(target_table)
|
|
206
|
+
on = exp.and_(
|
|
207
|
+
*(
|
|
208
|
+
add_table(part, MERGE_TARGET_ALIAS).eq(add_table(part, MERGE_SOURCE_ALIAS))
|
|
209
|
+
for part in unique_key
|
|
210
|
+
)
|
|
211
|
+
)
|
|
212
|
+
if merge_filter:
|
|
213
|
+
on = exp.and_(merge_filter, on)
|
|
214
|
+
|
|
215
|
+
if not when_matched:
|
|
216
|
+
match_condition = None
|
|
217
|
+
unique_key_names = [y.name for y in unique_key]
|
|
218
|
+
columns_to_types_no_keys = [c for c in columns_to_types if c not in unique_key_names]
|
|
219
|
+
|
|
220
|
+
target_columns_no_keys = [
|
|
221
|
+
exp.column(c, MERGE_TARGET_ALIAS) for c in columns_to_types_no_keys
|
|
222
|
+
]
|
|
223
|
+
source_columns_no_keys = [
|
|
224
|
+
exp.column(c, MERGE_SOURCE_ALIAS) for c in columns_to_types_no_keys
|
|
225
|
+
]
|
|
226
|
+
|
|
227
|
+
match_condition = exp.Exists(
|
|
228
|
+
this=exp.select(*target_columns_no_keys).except_(
|
|
229
|
+
exp.select(*source_columns_no_keys)
|
|
230
|
+
)
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
match_expressions = [
|
|
234
|
+
exp.When(
|
|
235
|
+
matched=True,
|
|
236
|
+
source=False,
|
|
237
|
+
condition=match_condition,
|
|
238
|
+
then=exp.Update(
|
|
239
|
+
expressions=[
|
|
240
|
+
exp.column(col, MERGE_TARGET_ALIAS).eq(
|
|
241
|
+
exp.column(col, MERGE_SOURCE_ALIAS)
|
|
242
|
+
)
|
|
243
|
+
for col in columns_to_types_no_keys
|
|
244
|
+
],
|
|
245
|
+
),
|
|
246
|
+
)
|
|
247
|
+
]
|
|
248
|
+
else:
|
|
249
|
+
match_expressions = when_matched.copy().expressions
|
|
250
|
+
|
|
251
|
+
match_expressions.append(
|
|
252
|
+
exp.When(
|
|
253
|
+
matched=False,
|
|
254
|
+
source=False,
|
|
255
|
+
then=exp.Insert(
|
|
256
|
+
this=exp.Tuple(expressions=[exp.column(col) for col in columns_to_types]),
|
|
257
|
+
expression=exp.Tuple(
|
|
258
|
+
expressions=[
|
|
259
|
+
exp.column(col, MERGE_SOURCE_ALIAS) for col in columns_to_types
|
|
260
|
+
]
|
|
261
|
+
),
|
|
262
|
+
),
|
|
263
|
+
)
|
|
264
|
+
)
|
|
265
|
+
for source_query in source_queries:
|
|
266
|
+
with source_query as query:
|
|
267
|
+
self._merge(
|
|
268
|
+
target_table=target_table,
|
|
269
|
+
query=query,
|
|
270
|
+
on=on,
|
|
271
|
+
whens=exp.Whens(expressions=match_expressions),
|
|
272
|
+
)
|
|
273
|
+
|
|
191
274
|
def _convert_df_datetime(self, df: DF, columns_to_types: t.Dict[str, exp.DataType]) -> None:
|
|
192
275
|
import pandas as pd
|
|
193
276
|
from pandas.api.types import is_datetime64_any_dtype # type: ignore
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
sqlmesh/__init__.py,sha256=QjwaamJIdW7voXoS880yAx7tHm-Im4_mqGA-XJgafos,7631
|
|
2
|
-
sqlmesh/_version.py,sha256=
|
|
2
|
+
sqlmesh/_version.py,sha256=Yj0CQ703b9DsvdCQAj4tHX65gm7fDLum0Lu3PSx8tNw,528
|
|
3
3
|
sqlmesh/magics.py,sha256=nMfwSW5rIkdnyO9MXYm9u24hNl6dqgAWybC-MnRcNnE,41451
|
|
4
4
|
sqlmesh/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
sqlmesh/cicd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -66,7 +66,7 @@ sqlmesh/core/engine_adapter/clickhouse.py,sha256=LoPdm_s_s-ZxS1XJPA3Et0iOHeJ1Lgq
|
|
|
66
66
|
sqlmesh/core/engine_adapter/databricks.py,sha256=8ZExPIeT3dDh9MTJW8udvmh9LiY-f9HkRAN1Q5Qebhs,14541
|
|
67
67
|
sqlmesh/core/engine_adapter/duckdb.py,sha256=TlSFSWNzUfjGdhuMyCi1CLwhBaEKyNKtasub9OsYwrc,5199
|
|
68
68
|
sqlmesh/core/engine_adapter/mixins.py,sha256=HMB0Z9O3p5jaTZMolKiWKqpVDZokf5GoI99YXwEJ8bc,22470
|
|
69
|
-
sqlmesh/core/engine_adapter/mssql.py,sha256=
|
|
69
|
+
sqlmesh/core/engine_adapter/mssql.py,sha256=KY9ruyofPOxsIPQdfFIQIuMOO4lMl9cynnPYgLKmIH4,17311
|
|
70
70
|
sqlmesh/core/engine_adapter/mysql.py,sha256=lVC-siXZK3iSfqCmBjZNw8uy09Z8la8v8_oUZ-E2OwI,6966
|
|
71
71
|
sqlmesh/core/engine_adapter/postgres.py,sha256=fdQrsBodfGlNf8lZYkS99U_gjoDyaYKEVKLgScduv3I,4601
|
|
72
72
|
sqlmesh/core/engine_adapter/redshift.py,sha256=B4GsPggz-xyvBpx5qubvVwEeKF3vk7n5SMExL-Q5Ysw,16754
|
|
@@ -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.196.
|
|
286
|
+
sqlmesh-0.196.5.dev1.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.196.
|
|
405
|
-
sqlmesh-0.196.
|
|
406
|
-
sqlmesh-0.196.
|
|
407
|
-
sqlmesh-0.196.
|
|
408
|
-
sqlmesh-0.196.
|
|
404
|
+
sqlmesh-0.196.5.dev1.dist-info/METADATA,sha256=ObdcPQwRyvdeeYWLMnLJUo8B0ovxrybg68yqralkh0k,26541
|
|
405
|
+
sqlmesh-0.196.5.dev1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
406
|
+
sqlmesh-0.196.5.dev1.dist-info/entry_points.txt,sha256=pIYKtg-u-uO7BK_Y0qrdmfyj0bYrcMc3Xiqr5WE3VFk,121
|
|
407
|
+
sqlmesh-0.196.5.dev1.dist-info/top_level.txt,sha256=bspjo5vjELQkuN0qKuTFIbsrUt3Zeo8D2mlKeHG1LdE,12
|
|
408
|
+
sqlmesh-0.196.5.dev1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|