sqlspec 0.8.0__py3-none-any.whl → 0.9.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/_typing.py +39 -6
- sqlspec/adapters/adbc/__init__.py +2 -2
- sqlspec/adapters/adbc/config.py +34 -11
- sqlspec/adapters/adbc/driver.py +167 -108
- sqlspec/adapters/aiosqlite/__init__.py +2 -2
- sqlspec/adapters/aiosqlite/config.py +2 -2
- sqlspec/adapters/aiosqlite/driver.py +28 -39
- sqlspec/adapters/asyncmy/__init__.py +3 -3
- sqlspec/adapters/asyncmy/config.py +11 -12
- sqlspec/adapters/asyncmy/driver.py +25 -34
- sqlspec/adapters/asyncpg/__init__.py +5 -5
- sqlspec/adapters/asyncpg/config.py +17 -19
- sqlspec/adapters/asyncpg/driver.py +249 -93
- sqlspec/adapters/duckdb/__init__.py +2 -2
- sqlspec/adapters/duckdb/config.py +2 -2
- sqlspec/adapters/duckdb/driver.py +49 -49
- sqlspec/adapters/oracledb/__init__.py +8 -8
- sqlspec/adapters/oracledb/config/__init__.py +6 -6
- sqlspec/adapters/oracledb/config/_asyncio.py +9 -10
- sqlspec/adapters/oracledb/config/_sync.py +8 -9
- sqlspec/adapters/oracledb/driver.py +114 -41
- sqlspec/adapters/psqlpy/__init__.py +0 -0
- sqlspec/adapters/psqlpy/config.py +258 -0
- sqlspec/adapters/psqlpy/driver.py +335 -0
- sqlspec/adapters/psycopg/__init__.py +10 -5
- sqlspec/adapters/psycopg/config/__init__.py +6 -6
- sqlspec/adapters/psycopg/config/_async.py +12 -12
- sqlspec/adapters/psycopg/config/_sync.py +13 -13
- sqlspec/adapters/psycopg/driver.py +180 -218
- sqlspec/adapters/sqlite/__init__.py +2 -2
- sqlspec/adapters/sqlite/config.py +2 -2
- sqlspec/adapters/sqlite/driver.py +43 -41
- sqlspec/base.py +275 -153
- sqlspec/exceptions.py +30 -0
- sqlspec/extensions/litestar/config.py +6 -0
- sqlspec/extensions/litestar/handlers.py +25 -0
- sqlspec/extensions/litestar/plugin.py +6 -1
- sqlspec/statement.py +373 -0
- sqlspec/typing.py +10 -1
- {sqlspec-0.8.0.dist-info → sqlspec-0.9.0.dist-info}/METADATA +4 -1
- sqlspec-0.9.0.dist-info/RECORD +61 -0
- sqlspec-0.8.0.dist-info/RECORD +0 -57
- {sqlspec-0.8.0.dist-info → sqlspec-0.9.0.dist-info}/WHEEL +0 -0
- {sqlspec-0.8.0.dist-info → sqlspec-0.9.0.dist-info}/licenses/LICENSE +0 -0
- {sqlspec-0.8.0.dist-info → sqlspec-0.9.0.dist-info}/licenses/NOTICE +0 -0
|
@@ -1,22 +1,31 @@
|
|
|
1
1
|
from contextlib import asynccontextmanager, contextmanager
|
|
2
2
|
from typing import TYPE_CHECKING, Any, Optional, Union, cast
|
|
3
3
|
|
|
4
|
-
from sqlspec.base import
|
|
4
|
+
from sqlspec.base import (
|
|
5
|
+
AsyncArrowBulkOperationsMixin,
|
|
6
|
+
AsyncDriverAdapterProtocol,
|
|
7
|
+
SyncArrowBulkOperationsMixin,
|
|
8
|
+
SyncDriverAdapterProtocol,
|
|
9
|
+
T,
|
|
10
|
+
)
|
|
11
|
+
from sqlspec.typing import ArrowTable, StatementParameterType
|
|
5
12
|
|
|
6
13
|
if TYPE_CHECKING:
|
|
7
14
|
from collections.abc import AsyncGenerator, Generator
|
|
8
15
|
|
|
9
16
|
from oracledb import AsyncConnection, AsyncCursor, Connection, Cursor
|
|
10
17
|
|
|
11
|
-
|
|
18
|
+
# Conditionally import ArrowTable for type checking
|
|
19
|
+
from sqlspec.typing import ModelDTOT
|
|
12
20
|
|
|
13
21
|
__all__ = ("OracleAsyncDriver", "OracleSyncDriver")
|
|
14
22
|
|
|
15
23
|
|
|
16
|
-
class OracleSyncDriver(SyncDriverAdapterProtocol["Connection"]):
|
|
24
|
+
class OracleSyncDriver(SyncArrowBulkOperationsMixin["Connection"], SyncDriverAdapterProtocol["Connection"]):
|
|
17
25
|
"""Oracle Sync Driver Adapter."""
|
|
18
26
|
|
|
19
27
|
connection: "Connection"
|
|
28
|
+
dialect: str = "oracle"
|
|
20
29
|
|
|
21
30
|
def __init__(self, connection: "Connection") -> None:
|
|
22
31
|
self.connection = connection
|
|
@@ -35,16 +44,25 @@ class OracleSyncDriver(SyncDriverAdapterProtocol["Connection"]):
|
|
|
35
44
|
sql: str,
|
|
36
45
|
parameters: "Optional[StatementParameterType]" = None,
|
|
37
46
|
/,
|
|
47
|
+
*,
|
|
38
48
|
connection: "Optional[Connection]" = None,
|
|
39
49
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
50
|
+
**kwargs: Any,
|
|
40
51
|
) -> "list[Union[ModelDTOT, dict[str, Any]]]":
|
|
41
52
|
"""Fetch data from the database.
|
|
42
53
|
|
|
54
|
+
Args:
|
|
55
|
+
sql: The SQL query string.
|
|
56
|
+
parameters: The parameters for the query (dict, tuple, list, or None).
|
|
57
|
+
connection: Optional connection override.
|
|
58
|
+
schema_type: Optional schema class for the result.
|
|
59
|
+
**kwargs: Additional keyword arguments to merge with parameters if parameters is a dict.
|
|
60
|
+
|
|
43
61
|
Returns:
|
|
44
62
|
List of row data as either model instances or dictionaries.
|
|
45
63
|
"""
|
|
46
64
|
connection = self._connection(connection)
|
|
47
|
-
sql, parameters = self._process_sql_params(sql, parameters)
|
|
65
|
+
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
48
66
|
with self._with_cursor(connection) as cursor:
|
|
49
67
|
cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
|
|
50
68
|
results = cursor.fetchall() # pyright: ignore[reportUnknownMemberType, reportUnknownVariableType]
|
|
@@ -63,16 +81,25 @@ class OracleSyncDriver(SyncDriverAdapterProtocol["Connection"]):
|
|
|
63
81
|
sql: str,
|
|
64
82
|
parameters: "Optional[StatementParameterType]" = None,
|
|
65
83
|
/,
|
|
84
|
+
*,
|
|
66
85
|
connection: "Optional[Connection]" = None,
|
|
67
86
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
87
|
+
**kwargs: Any,
|
|
68
88
|
) -> "Union[ModelDTOT, dict[str, Any]]":
|
|
69
89
|
"""Fetch one row from the database.
|
|
70
90
|
|
|
91
|
+
Args:
|
|
92
|
+
sql: The SQL query string.
|
|
93
|
+
parameters: The parameters for the query (dict, tuple, list, or None).
|
|
94
|
+
connection: Optional connection override.
|
|
95
|
+
schema_type: Optional schema class for the result.
|
|
96
|
+
**kwargs: Additional keyword arguments to merge with parameters if parameters is a dict.
|
|
97
|
+
|
|
71
98
|
Returns:
|
|
72
99
|
The first row of the query results.
|
|
73
100
|
"""
|
|
74
101
|
connection = self._connection(connection)
|
|
75
|
-
sql, parameters = self._process_sql_params(sql, parameters)
|
|
102
|
+
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
76
103
|
|
|
77
104
|
with self._with_cursor(connection) as cursor:
|
|
78
105
|
cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
|
|
@@ -92,8 +119,10 @@ class OracleSyncDriver(SyncDriverAdapterProtocol["Connection"]):
|
|
|
92
119
|
sql: str,
|
|
93
120
|
parameters: "Optional[StatementParameterType]" = None,
|
|
94
121
|
/,
|
|
122
|
+
*,
|
|
95
123
|
connection: "Optional[Connection]" = None,
|
|
96
124
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
125
|
+
**kwargs: Any,
|
|
97
126
|
) -> "Optional[Union[ModelDTOT, dict[str, Any]]]":
|
|
98
127
|
"""Fetch one row from the database.
|
|
99
128
|
|
|
@@ -101,7 +130,7 @@ class OracleSyncDriver(SyncDriverAdapterProtocol["Connection"]):
|
|
|
101
130
|
The first row of the query results.
|
|
102
131
|
"""
|
|
103
132
|
connection = self._connection(connection)
|
|
104
|
-
sql, parameters = self._process_sql_params(sql, parameters)
|
|
133
|
+
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
105
134
|
|
|
106
135
|
with self._with_cursor(connection) as cursor:
|
|
107
136
|
cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
|
|
@@ -123,8 +152,10 @@ class OracleSyncDriver(SyncDriverAdapterProtocol["Connection"]):
|
|
|
123
152
|
sql: str,
|
|
124
153
|
parameters: "Optional[StatementParameterType]" = None,
|
|
125
154
|
/,
|
|
155
|
+
*,
|
|
126
156
|
connection: "Optional[Connection]" = None,
|
|
127
157
|
schema_type: "Optional[type[T]]" = None,
|
|
158
|
+
**kwargs: Any,
|
|
128
159
|
) -> "Union[T, Any]":
|
|
129
160
|
"""Fetch a single value from the database.
|
|
130
161
|
|
|
@@ -132,7 +163,7 @@ class OracleSyncDriver(SyncDriverAdapterProtocol["Connection"]):
|
|
|
132
163
|
The first value from the first row of results, or None if no results.
|
|
133
164
|
"""
|
|
134
165
|
connection = self._connection(connection)
|
|
135
|
-
sql, parameters = self._process_sql_params(sql, parameters)
|
|
166
|
+
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
136
167
|
|
|
137
168
|
with self._with_cursor(connection) as cursor:
|
|
138
169
|
cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
|
|
@@ -148,8 +179,10 @@ class OracleSyncDriver(SyncDriverAdapterProtocol["Connection"]):
|
|
|
148
179
|
sql: str,
|
|
149
180
|
parameters: "Optional[StatementParameterType]" = None,
|
|
150
181
|
/,
|
|
182
|
+
*,
|
|
151
183
|
connection: "Optional[Connection]" = None,
|
|
152
184
|
schema_type: "Optional[type[T]]" = None,
|
|
185
|
+
**kwargs: Any,
|
|
153
186
|
) -> "Optional[Union[T, Any]]":
|
|
154
187
|
"""Fetch a single value from the database.
|
|
155
188
|
|
|
@@ -157,7 +190,7 @@ class OracleSyncDriver(SyncDriverAdapterProtocol["Connection"]):
|
|
|
157
190
|
The first value from the first row of results, or None if no results.
|
|
158
191
|
"""
|
|
159
192
|
connection = self._connection(connection)
|
|
160
|
-
sql, parameters = self._process_sql_params(sql, parameters)
|
|
193
|
+
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
161
194
|
|
|
162
195
|
with self._with_cursor(connection) as cursor:
|
|
163
196
|
cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
|
|
@@ -175,7 +208,9 @@ class OracleSyncDriver(SyncDriverAdapterProtocol["Connection"]):
|
|
|
175
208
|
sql: str,
|
|
176
209
|
parameters: "Optional[StatementParameterType]" = None,
|
|
177
210
|
/,
|
|
211
|
+
*,
|
|
178
212
|
connection: "Optional[Connection]" = None,
|
|
213
|
+
**kwargs: Any,
|
|
179
214
|
) -> int:
|
|
180
215
|
"""Insert, update, or delete data from the database.
|
|
181
216
|
|
|
@@ -183,7 +218,7 @@ class OracleSyncDriver(SyncDriverAdapterProtocol["Connection"]):
|
|
|
183
218
|
Row count affected by the operation.
|
|
184
219
|
"""
|
|
185
220
|
connection = self._connection(connection)
|
|
186
|
-
sql, parameters = self._process_sql_params(sql, parameters)
|
|
221
|
+
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
187
222
|
|
|
188
223
|
with self._with_cursor(connection) as cursor:
|
|
189
224
|
cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
|
|
@@ -194,8 +229,10 @@ class OracleSyncDriver(SyncDriverAdapterProtocol["Connection"]):
|
|
|
194
229
|
sql: str,
|
|
195
230
|
parameters: "Optional[StatementParameterType]" = None,
|
|
196
231
|
/,
|
|
232
|
+
*,
|
|
197
233
|
connection: "Optional[Connection]" = None,
|
|
198
234
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
235
|
+
**kwargs: Any,
|
|
199
236
|
) -> "Optional[Union[dict[str, Any], ModelDTOT]]":
|
|
200
237
|
"""Insert, update, or delete data from the database and return result.
|
|
201
238
|
|
|
@@ -203,7 +240,7 @@ class OracleSyncDriver(SyncDriverAdapterProtocol["Connection"]):
|
|
|
203
240
|
The first row of results.
|
|
204
241
|
"""
|
|
205
242
|
connection = self._connection(connection)
|
|
206
|
-
sql, parameters = self._process_sql_params(sql, parameters)
|
|
243
|
+
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
207
244
|
|
|
208
245
|
with self._with_cursor(connection) as cursor:
|
|
209
246
|
cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
|
|
@@ -225,7 +262,9 @@ class OracleSyncDriver(SyncDriverAdapterProtocol["Connection"]):
|
|
|
225
262
|
sql: str,
|
|
226
263
|
parameters: "Optional[StatementParameterType]" = None,
|
|
227
264
|
/,
|
|
265
|
+
*,
|
|
228
266
|
connection: "Optional[Connection]" = None,
|
|
267
|
+
**kwargs: Any,
|
|
229
268
|
) -> str:
|
|
230
269
|
"""Execute a script.
|
|
231
270
|
|
|
@@ -233,17 +272,40 @@ class OracleSyncDriver(SyncDriverAdapterProtocol["Connection"]):
|
|
|
233
272
|
Status message for the operation.
|
|
234
273
|
"""
|
|
235
274
|
connection = self._connection(connection)
|
|
236
|
-
sql, parameters = self._process_sql_params(sql, parameters)
|
|
275
|
+
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
237
276
|
|
|
238
277
|
with self._with_cursor(connection) as cursor:
|
|
239
278
|
cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
|
|
240
279
|
return str(cursor.rowcount) # pyright: ignore[reportUnknownMemberType]
|
|
241
280
|
|
|
281
|
+
def select_arrow( # pyright: ignore[reportUnknownParameterType]
|
|
282
|
+
self,
|
|
283
|
+
sql: str,
|
|
284
|
+
parameters: "Optional[StatementParameterType]" = None,
|
|
285
|
+
/,
|
|
286
|
+
*,
|
|
287
|
+
connection: "Optional[Connection]" = None,
|
|
288
|
+
**kwargs: Any,
|
|
289
|
+
) -> "ArrowTable": # pyright: ignore[reportUnknownVariableType]
|
|
290
|
+
"""Execute a SQL query and return results as an Apache Arrow Table.
|
|
242
291
|
|
|
243
|
-
|
|
292
|
+
Returns:
|
|
293
|
+
An Apache Arrow Table containing the query results.
|
|
294
|
+
"""
|
|
295
|
+
|
|
296
|
+
connection = self._connection(connection)
|
|
297
|
+
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
298
|
+
results = connection.fetch_df_all(sql, parameters)
|
|
299
|
+
return cast("ArrowTable", ArrowTable.from_arrays(arrays=results.column_arrays(), names=results.column_names())) # pyright: ignore
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
class OracleAsyncDriver(
|
|
303
|
+
AsyncArrowBulkOperationsMixin["AsyncConnection"], AsyncDriverAdapterProtocol["AsyncConnection"]
|
|
304
|
+
):
|
|
244
305
|
"""Oracle Async Driver Adapter."""
|
|
245
306
|
|
|
246
307
|
connection: "AsyncConnection"
|
|
308
|
+
dialect: str = "oracle"
|
|
247
309
|
|
|
248
310
|
def __init__(self, connection: "AsyncConnection") -> None:
|
|
249
311
|
self.connection = connection
|
|
@@ -262,8 +324,10 @@ class OracleAsyncDriver(AsyncDriverAdapterProtocol["AsyncConnection"]):
|
|
|
262
324
|
sql: str,
|
|
263
325
|
parameters: "Optional[StatementParameterType]" = None,
|
|
264
326
|
/,
|
|
327
|
+
*,
|
|
265
328
|
connection: "Optional[AsyncConnection]" = None,
|
|
266
329
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
330
|
+
**kwargs: Any,
|
|
267
331
|
) -> "list[Union[ModelDTOT, dict[str, Any]]]":
|
|
268
332
|
"""Fetch data from the database.
|
|
269
333
|
|
|
@@ -271,7 +335,7 @@ class OracleAsyncDriver(AsyncDriverAdapterProtocol["AsyncConnection"]):
|
|
|
271
335
|
List of row data as either model instances or dictionaries.
|
|
272
336
|
"""
|
|
273
337
|
connection = self._connection(connection)
|
|
274
|
-
sql, parameters = self._process_sql_params(sql, parameters)
|
|
338
|
+
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
275
339
|
|
|
276
340
|
async with self._with_cursor(connection) as cursor:
|
|
277
341
|
await cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
|
|
@@ -291,8 +355,10 @@ class OracleAsyncDriver(AsyncDriverAdapterProtocol["AsyncConnection"]):
|
|
|
291
355
|
sql: str,
|
|
292
356
|
parameters: "Optional[StatementParameterType]" = None,
|
|
293
357
|
/,
|
|
358
|
+
*,
|
|
294
359
|
connection: "Optional[AsyncConnection]" = None,
|
|
295
360
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
361
|
+
**kwargs: Any,
|
|
296
362
|
) -> "Union[ModelDTOT, dict[str, Any]]":
|
|
297
363
|
"""Fetch one row from the database.
|
|
298
364
|
|
|
@@ -300,7 +366,7 @@ class OracleAsyncDriver(AsyncDriverAdapterProtocol["AsyncConnection"]):
|
|
|
300
366
|
The first row of the query results.
|
|
301
367
|
"""
|
|
302
368
|
connection = self._connection(connection)
|
|
303
|
-
sql, parameters = self._process_sql_params(sql, parameters)
|
|
369
|
+
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
304
370
|
|
|
305
371
|
async with self._with_cursor(connection) as cursor:
|
|
306
372
|
await cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
|
|
@@ -319,8 +385,10 @@ class OracleAsyncDriver(AsyncDriverAdapterProtocol["AsyncConnection"]):
|
|
|
319
385
|
sql: str,
|
|
320
386
|
parameters: "Optional[StatementParameterType]" = None,
|
|
321
387
|
/,
|
|
388
|
+
*,
|
|
322
389
|
connection: "Optional[AsyncConnection]" = None,
|
|
323
390
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
391
|
+
**kwargs: Any,
|
|
324
392
|
) -> "Optional[Union[ModelDTOT, dict[str, Any]]]":
|
|
325
393
|
"""Fetch one row from the database.
|
|
326
394
|
|
|
@@ -328,7 +396,7 @@ class OracleAsyncDriver(AsyncDriverAdapterProtocol["AsyncConnection"]):
|
|
|
328
396
|
The first row of the query results.
|
|
329
397
|
"""
|
|
330
398
|
connection = self._connection(connection)
|
|
331
|
-
sql, parameters = self._process_sql_params(sql, parameters)
|
|
399
|
+
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
332
400
|
|
|
333
401
|
async with self._with_cursor(connection) as cursor:
|
|
334
402
|
await cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
|
|
@@ -350,8 +418,10 @@ class OracleAsyncDriver(AsyncDriverAdapterProtocol["AsyncConnection"]):
|
|
|
350
418
|
sql: str,
|
|
351
419
|
parameters: "Optional[StatementParameterType]" = None,
|
|
352
420
|
/,
|
|
421
|
+
*,
|
|
353
422
|
connection: "Optional[AsyncConnection]" = None,
|
|
354
423
|
schema_type: "Optional[type[T]]" = None,
|
|
424
|
+
**kwargs: Any,
|
|
355
425
|
) -> "Union[T, Any]":
|
|
356
426
|
"""Fetch a single value from the database.
|
|
357
427
|
|
|
@@ -359,7 +429,7 @@ class OracleAsyncDriver(AsyncDriverAdapterProtocol["AsyncConnection"]):
|
|
|
359
429
|
The first value from the first row of results, or None if no results.
|
|
360
430
|
"""
|
|
361
431
|
connection = self._connection(connection)
|
|
362
|
-
sql, parameters = self._process_sql_params(sql, parameters)
|
|
432
|
+
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
363
433
|
|
|
364
434
|
async with self._with_cursor(connection) as cursor:
|
|
365
435
|
await cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
|
|
@@ -375,8 +445,10 @@ class OracleAsyncDriver(AsyncDriverAdapterProtocol["AsyncConnection"]):
|
|
|
375
445
|
sql: str,
|
|
376
446
|
parameters: "Optional[StatementParameterType]" = None,
|
|
377
447
|
/,
|
|
448
|
+
*,
|
|
378
449
|
connection: "Optional[AsyncConnection]" = None,
|
|
379
450
|
schema_type: "Optional[type[T]]" = None,
|
|
451
|
+
**kwargs: Any,
|
|
380
452
|
) -> "Optional[Union[T, Any]]":
|
|
381
453
|
"""Fetch a single value from the database.
|
|
382
454
|
|
|
@@ -384,7 +456,7 @@ class OracleAsyncDriver(AsyncDriverAdapterProtocol["AsyncConnection"]):
|
|
|
384
456
|
The first value from the first row of results, or None if no results.
|
|
385
457
|
"""
|
|
386
458
|
connection = self._connection(connection)
|
|
387
|
-
sql, parameters = self._process_sql_params(sql, parameters)
|
|
459
|
+
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
388
460
|
|
|
389
461
|
async with self._with_cursor(connection) as cursor:
|
|
390
462
|
await cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
|
|
@@ -402,7 +474,9 @@ class OracleAsyncDriver(AsyncDriverAdapterProtocol["AsyncConnection"]):
|
|
|
402
474
|
sql: str,
|
|
403
475
|
parameters: "Optional[StatementParameterType]" = None,
|
|
404
476
|
/,
|
|
477
|
+
*,
|
|
405
478
|
connection: "Optional[AsyncConnection]" = None,
|
|
479
|
+
**kwargs: Any,
|
|
406
480
|
) -> int:
|
|
407
481
|
"""Insert, update, or delete data from the database.
|
|
408
482
|
|
|
@@ -410,7 +484,7 @@ class OracleAsyncDriver(AsyncDriverAdapterProtocol["AsyncConnection"]):
|
|
|
410
484
|
Row count affected by the operation.
|
|
411
485
|
"""
|
|
412
486
|
connection = self._connection(connection)
|
|
413
|
-
sql, parameters = self._process_sql_params(sql, parameters)
|
|
487
|
+
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
414
488
|
|
|
415
489
|
async with self._with_cursor(connection) as cursor:
|
|
416
490
|
await cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
|
|
@@ -421,8 +495,10 @@ class OracleAsyncDriver(AsyncDriverAdapterProtocol["AsyncConnection"]):
|
|
|
421
495
|
sql: str,
|
|
422
496
|
parameters: "Optional[StatementParameterType]" = None,
|
|
423
497
|
/,
|
|
498
|
+
*,
|
|
424
499
|
connection: "Optional[AsyncConnection]" = None,
|
|
425
500
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
501
|
+
**kwargs: Any,
|
|
426
502
|
) -> "Optional[Union[dict[str, Any], ModelDTOT]]":
|
|
427
503
|
"""Insert, update, or delete data from the database and return result.
|
|
428
504
|
|
|
@@ -430,7 +506,7 @@ class OracleAsyncDriver(AsyncDriverAdapterProtocol["AsyncConnection"]):
|
|
|
430
506
|
The first row of results.
|
|
431
507
|
"""
|
|
432
508
|
connection = self._connection(connection)
|
|
433
|
-
sql, parameters = self._process_sql_params(sql, parameters)
|
|
509
|
+
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
434
510
|
|
|
435
511
|
async with self._with_cursor(connection) as cursor:
|
|
436
512
|
await cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
|
|
@@ -452,7 +528,9 @@ class OracleAsyncDriver(AsyncDriverAdapterProtocol["AsyncConnection"]):
|
|
|
452
528
|
sql: str,
|
|
453
529
|
parameters: "Optional[StatementParameterType]" = None,
|
|
454
530
|
/,
|
|
531
|
+
*,
|
|
455
532
|
connection: "Optional[AsyncConnection]" = None,
|
|
533
|
+
**kwargs: Any,
|
|
456
534
|
) -> str:
|
|
457
535
|
"""Execute a script.
|
|
458
536
|
|
|
@@ -460,39 +538,34 @@ class OracleAsyncDriver(AsyncDriverAdapterProtocol["AsyncConnection"]):
|
|
|
460
538
|
Status message for the operation.
|
|
461
539
|
"""
|
|
462
540
|
connection = self._connection(connection)
|
|
463
|
-
sql, parameters = self._process_sql_params(sql, parameters)
|
|
541
|
+
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
464
542
|
|
|
465
543
|
async with self._with_cursor(connection) as cursor:
|
|
466
544
|
await cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
|
|
467
545
|
return str(cursor.rowcount) # pyright: ignore[reportUnknownMemberType]
|
|
468
546
|
|
|
469
|
-
async def
|
|
547
|
+
async def select_arrow( # pyright: ignore[reportUnknownParameterType]
|
|
470
548
|
self,
|
|
471
549
|
sql: str,
|
|
472
550
|
parameters: "Optional[StatementParameterType]" = None,
|
|
473
551
|
/,
|
|
552
|
+
*,
|
|
474
553
|
connection: "Optional[AsyncConnection]" = None,
|
|
475
|
-
|
|
476
|
-
) -> "
|
|
477
|
-
"""Execute a
|
|
554
|
+
**kwargs: Any,
|
|
555
|
+
) -> "ArrowTable": # pyright: ignore[reportUnknownVariableType]
|
|
556
|
+
"""Execute a SQL query asynchronously and return results as an Apache Arrow Table.
|
|
557
|
+
|
|
558
|
+
Args:
|
|
559
|
+
sql: The SQL query string.
|
|
560
|
+
parameters: Parameters for the query.
|
|
561
|
+
connection: Optional connection override.
|
|
562
|
+
**kwargs: Additional keyword arguments to merge with parameters if parameters is a dict.
|
|
478
563
|
|
|
479
564
|
Returns:
|
|
480
|
-
|
|
565
|
+
An Apache Arrow Table containing the query results.
|
|
481
566
|
"""
|
|
482
|
-
connection = self._connection(connection)
|
|
483
|
-
sql, parameters = self._process_sql_params(sql, parameters)
|
|
484
|
-
|
|
485
|
-
async with self._with_cursor(connection) as cursor:
|
|
486
|
-
await cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
|
|
487
|
-
result = await cursor.fetchone() # pyright: ignore[reportUnknownMemberType, reportUnknownVariableType]
|
|
488
|
-
|
|
489
|
-
if result is None:
|
|
490
|
-
return None
|
|
491
567
|
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
return cast("ModelDTOT", schema_type(**dict(zip(column_names, result)))) # pyright: ignore[reportUnknownArgumentType]
|
|
497
|
-
# Always return dictionaries
|
|
498
|
-
return dict(zip(column_names, result)) # pyright: ignore[reportUnknownArgumentType,reportUnknownVariableType]
|
|
568
|
+
connection = self._connection(connection)
|
|
569
|
+
sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
|
|
570
|
+
results = await connection.fetch_df_all(sql, parameters)
|
|
571
|
+
return ArrowTable.from_arrays(arrays=results.column_arrays(), names=results.column_names()) # pyright: ignore
|
|
File without changes
|