sqlspec 0.11.0__py3-none-any.whl → 0.11.1__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/adapters/adbc/driver.py +37 -60
- sqlspec/adapters/aiosqlite/driver.py +73 -104
- sqlspec/adapters/asyncmy/driver.py +28 -44
- sqlspec/adapters/asyncpg/driver.py +34 -44
- sqlspec/adapters/bigquery/driver.py +79 -168
- sqlspec/adapters/duckdb/driver.py +20 -49
- sqlspec/adapters/oracledb/driver.py +66 -86
- sqlspec/adapters/psqlpy/driver.py +39 -56
- sqlspec/adapters/psycopg/driver.py +71 -112
- sqlspec/adapters/sqlite/driver.py +15 -35
- sqlspec/base.py +0 -41
- sqlspec/filters.py +2 -1
- sqlspec/mixins.py +9 -10
- {sqlspec-0.11.0.dist-info → sqlspec-0.11.1.dist-info}/METADATA +4 -1
- {sqlspec-0.11.0.dist-info → sqlspec-0.11.1.dist-info}/RECORD +18 -18
- {sqlspec-0.11.0.dist-info → sqlspec-0.11.1.dist-info}/WHEEL +0 -0
- {sqlspec-0.11.0.dist-info → sqlspec-0.11.1.dist-info}/licenses/LICENSE +0 -0
- {sqlspec-0.11.0.dist-info → sqlspec-0.11.1.dist-info}/licenses/NOTICE +0 -0
|
@@ -5,14 +5,14 @@ from typing import TYPE_CHECKING, Any, Optional, Union, cast, overload
|
|
|
5
5
|
from duckdb import DuckDBPyConnection
|
|
6
6
|
|
|
7
7
|
from sqlspec.base import SyncDriverAdapterProtocol
|
|
8
|
+
from sqlspec.filters import StatementFilter
|
|
8
9
|
from sqlspec.mixins import ResultConverter, SQLTranslatorMixin, SyncArrowBulkOperationsMixin
|
|
9
10
|
from sqlspec.statement import SQLStatement
|
|
10
11
|
from sqlspec.typing import ArrowTable, StatementParameterType
|
|
11
12
|
|
|
12
13
|
if TYPE_CHECKING:
|
|
13
|
-
from collections.abc import Generator, Sequence
|
|
14
|
+
from collections.abc import Generator, Mapping, Sequence
|
|
14
15
|
|
|
15
|
-
from sqlspec.filters import StatementFilter
|
|
16
16
|
from sqlspec.typing import ArrowTable, ModelDTOT, StatementParameterType, T
|
|
17
17
|
|
|
18
18
|
__all__ = ("DuckDBConnection", "DuckDBDriver")
|
|
@@ -58,7 +58,6 @@ class DuckDBDriver(
|
|
|
58
58
|
self,
|
|
59
59
|
sql: str,
|
|
60
60
|
parameters: "Optional[StatementParameterType]" = None,
|
|
61
|
-
/,
|
|
62
61
|
*filters: "StatementFilter",
|
|
63
62
|
**kwargs: Any,
|
|
64
63
|
) -> "tuple[str, Optional[Union[tuple[Any, ...], list[Any], dict[str, Any]]]]":
|
|
@@ -77,10 +76,18 @@ class DuckDBDriver(
|
|
|
77
76
|
Returns:
|
|
78
77
|
Tuple of processed SQL and parameters.
|
|
79
78
|
"""
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
79
|
+
data_params_for_statement: Optional[Union[Mapping[str, Any], Sequence[Any]]] = None
|
|
80
|
+
combined_filters_list: list[StatementFilter] = list(filters)
|
|
81
|
+
|
|
82
|
+
if parameters is not None:
|
|
83
|
+
if isinstance(parameters, StatementFilter):
|
|
84
|
+
combined_filters_list.insert(0, parameters)
|
|
85
|
+
else:
|
|
86
|
+
data_params_for_statement = parameters
|
|
87
|
+
if data_params_for_statement is not None and not isinstance(data_params_for_statement, (list, tuple, dict)):
|
|
88
|
+
data_params_for_statement = (data_params_for_statement,)
|
|
89
|
+
statement = SQLStatement(sql, data_params_for_statement, kwargs=kwargs, dialect=self.dialect)
|
|
90
|
+
for filter_obj in combined_filters_list:
|
|
84
91
|
statement = statement.apply_filter(filter_obj)
|
|
85
92
|
|
|
86
93
|
processed_sql, processed_params, _ = statement.process()
|
|
@@ -98,7 +105,6 @@ class DuckDBDriver(
|
|
|
98
105
|
self,
|
|
99
106
|
sql: str,
|
|
100
107
|
parameters: "Optional[StatementParameterType]" = None,
|
|
101
|
-
/,
|
|
102
108
|
*filters: "StatementFilter",
|
|
103
109
|
connection: "Optional[DuckDBConnection]" = None,
|
|
104
110
|
schema_type: None = None,
|
|
@@ -109,7 +115,6 @@ class DuckDBDriver(
|
|
|
109
115
|
self,
|
|
110
116
|
sql: str,
|
|
111
117
|
parameters: "Optional[StatementParameterType]" = None,
|
|
112
|
-
/,
|
|
113
118
|
*filters: "StatementFilter",
|
|
114
119
|
connection: "Optional[DuckDBConnection]" = None,
|
|
115
120
|
schema_type: "type[ModelDTOT]",
|
|
@@ -119,7 +124,6 @@ class DuckDBDriver(
|
|
|
119
124
|
self,
|
|
120
125
|
sql: str,
|
|
121
126
|
parameters: "Optional[StatementParameterType]" = None,
|
|
122
|
-
/,
|
|
123
127
|
*filters: "StatementFilter",
|
|
124
128
|
connection: "Optional[DuckDBConnection]" = None,
|
|
125
129
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
@@ -138,17 +142,13 @@ class DuckDBDriver(
|
|
|
138
142
|
if not results:
|
|
139
143
|
return []
|
|
140
144
|
column_names = [column[0] for column in cursor.description or []]
|
|
141
|
-
|
|
142
|
-
# Convert to dicts first
|
|
143
|
-
dict_results = [dict(zip(column_names, row)) for row in results]
|
|
144
|
-
return self.to_schema(dict_results, schema_type=schema_type)
|
|
145
|
+
return self.to_schema([dict(zip(column_names, row)) for row in results], schema_type=schema_type)
|
|
145
146
|
|
|
146
147
|
@overload
|
|
147
148
|
def select_one(
|
|
148
149
|
self,
|
|
149
150
|
sql: str,
|
|
150
151
|
parameters: "Optional[StatementParameterType]" = None,
|
|
151
|
-
/,
|
|
152
152
|
*filters: "StatementFilter",
|
|
153
153
|
connection: "Optional[DuckDBConnection]" = None,
|
|
154
154
|
schema_type: None = None,
|
|
@@ -159,7 +159,6 @@ class DuckDBDriver(
|
|
|
159
159
|
self,
|
|
160
160
|
sql: str,
|
|
161
161
|
parameters: "Optional[StatementParameterType]" = None,
|
|
162
|
-
/,
|
|
163
162
|
*filters: "StatementFilter",
|
|
164
163
|
connection: "Optional[DuckDBConnection]" = None,
|
|
165
164
|
schema_type: "type[ModelDTOT]",
|
|
@@ -169,7 +168,6 @@ class DuckDBDriver(
|
|
|
169
168
|
self,
|
|
170
169
|
sql: str,
|
|
171
170
|
parameters: "Optional[StatementParameterType]" = None,
|
|
172
|
-
/,
|
|
173
171
|
*filters: "StatementFilter",
|
|
174
172
|
connection: "Optional[DuckDBConnection]" = None,
|
|
175
173
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
@@ -187,17 +185,13 @@ class DuckDBDriver(
|
|
|
187
185
|
result = cursor.fetchone()
|
|
188
186
|
result = self.check_not_found(result)
|
|
189
187
|
column_names = [column[0] for column in cursor.description or []]
|
|
190
|
-
|
|
191
|
-
# Convert to dict and use ResultConverter
|
|
192
|
-
dict_result = dict(zip(column_names, result))
|
|
193
|
-
return self.to_schema(dict_result, schema_type=schema_type)
|
|
188
|
+
return self.to_schema(dict(zip(column_names, result)), schema_type=schema_type)
|
|
194
189
|
|
|
195
190
|
@overload
|
|
196
191
|
def select_one_or_none(
|
|
197
192
|
self,
|
|
198
193
|
sql: str,
|
|
199
194
|
parameters: "Optional[StatementParameterType]" = None,
|
|
200
|
-
/,
|
|
201
195
|
*filters: "StatementFilter",
|
|
202
196
|
connection: "Optional[DuckDBConnection]" = None,
|
|
203
197
|
schema_type: None = None,
|
|
@@ -208,7 +202,6 @@ class DuckDBDriver(
|
|
|
208
202
|
self,
|
|
209
203
|
sql: str,
|
|
210
204
|
parameters: "Optional[StatementParameterType]" = None,
|
|
211
|
-
/,
|
|
212
205
|
*filters: "StatementFilter",
|
|
213
206
|
connection: "Optional[DuckDBConnection]" = None,
|
|
214
207
|
schema_type: "type[ModelDTOT]",
|
|
@@ -218,7 +211,6 @@ class DuckDBDriver(
|
|
|
218
211
|
self,
|
|
219
212
|
sql: str,
|
|
220
213
|
parameters: "Optional[StatementParameterType]" = None,
|
|
221
|
-
/,
|
|
222
214
|
*filters: "StatementFilter",
|
|
223
215
|
connection: "Optional[DuckDBConnection]" = None,
|
|
224
216
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
@@ -237,17 +229,13 @@ class DuckDBDriver(
|
|
|
237
229
|
if result is None:
|
|
238
230
|
return None
|
|
239
231
|
column_names = [column[0] for column in cursor.description or []]
|
|
240
|
-
|
|
241
|
-
# Convert to dict and use ResultConverter
|
|
242
|
-
dict_result = dict(zip(column_names, result))
|
|
243
|
-
return self.to_schema(dict_result, schema_type=schema_type)
|
|
232
|
+
return self.to_schema(dict(zip(column_names, result)), schema_type=schema_type)
|
|
244
233
|
|
|
245
234
|
@overload
|
|
246
235
|
def select_value(
|
|
247
236
|
self,
|
|
248
237
|
sql: str,
|
|
249
238
|
parameters: "Optional[StatementParameterType]" = None,
|
|
250
|
-
/,
|
|
251
239
|
*filters: "StatementFilter",
|
|
252
240
|
connection: "Optional[DuckDBConnection]" = None,
|
|
253
241
|
schema_type: None = None,
|
|
@@ -258,7 +246,6 @@ class DuckDBDriver(
|
|
|
258
246
|
self,
|
|
259
247
|
sql: str,
|
|
260
248
|
parameters: "Optional[StatementParameterType]" = None,
|
|
261
|
-
/,
|
|
262
249
|
*filters: "StatementFilter",
|
|
263
250
|
connection: "Optional[DuckDBConnection]" = None,
|
|
264
251
|
schema_type: "type[T]",
|
|
@@ -268,7 +255,6 @@ class DuckDBDriver(
|
|
|
268
255
|
self,
|
|
269
256
|
sql: str,
|
|
270
257
|
parameters: "Optional[StatementParameterType]" = None,
|
|
271
|
-
/,
|
|
272
258
|
*filters: "StatementFilter",
|
|
273
259
|
connection: "Optional[DuckDBConnection]" = None,
|
|
274
260
|
schema_type: "Optional[type[T]]" = None,
|
|
@@ -295,7 +281,6 @@ class DuckDBDriver(
|
|
|
295
281
|
self,
|
|
296
282
|
sql: str,
|
|
297
283
|
parameters: "Optional[StatementParameterType]" = None,
|
|
298
|
-
/,
|
|
299
284
|
*filters: "StatementFilter",
|
|
300
285
|
connection: "Optional[DuckDBConnection]" = None,
|
|
301
286
|
schema_type: None = None,
|
|
@@ -306,7 +291,6 @@ class DuckDBDriver(
|
|
|
306
291
|
self,
|
|
307
292
|
sql: str,
|
|
308
293
|
parameters: "Optional[StatementParameterType]" = None,
|
|
309
|
-
/,
|
|
310
294
|
*filters: "StatementFilter",
|
|
311
295
|
connection: "Optional[DuckDBConnection]" = None,
|
|
312
296
|
schema_type: "type[T]",
|
|
@@ -316,7 +300,6 @@ class DuckDBDriver(
|
|
|
316
300
|
self,
|
|
317
301
|
sql: str,
|
|
318
302
|
parameters: "Optional[StatementParameterType]" = None,
|
|
319
|
-
/,
|
|
320
303
|
*filters: "StatementFilter",
|
|
321
304
|
connection: "Optional[DuckDBConnection]" = None,
|
|
322
305
|
schema_type: "Optional[type[T]]" = None,
|
|
@@ -337,7 +320,6 @@ class DuckDBDriver(
|
|
|
337
320
|
self,
|
|
338
321
|
sql: str,
|
|
339
322
|
parameters: "Optional[StatementParameterType]" = None,
|
|
340
|
-
/,
|
|
341
323
|
*filters: "StatementFilter",
|
|
342
324
|
connection: "Optional[DuckDBConnection]" = None,
|
|
343
325
|
**kwargs: Any,
|
|
@@ -354,7 +336,6 @@ class DuckDBDriver(
|
|
|
354
336
|
self,
|
|
355
337
|
sql: str,
|
|
356
338
|
parameters: "Optional[StatementParameterType]" = None,
|
|
357
|
-
/,
|
|
358
339
|
*filters: "StatementFilter",
|
|
359
340
|
connection: "Optional[DuckDBConnection]" = None,
|
|
360
341
|
schema_type: None = None,
|
|
@@ -365,7 +346,6 @@ class DuckDBDriver(
|
|
|
365
346
|
self,
|
|
366
347
|
sql: str,
|
|
367
348
|
parameters: "Optional[StatementParameterType]" = None,
|
|
368
|
-
/,
|
|
369
349
|
*filters: "StatementFilter",
|
|
370
350
|
connection: "Optional[DuckDBConnection]" = None,
|
|
371
351
|
schema_type: "type[ModelDTOT]",
|
|
@@ -375,7 +355,6 @@ class DuckDBDriver(
|
|
|
375
355
|
self,
|
|
376
356
|
sql: str,
|
|
377
357
|
parameters: "Optional[StatementParameterType]" = None,
|
|
378
|
-
/,
|
|
379
358
|
*filters: "StatementFilter",
|
|
380
359
|
connection: "Optional[DuckDBConnection]" = None,
|
|
381
360
|
schema_type: "Optional[type[ModelDTOT]]" = None,
|
|
@@ -389,16 +368,12 @@ class DuckDBDriver(
|
|
|
389
368
|
result = cursor.fetchall()
|
|
390
369
|
result = self.check_not_found(result)
|
|
391
370
|
column_names = [col[0] for col in cursor.description or []]
|
|
392
|
-
|
|
393
|
-
# Convert to dict and use ResultConverter
|
|
394
|
-
dict_result = dict(zip(column_names, result[0]))
|
|
395
|
-
return self.to_schema(dict_result, schema_type=schema_type)
|
|
371
|
+
return self.to_schema(dict(zip(column_names, result[0])), schema_type=schema_type)
|
|
396
372
|
|
|
397
373
|
def execute_script(
|
|
398
374
|
self,
|
|
399
375
|
sql: str,
|
|
400
376
|
parameters: "Optional[StatementParameterType]" = None,
|
|
401
|
-
/,
|
|
402
377
|
connection: "Optional[DuckDBConnection]" = None,
|
|
403
378
|
**kwargs: Any,
|
|
404
379
|
) -> str:
|
|
@@ -415,8 +390,7 @@ class DuckDBDriver(
|
|
|
415
390
|
self,
|
|
416
391
|
sql: str,
|
|
417
392
|
parameters: "Optional[StatementParameterType]" = None,
|
|
418
|
-
|
|
419
|
-
*,
|
|
393
|
+
*filters: "StatementFilter",
|
|
420
394
|
connection: "Optional[DuckDBConnection]" = None,
|
|
421
395
|
**kwargs: Any,
|
|
422
396
|
) -> "ArrowTable":
|
|
@@ -425,6 +399,7 @@ class DuckDBDriver(
|
|
|
425
399
|
Args:
|
|
426
400
|
sql: The SQL query string.
|
|
427
401
|
parameters: Parameters for the query.
|
|
402
|
+
*filters: Optional filters to apply to the SQL statement.
|
|
428
403
|
connection: Optional connection override.
|
|
429
404
|
**kwargs: Additional keyword arguments to merge with parameters if parameters is a dict.
|
|
430
405
|
|
|
@@ -432,10 +407,6 @@ class DuckDBDriver(
|
|
|
432
407
|
An Apache Arrow Table containing the query results.
|
|
433
408
|
"""
|
|
434
409
|
connection = self._connection(connection)
|
|
435
|
-
|
|
436
|
-
# Extract filters from kwargs if present
|
|
437
|
-
filters = kwargs.pop("filters", [])
|
|
438
|
-
|
|
439
410
|
sql, parameters = self._process_sql_params(sql, parameters, *filters, **kwargs)
|
|
440
411
|
with self._with_cursor(connection) as cursor:
|
|
441
412
|
params = [] if parameters is None else parameters
|