sqlspec 0.26.0__py3-none-any.whl → 0.28.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 +7 -15
- sqlspec/_serialization.py +55 -25
- sqlspec/_typing.py +155 -52
- sqlspec/adapters/adbc/_types.py +1 -1
- sqlspec/adapters/adbc/adk/__init__.py +5 -0
- sqlspec/adapters/adbc/adk/store.py +880 -0
- sqlspec/adapters/adbc/config.py +62 -12
- sqlspec/adapters/adbc/data_dictionary.py +74 -2
- sqlspec/adapters/adbc/driver.py +226 -58
- sqlspec/adapters/adbc/litestar/__init__.py +5 -0
- sqlspec/adapters/adbc/litestar/store.py +504 -0
- sqlspec/adapters/adbc/type_converter.py +44 -50
- sqlspec/adapters/aiosqlite/_types.py +1 -1
- sqlspec/adapters/aiosqlite/adk/__init__.py +5 -0
- sqlspec/adapters/aiosqlite/adk/store.py +536 -0
- sqlspec/adapters/aiosqlite/config.py +86 -16
- sqlspec/adapters/aiosqlite/data_dictionary.py +34 -2
- sqlspec/adapters/aiosqlite/driver.py +127 -38
- sqlspec/adapters/aiosqlite/litestar/__init__.py +5 -0
- sqlspec/adapters/aiosqlite/litestar/store.py +281 -0
- sqlspec/adapters/aiosqlite/pool.py +7 -7
- sqlspec/adapters/asyncmy/__init__.py +7 -1
- sqlspec/adapters/asyncmy/_types.py +1 -1
- sqlspec/adapters/asyncmy/adk/__init__.py +5 -0
- sqlspec/adapters/asyncmy/adk/store.py +503 -0
- sqlspec/adapters/asyncmy/config.py +59 -17
- sqlspec/adapters/asyncmy/data_dictionary.py +41 -2
- sqlspec/adapters/asyncmy/driver.py +293 -62
- sqlspec/adapters/asyncmy/litestar/__init__.py +5 -0
- sqlspec/adapters/asyncmy/litestar/store.py +296 -0
- sqlspec/adapters/asyncpg/__init__.py +2 -1
- sqlspec/adapters/asyncpg/_type_handlers.py +71 -0
- sqlspec/adapters/asyncpg/_types.py +11 -7
- sqlspec/adapters/asyncpg/adk/__init__.py +5 -0
- sqlspec/adapters/asyncpg/adk/store.py +460 -0
- sqlspec/adapters/asyncpg/config.py +57 -36
- sqlspec/adapters/asyncpg/data_dictionary.py +48 -2
- sqlspec/adapters/asyncpg/driver.py +153 -23
- sqlspec/adapters/asyncpg/litestar/__init__.py +5 -0
- sqlspec/adapters/asyncpg/litestar/store.py +253 -0
- sqlspec/adapters/bigquery/_types.py +1 -1
- sqlspec/adapters/bigquery/adk/__init__.py +5 -0
- sqlspec/adapters/bigquery/adk/store.py +585 -0
- sqlspec/adapters/bigquery/config.py +36 -11
- sqlspec/adapters/bigquery/data_dictionary.py +42 -2
- sqlspec/adapters/bigquery/driver.py +489 -144
- sqlspec/adapters/bigquery/litestar/__init__.py +5 -0
- sqlspec/adapters/bigquery/litestar/store.py +327 -0
- sqlspec/adapters/bigquery/type_converter.py +55 -23
- sqlspec/adapters/duckdb/_types.py +2 -2
- sqlspec/adapters/duckdb/adk/__init__.py +14 -0
- sqlspec/adapters/duckdb/adk/store.py +563 -0
- sqlspec/adapters/duckdb/config.py +79 -21
- sqlspec/adapters/duckdb/data_dictionary.py +41 -2
- sqlspec/adapters/duckdb/driver.py +225 -44
- sqlspec/adapters/duckdb/litestar/__init__.py +5 -0
- sqlspec/adapters/duckdb/litestar/store.py +332 -0
- sqlspec/adapters/duckdb/pool.py +5 -5
- sqlspec/adapters/duckdb/type_converter.py +51 -21
- sqlspec/adapters/oracledb/_numpy_handlers.py +133 -0
- sqlspec/adapters/oracledb/_types.py +20 -2
- sqlspec/adapters/oracledb/adk/__init__.py +5 -0
- sqlspec/adapters/oracledb/adk/store.py +1628 -0
- sqlspec/adapters/oracledb/config.py +120 -36
- sqlspec/adapters/oracledb/data_dictionary.py +87 -20
- sqlspec/adapters/oracledb/driver.py +475 -86
- sqlspec/adapters/oracledb/litestar/__init__.py +5 -0
- sqlspec/adapters/oracledb/litestar/store.py +765 -0
- sqlspec/adapters/oracledb/migrations.py +316 -25
- sqlspec/adapters/oracledb/type_converter.py +91 -16
- sqlspec/adapters/psqlpy/_type_handlers.py +44 -0
- sqlspec/adapters/psqlpy/_types.py +2 -1
- sqlspec/adapters/psqlpy/adk/__init__.py +5 -0
- sqlspec/adapters/psqlpy/adk/store.py +483 -0
- sqlspec/adapters/psqlpy/config.py +45 -19
- sqlspec/adapters/psqlpy/data_dictionary.py +48 -2
- sqlspec/adapters/psqlpy/driver.py +108 -41
- sqlspec/adapters/psqlpy/litestar/__init__.py +5 -0
- sqlspec/adapters/psqlpy/litestar/store.py +272 -0
- sqlspec/adapters/psqlpy/type_converter.py +40 -11
- sqlspec/adapters/psycopg/_type_handlers.py +80 -0
- sqlspec/adapters/psycopg/_types.py +2 -1
- sqlspec/adapters/psycopg/adk/__init__.py +5 -0
- sqlspec/adapters/psycopg/adk/store.py +962 -0
- sqlspec/adapters/psycopg/config.py +65 -37
- sqlspec/adapters/psycopg/data_dictionary.py +91 -3
- sqlspec/adapters/psycopg/driver.py +200 -78
- sqlspec/adapters/psycopg/litestar/__init__.py +5 -0
- sqlspec/adapters/psycopg/litestar/store.py +554 -0
- sqlspec/adapters/sqlite/__init__.py +2 -1
- sqlspec/adapters/sqlite/_type_handlers.py +86 -0
- sqlspec/adapters/sqlite/_types.py +1 -1
- sqlspec/adapters/sqlite/adk/__init__.py +5 -0
- sqlspec/adapters/sqlite/adk/store.py +582 -0
- sqlspec/adapters/sqlite/config.py +85 -16
- sqlspec/adapters/sqlite/data_dictionary.py +34 -2
- sqlspec/adapters/sqlite/driver.py +120 -52
- sqlspec/adapters/sqlite/litestar/__init__.py +5 -0
- sqlspec/adapters/sqlite/litestar/store.py +318 -0
- sqlspec/adapters/sqlite/pool.py +5 -5
- sqlspec/base.py +45 -26
- sqlspec/builder/__init__.py +73 -4
- sqlspec/builder/_base.py +91 -58
- sqlspec/builder/_column.py +5 -5
- sqlspec/builder/_ddl.py +98 -89
- sqlspec/builder/_delete.py +5 -4
- sqlspec/builder/_dml.py +388 -0
- sqlspec/{_sql.py → builder/_factory.py} +41 -44
- sqlspec/builder/_insert.py +5 -82
- sqlspec/builder/{mixins/_join_operations.py → _join.py} +145 -143
- sqlspec/builder/_merge.py +446 -11
- sqlspec/builder/_parsing_utils.py +9 -11
- sqlspec/builder/_select.py +1313 -25
- sqlspec/builder/_update.py +11 -42
- sqlspec/cli.py +76 -69
- sqlspec/config.py +331 -62
- sqlspec/core/__init__.py +5 -4
- sqlspec/core/cache.py +18 -18
- sqlspec/core/compiler.py +6 -8
- sqlspec/core/filters.py +55 -47
- sqlspec/core/hashing.py +9 -9
- sqlspec/core/parameters.py +76 -45
- sqlspec/core/result.py +234 -47
- sqlspec/core/splitter.py +16 -17
- sqlspec/core/statement.py +32 -31
- sqlspec/core/type_conversion.py +3 -2
- sqlspec/driver/__init__.py +1 -3
- sqlspec/driver/_async.py +183 -160
- sqlspec/driver/_common.py +197 -109
- sqlspec/driver/_sync.py +189 -161
- sqlspec/driver/mixins/_result_tools.py +20 -236
- sqlspec/driver/mixins/_sql_translator.py +4 -4
- sqlspec/exceptions.py +70 -7
- sqlspec/extensions/adk/__init__.py +53 -0
- sqlspec/extensions/adk/_types.py +51 -0
- sqlspec/extensions/adk/converters.py +172 -0
- sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +144 -0
- sqlspec/extensions/adk/migrations/__init__.py +0 -0
- sqlspec/extensions/adk/service.py +181 -0
- sqlspec/extensions/adk/store.py +536 -0
- sqlspec/extensions/aiosql/adapter.py +69 -61
- sqlspec/extensions/fastapi/__init__.py +21 -0
- sqlspec/extensions/fastapi/extension.py +331 -0
- sqlspec/extensions/fastapi/providers.py +543 -0
- sqlspec/extensions/flask/__init__.py +36 -0
- sqlspec/extensions/flask/_state.py +71 -0
- sqlspec/extensions/flask/_utils.py +40 -0
- sqlspec/extensions/flask/extension.py +389 -0
- sqlspec/extensions/litestar/__init__.py +21 -4
- sqlspec/extensions/litestar/cli.py +54 -10
- sqlspec/extensions/litestar/config.py +56 -266
- sqlspec/extensions/litestar/handlers.py +46 -17
- sqlspec/extensions/litestar/migrations/0001_create_session_table.py +137 -0
- sqlspec/extensions/litestar/migrations/__init__.py +3 -0
- sqlspec/extensions/litestar/plugin.py +349 -224
- sqlspec/extensions/litestar/providers.py +25 -25
- sqlspec/extensions/litestar/store.py +265 -0
- sqlspec/extensions/starlette/__init__.py +10 -0
- sqlspec/extensions/starlette/_state.py +25 -0
- sqlspec/extensions/starlette/_utils.py +52 -0
- sqlspec/extensions/starlette/extension.py +254 -0
- sqlspec/extensions/starlette/middleware.py +154 -0
- sqlspec/loader.py +30 -49
- sqlspec/migrations/base.py +200 -76
- sqlspec/migrations/commands.py +591 -62
- sqlspec/migrations/context.py +6 -9
- sqlspec/migrations/fix.py +199 -0
- sqlspec/migrations/loaders.py +47 -19
- sqlspec/migrations/runner.py +241 -75
- sqlspec/migrations/tracker.py +237 -21
- sqlspec/migrations/utils.py +51 -3
- sqlspec/migrations/validation.py +177 -0
- sqlspec/protocols.py +106 -36
- sqlspec/storage/_utils.py +85 -0
- sqlspec/storage/backends/fsspec.py +133 -107
- sqlspec/storage/backends/local.py +78 -51
- sqlspec/storage/backends/obstore.py +276 -168
- sqlspec/storage/registry.py +75 -39
- sqlspec/typing.py +30 -84
- sqlspec/utils/__init__.py +25 -4
- sqlspec/utils/arrow_helpers.py +81 -0
- sqlspec/utils/config_resolver.py +6 -6
- sqlspec/utils/correlation.py +4 -5
- sqlspec/utils/data_transformation.py +3 -2
- sqlspec/utils/deprecation.py +9 -8
- sqlspec/utils/fixtures.py +4 -4
- sqlspec/utils/logging.py +46 -6
- sqlspec/utils/module_loader.py +205 -5
- sqlspec/utils/portal.py +311 -0
- sqlspec/utils/schema.py +288 -0
- sqlspec/utils/serializers.py +113 -4
- sqlspec/utils/sync_tools.py +36 -22
- sqlspec/utils/text.py +1 -2
- sqlspec/utils/type_guards.py +136 -20
- sqlspec/utils/version.py +433 -0
- {sqlspec-0.26.0.dist-info → sqlspec-0.28.0.dist-info}/METADATA +41 -22
- sqlspec-0.28.0.dist-info/RECORD +221 -0
- sqlspec/builder/mixins/__init__.py +0 -55
- sqlspec/builder/mixins/_cte_and_set_ops.py +0 -253
- sqlspec/builder/mixins/_delete_operations.py +0 -50
- sqlspec/builder/mixins/_insert_operations.py +0 -282
- sqlspec/builder/mixins/_merge_operations.py +0 -698
- sqlspec/builder/mixins/_order_limit_operations.py +0 -145
- sqlspec/builder/mixins/_pivot_operations.py +0 -157
- sqlspec/builder/mixins/_select_operations.py +0 -930
- sqlspec/builder/mixins/_update_operations.py +0 -199
- sqlspec/builder/mixins/_where_clause.py +0 -1298
- sqlspec-0.26.0.dist-info/RECORD +0 -157
- sqlspec-0.26.0.dist-info/licenses/NOTICE +0 -29
- {sqlspec-0.26.0.dist-info → sqlspec-0.28.0.dist-info}/WHEEL +0 -0
- {sqlspec-0.26.0.dist-info → sqlspec-0.28.0.dist-info}/entry_points.txt +0 -0
- {sqlspec-0.26.0.dist-info → sqlspec-0.28.0.dist-info}/licenses/LICENSE +0 -0
sqlspec/core/statement.py
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
"""SQL statement and configuration management."""
|
|
2
2
|
|
|
3
|
-
from typing import TYPE_CHECKING, Any,
|
|
3
|
+
from typing import TYPE_CHECKING, Any, Final, Optional, TypeAlias
|
|
4
4
|
|
|
5
5
|
import sqlglot
|
|
6
6
|
from mypy_extensions import mypyc_attr
|
|
7
7
|
from sqlglot import exp
|
|
8
8
|
from sqlglot.errors import ParseError
|
|
9
|
-
from typing_extensions import TypeAlias
|
|
10
9
|
|
|
10
|
+
import sqlspec.exceptions
|
|
11
11
|
from sqlspec.core.compiler import OperationType, SQLProcessor
|
|
12
12
|
from sqlspec.core.parameters import ParameterConverter, ParameterStyle, ParameterStyleConfig, ParameterValidator
|
|
13
|
-
from sqlspec.exceptions import SQLSpecError
|
|
14
13
|
from sqlspec.typing import Empty, EmptyEnum
|
|
15
14
|
from sqlspec.utils.logging import get_logger
|
|
16
15
|
from sqlspec.utils.type_guards import is_statement_filter, supports_where
|
|
17
16
|
|
|
18
17
|
if TYPE_CHECKING:
|
|
18
|
+
from collections.abc import Callable
|
|
19
|
+
|
|
19
20
|
from sqlglot.dialects.dialect import DialectType
|
|
20
21
|
|
|
21
22
|
from sqlspec.core.cache import FiltersView
|
|
@@ -80,10 +81,10 @@ class ProcessedState:
|
|
|
80
81
|
self,
|
|
81
82
|
compiled_sql: str,
|
|
82
83
|
execution_parameters: Any,
|
|
83
|
-
parsed_expression: "
|
|
84
|
+
parsed_expression: "exp.Expression | None" = None,
|
|
84
85
|
operation_type: "OperationType" = "UNKNOWN",
|
|
85
|
-
parameter_casts: "
|
|
86
|
-
validation_errors: "
|
|
86
|
+
parameter_casts: "dict[int, str] | None" = None,
|
|
87
|
+
validation_errors: "list[str] | None" = None,
|
|
87
88
|
is_many: bool = False,
|
|
88
89
|
) -> None:
|
|
89
90
|
self.compiled_sql = compiled_sql
|
|
@@ -123,10 +124,10 @@ class SQL:
|
|
|
123
124
|
|
|
124
125
|
def __init__(
|
|
125
126
|
self,
|
|
126
|
-
statement: "
|
|
127
|
-
*parameters: "
|
|
127
|
+
statement: "str | exp.Expression | 'SQL'",
|
|
128
|
+
*parameters: "Any | StatementFilter | list[Any | StatementFilter]",
|
|
128
129
|
statement_config: Optional["StatementConfig"] = None,
|
|
129
|
-
is_many:
|
|
130
|
+
is_many: bool | None = None,
|
|
130
131
|
**kwargs: Any,
|
|
131
132
|
) -> None:
|
|
132
133
|
"""Initialize SQL statement.
|
|
@@ -141,8 +142,8 @@ class SQL:
|
|
|
141
142
|
config = statement_config or self._create_auto_config(statement, parameters, kwargs)
|
|
142
143
|
self._statement_config = config
|
|
143
144
|
self._dialect = self._normalize_dialect(config.dialect)
|
|
144
|
-
self._processed_state:
|
|
145
|
-
self._hash:
|
|
145
|
+
self._processed_state: EmptyEnum | ProcessedState = Empty
|
|
146
|
+
self._hash: int | None = None
|
|
146
147
|
self._filters: list[StatementFilter] = []
|
|
147
148
|
self._named_parameters: dict[str, Any] = {}
|
|
148
149
|
self._positional_parameters: list[Any] = []
|
|
@@ -165,7 +166,7 @@ class SQL:
|
|
|
165
166
|
self._process_parameters(*parameters, **kwargs)
|
|
166
167
|
|
|
167
168
|
def _create_auto_config(
|
|
168
|
-
self, _statement: "
|
|
169
|
+
self, _statement: "str | exp.Expression | 'SQL'", _parameters: tuple, _kwargs: dict[str, Any]
|
|
169
170
|
) -> "StatementConfig":
|
|
170
171
|
"""Create default StatementConfig when none provided.
|
|
171
172
|
|
|
@@ -179,7 +180,7 @@ class SQL:
|
|
|
179
180
|
"""
|
|
180
181
|
return get_default_config()
|
|
181
182
|
|
|
182
|
-
def _normalize_dialect(self, dialect: "
|
|
183
|
+
def _normalize_dialect(self, dialect: "DialectType | None") -> "str | None":
|
|
183
184
|
"""Convert dialect to string representation.
|
|
184
185
|
|
|
185
186
|
Args:
|
|
@@ -224,7 +225,7 @@ class SQL:
|
|
|
224
225
|
return len(param_list) > 1
|
|
225
226
|
return False
|
|
226
227
|
|
|
227
|
-
def _process_parameters(self, *parameters: Any, dialect:
|
|
228
|
+
def _process_parameters(self, *parameters: Any, dialect: str | None = None, **kwargs: Any) -> None:
|
|
228
229
|
"""Process and organize parameters and filters.
|
|
229
230
|
|
|
230
231
|
Args:
|
|
@@ -318,7 +319,7 @@ class SQL:
|
|
|
318
319
|
return self._statement_config
|
|
319
320
|
|
|
320
321
|
@property
|
|
321
|
-
def expression(self) -> "
|
|
322
|
+
def expression(self) -> "exp.Expression | None":
|
|
322
323
|
"""SQLGlot expression."""
|
|
323
324
|
if self._processed_state is not Empty:
|
|
324
325
|
return self._processed_state.parsed_expression
|
|
@@ -349,17 +350,17 @@ class SQL:
|
|
|
349
350
|
return self._processed_state
|
|
350
351
|
|
|
351
352
|
@property
|
|
352
|
-
def dialect(self) -> "
|
|
353
|
+
def dialect(self) -> "str | None":
|
|
353
354
|
"""SQL dialect."""
|
|
354
355
|
return self._dialect
|
|
355
356
|
|
|
356
357
|
@property
|
|
357
|
-
def _statement(self) -> "
|
|
358
|
+
def _statement(self) -> "exp.Expression | None":
|
|
358
359
|
"""Internal SQLGlot expression."""
|
|
359
360
|
return self.expression
|
|
360
361
|
|
|
361
362
|
@property
|
|
362
|
-
def statement_expression(self) -> "
|
|
363
|
+
def statement_expression(self) -> "exp.Expression | None":
|
|
363
364
|
"""Get parsed statement expression (public API).
|
|
364
365
|
|
|
365
366
|
Returns:
|
|
@@ -454,7 +455,7 @@ class SQL:
|
|
|
454
455
|
validation_errors=[],
|
|
455
456
|
is_many=self._is_many,
|
|
456
457
|
)
|
|
457
|
-
except SQLSpecError:
|
|
458
|
+
except sqlspec.exceptions.SQLSpecError:
|
|
458
459
|
raise
|
|
459
460
|
except Exception as e:
|
|
460
461
|
logger.warning("Processing failed, using fallback: %s", e)
|
|
@@ -485,7 +486,7 @@ class SQL:
|
|
|
485
486
|
return new_sql
|
|
486
487
|
|
|
487
488
|
def copy(
|
|
488
|
-
self, statement: "
|
|
489
|
+
self, statement: "str | exp.Expression | None" = None, parameters: Any | None = None, **kwargs: Any
|
|
489
490
|
) -> "SQL":
|
|
490
491
|
"""Create copy with modifications.
|
|
491
492
|
|
|
@@ -530,7 +531,7 @@ class SQL:
|
|
|
530
531
|
new_sql._filters = self._filters.copy()
|
|
531
532
|
return new_sql
|
|
532
533
|
|
|
533
|
-
def where(self, condition: "
|
|
534
|
+
def where(self, condition: "str | exp.Expression") -> "SQL":
|
|
534
535
|
"""Add WHERE condition to the SQL statement.
|
|
535
536
|
|
|
536
537
|
Args:
|
|
@@ -623,7 +624,7 @@ class StatementConfig:
|
|
|
623
624
|
|
|
624
625
|
def __init__(
|
|
625
626
|
self,
|
|
626
|
-
parameter_config: "
|
|
627
|
+
parameter_config: "ParameterStyleConfig | None" = None,
|
|
627
628
|
enable_parsing: bool = True,
|
|
628
629
|
enable_validation: bool = True,
|
|
629
630
|
enable_transformations: bool = True,
|
|
@@ -631,14 +632,14 @@ class StatementConfig:
|
|
|
631
632
|
enable_expression_simplification: bool = False,
|
|
632
633
|
enable_parameter_type_wrapping: bool = True,
|
|
633
634
|
enable_caching: bool = True,
|
|
634
|
-
parameter_converter: "
|
|
635
|
-
parameter_validator: "
|
|
636
|
-
dialect: "
|
|
637
|
-
pre_process_steps: "
|
|
638
|
-
post_process_steps: "
|
|
639
|
-
execution_mode: "
|
|
640
|
-
execution_args: "
|
|
641
|
-
output_transformer: "
|
|
635
|
+
parameter_converter: "ParameterConverter | None" = None,
|
|
636
|
+
parameter_validator: "ParameterValidator | None" = None,
|
|
637
|
+
dialect: "DialectType | None" = None,
|
|
638
|
+
pre_process_steps: "list[Any] | None" = None,
|
|
639
|
+
post_process_steps: "list[Any] | None" = None,
|
|
640
|
+
execution_mode: "str | None" = None,
|
|
641
|
+
execution_args: "dict[str, Any] | None" = None,
|
|
642
|
+
output_transformer: "Callable[[str, Any], tuple[str, Any]] | None" = None,
|
|
642
643
|
) -> None:
|
|
643
644
|
"""Initialize StatementConfig.
|
|
644
645
|
|
|
@@ -805,4 +806,4 @@ def get_default_parameter_config() -> ParameterStyleConfig:
|
|
|
805
806
|
)
|
|
806
807
|
|
|
807
808
|
|
|
808
|
-
Statement: TypeAlias =
|
|
809
|
+
Statement: TypeAlias = str | exp.Expression | SQL
|
sqlspec/core/type_conversion.py
CHANGED
|
@@ -5,9 +5,10 @@ adapters, with MyPyC-compatible optimizations.
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
import re
|
|
8
|
+
from collections.abc import Callable
|
|
8
9
|
from datetime import date, datetime, time, timezone
|
|
9
10
|
from decimal import Decimal
|
|
10
|
-
from typing import Any,
|
|
11
|
+
from typing import Any, Final
|
|
11
12
|
from uuid import UUID
|
|
12
13
|
|
|
13
14
|
from sqlspec._serialization import decode_json
|
|
@@ -38,7 +39,7 @@ class BaseTypeConverter:
|
|
|
38
39
|
|
|
39
40
|
__slots__ = ()
|
|
40
41
|
|
|
41
|
-
def detect_type(self, value: str) ->
|
|
42
|
+
def detect_type(self, value: str) -> str | None:
|
|
42
43
|
"""Detect special types from string values.
|
|
43
44
|
|
|
44
45
|
Args:
|
sqlspec/driver/__init__.py
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"""Driver protocols and base classes for database adapters."""
|
|
2
2
|
|
|
3
|
-
from typing import Union
|
|
4
|
-
|
|
5
3
|
from sqlspec.driver import mixins
|
|
6
4
|
from sqlspec.driver._async import AsyncDataDictionaryBase, AsyncDriverAdapterBase
|
|
7
5
|
from sqlspec.driver._common import CommonDriverAttributesMixin, ExecutionResult, VersionInfo
|
|
@@ -19,4 +17,4 @@ __all__ = (
|
|
|
19
17
|
"mixins",
|
|
20
18
|
)
|
|
21
19
|
|
|
22
|
-
DriverAdapterProtocol =
|
|
20
|
+
DriverAdapterProtocol = SyncDriverAdapterBase | AsyncDriverAdapterBase
|