sqlspec 0.13.1__py3-none-any.whl → 0.14.0__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.
Potentially problematic release.
This version of sqlspec might be problematic. Click here for more details.
- sqlspec/__init__.py +39 -1
- sqlspec/adapters/adbc/config.py +4 -40
- sqlspec/adapters/adbc/driver.py +29 -16
- sqlspec/adapters/aiosqlite/config.py +2 -20
- sqlspec/adapters/aiosqlite/driver.py +36 -18
- sqlspec/adapters/asyncmy/config.py +2 -33
- sqlspec/adapters/asyncmy/driver.py +23 -16
- sqlspec/adapters/asyncpg/config.py +5 -39
- sqlspec/adapters/asyncpg/driver.py +41 -18
- sqlspec/adapters/bigquery/config.py +2 -43
- sqlspec/adapters/bigquery/driver.py +26 -14
- sqlspec/adapters/duckdb/config.py +2 -49
- sqlspec/adapters/duckdb/driver.py +35 -16
- sqlspec/adapters/oracledb/config.py +4 -83
- sqlspec/adapters/oracledb/driver.py +54 -27
- sqlspec/adapters/psqlpy/config.py +2 -55
- sqlspec/adapters/psqlpy/driver.py +28 -8
- sqlspec/adapters/psycopg/config.py +4 -73
- sqlspec/adapters/psycopg/driver.py +69 -24
- sqlspec/adapters/sqlite/config.py +3 -21
- sqlspec/adapters/sqlite/driver.py +50 -26
- sqlspec/cli.py +248 -0
- sqlspec/config.py +18 -20
- sqlspec/driver/_async.py +28 -10
- sqlspec/driver/_common.py +5 -4
- sqlspec/driver/_sync.py +28 -10
- sqlspec/driver/mixins/__init__.py +6 -0
- sqlspec/driver/mixins/_cache.py +114 -0
- sqlspec/driver/mixins/_pipeline.py +0 -4
- sqlspec/{service/base.py → driver/mixins/_query_tools.py} +86 -421
- sqlspec/driver/mixins/_result_utils.py +0 -2
- sqlspec/driver/mixins/_sql_translator.py +0 -2
- sqlspec/driver/mixins/_storage.py +4 -18
- sqlspec/driver/mixins/_type_coercion.py +0 -2
- sqlspec/driver/parameters.py +4 -4
- sqlspec/extensions/aiosql/adapter.py +4 -4
- sqlspec/extensions/litestar/__init__.py +2 -1
- sqlspec/extensions/litestar/cli.py +48 -0
- sqlspec/extensions/litestar/plugin.py +3 -0
- sqlspec/loader.py +1 -1
- sqlspec/migrations/__init__.py +23 -0
- sqlspec/migrations/base.py +390 -0
- sqlspec/migrations/commands.py +525 -0
- sqlspec/migrations/runner.py +215 -0
- sqlspec/migrations/tracker.py +153 -0
- sqlspec/migrations/utils.py +89 -0
- sqlspec/protocols.py +37 -3
- sqlspec/statement/builder/__init__.py +8 -8
- sqlspec/statement/builder/{column.py → _column.py} +82 -52
- sqlspec/statement/builder/{ddl.py → _ddl.py} +5 -5
- sqlspec/statement/builder/_ddl_utils.py +1 -1
- sqlspec/statement/builder/{delete.py → _delete.py} +1 -1
- sqlspec/statement/builder/{insert.py → _insert.py} +1 -1
- sqlspec/statement/builder/{merge.py → _merge.py} +1 -1
- sqlspec/statement/builder/_parsing_utils.py +5 -3
- sqlspec/statement/builder/{select.py → _select.py} +59 -61
- sqlspec/statement/builder/{update.py → _update.py} +2 -2
- sqlspec/statement/builder/mixins/__init__.py +24 -30
- sqlspec/statement/builder/mixins/{_set_ops.py → _cte_and_set_ops.py} +86 -2
- sqlspec/statement/builder/mixins/{_delete_from.py → _delete_operations.py} +2 -0
- sqlspec/statement/builder/mixins/{_insert_values.py → _insert_operations.py} +70 -1
- sqlspec/statement/builder/mixins/{_merge_clauses.py → _merge_operations.py} +2 -0
- sqlspec/statement/builder/mixins/_order_limit_operations.py +123 -0
- sqlspec/statement/builder/mixins/{_pivot.py → _pivot_operations.py} +71 -2
- sqlspec/statement/builder/mixins/_select_operations.py +612 -0
- sqlspec/statement/builder/mixins/{_update_set.py → _update_operations.py} +73 -2
- sqlspec/statement/builder/mixins/_where_clause.py +536 -0
- sqlspec/statement/cache.py +50 -0
- sqlspec/statement/filters.py +37 -8
- sqlspec/statement/parameters.py +154 -25
- sqlspec/statement/pipelines/__init__.py +1 -1
- sqlspec/statement/pipelines/context.py +4 -4
- sqlspec/statement/pipelines/transformers/_expression_simplifier.py +3 -3
- sqlspec/statement/pipelines/validators/_parameter_style.py +22 -22
- sqlspec/statement/pipelines/validators/_performance.py +1 -5
- sqlspec/statement/sql.py +246 -176
- sqlspec/utils/__init__.py +2 -1
- sqlspec/utils/statement_hashing.py +203 -0
- sqlspec/utils/type_guards.py +32 -0
- {sqlspec-0.13.1.dist-info → sqlspec-0.14.0.dist-info}/METADATA +1 -1
- sqlspec-0.14.0.dist-info/RECORD +143 -0
- sqlspec-0.14.0.dist-info/entry_points.txt +2 -0
- sqlspec/service/__init__.py +0 -4
- sqlspec/service/_util.py +0 -147
- sqlspec/service/pagination.py +0 -26
- sqlspec/statement/builder/mixins/_aggregate_functions.py +0 -250
- sqlspec/statement/builder/mixins/_case_builder.py +0 -91
- sqlspec/statement/builder/mixins/_common_table_expr.py +0 -90
- sqlspec/statement/builder/mixins/_from.py +0 -63
- sqlspec/statement/builder/mixins/_group_by.py +0 -118
- sqlspec/statement/builder/mixins/_having.py +0 -35
- sqlspec/statement/builder/mixins/_insert_from_select.py +0 -47
- sqlspec/statement/builder/mixins/_insert_into.py +0 -36
- sqlspec/statement/builder/mixins/_limit_offset.py +0 -53
- sqlspec/statement/builder/mixins/_order_by.py +0 -46
- sqlspec/statement/builder/mixins/_returning.py +0 -37
- sqlspec/statement/builder/mixins/_select_columns.py +0 -61
- sqlspec/statement/builder/mixins/_unpivot.py +0 -77
- sqlspec/statement/builder/mixins/_update_from.py +0 -55
- sqlspec/statement/builder/mixins/_update_table.py +0 -29
- sqlspec/statement/builder/mixins/_where.py +0 -401
- sqlspec/statement/builder/mixins/_window_functions.py +0 -86
- sqlspec/statement/parameter_manager.py +0 -220
- sqlspec/statement/sql_compiler.py +0 -140
- sqlspec-0.13.1.dist-info/RECORD +0 -150
- /sqlspec/statement/builder/{base.py → _base.py} +0 -0
- /sqlspec/statement/builder/mixins/{_join.py → _join_operations.py} +0 -0
- {sqlspec-0.13.1.dist-info → sqlspec-0.14.0.dist-info}/WHEEL +0 -0
- {sqlspec-0.13.1.dist-info → sqlspec-0.14.0.dist-info}/licenses/LICENSE +0 -0
- {sqlspec-0.13.1.dist-info → sqlspec-0.14.0.dist-info}/licenses/NOTICE +0 -0
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
"""Parameter management for SQL objects."""
|
|
2
|
-
|
|
3
|
-
from typing import Any, Optional
|
|
4
|
-
|
|
5
|
-
from sqlspec.statement.filters import StatementFilter
|
|
6
|
-
from sqlspec.statement.parameters import ParameterConverter, ParameterStyle
|
|
7
|
-
|
|
8
|
-
__all__ = ("ParameterManager",)
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class ParameterManager:
|
|
12
|
-
"""Manages parameter processing and conversion for SQL objects."""
|
|
13
|
-
|
|
14
|
-
def __init__(
|
|
15
|
-
self,
|
|
16
|
-
parameters: "Optional[tuple[Any, ...]]" = None,
|
|
17
|
-
kwargs: "Optional[dict[str, Any]]" = None,
|
|
18
|
-
converter: "Optional[ParameterConverter]" = None,
|
|
19
|
-
) -> None:
|
|
20
|
-
self.converter = converter or ParameterConverter()
|
|
21
|
-
self.named_params: dict[str, Any] = {}
|
|
22
|
-
self.filters: list[StatementFilter] = []
|
|
23
|
-
self._positional_parameters = parameters or ()
|
|
24
|
-
self._named_parameters = kwargs or {}
|
|
25
|
-
if parameters:
|
|
26
|
-
for i, param in enumerate(parameters):
|
|
27
|
-
self.named_params[f"pos_param_{i}"] = param
|
|
28
|
-
if kwargs:
|
|
29
|
-
self.process_parameters(**kwargs)
|
|
30
|
-
|
|
31
|
-
def process_parameters(self, *parameters: Any, **kwargs: Any) -> None:
|
|
32
|
-
"""Process positional parameters and kwargs into named parameters."""
|
|
33
|
-
for i, param in enumerate(parameters):
|
|
34
|
-
if isinstance(param, StatementFilter):
|
|
35
|
-
self.filters.append(param)
|
|
36
|
-
pos_params, named_params = param.extract_parameters()
|
|
37
|
-
for j, p_param in enumerate(pos_params):
|
|
38
|
-
self.named_params[f"pos_param_{i}_{j}"] = p_param
|
|
39
|
-
self.named_params.update(named_params)
|
|
40
|
-
elif isinstance(param, (list, tuple)):
|
|
41
|
-
for j, p_param in enumerate(param):
|
|
42
|
-
self.named_params[f"pos_param_{i}_{j}"] = p_param
|
|
43
|
-
elif isinstance(param, dict):
|
|
44
|
-
self.named_params.update(param)
|
|
45
|
-
else:
|
|
46
|
-
self.named_params[f"pos_param_{i}"] = param
|
|
47
|
-
if "parameters" in kwargs:
|
|
48
|
-
param_value = kwargs.pop("parameters")
|
|
49
|
-
if isinstance(param_value, (list, tuple)):
|
|
50
|
-
for i, p_param in enumerate(param_value):
|
|
51
|
-
self.named_params[f"kw_pos_param_{i}"] = p_param
|
|
52
|
-
elif isinstance(param_value, dict):
|
|
53
|
-
self.named_params.update(param_value)
|
|
54
|
-
else:
|
|
55
|
-
self.named_params["kw_single_param"] = param_value
|
|
56
|
-
|
|
57
|
-
for key, value in kwargs.items():
|
|
58
|
-
if not key.startswith("_"):
|
|
59
|
-
self.named_params[key] = value
|
|
60
|
-
|
|
61
|
-
def get_compiled_parameters(self, param_info: list[Any], target_style: ParameterStyle) -> Any:
|
|
62
|
-
"""Compile internal named parameters into the target style."""
|
|
63
|
-
if target_style == ParameterStyle.POSITIONAL_COLON:
|
|
64
|
-
return self._convert_to_positional_colon_format(self.named_params, param_info)
|
|
65
|
-
if target_style in {ParameterStyle.QMARK, ParameterStyle.NUMERIC, ParameterStyle.POSITIONAL_PYFORMAT}:
|
|
66
|
-
return self._convert_to_positional_format(self.named_params, param_info)
|
|
67
|
-
if target_style == ParameterStyle.NAMED_COLON:
|
|
68
|
-
return self._convert_to_named_colon_format(self.named_params, param_info)
|
|
69
|
-
if target_style == ParameterStyle.NAMED_PYFORMAT:
|
|
70
|
-
return self._convert_to_named_pyformat_format(self.named_params, param_info)
|
|
71
|
-
return self.named_params
|
|
72
|
-
|
|
73
|
-
def copy_from(self, other: "ParameterManager") -> None:
|
|
74
|
-
"""Copy parameters and filters from another parameter manager."""
|
|
75
|
-
self.named_params.update(other.named_params)
|
|
76
|
-
self.filters.extend(other.filters)
|
|
77
|
-
|
|
78
|
-
def add_named_parameter(self, name: str, value: Any) -> None:
|
|
79
|
-
"""Add a named parameter."""
|
|
80
|
-
self.named_params[name] = value
|
|
81
|
-
self._named_parameters[name] = value
|
|
82
|
-
|
|
83
|
-
def get_unique_parameter_name(
|
|
84
|
-
self, base_name: str, namespace: Optional[str] = None, preserve_original: bool = False
|
|
85
|
-
) -> str:
|
|
86
|
-
"""Generate a unique parameter name."""
|
|
87
|
-
all_param_names = set(self.named_params.keys())
|
|
88
|
-
candidate = f"{namespace}_{base_name}" if namespace else base_name
|
|
89
|
-
|
|
90
|
-
if preserve_original and candidate not in all_param_names:
|
|
91
|
-
return candidate
|
|
92
|
-
|
|
93
|
-
if candidate not in all_param_names:
|
|
94
|
-
return candidate
|
|
95
|
-
|
|
96
|
-
counter = 1
|
|
97
|
-
while True:
|
|
98
|
-
new_candidate = f"{candidate}_{counter}"
|
|
99
|
-
if new_candidate not in all_param_names:
|
|
100
|
-
return new_candidate
|
|
101
|
-
counter += 1
|
|
102
|
-
|
|
103
|
-
def _convert_to_positional_format(self, params: dict[str, Any], param_info: list[Any]) -> list[Any]:
|
|
104
|
-
"""Convert to positional format (list).
|
|
105
|
-
|
|
106
|
-
This is used for parameter styles like QMARK (?), NUMERIC ($1), and POSITIONAL_PYFORMAT (%s).
|
|
107
|
-
"""
|
|
108
|
-
if not param_info:
|
|
109
|
-
return list(params.values())
|
|
110
|
-
|
|
111
|
-
result = []
|
|
112
|
-
for i, info in enumerate(param_info):
|
|
113
|
-
if info.name and info.name in params:
|
|
114
|
-
result.append(params[info.name])
|
|
115
|
-
elif f"pos_param_{i}" in params:
|
|
116
|
-
result.append(params[f"pos_param_{i}"])
|
|
117
|
-
elif f"kw_pos_param_{i}" in params:
|
|
118
|
-
result.append(params[f"kw_pos_param_{i}"])
|
|
119
|
-
elif f"arg_{i}" in params:
|
|
120
|
-
result.append(params[f"arg_{i}"])
|
|
121
|
-
else:
|
|
122
|
-
result.append(None)
|
|
123
|
-
return result
|
|
124
|
-
|
|
125
|
-
def _convert_to_positional_colon_format(self, params: dict[str, Any], param_info: list[Any]) -> dict[str, Any]:
|
|
126
|
-
"""Convert to positional colon format (Oracle :1, :2 style).
|
|
127
|
-
|
|
128
|
-
Oracle's positional parameters are 1-indexed and are accessed by string keys.
|
|
129
|
-
Returns a dict with string keys "1", "2", etc.
|
|
130
|
-
"""
|
|
131
|
-
digit_keys = {k: v for k, v in params.items() if k.isdigit()}
|
|
132
|
-
if (
|
|
133
|
-
digit_keys
|
|
134
|
-
and param_info
|
|
135
|
-
and all(hasattr(info, "style") and info.style == ParameterStyle.POSITIONAL_COLON for info in param_info)
|
|
136
|
-
):
|
|
137
|
-
required_nums = {info.name for info in param_info if hasattr(info, "name")}
|
|
138
|
-
if required_nums.issubset(digit_keys.keys()):
|
|
139
|
-
return digit_keys
|
|
140
|
-
|
|
141
|
-
# This handles cases like :0, :1, :3 (with gaps) where we should preserve the actual numbers
|
|
142
|
-
if param_info and all(
|
|
143
|
-
hasattr(info, "style")
|
|
144
|
-
and info.style == ParameterStyle.POSITIONAL_COLON
|
|
145
|
-
and hasattr(info, "name")
|
|
146
|
-
and info.name.isdigit()
|
|
147
|
-
for info in param_info
|
|
148
|
-
):
|
|
149
|
-
result = {}
|
|
150
|
-
positional_values = self._convert_to_positional_format(params, param_info)
|
|
151
|
-
for i, value in enumerate(positional_values):
|
|
152
|
-
if value is not None:
|
|
153
|
-
numeric_key = str(i)
|
|
154
|
-
if any(info.name == numeric_key for info in param_info):
|
|
155
|
-
result[numeric_key] = value
|
|
156
|
-
else:
|
|
157
|
-
result[str(i + 1)] = value
|
|
158
|
-
|
|
159
|
-
return result
|
|
160
|
-
|
|
161
|
-
positional_list = self._convert_to_positional_format(params, param_info)
|
|
162
|
-
return {str(i + 1): value for i, value in enumerate(positional_list)}
|
|
163
|
-
|
|
164
|
-
def _convert_to_named_colon_format(self, params: dict[str, Any], param_info: list[Any]) -> dict[str, Any]:
|
|
165
|
-
"""Convert to named colon format (:name style).
|
|
166
|
-
|
|
167
|
-
This format expects a dictionary with parameter names as keys.
|
|
168
|
-
We need to ensure all placeholders have corresponding values.
|
|
169
|
-
"""
|
|
170
|
-
result = {}
|
|
171
|
-
for info in param_info:
|
|
172
|
-
if info.name:
|
|
173
|
-
if info.name in params:
|
|
174
|
-
result[info.name] = params[info.name]
|
|
175
|
-
else:
|
|
176
|
-
for key, value in params.items():
|
|
177
|
-
if key.endswith(f"_{info.ordinal}") or key == f"arg_{info.ordinal}":
|
|
178
|
-
result[info.name] = value
|
|
179
|
-
break
|
|
180
|
-
else:
|
|
181
|
-
gen_name = f"arg_{info.ordinal}"
|
|
182
|
-
if f"pos_param_{info.ordinal}" in params:
|
|
183
|
-
result[gen_name] = params[f"pos_param_{info.ordinal}"]
|
|
184
|
-
elif f"kw_pos_param_{info.ordinal}" in params:
|
|
185
|
-
result[gen_name] = params[f"kw_pos_param_{info.ordinal}"]
|
|
186
|
-
elif gen_name in params:
|
|
187
|
-
result[gen_name] = params[gen_name]
|
|
188
|
-
for key, value in params.items():
|
|
189
|
-
if not key.startswith(("pos_param_", "kw_pos_param_", "arg_")) and key not in result:
|
|
190
|
-
result[key] = value
|
|
191
|
-
|
|
192
|
-
return result
|
|
193
|
-
|
|
194
|
-
def _convert_to_named_pyformat_format(self, params: dict[str, Any], param_info: list[Any]) -> dict[str, Any]:
|
|
195
|
-
"""Convert to named pyformat format (%(name)s style).
|
|
196
|
-
|
|
197
|
-
This is similar to named colon format but uses Python string formatting syntax.
|
|
198
|
-
"""
|
|
199
|
-
return self._convert_to_named_colon_format(params, param_info)
|
|
200
|
-
|
|
201
|
-
@property
|
|
202
|
-
def positional_parameters(self) -> tuple[Any, ...]:
|
|
203
|
-
"""Get the original positional parameters."""
|
|
204
|
-
return self._positional_parameters
|
|
205
|
-
|
|
206
|
-
@property
|
|
207
|
-
def named_parameters(self) -> dict[str, Any]:
|
|
208
|
-
"""Get the combined named parameters."""
|
|
209
|
-
return self.named_params
|
|
210
|
-
|
|
211
|
-
def get_parameter_info(self) -> tuple[tuple[Any, ...], dict[str, Any]]:
|
|
212
|
-
"""Get parameter information in the legacy format.
|
|
213
|
-
|
|
214
|
-
This method provides backward compatibility for code expecting
|
|
215
|
-
the old parameter_info format.
|
|
216
|
-
|
|
217
|
-
Returns:
|
|
218
|
-
Tuple of (positional_parameters, named_parameters)
|
|
219
|
-
"""
|
|
220
|
-
return (self._positional_parameters, self._named_parameters)
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
"""SQL compilation logic separated from the main SQL class."""
|
|
2
|
-
|
|
3
|
-
from typing import TYPE_CHECKING, Any, Optional, Union, cast
|
|
4
|
-
|
|
5
|
-
import sqlglot.expressions as exp
|
|
6
|
-
|
|
7
|
-
from sqlspec.exceptions import SQLCompilationError
|
|
8
|
-
from sqlspec.statement.parameters import ParameterConverter, ParameterStyle
|
|
9
|
-
from sqlspec.statement.pipelines import SQLProcessingContext, StatementPipeline
|
|
10
|
-
from sqlspec.statement.sql import SQLConfig
|
|
11
|
-
from sqlspec.utils.cached_property import CachedProperty
|
|
12
|
-
|
|
13
|
-
if TYPE_CHECKING:
|
|
14
|
-
from sqlglot.dialects.dialect import DialectType
|
|
15
|
-
|
|
16
|
-
from sqlspec.protocols import ProcessorProtocol
|
|
17
|
-
from sqlspec.statement.parameter_manager import ParameterManager
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
__all__ = ("SQLCompiler",)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class SQLCompiler:
|
|
24
|
-
"""Handles SQL compilation and pipeline processing."""
|
|
25
|
-
|
|
26
|
-
def __init__(
|
|
27
|
-
self,
|
|
28
|
-
expression: exp.Expression,
|
|
29
|
-
dialect: "Optional[DialectType]" = None,
|
|
30
|
-
parameter_manager: "Optional[ParameterManager]" = None,
|
|
31
|
-
is_script: bool = False,
|
|
32
|
-
original_sql: Optional[str] = None,
|
|
33
|
-
config: Optional[SQLConfig] = None,
|
|
34
|
-
) -> None:
|
|
35
|
-
self.expression = expression
|
|
36
|
-
self.dialect = dialect
|
|
37
|
-
self.parameter_manager = parameter_manager
|
|
38
|
-
self.is_script = is_script
|
|
39
|
-
self._original_sql = original_sql
|
|
40
|
-
self.config = config or SQLConfig(dialect=dialect)
|
|
41
|
-
|
|
42
|
-
@CachedProperty
|
|
43
|
-
def _pipeline(self) -> StatementPipeline:
|
|
44
|
-
"""Get the statement pipeline."""
|
|
45
|
-
validators: list[ProcessorProtocol] = []
|
|
46
|
-
|
|
47
|
-
if self.config.enable_validation and self.config.allowed_parameter_styles is not None:
|
|
48
|
-
from sqlspec.statement.pipelines.validators._parameter_style import ParameterStyleValidator
|
|
49
|
-
|
|
50
|
-
# In strict mode, fail on violations
|
|
51
|
-
validators.append(ParameterStyleValidator(fail_on_violation=self.config.strict_mode))
|
|
52
|
-
|
|
53
|
-
return StatementPipeline(validators=validators)
|
|
54
|
-
|
|
55
|
-
@CachedProperty
|
|
56
|
-
def _context(self) -> SQLProcessingContext:
|
|
57
|
-
"""Get the processing context."""
|
|
58
|
-
if isinstance(self.expression, exp.Anonymous) and self.expression.this:
|
|
59
|
-
sql_string = str(self.expression.this)
|
|
60
|
-
else:
|
|
61
|
-
sql_string = self.expression.sql(dialect=self.dialect)
|
|
62
|
-
|
|
63
|
-
context = SQLProcessingContext(initial_sql_string=sql_string, dialect=self.dialect, config=self.config)
|
|
64
|
-
context.initial_expression = self.expression
|
|
65
|
-
context.current_expression = self.expression
|
|
66
|
-
|
|
67
|
-
from sqlspec.statement.parameters import ParameterValidator
|
|
68
|
-
|
|
69
|
-
validator = ParameterValidator()
|
|
70
|
-
context.parameter_info = validator.extract_parameters(sql_string)
|
|
71
|
-
|
|
72
|
-
if self.parameter_manager:
|
|
73
|
-
if self.parameter_manager.positional_parameters:
|
|
74
|
-
context.merged_parameters = self.parameter_manager.positional_parameters
|
|
75
|
-
context.initial_parameters = self.parameter_manager.positional_parameters
|
|
76
|
-
elif self.parameter_manager.named_parameters:
|
|
77
|
-
context.merged_parameters = self.parameter_manager.named_parameters
|
|
78
|
-
context.initial_kwargs = self.parameter_manager.named_parameters
|
|
79
|
-
context.initial_parameters = self.parameter_manager.positional_parameters
|
|
80
|
-
context.initial_kwargs = self.parameter_manager.named_parameters
|
|
81
|
-
return context
|
|
82
|
-
|
|
83
|
-
@CachedProperty
|
|
84
|
-
def _processed_expr(self) -> exp.Expression:
|
|
85
|
-
"""Execute the processing pipeline and cache the result."""
|
|
86
|
-
try:
|
|
87
|
-
result = self._pipeline.execute_pipeline(self._context)
|
|
88
|
-
except Exception as e:
|
|
89
|
-
msg = f"Failed to compile SQL: {self._context.initial_sql_string}"
|
|
90
|
-
raise SQLCompilationError(msg) from e
|
|
91
|
-
else:
|
|
92
|
-
return cast("exp.Expression", result.expression)
|
|
93
|
-
|
|
94
|
-
@CachedProperty
|
|
95
|
-
def _compiled_sql(self) -> str:
|
|
96
|
-
"""Get the compiled SQL string."""
|
|
97
|
-
if self.is_script:
|
|
98
|
-
return str(self._original_sql or self.expression.sql(dialect=self.dialect))
|
|
99
|
-
# Always go through the pipeline to ensure validation runs
|
|
100
|
-
processed = self._processed_expr
|
|
101
|
-
if isinstance(processed, exp.Anonymous) and processed.this:
|
|
102
|
-
return str(processed.this)
|
|
103
|
-
return str(processed.sql(dialect=self.dialect, comments=False))
|
|
104
|
-
|
|
105
|
-
def compile(self, placeholder_style: Optional[str] = None) -> tuple[str, Any]:
|
|
106
|
-
"""Compile SQL and parameters."""
|
|
107
|
-
if self.is_script:
|
|
108
|
-
return self._compiled_sql, None
|
|
109
|
-
|
|
110
|
-
sql = self.to_sql(placeholder_style)
|
|
111
|
-
params = self._get_compiled_parameters(placeholder_style)
|
|
112
|
-
return sql, params
|
|
113
|
-
|
|
114
|
-
def to_sql(self, placeholder_style: Optional[str] = None) -> str:
|
|
115
|
-
"""Get the SQL string with a specific placeholder style."""
|
|
116
|
-
if placeholder_style is None or self.is_script:
|
|
117
|
-
return cast("str", self._compiled_sql)
|
|
118
|
-
|
|
119
|
-
converter = ParameterConverter()
|
|
120
|
-
sql = self._compiled_sql
|
|
121
|
-
|
|
122
|
-
target_style = ParameterStyle(placeholder_style)
|
|
123
|
-
return converter.convert_placeholders(sql, target_style, self._context.parameter_info)
|
|
124
|
-
|
|
125
|
-
def get_parameters(self, style: Union[ParameterStyle, str, None] = None) -> Any:
|
|
126
|
-
"""Get the parameters in a specific style."""
|
|
127
|
-
if self.is_script:
|
|
128
|
-
return None
|
|
129
|
-
return cast("Any", self._get_compiled_parameters(str(style) if style else None))
|
|
130
|
-
|
|
131
|
-
def _get_compiled_parameters(self, placeholder_style: Optional[str]) -> Any:
|
|
132
|
-
"""Get compiled parameters in target style."""
|
|
133
|
-
if not self.parameter_manager:
|
|
134
|
-
return None
|
|
135
|
-
|
|
136
|
-
# This ensures the pipeline has run and context is populated
|
|
137
|
-
_ = self._processed_expr
|
|
138
|
-
|
|
139
|
-
style_enum = ParameterStyle(placeholder_style) if placeholder_style else ParameterStyle.NAMED_COLON
|
|
140
|
-
return self.parameter_manager.get_compiled_parameters(self._context.parameter_info, style_enum)
|
sqlspec-0.13.1.dist-info/RECORD
DELETED
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
sqlspec/__init__.py,sha256=hyVFQsYsgDWOZ2EPnW1LnATQVxGcYu3liBvSOvk4EQk,705
|
|
2
|
-
sqlspec/__metadata__.py,sha256=hNP3wXvtk8fQVPKGjRLpZ9mP-gaPJqzrmgm3UqpDIXQ,460
|
|
3
|
-
sqlspec/_serialization.py,sha256=7zox4G9zIps-DCdIEwYs4gwALfEOy1g_sWS4r5kpzO8,2604
|
|
4
|
-
sqlspec/_sql.py,sha256=zqMtVWBZzbnNErB8VyJkjDCPq0RNkhGUPA2ZCOtzmGo,35759
|
|
5
|
-
sqlspec/_typing.py,sha256=Vn1CTCfedAHZV3pKZP-l_mPw9pTxesCzRKVRypzNY_k,17903
|
|
6
|
-
sqlspec/base.py,sha256=a7adbCUzohf1MU-iP0TxazGsk9fsJhJmxuFKNWkgC6o,18355
|
|
7
|
-
sqlspec/config.py,sha256=NJg5cjITI3GBCm3ru-m9K3y_XLa0Ru8Z4suG3TjXRmw,12896
|
|
8
|
-
sqlspec/exceptions.py,sha256=T2h-tCN05sRKSpXDjPtYXvNgwInNVzTpha1PIkSUROQ,14168
|
|
9
|
-
sqlspec/loader.py,sha256=J0PaBiY8kC_gCI-3i8Vj3IBZIgKJ4TvRAJzMQerLZMQ,15354
|
|
10
|
-
sqlspec/protocols.py,sha256=ce9L1nqxpmDSQqUR6UoKB8f5eL0hFnp2ProrsMwMsKk,17218
|
|
11
|
-
sqlspec/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
-
sqlspec/typing.py,sha256=qkUcvruNzRUUfpv4AkbQezpy9SokhVHXlMbfFNwQlnU,8721
|
|
13
|
-
sqlspec/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
-
sqlspec/adapters/adbc/__init__.py,sha256=v9bs7501PgEyzR1XIsEpE2Wdrj9DOYkZ4grysw72UXk,218
|
|
15
|
-
sqlspec/adapters/adbc/config.py,sha256=v_gk-C-StoWiSjmB9Ehl6ce2eGqUgb1-JUxSq3lS8l8,20022
|
|
16
|
-
sqlspec/adapters/adbc/driver.py,sha256=WP3YVS-9Y1aup9IQ7y4L8x9e414epcWCyhPHuBVp66w,16644
|
|
17
|
-
sqlspec/adapters/aiosqlite/__init__.py,sha256=7wPmhXQeu4jRi-LZzPxAPTdgRmgmyqCn9U-4wnCWoLM,258
|
|
18
|
-
sqlspec/adapters/aiosqlite/config.py,sha256=Ysbu6sLDVrUtztLRKgphQphxxUCaj2V4W55mLfK-lq0,7652
|
|
19
|
-
sqlspec/adapters/aiosqlite/driver.py,sha256=cfxuob0EmnLB3iCgpuqjw40-9ZWSmVLZ_UL3BNznXt0,11282
|
|
20
|
-
sqlspec/adapters/asyncmy/__init__.py,sha256=zYpebEt_PrNCifLcqXiCcWVm0Zl-LvWbFDromWwSTw8,270
|
|
21
|
-
sqlspec/adapters/asyncmy/config.py,sha256=VSEtK69IHjyjXA6c4AEKSIivGqKOz6B5G7IyCXREhug,10879
|
|
22
|
-
sqlspec/adapters/asyncmy/driver.py,sha256=7l9rsAxTiJhiTiBMQc0e1QwBDWopvfii5jgFwREITog,10085
|
|
23
|
-
sqlspec/adapters/asyncpg/__init__.py,sha256=svnbKlOin8jRL88AdAqflBEU-WEAzp0Thc2y50QsxIo,310
|
|
24
|
-
sqlspec/adapters/asyncpg/config.py,sha256=AAxEqH6ZbCUvr7nIokVurqhxfLgBdix07yFXIhDKSSg,12510
|
|
25
|
-
sqlspec/adapters/asyncpg/driver.py,sha256=X5IF5_NEiQ86aLspuqjY9Fh5OIluCCNa7TAzLEFENjQ,17572
|
|
26
|
-
sqlspec/adapters/bigquery/__init__.py,sha256=fWRH-BoCNX4rYwhU2DK64cXWpfkYpWIExddJAti0bxM,250
|
|
27
|
-
sqlspec/adapters/bigquery/config.py,sha256=iwQ3BPYtywjD17TaYh0YAO4X_ry5DkWIRKWPAeYrkzg,16929
|
|
28
|
-
sqlspec/adapters/bigquery/driver.py,sha256=2aVWjjVAWci92wyXKo5dVV9PGBb6uDkSvDBEEs1eFPw,30385
|
|
29
|
-
sqlspec/adapters/duckdb/__init__.py,sha256=I1f6szfpKKrq6WhyDoUXD3i3NN4yjsh94_fhP1URI5M,351
|
|
30
|
-
sqlspec/adapters/duckdb/config.py,sha256=DBfDLaS_y3qfdYgxCnfnWml7lj1OFOMeUrGxkt6kFj0,20304
|
|
31
|
-
sqlspec/adapters/duckdb/driver.py,sha256=JZipJMy1yUfedtlNZxd8pGTFVylve8ia4XeKfd7dd0c,18095
|
|
32
|
-
sqlspec/adapters/oracledb/__init__.py,sha256=nn3whn0UyBThoXnE1-5_byVuc9PJjvB2P896p7LpNZI,474
|
|
33
|
-
sqlspec/adapters/oracledb/config.py,sha256=wewrgAVbWuZVhIDfOUrf7B6GgkGX2tY-GNA-AYoaRNQ,23833
|
|
34
|
-
sqlspec/adapters/oracledb/driver.py,sha256=ZFOHGQwajIkG7PSWi_ER9QQRNdf18DyYho3L36m7CVU,24473
|
|
35
|
-
sqlspec/adapters/psqlpy/__init__.py,sha256=dp0-96V4SAbNEvOqlJ8PWEyJMYzZGElVoyneZqJ-fbQ,297
|
|
36
|
-
sqlspec/adapters/psqlpy/config.py,sha256=n62ku23eyL5hZPMt4dH0FsksFr89vNM4V-eKAABvQAA,16653
|
|
37
|
-
sqlspec/adapters/psqlpy/driver.py,sha256=liB3pGbDKuz2PyTd3QeDk3rRLKE57leviIdN_hqJHvg,9961
|
|
38
|
-
sqlspec/adapters/psycopg/__init__.py,sha256=ukkCUPrJPyAG78v4rOqcK4WZDs26PeB9Ra9qkFrGJ3E,484
|
|
39
|
-
sqlspec/adapters/psycopg/config.py,sha256=gjtms8wfL7BeUvfJG1K0TMZ6d3BtVzi5X5_enMS2Ieg,27759
|
|
40
|
-
sqlspec/adapters/psycopg/driver.py,sha256=UnnVJg5SwjReYWYX4fQ05JmL5hoJ1XeUby2m9IBrOgM,40064
|
|
41
|
-
sqlspec/adapters/sqlite/__init__.py,sha256=1lYrJ-DojUAOvXMoZRUJNEVyMmYhO41hMJnDWCEeXlw,234
|
|
42
|
-
sqlspec/adapters/sqlite/config.py,sha256=ph3FjdrbVkDaasGDEoZ-estP1NJdj8PqBJqpV-2IJxI,6191
|
|
43
|
-
sqlspec/adapters/sqlite/driver.py,sha256=0xBl7J5bPuv07fte5zPQj-bLhuiIC1_QPHu64i8Il80,12423
|
|
44
|
-
sqlspec/driver/__init__.py,sha256=0udRS5IlJ17HzOCvzapG8c_88yAwTQri1XLD_3fZxZU,671
|
|
45
|
-
sqlspec/driver/_async.py,sha256=ZSUNvVBU22KcpvKrDPJnlc6lnD49XLovS4vCQnr_OPA,9992
|
|
46
|
-
sqlspec/driver/_common.py,sha256=ALJyI6NS_pa0BOad0xiCMRwFLh4ykneaDW_xg9h8Z48,15811
|
|
47
|
-
sqlspec/driver/_sync.py,sha256=KzETeE-NHc1cOcX3LQ_88PejM-TJHD24UFQrB_yLDfQ,9832
|
|
48
|
-
sqlspec/driver/connection.py,sha256=zKP2p-VLxN07IPfOIBKMRELHN7ZMjmRVUKBgSW-6RQg,6610
|
|
49
|
-
sqlspec/driver/parameters.py,sha256=srU_7z3sB2vBu_lz9rAiDW2J2Ce47l12bqhxw6jEePE,4002
|
|
50
|
-
sqlspec/driver/mixins/__init__.py,sha256=-FSWLYq644NftRsmjmXMA9Q7_l7tIFAIh1ZyK0yrba8,652
|
|
51
|
-
sqlspec/driver/mixins/_csv_writer.py,sha256=-uRe7QZRWtdZTFG3Fiej4Ia8EyQcjYr7oPT6wb0qTOc,2716
|
|
52
|
-
sqlspec/driver/mixins/_pipeline.py,sha256=ESQyQo1ow_yerUvdFYS_CBy-6XS9tIow41j80yjCz4w,19588
|
|
53
|
-
sqlspec/driver/mixins/_result_utils.py,sha256=RvdE1BKwnTPx3aXDwnJEonJzp5PdT1Wgn63DGZyglvg,5692
|
|
54
|
-
sqlspec/driver/mixins/_sql_translator.py,sha256=p_PR4KBg9NKNpRpiEqA0hcUIttpdillHpnLUVJEcxuE,1519
|
|
55
|
-
sqlspec/driver/mixins/_storage.py,sha256=P6eIvCMCM6BMH4G0rbWZTb4Q54mmvtnTxk2pMp3JW7o,38558
|
|
56
|
-
sqlspec/driver/mixins/_type_coercion.py,sha256=ix-_p1-Yp9LhQdGFhFN1H_O8_VbVih-nzLPbsQiNFnE,4578
|
|
57
|
-
sqlspec/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
58
|
-
sqlspec/extensions/aiosql/__init__.py,sha256=-9cefc9pYPf9vCgALoB-y1DtmcgRjKe2azfl6RIarAA,414
|
|
59
|
-
sqlspec/extensions/aiosql/adapter.py,sha256=BcJI0y0Hj5t5aH6_Kx_06EkKy3aBLsh7xIJH-LMMoGg,16544
|
|
60
|
-
sqlspec/extensions/litestar/__init__.py,sha256=aXF2g4-U86pdJHoOA6RCvZgnyHVBbjRhlWqcSuRX2gg,243
|
|
61
|
-
sqlspec/extensions/litestar/_utils.py,sha256=o-FuUj1_WkDrLxQxiP6hXDak66XfyRP3QLyEVKrIRjI,1954
|
|
62
|
-
sqlspec/extensions/litestar/config.py,sha256=vLXM425tCV3IbJiNO1ZG90ctjBTb9oQCuLsqCaUYmo8,4685
|
|
63
|
-
sqlspec/extensions/litestar/handlers.py,sha256=bVoWmHhCsHZkXZXYHE23yDaJlRoydfvU-boJjA3BSLE,10478
|
|
64
|
-
sqlspec/extensions/litestar/plugin.py,sha256=ysuy4dmF6VAhUkIcVOSPfv5HcBGmwSZ9_PjttBs81g4,5431
|
|
65
|
-
sqlspec/extensions/litestar/providers.py,sha256=wUGqPeNV58rPqL1iwDQg439C4y-Zg-eXEogjeFsv0iQ,21021
|
|
66
|
-
sqlspec/service/__init__.py,sha256=DayFSxYU4AMbcN0JWBuB1rtrOAs-amKIAIyTJXXNKH0,206
|
|
67
|
-
sqlspec/service/_util.py,sha256=K31tzlOsTXGhbXe4u5ltZYLExuaFtpiZoIHLOk8yNyM,6096
|
|
68
|
-
sqlspec/service/base.py,sha256=iW4LbrIxjrSt0mDPPSmuUGQgdQTFM-xgmZdThCLa5u4,40592
|
|
69
|
-
sqlspec/service/pagination.py,sha256=ndLQwsvswoISWEE_3IG9nmdHt42OZkVMJvr-2HTWsLw,619
|
|
70
|
-
sqlspec/statement/__init__.py,sha256=NDvdrpr1EqAZXp4HmhTVaRnWVscahPSHpmSO8DHSoMY,536
|
|
71
|
-
sqlspec/statement/filters.py,sha256=qX5KOe-rLmFwyD8xaUcTTkh45Dg1ViKx_hTAqjKtWh4,22565
|
|
72
|
-
sqlspec/statement/parameter_manager.py,sha256=nbeLzO2Hnm4Su8id-fKEELvWEI8dbbC5ZYiqo4jjbvc,9557
|
|
73
|
-
sqlspec/statement/parameters.py,sha256=8V9mNr5Lb4iZmHfucZB9HMYOI2OmhaNzr2ZnMSAYnKk,35791
|
|
74
|
-
sqlspec/statement/result.py,sha256=-yARFxg7Wsm8nAeHMpnJ58OLd2VujFiZx29wfo7eFVs,14514
|
|
75
|
-
sqlspec/statement/splitter.py,sha256=mCzJsNEtJFk4A0FdTELkG_qOggRFCQC_ZEJisVo9orY,24111
|
|
76
|
-
sqlspec/statement/sql.py,sha256=l_KrA91wlIAXIQiaOsvEqZbY-Hg6QWtF8Va2qr7mfCE,71916
|
|
77
|
-
sqlspec/statement/sql_compiler.py,sha256=f1UoGWjZTCLwOMBiG1R45_tq8oQlR8Qmm9fHKy_uXYA,5882
|
|
78
|
-
sqlspec/statement/builder/__init__.py,sha256=FMTnEKOIHCywjnqGXfOfzZzYKmciue0h37DG2KZAUZI,1610
|
|
79
|
-
sqlspec/statement/builder/_ddl_utils.py,sha256=P0INvHoOA9Mk7rmrga0xRvxF6YgNXchsg1Q3hfvlCqQ,4326
|
|
80
|
-
sqlspec/statement/builder/_parsing_utils.py,sha256=xAxWfa-mjjLPyweM9396lQy91G5MsxYyaJzTAoEiuAU,5753
|
|
81
|
-
sqlspec/statement/builder/base.py,sha256=DArCuNwDXslt73Jk5Io3WqUP1ZXA0e4cUXtzFjvQ5g4,14738
|
|
82
|
-
sqlspec/statement/builder/column.py,sha256=JWeZ5hnawCWm00jeojwm8i79p8oYNkg30SIdOOolNjM,11521
|
|
83
|
-
sqlspec/statement/builder/ddl.py,sha256=vqAebkN6JoX6n8aLVwZdyW3Xfyj3Ws6frWu-_7wy8uE,51516
|
|
84
|
-
sqlspec/statement/builder/delete.py,sha256=5BVwxcNY5nSgeZrZ4tSfdA2di3X8M3y7I5t9D35d0mk,2881
|
|
85
|
-
sqlspec/statement/builder/insert.py,sha256=Q2ArKq4BPP69G-OTxcUVgixlhsKjdOm248RJxtJFyps,10129
|
|
86
|
-
sqlspec/statement/builder/merge.py,sha256=SUrumqMrUBO1vMFWll45vvYj4DmrL3WuCZLdHap8ej8,2783
|
|
87
|
-
sqlspec/statement/builder/select.py,sha256=4UXNo9_13XQIqmzzovsRQBAwooFtBdzsolUoTzxgNE4,8642
|
|
88
|
-
sqlspec/statement/builder/update.py,sha256=qV5frucca42xuzSeAdBAqNnYTRyEZJrhkZ5uEI1eGKs,6245
|
|
89
|
-
sqlspec/statement/builder/mixins/__init__.py,sha256=B5GhsdySb_-DN3SvBlA2oimmymAJX3Rf4A7Xnz3uNN4,2887
|
|
90
|
-
sqlspec/statement/builder/mixins/_aggregate_functions.py,sha256=yeXm_mp0JDbzSe2N2vpJHbGVYmdnrCMqwdHXz2rJAVs,10551
|
|
91
|
-
sqlspec/statement/builder/mixins/_case_builder.py,sha256=fGdevoEZxmoJjsDV9Wwfom8vu3lmgF9B_o5HXCf25Kg,3047
|
|
92
|
-
sqlspec/statement/builder/mixins/_common_table_expr.py,sha256=R7BUdWEHpuPGumgBsUnUPaVLH0sF3oRiJRw-xXEkTj8,3694
|
|
93
|
-
sqlspec/statement/builder/mixins/_delete_from.py,sha256=HsJseeYY-HUoiTYRdPpCDG0kIHrhXOg_GA52RT7dEGY,1019
|
|
94
|
-
sqlspec/statement/builder/mixins/_from.py,sha256=bGcI7TuY3Z3Xx8oLR9jXx_d25s0db0uJBx4SSw0kKh8,2850
|
|
95
|
-
sqlspec/statement/builder/mixins/_group_by.py,sha256=gLbveNJuvk_FdZxYKBzx4cCQQvxqzecc_vmb5d8_Du0,4142
|
|
96
|
-
sqlspec/statement/builder/mixins/_having.py,sha256=X8-hdwEeJg4RYxyjhaYLvlkpzE0AwIPl6t8SPGz5gi0,1112
|
|
97
|
-
sqlspec/statement/builder/mixins/_insert_from_select.py,sha256=RMvdNXU1W7zqceOGwo_G_n0bbd-S63bBwOCs44H0j4Y,1801
|
|
98
|
-
sqlspec/statement/builder/mixins/_insert_into.py,sha256=7979JCYqKM_NRTHwkrJJY6l9lS2AQ-evZYRU8fs3yw0,1049
|
|
99
|
-
sqlspec/statement/builder/mixins/_insert_values.py,sha256=5kheKKtdpOVHSIPox88bYwtD4Rr5v1_J_K9Wmam7-Vk,2820
|
|
100
|
-
sqlspec/statement/builder/mixins/_join.py,sha256=lSGFtq_KJ985SCmUKmIx-4NwniIwQIVmLJYryF5mtc4,5658
|
|
101
|
-
sqlspec/statement/builder/mixins/_limit_offset.py,sha256=qLxBek2CpJz-k717ZTpJ5eVlQJ5McZPAQEwFbRM-XuI,1753
|
|
102
|
-
sqlspec/statement/builder/mixins/_merge_clauses.py,sha256=Tmi9Yb_7BPtFtpxj3splUTNQfjS8TdcN8TY9qJQqNNU,16798
|
|
103
|
-
sqlspec/statement/builder/mixins/_order_by.py,sha256=1yMXkl9MYd5uk3RRMWxhR4VCmvHGvwY6bojofFt6jc0,1717
|
|
104
|
-
sqlspec/statement/builder/mixins/_pivot.py,sha256=mnGNCZYbl00JAny6h9p-EQkhGNiNN8w--ZNd7X0Fs8I,3257
|
|
105
|
-
sqlspec/statement/builder/mixins/_returning.py,sha256=O39j2MEIcqiiUhFFGnyGwIXhLS7KrGigfZ9kPxFjjtI,1349
|
|
106
|
-
sqlspec/statement/builder/mixins/_select_columns.py,sha256=wVUg9ECJH6r1QEh7VWV6DGpb86oo4vuFHPpOx_G8Hcw,2421
|
|
107
|
-
sqlspec/statement/builder/mixins/_set_ops.py,sha256=uWV32ZAi2tojbS9b6Q0ZDIn1Rhbx4cCE42jhbVdm90I,5291
|
|
108
|
-
sqlspec/statement/builder/mixins/_unpivot.py,sha256=99tN2skDD3M77v7MyqisugxHR-6BB984FLX7iY4RpG0,3086
|
|
109
|
-
sqlspec/statement/builder/mixins/_update_from.py,sha256=NAHiL08NBoh8jFxZG_ZiSjbEDcIR9ni7-d--nVIXf6g,2540
|
|
110
|
-
sqlspec/statement/builder/mixins/_update_set.py,sha256=gLcGeBMSHqCGPrJz-pb5951g-4xCLJDltOzbMM1OQRM,4306
|
|
111
|
-
sqlspec/statement/builder/mixins/_update_table.py,sha256=FX3KezuHdu7YLQI4i5iniHWk1Lbzph8MzLcOM6iTd70,936
|
|
112
|
-
sqlspec/statement/builder/mixins/_where.py,sha256=kfttMYubr4zzOJkbxTh-U3lTt5uNFgkmjCEixs6n9LM,21227
|
|
113
|
-
sqlspec/statement/builder/mixins/_window_functions.py,sha256=8ldy06gK6jOlGg31oa1dCrG7IkfCVYvVr_f-lx0YcgU,3745
|
|
114
|
-
sqlspec/statement/pipelines/__init__.py,sha256=eFCKEmMqQAyDwfg9_kgE5e719OSC2nyhTme4IGmxb70,7326
|
|
115
|
-
sqlspec/statement/pipelines/context.py,sha256=mE7twvOydqyWQffp6KyMvOUl9FlTY9ypGL7M6SFYFK8,4210
|
|
116
|
-
sqlspec/statement/pipelines/analyzers/__init__.py,sha256=RY7W0AiWG-8qdrTmRSGlEofjrPPJCJUnNK-LRukKt5Q,330
|
|
117
|
-
sqlspec/statement/pipelines/analyzers/_analyzer.py,sha256=0_FDty6H_4JvQwee_NrzmptX9-VdhyAePXUstuq4MU4,27474
|
|
118
|
-
sqlspec/statement/pipelines/transformers/__init__.py,sha256=Kh4CE_izdwEsSF7Is6_6NXqtNmbLm5x5OWdnlUGp9ok,480
|
|
119
|
-
sqlspec/statement/pipelines/transformers/_expression_simplifier.py,sha256=0R2j046n12DDk1wGEmwX3f3KnaMUcSDWC0-lRmforjw,3385
|
|
120
|
-
sqlspec/statement/pipelines/transformers/_literal_parameterizer.py,sha256=N6a2lMGBHXcoHuSySY_9JhObNkPWabUBpR_25ZCnv0w,57183
|
|
121
|
-
sqlspec/statement/pipelines/transformers/_remove_comments_and_hints.py,sha256=-gM6VnlhNtQzSbQq44hQ5mhaPqNsjzeCaTgXTycgkOk,3008
|
|
122
|
-
sqlspec/statement/pipelines/validators/__init__.py,sha256=cdlwdLhOT2OwTbueIsA7bfRG2b6y-j7dw9pMzl5AP0M,747
|
|
123
|
-
sqlspec/statement/pipelines/validators/_dml_safety.py,sha256=s7Eee60u6w0K35vz4GVAwsB5Xy8zUqWhiIx_pRVfERo,10585
|
|
124
|
-
sqlspec/statement/pipelines/validators/_parameter_style.py,sha256=m8gNydG0KKyhmQyOEGZk8mhV_jLjT0vxIJy22AY8xkY,17840
|
|
125
|
-
sqlspec/statement/pipelines/validators/_performance.py,sha256=mTL5UB9Yj2XNjv31_CjqWHUAdj77iFtE7XDXQosG_20,26357
|
|
126
|
-
sqlspec/statement/pipelines/validators/_security.py,sha256=3WuH9n4j-VKOgmQnZvFIoI4MieRBVShtOZvXl2SJsyk,42103
|
|
127
|
-
sqlspec/storage/__init__.py,sha256=ZS8rmhN8e_h_df-Oab64Jh4EbddElBbmrtHkuO-KqOE,703
|
|
128
|
-
sqlspec/storage/capabilities.py,sha256=fsnQ9jbjHBFvd3P9yWAzfjPpVYUGcsTtR6fm5iOCvXY,3054
|
|
129
|
-
sqlspec/storage/registry.py,sha256=lv9pGt6vt0tDNAlao9qA7rSsFsCZtaOr48aG15IoMFA,10976
|
|
130
|
-
sqlspec/storage/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
131
|
-
sqlspec/storage/backends/base.py,sha256=34XYQuz1tQ-q_ZZwOz-Kimgvl088SR3VUYJoA-STslc,6350
|
|
132
|
-
sqlspec/storage/backends/fsspec.py,sha256=wo40MwtEjNTc73ZNTCmNC2-Img0zldUCaFGh9H3BZuE,14715
|
|
133
|
-
sqlspec/storage/backends/obstore.py,sha256=FnoVzTzzNn5NRXR8GgETqD3Rq9C5EWAmfWmY4JDFVJE,21214
|
|
134
|
-
sqlspec/utils/__init__.py,sha256=_Ya8IZuc2cZIstXr_xjgnSfxICXHXvu5mfWsi2USDrw,183
|
|
135
|
-
sqlspec/utils/cached_property.py,sha256=Sw_JZxfChSJu72gvYBJPF-89FyyIJAPf-1ETlDq-F2E,648
|
|
136
|
-
sqlspec/utils/correlation.py,sha256=4jqpjMivxI1tQ13Ed-P0hLdFHUKUQ9GlvIM69_HOlS4,4370
|
|
137
|
-
sqlspec/utils/deprecation.py,sha256=zrmb_eKRlLWVA6dWrjUbN3Vz6D3_-Z_15Ixk4H-sDRk,3850
|
|
138
|
-
sqlspec/utils/fixtures.py,sha256=q_Pghpmw2VgJ9P0TfkyjSF5PvdaD5Y2Laha0Bj4IDrA,1838
|
|
139
|
-
sqlspec/utils/logging.py,sha256=56a5tqx4jfTqm20WDyj5c7Dy-h_O0KambIKOMr1-Oms,3780
|
|
140
|
-
sqlspec/utils/module_loader.py,sha256=9LcmEhy4T0jgkCaDVkxX47PSgJOMeJ8IV67yXEWBp-U,3074
|
|
141
|
-
sqlspec/utils/serializers.py,sha256=TKsRryRcYMnb8Z8MGkYGClIxcYvC8CW7MsrPQTJqEcY,154
|
|
142
|
-
sqlspec/utils/singleton.py,sha256=KZ7481tlDAxq6gcAlpULVqPLNc9P0XkHOEp7hfWIHcI,1096
|
|
143
|
-
sqlspec/utils/sync_tools.py,sha256=ckP1_uLh40C2pDvdc4FsR4NkmZVa1zEB8jhUxPLIuAI,8726
|
|
144
|
-
sqlspec/utils/text.py,sha256=DpEnRuSDv3acp4VQQGEOQixlJnLGZsN5YBws4rkI6t0,4756
|
|
145
|
-
sqlspec/utils/type_guards.py,sha256=uEtfznkkumiy2lnPOde35Ylzq2RrcPB-MBiWseMCADg,25722
|
|
146
|
-
sqlspec-0.13.1.dist-info/METADATA,sha256=WxPFx2SCx_K8lCfY18xnwH30ZxhxhLV9KyUAMl0MJxw,16663
|
|
147
|
-
sqlspec-0.13.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
148
|
-
sqlspec-0.13.1.dist-info/licenses/LICENSE,sha256=MdujfZ6l5HuLz4mElxlu049itenOR3gnhN1_Nd3nVcM,1078
|
|
149
|
-
sqlspec-0.13.1.dist-info/licenses/NOTICE,sha256=Lyir8ozXWov7CyYS4huVaOCNrtgL17P-bNV-5daLntQ,1634
|
|
150
|
-
sqlspec-0.13.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|