soda-sqlserver 4.24.0__tar.gz → 4.25.0__tar.gz
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.
- {soda_sqlserver-4.24.0 → soda_sqlserver-4.25.0}/PKG-INFO +2 -2
- {soda_sqlserver-4.24.0 → soda_sqlserver-4.25.0}/pyproject.toml +2 -2
- {soda_sqlserver-4.24.0 → soda_sqlserver-4.25.0}/src/soda_sqlserver/common/data_sources/sqlserver_data_source.py +5 -49
- {soda_sqlserver-4.24.0 → soda_sqlserver-4.25.0}/src/soda_sqlserver.egg-info/PKG-INFO +2 -2
- soda_sqlserver-4.25.0/src/soda_sqlserver.egg-info/requires.txt +2 -0
- soda_sqlserver-4.24.0/src/soda_sqlserver.egg-info/requires.txt +0 -2
- {soda_sqlserver-4.24.0 → soda_sqlserver-4.25.0}/setup.cfg +0 -0
- {soda_sqlserver-4.24.0 → soda_sqlserver-4.25.0}/src/soda_sqlserver/common/data_sources/sqlserver_data_source_connection.py +0 -0
- {soda_sqlserver-4.24.0 → soda_sqlserver-4.25.0}/src/soda_sqlserver/test_helpers/sqlserver_data_source_test_helper.py +0 -0
- {soda_sqlserver-4.24.0 → soda_sqlserver-4.25.0}/src/soda_sqlserver.egg-info/SOURCES.txt +0 -0
- {soda_sqlserver-4.24.0 → soda_sqlserver-4.25.0}/src/soda_sqlserver.egg-info/dependency_links.txt +0 -0
- {soda_sqlserver-4.24.0 → soda_sqlserver-4.25.0}/src/soda_sqlserver.egg-info/entry_points.txt +0 -0
- {soda_sqlserver-4.24.0 → soda_sqlserver-4.25.0}/src/soda_sqlserver.egg-info/top_level.txt +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: soda-sqlserver
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.25.0
|
|
4
4
|
Summary: Soda SQL Server V4
|
|
5
5
|
Author-email: "Soda Data N.V." <info@soda.io>
|
|
6
6
|
License: Proprietary
|
|
7
7
|
Requires-Python: >=3.10
|
|
8
|
-
Requires-Dist: soda-core==4.
|
|
8
|
+
Requires-Dist: soda-core==4.25.0
|
|
9
9
|
Requires-Dist: pyodbc
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "soda-sqlserver"
|
|
3
|
-
version = "4.
|
|
3
|
+
version = "4.25.0"
|
|
4
4
|
description = "Soda SQL Server V4"
|
|
5
5
|
requires-python = ">=3.10"
|
|
6
6
|
license = {text = "Proprietary"}
|
|
@@ -8,7 +8,7 @@ authors = [
|
|
|
8
8
|
{name = "Soda Data N.V.", email = "info@soda.io"}
|
|
9
9
|
]
|
|
10
10
|
dependencies = [
|
|
11
|
-
"soda-core==4.
|
|
11
|
+
"soda-core==4.25.0",
|
|
12
12
|
"pyodbc",
|
|
13
13
|
]
|
|
14
14
|
|
|
@@ -5,7 +5,6 @@ from typing import Optional
|
|
|
5
5
|
|
|
6
6
|
from soda_core.common.data_source_connection import DataSourceConnection
|
|
7
7
|
from soda_core.common.data_source_impl import DataSourceImpl
|
|
8
|
-
from soda_core.common.dataset_identifier import DatasetIdentifier
|
|
9
8
|
from soda_core.common.logging_constants import soda_logger
|
|
10
9
|
from soda_core.common.metadata_types import SodaDataTypeName, SqlDataType
|
|
11
10
|
from soda_core.common.sql_ast import (
|
|
@@ -35,7 +34,6 @@ from soda_core.common.sql_ast import (
|
|
|
35
34
|
TUPLE,
|
|
36
35
|
VALUES,
|
|
37
36
|
WITH,
|
|
38
|
-
SqlColumnTerm,
|
|
39
37
|
seconds_per_time_bucket,
|
|
40
38
|
)
|
|
41
39
|
from soda_core.common.sql_dialect import SqlDialect
|
|
@@ -102,6 +100,8 @@ class SqlServerDataSourceImpl(DataSourceImpl, model_class=SqlServerDataSourceMod
|
|
|
102
100
|
class SqlServerSqlDialect(SqlDialect, sqlglot_dialect="tsql"):
|
|
103
101
|
DEFAULT_QUOTE_CHAR = "[" # Do not use this! Always use quote_default()
|
|
104
102
|
SODA_DATA_TYPE_SYNONYMS = ((SodaDataTypeName.TEXT, SodaDataTypeName.VARCHAR),)
|
|
103
|
+
# T-SQL's page window is `OFFSET m ROWS` then `FETCH NEXT n ROWS ONLY`.
|
|
104
|
+
OFFSET_BEFORE_LIMIT: bool = True
|
|
105
105
|
|
|
106
106
|
def __init__(self):
|
|
107
107
|
super().__init__()
|
|
@@ -140,26 +140,6 @@ class SqlServerSqlDialect(SqlDialect, sqlglot_dialect="tsql"):
|
|
|
140
140
|
AZURE_SQL_MANAGED_INSTANCE_ENGINE_EDITION,
|
|
141
141
|
)
|
|
142
142
|
|
|
143
|
-
def build_select_sql(self, select_elements: list, add_semicolon: bool = True) -> str:
|
|
144
|
-
statement_lines: list[str] = []
|
|
145
|
-
statement_lines.extend(self._build_cte_sql_lines(select_elements))
|
|
146
|
-
statement_lines.extend(self._build_select_sql_lines(select_elements))
|
|
147
|
-
statement_lines.extend(self._build_into_sql_lines(select_elements))
|
|
148
|
-
statement_lines.extend(self._build_from_sql_lines(select_elements))
|
|
149
|
-
statement_lines.extend(self._build_where_sql_lines(select_elements))
|
|
150
|
-
statement_lines.extend(self._build_group_by_sql_lines(select_elements))
|
|
151
|
-
statement_lines.extend(self._build_order_by_lines(select_elements))
|
|
152
|
-
|
|
153
|
-
offset_line = self._build_offset_line(select_elements)
|
|
154
|
-
if offset_line:
|
|
155
|
-
statement_lines.append(offset_line)
|
|
156
|
-
|
|
157
|
-
limit_line = self._build_limit_line(select_elements)
|
|
158
|
-
if limit_line:
|
|
159
|
-
statement_lines.append(limit_line)
|
|
160
|
-
|
|
161
|
-
return "\n".join(statement_lines) + (";" if add_semicolon else "")
|
|
162
|
-
|
|
163
143
|
def _build_select_sql_lines(self, select_elements: list) -> list[str]:
|
|
164
144
|
# Use the default implementation, but we need to handle the case where the select elements contain a LIMIT statement.
|
|
165
145
|
select_sql_lines: list[str] = super()._build_select_sql_lines(select_elements)
|
|
@@ -328,33 +308,9 @@ class SqlServerSqlDialect(SqlDialect, sqlglot_dialect="tsql"):
|
|
|
328
308
|
def build_cte_values_sql(self, values: VALUES, alias_columns: list[COLUMN] | None) -> str:
|
|
329
309
|
return "\nUNION ALL\n".join(["SELECT " + self.build_expression_sql(value) for value in values.values])
|
|
330
310
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
columns: list[SqlColumnTerm],
|
|
335
|
-
filter: Optional[str],
|
|
336
|
-
order_by: list[SqlColumnTerm],
|
|
337
|
-
limit: int,
|
|
338
|
-
offset: int,
|
|
339
|
-
normalize_key_columns: frozenset[str] = frozenset(),
|
|
340
|
-
distinct: bool = False,
|
|
341
|
-
) -> str:
|
|
342
|
-
# Same elements as the base paginator (including its distinct x normalize composition),
|
|
343
|
-
# but T-SQL spells the page as OFFSET n ROWS FETCH NEXT m ROWS ONLY, so OFFSET leads.
|
|
344
|
-
statements = [
|
|
345
|
-
*self._paginated_select_statements(
|
|
346
|
-
dataset_identifier=dataset_identifier,
|
|
347
|
-
columns=columns,
|
|
348
|
-
filter=filter,
|
|
349
|
-
order_by=order_by,
|
|
350
|
-
normalize_key_columns=normalize_key_columns,
|
|
351
|
-
distinct=distinct,
|
|
352
|
-
),
|
|
353
|
-
OFFSET(offset),
|
|
354
|
-
LIMIT(limit),
|
|
355
|
-
]
|
|
356
|
-
|
|
357
|
-
return self.build_select_sql(statements)
|
|
311
|
+
# No select_all_paginated_sql override: the base composes the same elements, and the
|
|
312
|
+
# OFFSET-before-FETCH order of the rendered clause is owned by this dialect's
|
|
313
|
+
# build_select_sql — the statement-list order never influenced rendering.
|
|
358
314
|
|
|
359
315
|
def _build_limit_sql(self, limit_element: LIMIT) -> str:
|
|
360
316
|
return f"FETCH NEXT {limit_element.limit} ROWS ONLY"
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: soda-sqlserver
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.25.0
|
|
4
4
|
Summary: Soda SQL Server V4
|
|
5
5
|
Author-email: "Soda Data N.V." <info@soda.io>
|
|
6
6
|
License: Proprietary
|
|
7
7
|
Requires-Python: >=3.10
|
|
8
|
-
Requires-Dist: soda-core==4.
|
|
8
|
+
Requires-Dist: soda-core==4.25.0
|
|
9
9
|
Requires-Dist: pyodbc
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{soda_sqlserver-4.24.0 → soda_sqlserver-4.25.0}/src/soda_sqlserver.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{soda_sqlserver-4.24.0 → soda_sqlserver-4.25.0}/src/soda_sqlserver.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|