sqlspec 0.9.1__py3-none-any.whl → 0.10.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 +2 -1
- sqlspec/adapters/adbc/__init__.py +2 -1
- sqlspec/adapters/adbc/config.py +7 -13
- sqlspec/adapters/adbc/driver.py +37 -30
- sqlspec/adapters/aiosqlite/__init__.py +2 -1
- sqlspec/adapters/aiosqlite/config.py +10 -12
- sqlspec/adapters/aiosqlite/driver.py +36 -31
- sqlspec/adapters/asyncmy/__init__.py +2 -1
- sqlspec/adapters/asyncmy/driver.py +34 -31
- sqlspec/adapters/asyncpg/config.py +1 -3
- sqlspec/adapters/asyncpg/driver.py +7 -3
- sqlspec/adapters/bigquery/__init__.py +4 -0
- sqlspec/adapters/bigquery/config/__init__.py +3 -0
- sqlspec/adapters/bigquery/config/_common.py +40 -0
- sqlspec/adapters/bigquery/config/_sync.py +87 -0
- sqlspec/adapters/bigquery/driver.py +701 -0
- sqlspec/adapters/duckdb/__init__.py +2 -1
- sqlspec/adapters/duckdb/config.py +17 -18
- sqlspec/adapters/duckdb/driver.py +38 -30
- sqlspec/adapters/oracledb/__init__.py +8 -1
- sqlspec/adapters/oracledb/config/_asyncio.py +7 -8
- sqlspec/adapters/oracledb/config/_sync.py +6 -7
- sqlspec/adapters/oracledb/driver.py +65 -62
- sqlspec/adapters/psqlpy/__init__.py +9 -0
- sqlspec/adapters/psqlpy/config.py +5 -5
- sqlspec/adapters/psqlpy/driver.py +34 -28
- sqlspec/adapters/psycopg/__init__.py +8 -1
- sqlspec/adapters/psycopg/config/__init__.py +10 -0
- sqlspec/adapters/psycopg/config/_async.py +6 -7
- sqlspec/adapters/psycopg/config/_sync.py +7 -8
- sqlspec/adapters/psycopg/driver.py +63 -53
- sqlspec/adapters/sqlite/__init__.py +2 -1
- sqlspec/adapters/sqlite/config.py +12 -11
- sqlspec/adapters/sqlite/driver.py +36 -29
- sqlspec/base.py +1 -66
- sqlspec/exceptions.py +9 -0
- sqlspec/extensions/litestar/config.py +3 -11
- sqlspec/extensions/litestar/handlers.py +2 -1
- sqlspec/extensions/litestar/plugin.py +4 -2
- sqlspec/mixins.py +156 -0
- sqlspec/typing.py +19 -1
- {sqlspec-0.9.1.dist-info → sqlspec-0.10.0.dist-info}/METADATA +8 -3
- sqlspec-0.10.0.dist-info/RECORD +67 -0
- sqlspec-0.9.1.dist-info/RECORD +0 -61
- {sqlspec-0.9.1.dist-info → sqlspec-0.10.0.dist-info}/WHEEL +0 -0
- {sqlspec-0.9.1.dist-info → sqlspec-0.10.0.dist-info}/licenses/LICENSE +0 -0
- {sqlspec-0.9.1.dist-info → sqlspec-0.10.0.dist-info}/licenses/NOTICE +0 -0
sqlspec/__init__.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from sqlspec import adapters, base, exceptions, extensions, filters, typing, utils
|
|
1
|
+
from sqlspec import adapters, base, exceptions, extensions, filters, mixins, typing, utils
|
|
2
2
|
from sqlspec.__metadata__ import __version__
|
|
3
3
|
from sqlspec.base import SQLSpec
|
|
4
4
|
|
|
@@ -10,6 +10,7 @@ __all__ = (
|
|
|
10
10
|
"exceptions",
|
|
11
11
|
"extensions",
|
|
12
12
|
"filters",
|
|
13
|
+
"mixins",
|
|
13
14
|
"typing",
|
|
14
15
|
"utils",
|
|
15
16
|
)
|
sqlspec/adapters/adbc/config.py
CHANGED
|
@@ -2,9 +2,7 @@ from contextlib import contextmanager
|
|
|
2
2
|
from dataclasses import dataclass, field
|
|
3
3
|
from typing import TYPE_CHECKING, Any, Callable, Optional, Union, cast
|
|
4
4
|
|
|
5
|
-
from
|
|
6
|
-
|
|
7
|
-
from sqlspec.adapters.adbc.driver import AdbcDriver
|
|
5
|
+
from sqlspec.adapters.adbc.driver import AdbcConnection, AdbcDriver
|
|
8
6
|
from sqlspec.base import NoPoolSyncConfig
|
|
9
7
|
from sqlspec.exceptions import ImproperConfigurationError
|
|
10
8
|
from sqlspec.typing import Empty, EmptyType
|
|
@@ -18,7 +16,7 @@ __all__ = ("AdbcConfig",)
|
|
|
18
16
|
|
|
19
17
|
|
|
20
18
|
@dataclass
|
|
21
|
-
class AdbcConfig(NoPoolSyncConfig["
|
|
19
|
+
class AdbcConfig(NoPoolSyncConfig["AdbcConnection", "AdbcDriver"]):
|
|
22
20
|
"""Configuration for ADBC connections.
|
|
23
21
|
|
|
24
22
|
This class provides configuration options for ADBC database connections using the
|
|
@@ -33,20 +31,16 @@ class AdbcConfig(NoPoolSyncConfig["Connection", "AdbcDriver"]):
|
|
|
33
31
|
"""Additional database-specific connection parameters"""
|
|
34
32
|
conn_kwargs: "Optional[dict[str, Any]]" = None
|
|
35
33
|
"""Additional database-specific connection parameters"""
|
|
36
|
-
connection_type: "type[
|
|
34
|
+
connection_type: "type[AdbcConnection]" = field(init=False, default_factory=lambda: AdbcConnection)
|
|
37
35
|
"""Type of the connection object"""
|
|
38
36
|
driver_type: "type[AdbcDriver]" = field(init=False, default_factory=lambda: AdbcDriver) # type: ignore[type-abstract,unused-ignore]
|
|
39
37
|
"""Type of the driver object"""
|
|
40
|
-
pool_instance: None = field(init=False, default=None)
|
|
38
|
+
pool_instance: None = field(init=False, default=None, hash=False)
|
|
41
39
|
"""No connection pool is used for ADBC connections"""
|
|
42
|
-
_is_in_memory: bool = field(init=False, default=False)
|
|
43
|
-
"""Flag indicating if the connection is for an in-memory database"""
|
|
44
40
|
|
|
45
41
|
def _set_adbc(self) -> str: # noqa: PLR0912
|
|
46
42
|
"""Identify the driver type based on the URI (if provided) or preset driver name.
|
|
47
43
|
|
|
48
|
-
Also sets the `_is_in_memory` flag for specific in-memory URIs.
|
|
49
|
-
|
|
50
44
|
Raises:
|
|
51
45
|
ImproperConfigurationError: If the driver name is not recognized or supported.
|
|
52
46
|
|
|
@@ -143,7 +137,7 @@ class AdbcConfig(NoPoolSyncConfig["Connection", "AdbcDriver"]):
|
|
|
143
137
|
config["conn_kwargs"] = conn_kwargs
|
|
144
138
|
return config
|
|
145
139
|
|
|
146
|
-
def _get_connect_func(self) -> "Callable[...,
|
|
140
|
+
def _get_connect_func(self) -> "Callable[..., AdbcConnection]":
|
|
147
141
|
self._set_adbc()
|
|
148
142
|
driver_path = cast("str", self.driver_name)
|
|
149
143
|
try:
|
|
@@ -166,7 +160,7 @@ class AdbcConfig(NoPoolSyncConfig["Connection", "AdbcDriver"]):
|
|
|
166
160
|
raise ImproperConfigurationError(msg)
|
|
167
161
|
return connect_func # type: ignore[no-any-return]
|
|
168
162
|
|
|
169
|
-
def create_connection(self) -> "
|
|
163
|
+
def create_connection(self) -> "AdbcConnection":
|
|
170
164
|
"""Create and return a new database connection using the specific driver.
|
|
171
165
|
|
|
172
166
|
Returns:
|
|
@@ -189,7 +183,7 @@ class AdbcConfig(NoPoolSyncConfig["Connection", "AdbcDriver"]):
|
|
|
189
183
|
raise ImproperConfigurationError(msg) from e
|
|
190
184
|
|
|
191
185
|
@contextmanager
|
|
192
|
-
def provide_connection(self, *args: "Any", **kwargs: "Any") -> "Generator[
|
|
186
|
+
def provide_connection(self, *args: "Any", **kwargs: "Any") -> "Generator[AdbcConnection, None, None]":
|
|
193
187
|
"""Create and provide a database connection using the specific driver.
|
|
194
188
|
|
|
195
189
|
Yields:
|
sqlspec/adapters/adbc/driver.py
CHANGED
|
@@ -7,15 +7,16 @@ from typing import TYPE_CHECKING, Any, ClassVar, Optional, Union, cast, overload
|
|
|
7
7
|
|
|
8
8
|
from adbc_driver_manager.dbapi import Connection, Cursor
|
|
9
9
|
|
|
10
|
-
from sqlspec.base import
|
|
10
|
+
from sqlspec.base import SyncDriverAdapterProtocol
|
|
11
11
|
from sqlspec.exceptions import ParameterStyleMismatchError, SQLParsingError
|
|
12
|
+
from sqlspec.mixins import SQLTranslatorMixin, SyncArrowBulkOperationsMixin
|
|
12
13
|
from sqlspec.statement import SQLStatement
|
|
13
14
|
from sqlspec.typing import ArrowTable, StatementParameterType
|
|
14
15
|
|
|
15
16
|
if TYPE_CHECKING:
|
|
16
|
-
from sqlspec.typing import ArrowTable, ModelDTOT, StatementParameterType
|
|
17
|
+
from sqlspec.typing import ArrowTable, ModelDTOT, StatementParameterType, T
|
|
17
18
|
|
|
18
|
-
__all__ = ("AdbcDriver"
|
|
19
|
+
__all__ = ("AdbcConnection", "AdbcDriver")
|
|
19
20
|
|
|
20
21
|
logger = logging.getLogger("sqlspec")
|
|
21
22
|
|
|
@@ -32,20 +33,26 @@ PARAM_REGEX = re.compile(
|
|
|
32
33
|
re.VERBOSE | re.DOTALL,
|
|
33
34
|
)
|
|
34
35
|
|
|
36
|
+
AdbcConnection = Connection
|
|
35
37
|
|
|
36
|
-
|
|
38
|
+
|
|
39
|
+
class AdbcDriver(
|
|
40
|
+
SyncArrowBulkOperationsMixin["AdbcConnection"],
|
|
41
|
+
SQLTranslatorMixin["AdbcConnection"],
|
|
42
|
+
SyncDriverAdapterProtocol["AdbcConnection"],
|
|
43
|
+
):
|
|
37
44
|
"""ADBC Sync Driver Adapter."""
|
|
38
45
|
|
|
39
|
-
connection:
|
|
46
|
+
connection: AdbcConnection
|
|
40
47
|
__supports_arrow__: ClassVar[bool] = True
|
|
41
48
|
|
|
42
|
-
def __init__(self, connection: "
|
|
49
|
+
def __init__(self, connection: "AdbcConnection") -> None:
|
|
43
50
|
"""Initialize the ADBC driver adapter."""
|
|
44
51
|
self.connection = connection
|
|
45
52
|
self.dialect = self._get_dialect(connection)
|
|
46
53
|
|
|
47
54
|
@staticmethod
|
|
48
|
-
def _get_dialect(connection: "
|
|
55
|
+
def _get_dialect(connection: "AdbcConnection") -> str: # noqa: PLR0911
|
|
49
56
|
"""Get the database dialect based on the driver name.
|
|
50
57
|
|
|
51
58
|
Args:
|
|
@@ -70,11 +77,11 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
70
77
|
return "postgres" # default to postgresql dialect
|
|
71
78
|
|
|
72
79
|
@staticmethod
|
|
73
|
-
def _cursor(connection: "
|
|
80
|
+
def _cursor(connection: "AdbcConnection", *args: Any, **kwargs: Any) -> "Cursor":
|
|
74
81
|
return connection.cursor(*args, **kwargs)
|
|
75
82
|
|
|
76
83
|
@contextmanager
|
|
77
|
-
def _with_cursor(self, connection: "
|
|
84
|
+
def _with_cursor(self, connection: "AdbcConnection") -> Generator["Cursor", None, None]:
|
|
78
85
|
cursor = self._cursor(connection)
|
|
79
86
|
try:
|
|
80
87
|
yield cursor
|
|
@@ -167,7 +174,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
167
174
|
parameters: "Optional[StatementParameterType]" = None,
|
|
168
175
|
/,
|
|
169
176
|
*,
|
|
170
|
-
connection: "Optional[
|
|
177
|
+
connection: "Optional[AdbcConnection]" = None,
|
|
171
178
|
schema_type: None = None,
|
|
172
179
|
**kwargs: Any,
|
|
173
180
|
) -> "Sequence[dict[str, Any]]": ...
|
|
@@ -178,7 +185,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
178
185
|
parameters: "Optional[StatementParameterType]" = None,
|
|
179
186
|
/,
|
|
180
187
|
*,
|
|
181
|
-
connection: "Optional[
|
|
188
|
+
connection: "Optional[AdbcConnection]" = None,
|
|
182
189
|
schema_type: "type[ModelDTOT]",
|
|
183
190
|
**kwargs: Any,
|
|
184
191
|
) -> "Sequence[ModelDTOT]": ...
|
|
@@ -188,7 +195,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
188
195
|
parameters: Optional["StatementParameterType"] = None,
|
|
189
196
|
/,
|
|
190
197
|
*,
|
|
191
|
-
connection: Optional["
|
|
198
|
+
connection: Optional["AdbcConnection"] = None,
|
|
192
199
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
193
200
|
**kwargs: Any,
|
|
194
201
|
) -> "Sequence[Union[ModelDTOT, dict[str, Any]]]":
|
|
@@ -218,7 +225,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
218
225
|
parameters: "Optional[StatementParameterType]" = None,
|
|
219
226
|
/,
|
|
220
227
|
*,
|
|
221
|
-
connection: "Optional[
|
|
228
|
+
connection: "Optional[AdbcConnection]" = None,
|
|
222
229
|
schema_type: None = None,
|
|
223
230
|
**kwargs: Any,
|
|
224
231
|
) -> "dict[str, Any]": ...
|
|
@@ -229,7 +236,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
229
236
|
parameters: "Optional[StatementParameterType]" = None,
|
|
230
237
|
/,
|
|
231
238
|
*,
|
|
232
|
-
connection: "Optional[
|
|
239
|
+
connection: "Optional[AdbcConnection]" = None,
|
|
233
240
|
schema_type: "type[ModelDTOT]",
|
|
234
241
|
**kwargs: Any,
|
|
235
242
|
) -> "ModelDTOT": ...
|
|
@@ -239,7 +246,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
239
246
|
parameters: Optional["StatementParameterType"] = None,
|
|
240
247
|
/,
|
|
241
248
|
*,
|
|
242
|
-
connection: Optional["
|
|
249
|
+
connection: Optional["AdbcConnection"] = None,
|
|
243
250
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
244
251
|
**kwargs: Any,
|
|
245
252
|
) -> "Union[ModelDTOT, dict[str, Any]]":
|
|
@@ -266,7 +273,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
266
273
|
parameters: "Optional[StatementParameterType]" = None,
|
|
267
274
|
/,
|
|
268
275
|
*,
|
|
269
|
-
connection: "Optional[
|
|
276
|
+
connection: "Optional[AdbcConnection]" = None,
|
|
270
277
|
schema_type: None = None,
|
|
271
278
|
**kwargs: Any,
|
|
272
279
|
) -> "Optional[dict[str, Any]]": ...
|
|
@@ -277,7 +284,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
277
284
|
parameters: "Optional[StatementParameterType]" = None,
|
|
278
285
|
/,
|
|
279
286
|
*,
|
|
280
|
-
connection: "Optional[
|
|
287
|
+
connection: "Optional[AdbcConnection]" = None,
|
|
281
288
|
schema_type: "type[ModelDTOT]",
|
|
282
289
|
**kwargs: Any,
|
|
283
290
|
) -> "Optional[ModelDTOT]": ...
|
|
@@ -287,7 +294,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
287
294
|
parameters: Optional["StatementParameterType"] = None,
|
|
288
295
|
/,
|
|
289
296
|
*,
|
|
290
|
-
connection: Optional["
|
|
297
|
+
connection: Optional["AdbcConnection"] = None,
|
|
291
298
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
292
299
|
**kwargs: Any,
|
|
293
300
|
) -> "Optional[Union[ModelDTOT, dict[str, Any]]]":
|
|
@@ -315,7 +322,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
315
322
|
parameters: "Optional[StatementParameterType]" = None,
|
|
316
323
|
/,
|
|
317
324
|
*,
|
|
318
|
-
connection: "Optional[
|
|
325
|
+
connection: "Optional[AdbcConnection]" = None,
|
|
319
326
|
schema_type: None = None,
|
|
320
327
|
**kwargs: Any,
|
|
321
328
|
) -> "Any": ...
|
|
@@ -326,7 +333,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
326
333
|
parameters: "Optional[StatementParameterType]" = None,
|
|
327
334
|
/,
|
|
328
335
|
*,
|
|
329
|
-
connection: "Optional[
|
|
336
|
+
connection: "Optional[AdbcConnection]" = None,
|
|
330
337
|
schema_type: "type[T]",
|
|
331
338
|
**kwargs: Any,
|
|
332
339
|
) -> "T": ...
|
|
@@ -336,7 +343,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
336
343
|
parameters: Optional["StatementParameterType"] = None,
|
|
337
344
|
/,
|
|
338
345
|
*,
|
|
339
|
-
connection: Optional["
|
|
346
|
+
connection: Optional["AdbcConnection"] = None,
|
|
340
347
|
schema_type: "Optional[type[T]]" = None,
|
|
341
348
|
**kwargs: Any,
|
|
342
349
|
) -> "Union[T, Any]":
|
|
@@ -362,7 +369,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
362
369
|
parameters: "Optional[StatementParameterType]" = None,
|
|
363
370
|
/,
|
|
364
371
|
*,
|
|
365
|
-
connection: "Optional[
|
|
372
|
+
connection: "Optional[AdbcConnection]" = None,
|
|
366
373
|
schema_type: None = None,
|
|
367
374
|
**kwargs: Any,
|
|
368
375
|
) -> "Optional[Any]": ...
|
|
@@ -373,7 +380,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
373
380
|
parameters: "Optional[StatementParameterType]" = None,
|
|
374
381
|
/,
|
|
375
382
|
*,
|
|
376
|
-
connection: "Optional[
|
|
383
|
+
connection: "Optional[AdbcConnection]" = None,
|
|
377
384
|
schema_type: "type[T]",
|
|
378
385
|
**kwargs: Any,
|
|
379
386
|
) -> "Optional[T]": ...
|
|
@@ -383,7 +390,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
383
390
|
parameters: Optional["StatementParameterType"] = None,
|
|
384
391
|
/,
|
|
385
392
|
*,
|
|
386
|
-
connection: Optional["
|
|
393
|
+
connection: Optional["AdbcConnection"] = None,
|
|
387
394
|
schema_type: "Optional[type[T]]" = None,
|
|
388
395
|
**kwargs: Any,
|
|
389
396
|
) -> "Optional[Union[T, Any]]":
|
|
@@ -409,7 +416,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
409
416
|
parameters: Optional["StatementParameterType"] = None,
|
|
410
417
|
/,
|
|
411
418
|
*,
|
|
412
|
-
connection: Optional["
|
|
419
|
+
connection: Optional["AdbcConnection"] = None,
|
|
413
420
|
**kwargs: Any,
|
|
414
421
|
) -> int:
|
|
415
422
|
"""Insert, update, or delete data from the database.
|
|
@@ -431,7 +438,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
431
438
|
parameters: "Optional[StatementParameterType]" = None,
|
|
432
439
|
/,
|
|
433
440
|
*,
|
|
434
|
-
connection: "Optional[
|
|
441
|
+
connection: "Optional[AdbcConnection]" = None,
|
|
435
442
|
schema_type: None = None,
|
|
436
443
|
**kwargs: Any,
|
|
437
444
|
) -> "dict[str, Any]": ...
|
|
@@ -442,7 +449,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
442
449
|
parameters: "Optional[StatementParameterType]" = None,
|
|
443
450
|
/,
|
|
444
451
|
*,
|
|
445
|
-
connection: "Optional[
|
|
452
|
+
connection: "Optional[AdbcConnection]" = None,
|
|
446
453
|
schema_type: "type[ModelDTOT]",
|
|
447
454
|
**kwargs: Any,
|
|
448
455
|
) -> "ModelDTOT": ...
|
|
@@ -452,7 +459,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
452
459
|
parameters: Optional["StatementParameterType"] = None,
|
|
453
460
|
/,
|
|
454
461
|
*,
|
|
455
|
-
connection: Optional["
|
|
462
|
+
connection: Optional["AdbcConnection"] = None,
|
|
456
463
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
457
464
|
**kwargs: Any,
|
|
458
465
|
) -> "Optional[Union[dict[str, Any], ModelDTOT]]":
|
|
@@ -485,7 +492,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
485
492
|
parameters: Optional["StatementParameterType"] = None,
|
|
486
493
|
/,
|
|
487
494
|
*,
|
|
488
|
-
connection: Optional["
|
|
495
|
+
connection: Optional["AdbcConnection"] = None,
|
|
489
496
|
**kwargs: Any,
|
|
490
497
|
) -> str:
|
|
491
498
|
"""Execute a script.
|
|
@@ -508,7 +515,7 @@ class AdbcDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterPr
|
|
|
508
515
|
parameters: "Optional[StatementParameterType]" = None,
|
|
509
516
|
/,
|
|
510
517
|
*,
|
|
511
|
-
connection: "Optional[
|
|
518
|
+
connection: "Optional[AdbcConnection]" = None,
|
|
512
519
|
**kwargs: Any,
|
|
513
520
|
) -> "ArrowTable":
|
|
514
521
|
"""Execute a SQL query and return results as an Apache Arrow Table.
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from sqlspec.adapters.aiosqlite.config import AiosqliteConfig
|
|
2
|
-
from sqlspec.adapters.aiosqlite.driver import AiosqliteDriver
|
|
2
|
+
from sqlspec.adapters.aiosqlite.driver import AiosqliteConnection, AiosqliteDriver
|
|
3
3
|
|
|
4
4
|
__all__ = (
|
|
5
5
|
"AiosqliteConfig",
|
|
6
|
+
"AiosqliteConnection",
|
|
6
7
|
"AiosqliteDriver",
|
|
7
8
|
)
|
|
@@ -2,16 +2,15 @@ from contextlib import asynccontextmanager
|
|
|
2
2
|
from dataclasses import dataclass, field
|
|
3
3
|
from typing import TYPE_CHECKING, Any, Optional, Union
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
import aiosqlite
|
|
6
6
|
|
|
7
|
-
from sqlspec.adapters.aiosqlite.driver import AiosqliteDriver
|
|
7
|
+
from sqlspec.adapters.aiosqlite.driver import AiosqliteConnection, AiosqliteDriver
|
|
8
8
|
from sqlspec.base import NoPoolAsyncConfig
|
|
9
9
|
from sqlspec.exceptions import ImproperConfigurationError
|
|
10
10
|
from sqlspec.typing import Empty, EmptyType, dataclass_to_dict
|
|
11
11
|
|
|
12
12
|
if TYPE_CHECKING:
|
|
13
13
|
from collections.abc import AsyncGenerator
|
|
14
|
-
from sqlite3 import Connection as SQLite3Connection
|
|
15
14
|
from typing import Literal
|
|
16
15
|
|
|
17
16
|
|
|
@@ -19,7 +18,7 @@ __all__ = ("AiosqliteConfig",)
|
|
|
19
18
|
|
|
20
19
|
|
|
21
20
|
@dataclass
|
|
22
|
-
class AiosqliteConfig(NoPoolAsyncConfig["
|
|
21
|
+
class AiosqliteConfig(NoPoolAsyncConfig["AiosqliteConnection", "AiosqliteDriver"]):
|
|
23
22
|
"""Configuration for Aiosqlite database connections.
|
|
24
23
|
|
|
25
24
|
This class provides configuration options for Aiosqlite database connections, wrapping all parameters
|
|
@@ -38,13 +37,11 @@ class AiosqliteConfig(NoPoolAsyncConfig["Connection", "AiosqliteDriver"]):
|
|
|
38
37
|
"""The isolation_level of the connection. This can be None for autocommit mode or one of "DEFERRED", "IMMEDIATE" or "EXCLUSIVE"."""
|
|
39
38
|
check_same_thread: "Union[bool, EmptyType]" = field(default=Empty)
|
|
40
39
|
"""If True (default), ProgrammingError is raised if the database connection is used by a thread other than the one that created it. If False, the connection may be shared across multiple threads."""
|
|
41
|
-
factory: "Union[type[SQLite3Connection], EmptyType]" = field(default=Empty)
|
|
42
|
-
"""A custom Connection class factory. If given, must be a callable that returns a Connection instance."""
|
|
43
40
|
cached_statements: "Union[int, EmptyType]" = field(default=Empty)
|
|
44
41
|
"""The number of statements that SQLite will cache for this connection. The default is 128."""
|
|
45
42
|
uri: "Union[bool, EmptyType]" = field(default=Empty)
|
|
46
43
|
"""If set to True, database is interpreted as a URI with supported options."""
|
|
47
|
-
connection_type: "type[
|
|
44
|
+
connection_type: "type[AiosqliteConnection]" = field(init=False, default_factory=lambda: AiosqliteConnection)
|
|
48
45
|
"""Type of the connection object"""
|
|
49
46
|
driver_type: "type[AiosqliteDriver]" = field(init=False, default_factory=lambda: AiosqliteDriver) # type: ignore[type-abstract,unused-ignore]
|
|
50
47
|
"""Type of the driver object"""
|
|
@@ -57,10 +54,13 @@ class AiosqliteConfig(NoPoolAsyncConfig["Connection", "AiosqliteDriver"]):
|
|
|
57
54
|
A string keyed dict of config kwargs for the aiosqlite.connect() function.
|
|
58
55
|
"""
|
|
59
56
|
return dataclass_to_dict(
|
|
60
|
-
self,
|
|
57
|
+
self,
|
|
58
|
+
exclude_empty=True,
|
|
59
|
+
convert_nested=False,
|
|
60
|
+
exclude={"pool_instance", "connection_type", "driver_type"},
|
|
61
61
|
)
|
|
62
62
|
|
|
63
|
-
async def create_connection(self) -> "
|
|
63
|
+
async def create_connection(self) -> "AiosqliteConnection":
|
|
64
64
|
"""Create and return a new database connection.
|
|
65
65
|
|
|
66
66
|
Returns:
|
|
@@ -69,8 +69,6 @@ class AiosqliteConfig(NoPoolAsyncConfig["Connection", "AiosqliteDriver"]):
|
|
|
69
69
|
Raises:
|
|
70
70
|
ImproperConfigurationError: If the connection could not be established.
|
|
71
71
|
"""
|
|
72
|
-
import aiosqlite
|
|
73
|
-
|
|
74
72
|
try:
|
|
75
73
|
return await aiosqlite.connect(**self.connection_config_dict)
|
|
76
74
|
except Exception as e:
|
|
@@ -78,7 +76,7 @@ class AiosqliteConfig(NoPoolAsyncConfig["Connection", "AiosqliteDriver"]):
|
|
|
78
76
|
raise ImproperConfigurationError(msg) from e
|
|
79
77
|
|
|
80
78
|
@asynccontextmanager
|
|
81
|
-
async def provide_connection(self, *args: "Any", **kwargs: "Any") -> "AsyncGenerator[
|
|
79
|
+
async def provide_connection(self, *args: "Any", **kwargs: "Any") -> "AsyncGenerator[AiosqliteConnection, None]":
|
|
82
80
|
"""Create and provide a database connection.
|
|
83
81
|
|
|
84
82
|
Yields:
|
|
@@ -1,33 +1,38 @@
|
|
|
1
1
|
from contextlib import asynccontextmanager
|
|
2
2
|
from typing import TYPE_CHECKING, Any, Optional, Union, cast, overload
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
import aiosqlite
|
|
5
|
+
|
|
6
|
+
from sqlspec.base import AsyncDriverAdapterProtocol
|
|
7
|
+
from sqlspec.mixins import SQLTranslatorMixin
|
|
5
8
|
|
|
6
9
|
if TYPE_CHECKING:
|
|
7
10
|
from collections.abc import AsyncGenerator, Sequence
|
|
8
11
|
|
|
9
|
-
from
|
|
10
|
-
|
|
11
|
-
from sqlspec.typing import ModelDTOT, StatementParameterType
|
|
12
|
+
from sqlspec.typing import ModelDTOT, StatementParameterType, T
|
|
12
13
|
|
|
13
|
-
__all__ = ("AiosqliteDriver"
|
|
14
|
+
__all__ = ("AiosqliteConnection", "AiosqliteDriver")
|
|
15
|
+
AiosqliteConnection = aiosqlite.Connection
|
|
14
16
|
|
|
15
17
|
|
|
16
|
-
class AiosqliteDriver(
|
|
18
|
+
class AiosqliteDriver(
|
|
19
|
+
SQLTranslatorMixin["AiosqliteConnection"],
|
|
20
|
+
AsyncDriverAdapterProtocol["AiosqliteConnection"],
|
|
21
|
+
):
|
|
17
22
|
"""SQLite Async Driver Adapter."""
|
|
18
23
|
|
|
19
|
-
connection: "
|
|
24
|
+
connection: "AiosqliteConnection"
|
|
20
25
|
dialect: str = "sqlite"
|
|
21
26
|
|
|
22
|
-
def __init__(self, connection: "
|
|
27
|
+
def __init__(self, connection: "AiosqliteConnection") -> None:
|
|
23
28
|
self.connection = connection
|
|
24
29
|
|
|
25
30
|
@staticmethod
|
|
26
|
-
async def _cursor(connection: "
|
|
31
|
+
async def _cursor(connection: "AiosqliteConnection", *args: Any, **kwargs: Any) -> "aiosqlite.Cursor":
|
|
27
32
|
return await connection.cursor(*args, **kwargs)
|
|
28
33
|
|
|
29
34
|
@asynccontextmanager
|
|
30
|
-
async def _with_cursor(self, connection: "
|
|
35
|
+
async def _with_cursor(self, connection: "AiosqliteConnection") -> "AsyncGenerator[aiosqlite.Cursor, None]":
|
|
31
36
|
cursor = await self._cursor(connection)
|
|
32
37
|
try:
|
|
33
38
|
yield cursor
|
|
@@ -42,7 +47,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
42
47
|
parameters: "Optional[StatementParameterType]" = None,
|
|
43
48
|
/,
|
|
44
49
|
*,
|
|
45
|
-
connection: "Optional[
|
|
50
|
+
connection: "Optional[AiosqliteConnection]" = None,
|
|
46
51
|
schema_type: None = None,
|
|
47
52
|
**kwargs: Any,
|
|
48
53
|
) -> "Sequence[dict[str, Any]]": ...
|
|
@@ -53,7 +58,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
53
58
|
parameters: "Optional[StatementParameterType]" = None,
|
|
54
59
|
/,
|
|
55
60
|
*,
|
|
56
|
-
connection: "Optional[
|
|
61
|
+
connection: "Optional[AiosqliteConnection]" = None,
|
|
57
62
|
schema_type: "type[ModelDTOT]",
|
|
58
63
|
**kwargs: Any,
|
|
59
64
|
) -> "Sequence[ModelDTOT]": ...
|
|
@@ -63,7 +68,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
63
68
|
parameters: Optional["StatementParameterType"] = None,
|
|
64
69
|
/,
|
|
65
70
|
*,
|
|
66
|
-
connection: Optional["
|
|
71
|
+
connection: Optional["AiosqliteConnection"] = None,
|
|
67
72
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
68
73
|
**kwargs: Any,
|
|
69
74
|
) -> "Sequence[Union[ModelDTOT, dict[str, Any]]]":
|
|
@@ -91,7 +96,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
91
96
|
parameters: "Optional[StatementParameterType]" = None,
|
|
92
97
|
/,
|
|
93
98
|
*,
|
|
94
|
-
connection: "Optional[
|
|
99
|
+
connection: "Optional[AiosqliteConnection]" = None,
|
|
95
100
|
schema_type: None = None,
|
|
96
101
|
**kwargs: Any,
|
|
97
102
|
) -> "dict[str, Any]": ...
|
|
@@ -102,7 +107,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
102
107
|
parameters: "Optional[StatementParameterType]" = None,
|
|
103
108
|
/,
|
|
104
109
|
*,
|
|
105
|
-
connection: "Optional[
|
|
110
|
+
connection: "Optional[AiosqliteConnection]" = None,
|
|
106
111
|
schema_type: "type[ModelDTOT]",
|
|
107
112
|
**kwargs: Any,
|
|
108
113
|
) -> "ModelDTOT": ...
|
|
@@ -112,7 +117,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
112
117
|
parameters: Optional["StatementParameterType"] = None,
|
|
113
118
|
/,
|
|
114
119
|
*,
|
|
115
|
-
connection: Optional["
|
|
120
|
+
connection: Optional["AiosqliteConnection"] = None,
|
|
116
121
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
117
122
|
**kwargs: Any,
|
|
118
123
|
) -> "Union[ModelDTOT, dict[str, Any]]":
|
|
@@ -139,7 +144,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
139
144
|
parameters: "Optional[StatementParameterType]" = None,
|
|
140
145
|
/,
|
|
141
146
|
*,
|
|
142
|
-
connection: "Optional[
|
|
147
|
+
connection: "Optional[AiosqliteConnection]" = None,
|
|
143
148
|
schema_type: None = None,
|
|
144
149
|
**kwargs: Any,
|
|
145
150
|
) -> "Optional[dict[str, Any]]": ...
|
|
@@ -150,7 +155,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
150
155
|
parameters: "Optional[StatementParameterType]" = None,
|
|
151
156
|
/,
|
|
152
157
|
*,
|
|
153
|
-
connection: "Optional[
|
|
158
|
+
connection: "Optional[AiosqliteConnection]" = None,
|
|
154
159
|
schema_type: "type[ModelDTOT]",
|
|
155
160
|
**kwargs: Any,
|
|
156
161
|
) -> "Optional[ModelDTOT]": ...
|
|
@@ -160,7 +165,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
160
165
|
parameters: Optional["StatementParameterType"] = None,
|
|
161
166
|
/,
|
|
162
167
|
*,
|
|
163
|
-
connection: Optional["
|
|
168
|
+
connection: Optional["AiosqliteConnection"] = None,
|
|
164
169
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
165
170
|
**kwargs: Any,
|
|
166
171
|
) -> "Optional[Union[ModelDTOT, dict[str, Any]]]":
|
|
@@ -188,7 +193,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
188
193
|
parameters: "Optional[StatementParameterType]" = None,
|
|
189
194
|
/,
|
|
190
195
|
*,
|
|
191
|
-
connection: "Optional[
|
|
196
|
+
connection: "Optional[AiosqliteConnection]" = None,
|
|
192
197
|
schema_type: None = None,
|
|
193
198
|
**kwargs: Any,
|
|
194
199
|
) -> "Any": ...
|
|
@@ -199,7 +204,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
199
204
|
parameters: "Optional[StatementParameterType]" = None,
|
|
200
205
|
/,
|
|
201
206
|
*,
|
|
202
|
-
connection: "Optional[
|
|
207
|
+
connection: "Optional[AiosqliteConnection]" = None,
|
|
203
208
|
schema_type: "type[T]",
|
|
204
209
|
**kwargs: Any,
|
|
205
210
|
) -> "T": ...
|
|
@@ -209,7 +214,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
209
214
|
parameters: "Optional[StatementParameterType]" = None,
|
|
210
215
|
/,
|
|
211
216
|
*,
|
|
212
|
-
connection: "Optional[
|
|
217
|
+
connection: "Optional[AiosqliteConnection]" = None,
|
|
213
218
|
schema_type: "Optional[type[T]]" = None,
|
|
214
219
|
**kwargs: Any,
|
|
215
220
|
) -> "Union[T, Any]":
|
|
@@ -235,7 +240,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
235
240
|
parameters: "Optional[StatementParameterType]" = None,
|
|
236
241
|
/,
|
|
237
242
|
*,
|
|
238
|
-
connection: "Optional[
|
|
243
|
+
connection: "Optional[AiosqliteConnection]" = None,
|
|
239
244
|
schema_type: None = None,
|
|
240
245
|
**kwargs: Any,
|
|
241
246
|
) -> "Optional[Any]": ...
|
|
@@ -246,7 +251,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
246
251
|
parameters: "Optional[StatementParameterType]" = None,
|
|
247
252
|
/,
|
|
248
253
|
*,
|
|
249
|
-
connection: "Optional[
|
|
254
|
+
connection: "Optional[AiosqliteConnection]" = None,
|
|
250
255
|
schema_type: "type[T]",
|
|
251
256
|
**kwargs: Any,
|
|
252
257
|
) -> "Optional[T]": ...
|
|
@@ -256,7 +261,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
256
261
|
parameters: "Optional[StatementParameterType]" = None,
|
|
257
262
|
/,
|
|
258
263
|
*,
|
|
259
|
-
connection: "Optional[
|
|
264
|
+
connection: "Optional[AiosqliteConnection]" = None,
|
|
260
265
|
schema_type: "Optional[type[T]]" = None,
|
|
261
266
|
**kwargs: Any,
|
|
262
267
|
) -> "Optional[Union[T, Any]]":
|
|
@@ -282,7 +287,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
282
287
|
parameters: Optional["StatementParameterType"] = None,
|
|
283
288
|
/,
|
|
284
289
|
*,
|
|
285
|
-
connection: Optional["
|
|
290
|
+
connection: Optional["AiosqliteConnection"] = None,
|
|
286
291
|
**kwargs: Any,
|
|
287
292
|
) -> int:
|
|
288
293
|
"""Insert, update, or delete data from the database.
|
|
@@ -304,7 +309,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
304
309
|
parameters: "Optional[StatementParameterType]" = None,
|
|
305
310
|
/,
|
|
306
311
|
*,
|
|
307
|
-
connection: "Optional[
|
|
312
|
+
connection: "Optional[AiosqliteConnection]" = None,
|
|
308
313
|
schema_type: None = None,
|
|
309
314
|
**kwargs: Any,
|
|
310
315
|
) -> "dict[str, Any]": ...
|
|
@@ -315,7 +320,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
315
320
|
parameters: "Optional[StatementParameterType]" = None,
|
|
316
321
|
/,
|
|
317
322
|
*,
|
|
318
|
-
connection: "Optional[
|
|
323
|
+
connection: "Optional[AiosqliteConnection]" = None,
|
|
319
324
|
schema_type: "type[ModelDTOT]",
|
|
320
325
|
**kwargs: Any,
|
|
321
326
|
) -> "ModelDTOT": ...
|
|
@@ -325,7 +330,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
325
330
|
parameters: Optional["StatementParameterType"] = None,
|
|
326
331
|
/,
|
|
327
332
|
*,
|
|
328
|
-
connection: Optional["
|
|
333
|
+
connection: Optional["AiosqliteConnection"] = None,
|
|
329
334
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
330
335
|
**kwargs: Any,
|
|
331
336
|
) -> "Optional[Union[dict[str, Any], ModelDTOT]]":
|
|
@@ -353,7 +358,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
353
358
|
parameters: Optional["StatementParameterType"] = None,
|
|
354
359
|
/,
|
|
355
360
|
*,
|
|
356
|
-
connection: Optional["
|
|
361
|
+
connection: Optional["AiosqliteConnection"] = None,
|
|
357
362
|
**kwargs: Any,
|
|
358
363
|
) -> str:
|
|
359
364
|
"""Execute a script.
|
|
@@ -374,7 +379,7 @@ class AiosqliteDriver(AsyncDriverAdapterProtocol["Connection"]):
|
|
|
374
379
|
parameters: Optional["StatementParameterType"] = None,
|
|
375
380
|
/,
|
|
376
381
|
*,
|
|
377
|
-
connection: Optional["
|
|
382
|
+
connection: Optional["AiosqliteConnection"] = None,
|
|
378
383
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
379
384
|
**kwargs: Any,
|
|
380
385
|
) -> "Optional[Union[dict[str, Any], ModelDTOT]]":
|