sqlspec 0.26.0__py3-none-any.whl → 0.27.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 +62 -52
- sqlspec/adapters/adbc/_types.py +1 -1
- sqlspec/adapters/adbc/adk/__init__.py +5 -0
- sqlspec/adapters/adbc/adk/store.py +870 -0
- sqlspec/adapters/adbc/config.py +62 -12
- sqlspec/adapters/adbc/data_dictionary.py +52 -2
- sqlspec/adapters/adbc/driver.py +144 -45
- 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 +527 -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 +493 -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 +450 -0
- sqlspec/adapters/asyncpg/config.py +57 -36
- sqlspec/adapters/asyncpg/data_dictionary.py +41 -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 +576 -0
- sqlspec/adapters/bigquery/config.py +25 -11
- sqlspec/adapters/bigquery/data_dictionary.py +42 -2
- sqlspec/adapters/bigquery/driver.py +352 -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 +553 -0
- sqlspec/adapters/duckdb/config.py +79 -21
- sqlspec/adapters/duckdb/data_dictionary.py +41 -2
- sqlspec/adapters/duckdb/driver.py +138 -43
- 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 +1745 -0
- sqlspec/adapters/oracledb/config.py +120 -36
- sqlspec/adapters/oracledb/data_dictionary.py +87 -20
- sqlspec/adapters/oracledb/driver.py +292 -84
- sqlspec/adapters/oracledb/litestar/__init__.py +5 -0
- sqlspec/adapters/oracledb/litestar/store.py +767 -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 +482 -0
- sqlspec/adapters/psqlpy/config.py +45 -19
- sqlspec/adapters/psqlpy/data_dictionary.py +41 -2
- sqlspec/adapters/psqlpy/driver.py +101 -31
- 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 +944 -0
- sqlspec/adapters/psycopg/config.py +65 -37
- sqlspec/adapters/psycopg/data_dictionary.py +77 -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 +572 -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 +231 -60
- sqlspec/core/__init__.py +5 -4
- sqlspec/core/cache.py +18 -18
- sqlspec/core/compiler.py +6 -8
- sqlspec/core/filters.py +37 -37
- sqlspec/core/hashing.py +9 -9
- sqlspec/core/parameters.py +76 -45
- sqlspec/core/result.py +102 -46
- 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 +95 -161
- sqlspec/driver/_common.py +133 -80
- sqlspec/driver/_sync.py +95 -162
- 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 +73 -53
- sqlspec/extensions/litestar/__init__.py +21 -4
- sqlspec/extensions/litestar/cli.py +54 -10
- sqlspec/extensions/litestar/config.py +59 -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 +324 -223
- sqlspec/extensions/litestar/providers.py +25 -25
- sqlspec/extensions/litestar/store.py +265 -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 +66 -36
- sqlspec/storage/_utils.py +98 -0
- sqlspec/storage/backends/fsspec.py +134 -106
- sqlspec/storage/backends/local.py +78 -51
- sqlspec/storage/backends/obstore.py +278 -162
- sqlspec/storage/registry.py +75 -39
- sqlspec/typing.py +14 -84
- 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 +2 -2
- sqlspec/utils/schema.py +288 -0
- sqlspec/utils/serializers.py +3 -3
- sqlspec/utils/sync_tools.py +21 -17
- sqlspec/utils/text.py +1 -2
- sqlspec/utils/type_guards.py +111 -20
- sqlspec/utils/version.py +433 -0
- {sqlspec-0.26.0.dist-info → sqlspec-0.27.0.dist-info}/METADATA +40 -21
- sqlspec-0.27.0.dist-info/RECORD +207 -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.27.0.dist-info}/WHEEL +0 -0
- {sqlspec-0.26.0.dist-info → sqlspec-0.27.0.dist-info}/entry_points.txt +0 -0
- {sqlspec-0.26.0.dist-info → sqlspec-0.27.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlspec
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.27.0
|
|
4
4
|
Summary: SQL Experiments in Python
|
|
5
5
|
Project-URL: Discord, https://discord.gg/litestar
|
|
6
6
|
Project-URL: Issue, https://github.com/litestar-org/sqlspec/issues/
|
|
@@ -9,9 +9,7 @@ Author-email: Cody Fincher <cody@litestar.dev>
|
|
|
9
9
|
Maintainer-email: Litestar Developers <hello@litestar.dev>
|
|
10
10
|
License-Expression: MIT
|
|
11
11
|
License-File: LICENSE
|
|
12
|
-
|
|
13
|
-
Requires-Python: <4.0,>=3.9
|
|
14
|
-
Requires-Dist: eval-type-backport; python_version < '3.10'
|
|
12
|
+
Requires-Python: <4.0,>=3.10
|
|
15
13
|
Requires-Dist: mypy-extensions
|
|
16
14
|
Requires-Dist: rich-click
|
|
17
15
|
Requires-Dist: sqlglot>=19.9.0
|
|
@@ -19,6 +17,8 @@ Requires-Dist: typing-extensions
|
|
|
19
17
|
Provides-Extra: adbc
|
|
20
18
|
Requires-Dist: adbc-driver-manager; extra == 'adbc'
|
|
21
19
|
Requires-Dist: pyarrow; extra == 'adbc'
|
|
20
|
+
Provides-Extra: adk
|
|
21
|
+
Requires-Dist: google-adk; extra == 'adk'
|
|
22
22
|
Provides-Extra: aioodbc
|
|
23
23
|
Requires-Dist: aioodbc; extra == 'aioodbc'
|
|
24
24
|
Provides-Extra: aiosql
|
|
@@ -392,27 +392,51 @@ SQLSpec includes a built-in migration system for managing schema changes. After
|
|
|
392
392
|
|
|
393
393
|
```bash
|
|
394
394
|
# Initialize migration directory
|
|
395
|
-
sqlspec
|
|
395
|
+
sqlspec --config myapp.config init
|
|
396
396
|
|
|
397
397
|
# Generate new migration file
|
|
398
|
-
sqlspec
|
|
398
|
+
sqlspec --config myapp.config create-migration -m "Add user table"
|
|
399
399
|
|
|
400
400
|
# Apply all pending migrations
|
|
401
|
-
sqlspec
|
|
401
|
+
sqlspec --config myapp.config upgrade
|
|
402
402
|
|
|
403
403
|
# Show current migration status
|
|
404
|
-
sqlspec
|
|
404
|
+
sqlspec --config myapp.config show-current-revision
|
|
405
405
|
```
|
|
406
406
|
|
|
407
407
|
For Litestar applications, replace `sqlspec` with your application command:
|
|
408
408
|
|
|
409
409
|
```bash
|
|
410
410
|
# Using Litestar CLI integration
|
|
411
|
-
litestar
|
|
412
|
-
litestar
|
|
413
|
-
litestar
|
|
411
|
+
litestar database create-migration -m "Add user table"
|
|
412
|
+
litestar database upgrade
|
|
413
|
+
litestar database show-current-revision
|
|
414
414
|
```
|
|
415
415
|
|
|
416
|
+
### Shell Completion
|
|
417
|
+
|
|
418
|
+
SQLSpec CLI supports tab completion for bash, zsh, and fish shells. Enable it with:
|
|
419
|
+
|
|
420
|
+
```bash
|
|
421
|
+
# Bash - add to ~/.bashrc
|
|
422
|
+
eval "$(_SQLSPEC_COMPLETE=bash_source sqlspec)"
|
|
423
|
+
|
|
424
|
+
# Zsh - add to ~/.zshrc
|
|
425
|
+
eval "$(_SQLSPEC_COMPLETE=zsh_source sqlspec)"
|
|
426
|
+
|
|
427
|
+
# Fish - add to ~/.config/fish/completions/sqlspec.fish
|
|
428
|
+
eval (env _SQLSPEC_COMPLETE=fish_source sqlspec)
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
After setup, you can tab-complete commands and options:
|
|
432
|
+
|
|
433
|
+
```bash
|
|
434
|
+
sqlspec <TAB> # Shows: create-migration, downgrade, init, ...
|
|
435
|
+
sqlspec upgrade --<TAB> # Shows: --bind-key, --help, --no-prompt, ...
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
See the [CLI documentation](https://sqlspec.litestar.dev/usage/cli.html) for complete setup instructions.
|
|
439
|
+
|
|
416
440
|
### Basic Litestar Integration
|
|
417
441
|
|
|
418
442
|
In this example we demonstrate how to create a basic configuration that integrates into Litestar:
|
|
@@ -426,23 +450,18 @@ In this example we demonstrate how to create a basic configuration that integrat
|
|
|
426
450
|
# ///
|
|
427
451
|
|
|
428
452
|
from litestar import Litestar, get
|
|
429
|
-
|
|
453
|
+
from sqlspec import SQLSpec
|
|
430
454
|
from sqlspec.adapters.aiosqlite import AiosqliteConfig, AiosqliteDriver
|
|
431
|
-
from sqlspec.extensions.litestar import
|
|
432
|
-
|
|
455
|
+
from sqlspec.extensions.litestar import SQLSpecPlugin
|
|
433
456
|
|
|
434
457
|
@get("/")
|
|
435
458
|
async def simple_sqlite(db_session: AiosqliteDriver) -> dict[str, str]:
|
|
436
459
|
return await db_session.select_one("SELECT 'Hello, world!' AS greeting")
|
|
437
460
|
|
|
438
461
|
|
|
439
|
-
sqlspec = SQLSpec(
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
commit_mode="autocommit"
|
|
443
|
-
)
|
|
444
|
-
)
|
|
445
|
-
app = Litestar(route_handlers=[simple_sqlite], plugins=[sqlspec])
|
|
462
|
+
sqlspec = SQLSpec()
|
|
463
|
+
sqlspec.add_config(AiosqliteConfig(pool_config={"database": ":memory:"}))
|
|
464
|
+
app = Litestar(route_handlers=[simple_sqlite], plugins=[SQLSpecPlugin(sqlspec)])
|
|
446
465
|
```
|
|
447
466
|
|
|
448
467
|
## Inspiration and Future Direction
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
sqlspec/__init__.py,sha256=VoSce3TTvQLkWC2EHiRpgPDfWNfx5FI3YvYuz21Dw74,2110
|
|
2
|
+
sqlspec/__main__.py,sha256=lXBKZMOXA1uY735Rnsb-GS7aXy0nt22tYmd2X9FcxrY,253
|
|
3
|
+
sqlspec/__metadata__.py,sha256=IUw6MCTy1oeUJ1jAVYbuJLkOWbiAWorZ5W-E-SAD9N4,395
|
|
4
|
+
sqlspec/_serialization.py,sha256=Zy_F7Mirf-OcywJUCFXA9gcM-3ZE1ixXIqN991gunaM,9622
|
|
5
|
+
sqlspec/_typing.py,sha256=yP33K-n_bTZweAC_701SZ3XxV7O31JzFdRAya065iPQ,22811
|
|
6
|
+
sqlspec/base.py,sha256=Igt0Veh3T999TgFSxMJN5ivLdoG_uvMK-u7y5UmPtqM,25949
|
|
7
|
+
sqlspec/cli.py,sha256=jVfUxfEmpKW7f3S03zyx3PmGq3pQvt6dUjZdqcgJnTw,25296
|
|
8
|
+
sqlspec/config.py,sha256=n_VnSxIsHUpTa6JHSDlow0ZVHVtshZgCWjM6s1osxEE,29168
|
|
9
|
+
sqlspec/exceptions.py,sha256=BXCGbQEG_EGnH8L4DqsgRig5UrHRx6KMJbyB8sAo-6A,7929
|
|
10
|
+
sqlspec/loader.py,sha256=3MJaD-XZVQzuNmkt2P_L8917obECVsuN1bfR0HkK1cc,22828
|
|
11
|
+
sqlspec/protocols.py,sha256=CB4yKOgPoSWQqjTEGxX-_pmDZLAISiJdTnUZIPVOqsg,13860
|
|
12
|
+
sqlspec/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
|
+
sqlspec/typing.py,sha256=G0cbMrZZc6tbYn_ME6i9NdRGYpeKtxq24o1j-R8Awu4,4142
|
|
14
|
+
sqlspec/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
|
+
sqlspec/adapters/adbc/__init__.py,sha256=CqBaEahvHbQ5NxmBJuuCtZ8v5wuaPgbqSSe9WUhglWY,336
|
|
16
|
+
sqlspec/adapters/adbc/_types.py,sha256=xlYCNNNexFVd42Kk9h0QLnmqGdz2crht-HVagxS5-a8,340
|
|
17
|
+
sqlspec/adapters/adbc/config.py,sha256=kJ3AAOfMHO42PsXf80Q83Jxf0oGTXqXJJh_Nm3gtYiY,16251
|
|
18
|
+
sqlspec/adapters/adbc/data_dictionary.py,sha256=aPUFJmRdXc9IBFDBoTo2Elc2RUgf8tIlrG8fV7U4wXE,13342
|
|
19
|
+
sqlspec/adapters/adbc/driver.py,sha256=HcW07h5LGGBvaLIkJBApqNxHejp_BjTFMBktL7FYiCs,32180
|
|
20
|
+
sqlspec/adapters/adbc/type_converter.py,sha256=gyOjs9tWa2BR80ihvjmzs0ibv1evtzZUQJ1n5sMJ1EY,5917
|
|
21
|
+
sqlspec/adapters/adbc/adk/__init__.py,sha256=WmvqapJ9vVBSixshpepooO-y3hAVd9QqRy_cAImHCHs,148
|
|
22
|
+
sqlspec/adapters/adbc/adk/store.py,sha256=XdBvWakOIJT17PpFBDRghhK9oCtrZ5mKmM__ejdrbM8,31039
|
|
23
|
+
sqlspec/adapters/adbc/litestar/__init__.py,sha256=6N4cgi35DMciFXYzpEAUVh9nUa20y4_KNAipGao-YdU,131
|
|
24
|
+
sqlspec/adapters/adbc/litestar/store.py,sha256=29bKHD78dfU7-jDRVnF56tGjBmcZk3QOJrmSFAaX7js,18216
|
|
25
|
+
sqlspec/adapters/aiosqlite/__init__.py,sha256=rgooFeHm7IsnC9fOnRQwMvbJdgkTvhnNTYphayVz9q8,869
|
|
26
|
+
sqlspec/adapters/aiosqlite/_types.py,sha256=Nh-bxhE4g-5IRKezmudRNZ7LufEfw2znK5WD7nDiA5I,344
|
|
27
|
+
sqlspec/adapters/aiosqlite/config.py,sha256=S037b4uIea5micK2zzddnC59SLeesBIMYumyywBTOys,11358
|
|
28
|
+
sqlspec/adapters/aiosqlite/data_dictionary.py,sha256=bkCyUk5hQkoNbQC6SAbEIaxTPePTLN9QFsTCIej7swk,5470
|
|
29
|
+
sqlspec/adapters/aiosqlite/driver.py,sha256=5miO6kv505DX0YFxUE3QrJLL9EppE8-FgBtR_dfgBos,13545
|
|
30
|
+
sqlspec/adapters/aiosqlite/pool.py,sha256=7HpvFeKMVRZtSqjKGJ8tTTZQ0zu9GJjt6JPyNmQRCsQ,17102
|
|
31
|
+
sqlspec/adapters/aiosqlite/adk/__init__.py,sha256=VIrNzrWCCFImdP4ShzEv0adz_WuKCtEUcYjI0pkeyUM,168
|
|
32
|
+
sqlspec/adapters/aiosqlite/adk/store.py,sha256=cZpa4lyjCuOCQbUlOQ9akBS0x8DTiQB8Ia7AknoQvSI,18745
|
|
33
|
+
sqlspec/adapters/aiosqlite/litestar/__init__.py,sha256=qYKYa2ZnRMX6HhvuyA5q8fLM39YYNPSpHt7L3VnpAZI,151
|
|
34
|
+
sqlspec/adapters/aiosqlite/litestar/store.py,sha256=KeI1qdi7O9jIIpkdd-KOS32nHTWzqHG_STvIIPUl0Lw,9528
|
|
35
|
+
sqlspec/adapters/asyncmy/__init__.py,sha256=4sL0sKKO8yv9FRJV_8TKskDrb9TBTsln-zzZ4Nyz7Vc,604
|
|
36
|
+
sqlspec/adapters/asyncmy/_types.py,sha256=j1RI4KzI5MB0aMoIW4bs2l_ysieL9Sf_dTFNkYCwKAQ,258
|
|
37
|
+
sqlspec/adapters/asyncmy/config.py,sha256=gm6F_NQxDXj770hKF_vwZrRazMcFcRMsq73hDYOZc_o,8763
|
|
38
|
+
sqlspec/adapters/asyncmy/data_dictionary.py,sha256=14zpMltG7MIxo9UMvzc5ih_McLT3xcvQ79K-JanfSI4,5728
|
|
39
|
+
sqlspec/adapters/asyncmy/driver.py,sha256=Re4RCEU35SFnuTRumM-KZgg601BPlB_wMQQfQV4M7bU,22304
|
|
40
|
+
sqlspec/adapters/asyncmy/adk/__init__.py,sha256=zSqQvbgVlIKbzz6PmT7SpIOuF0Uz9XlTMFPscjyI7xU,154
|
|
41
|
+
sqlspec/adapters/asyncmy/adk/store.py,sha256=-1klat9NTTyZ7svjkEEJtcMw0ZEpE4eOvibB3TkClog,19412
|
|
42
|
+
sqlspec/adapters/asyncmy/litestar/__init__.py,sha256=VNBusWFPvw4BBLHi7gSSY3S94JxjZ7oJoAavTVvcZ28,143
|
|
43
|
+
sqlspec/adapters/asyncmy/litestar/store.py,sha256=PSRRARvHJFFhPON-cAk6zMB6kiU3MjkefAlPW_8g86E,10877
|
|
44
|
+
sqlspec/adapters/asyncpg/__init__.py,sha256=obt5J2smlKbjkb43nyLnzNnlraAUIwzsi7PiAyowkNc,599
|
|
45
|
+
sqlspec/adapters/asyncpg/_type_handlers.py,sha256=fLW_h1Xbtwkz4ejvWGK2f2eN6sMf62W_MZL3d24sCYo,2632
|
|
46
|
+
sqlspec/adapters/asyncpg/_types.py,sha256=p7WytoO7p7Wd5LHiXMwwz4zkJmPG2kdLAsfQmIRceGw,479
|
|
47
|
+
sqlspec/adapters/asyncpg/config.py,sha256=eN9aS6Zz3z-I9J-JX-5qDhXQJ-onvZ3d_CareBj5a-4,11235
|
|
48
|
+
sqlspec/adapters/asyncpg/data_dictionary.py,sha256=U1Nz7asXgsj70rE5vSct60sWKvd07bisWzDhSgJjvnk,6378
|
|
49
|
+
sqlspec/adapters/asyncpg/driver.py,sha256=P69Te_CAVCgIwCjAeMv7t586jWSTO3omR13iuCBi7hg,16363
|
|
50
|
+
sqlspec/adapters/asyncpg/adk/__init__.py,sha256=eLH2mA_g4ZPgsRnC4H2GX5j-q2jgAwncCKVYa58mXhc,128
|
|
51
|
+
sqlspec/adapters/asyncpg/adk/store.py,sha256=-IeZpQe1Ma16DLOOC2xlLN3zU7YS6vsEIJLmCXay_-E,17625
|
|
52
|
+
sqlspec/adapters/asyncpg/litestar/__init__.py,sha256=0hAOSZ3sYOtdcpBQWoGh4lKhFQ0XHfwNv0UVa4TjbRA,143
|
|
53
|
+
sqlspec/adapters/asyncpg/litestar/store.py,sha256=B3U4iwBMQilQxoQUScywj4nO8niTTq5d5cnvdUq3qwc,8779
|
|
54
|
+
sqlspec/adapters/bigquery/__init__.py,sha256=1nzkWubO4ZObuK27QoeGfS05ed5v02NU4GaXrvqjlw0,504
|
|
55
|
+
sqlspec/adapters/bigquery/_types.py,sha256=z3sc2sknvbSsOemy999WRy_iFxqTM29TjlEVNQtxotc,244
|
|
56
|
+
sqlspec/adapters/bigquery/config.py,sha256=kLiYi1kmwROaBsZg3KdQE8o7KWUXUMwX_-Udrz_hfpM,10185
|
|
57
|
+
sqlspec/adapters/bigquery/data_dictionary.py,sha256=e5gAO_rGxO7slb3u1ZJghoI__8nzQjKCiv0GN1sVC94,5269
|
|
58
|
+
sqlspec/adapters/bigquery/driver.py,sha256=0lncnELCTehIV36z0p-WJWUp9ZVOQXlpxE8GqR0cZec,27531
|
|
59
|
+
sqlspec/adapters/bigquery/type_converter.py,sha256=Ag0W9au_k6qcKFKQVrenUK3fIwdXjdIilRsX8CDtAKE,4095
|
|
60
|
+
sqlspec/adapters/bigquery/adk/__init__.py,sha256=4gdL85tvrCZlg5NTxEWKR3hj6B8MNkUd7aT2dNMvWo8,180
|
|
61
|
+
sqlspec/adapters/bigquery/adk/store.py,sha256=NxWFo66T5XRjf2MwAkjnIhTmMjVQLPS5mjLLNZqvXyc,23980
|
|
62
|
+
sqlspec/adapters/bigquery/litestar/__init__.py,sha256=LBOWnWxEqc3qwRhuC2hTH2sKrm0hLrOc6U4qAhFOCyM,135
|
|
63
|
+
sqlspec/adapters/bigquery/litestar/store.py,sha256=6acXs8Me_UvHt2CzO9NqDHz3ikrHez1cr9LlJA7otV4,11374
|
|
64
|
+
sqlspec/adapters/duckdb/__init__.py,sha256=c5GCYxhTFhvB8fUTt_d-dipaQfM8X5kv4GsU47SwJ6E,693
|
|
65
|
+
sqlspec/adapters/duckdb/_types.py,sha256=TRR-MEQwq58p_Vfn0Pq-nsVfx4bfoUrCEEwPv46Vjsk,259
|
|
66
|
+
sqlspec/adapters/duckdb/config.py,sha256=wbkGPCfTMGLo-mzJllQdql6Nwe_QElTjqa1FtjYkHLo,12668
|
|
67
|
+
sqlspec/adapters/duckdb/data_dictionary.py,sha256=IZl-R0s37gnjevTJJcEjfMzYBiL0953xGBP2ooFnsUY,5618
|
|
68
|
+
sqlspec/adapters/duckdb/driver.py,sha256=imN_dXAoy6HsBr1IG5rv4TblXdzFXFTaBb38NaDooRo,17063
|
|
69
|
+
sqlspec/adapters/duckdb/pool.py,sha256=73CbyVFnXXgDt6dR1AadGhp0c4x7WjAKdSNDsBz5EXQ,8394
|
|
70
|
+
sqlspec/adapters/duckdb/type_converter.py,sha256=XdzRQgn5Jy-sDxS3Sx-yrjNW6Xrnn_NAWN60MnadGdk,4239
|
|
71
|
+
sqlspec/adapters/duckdb/adk/__init__.py,sha256=9hSx3Wga-uB-zUiB6UYm5xzOrU_xms7AZ1i6zO6bJ_w,462
|
|
72
|
+
sqlspec/adapters/duckdb/adk/store.py,sha256=0U464ENAonCG6luc4_odb7XOnWdWhaQSHVEVz8uHxIc,20438
|
|
73
|
+
sqlspec/adapters/duckdb/litestar/__init__.py,sha256=iSa3mPZom6bl6Z93FOZAgduLWpZocElSc1dvwbm5uJY,139
|
|
74
|
+
sqlspec/adapters/duckdb/litestar/store.py,sha256=QisjqUCHkKnHTiW1d_fwfEwKKPRFrxq9EK9tbkH37nQ,11346
|
|
75
|
+
sqlspec/adapters/oracledb/__init__.py,sha256=AUsZ8m9tDgNwxv9m4LtkIs9Ib6hOtBrGNm-Ee4HWNq0,843
|
|
76
|
+
sqlspec/adapters/oracledb/_numpy_handlers.py,sha256=UHW5qWPZFYZtE_IjzPojz_79TmmPvuVqj5P_uEUsLL0,3899
|
|
77
|
+
sqlspec/adapters/oracledb/_types.py,sha256=sKXDrq-igpBgqR1HDGF3_IXgMYWWGjHxxvMNOTQUxPA,1112
|
|
78
|
+
sqlspec/adapters/oracledb/config.py,sha256=Re9nSFovVKzVIEZqcuG85ULJdTx5or7jwMdkYSDLS-Y,16186
|
|
79
|
+
sqlspec/adapters/oracledb/data_dictionary.py,sha256=EhzqvaA1T5ZWwF3O-PuqkSkRLUl6H8oiTvwG4N26Txo,18431
|
|
80
|
+
sqlspec/adapters/oracledb/driver.py,sha256=bvqudKLBtVjn1qGCtHp-VxBlanDWAQigNpfnE1FJ6wA,29902
|
|
81
|
+
sqlspec/adapters/oracledb/migrations.py,sha256=SpzRjveh2_uIzCm0ljACaZZElaPhfcOnA4x1NyZMlA4,20512
|
|
82
|
+
sqlspec/adapters/oracledb/type_converter.py,sha256=SuJwZ2Zj8tpfOW-KxiYM_VHSuuMGY_RhBTi6eqfX-Ho,6512
|
|
83
|
+
sqlspec/adapters/oracledb/adk/__init__.py,sha256=SBTIRZvAbwpInepEE0abHFKRDxugLFqaf-j7rZ-nyCQ,186
|
|
84
|
+
sqlspec/adapters/oracledb/adk/store.py,sha256=M19y1H8oVY6q5v1kfBcFZrDuNDZqlklaPbtJ0lS0wkI,65521
|
|
85
|
+
sqlspec/adapters/oracledb/litestar/__init__.py,sha256=5SobanCEiJ2u-EBoy3GSrOp7e7hvPO4TyfbrtgqpQeU,182
|
|
86
|
+
sqlspec/adapters/oracledb/litestar/store.py,sha256=5gRbSdb0rKVMvBhKgE5WZj1F3FiTUSNFd-lsJEIDC50,27961
|
|
87
|
+
sqlspec/adapters/psqlpy/__init__.py,sha256=ABve2Oj-G-fxMO8WRJ0XzxEw2cs5H3INDnmUI99l8gc,526
|
|
88
|
+
sqlspec/adapters/psqlpy/_type_handlers.py,sha256=ZWil3zUlX76FTpK488peSxu7ML95jm92f4YeAvWceMI,1409
|
|
89
|
+
sqlspec/adapters/psqlpy/_types.py,sha256=3hq6W7udft_Fwc88yzNYJ1G6D58tDS0cywckU6q52TA,259
|
|
90
|
+
sqlspec/adapters/psqlpy/config.py,sha256=bTqhA1KwDBr-b_xqefrhIGkBRI_guqWwvVMoC4Y2O8c,9134
|
|
91
|
+
sqlspec/adapters/psqlpy/data_dictionary.py,sha256=dlrzGo5Ywv3oGXHR35U-G4v1MHTAapZ1_GGLgMpRe3Q,6352
|
|
92
|
+
sqlspec/adapters/psqlpy/driver.py,sha256=235DClWFTiBkh7rps2gFhZ3vuXqkaQW4n4G0xHE6DJo,15570
|
|
93
|
+
sqlspec/adapters/psqlpy/type_converter.py,sha256=gKDVddYZ0uZilxuIrrEShG9ghh9lUNnt7LDc5x1flvQ,3322
|
|
94
|
+
sqlspec/adapters/psqlpy/adk/__init__.py,sha256=WDkf6XSBk-4FUsCA7ostSlkS_o_6S41s5ScvRSSeW4o,124
|
|
95
|
+
sqlspec/adapters/psqlpy/adk/store.py,sha256=jfJsoUHvJigp6rBwCcs2emx1PpDkDxdHADhcX9t-4rA,19353
|
|
96
|
+
sqlspec/adapters/psqlpy/litestar/__init__.py,sha256=ODTxzJFNmexprYuBZcCxQWsJXPuSYySlr1_Kw6Vj-Sc,139
|
|
97
|
+
sqlspec/adapters/psqlpy/litestar/store.py,sha256=jfVzPPrRl33Fxma42Ud5-wVKei_OCWqpy_biA9CH-P8,9295
|
|
98
|
+
sqlspec/adapters/psycopg/__init__.py,sha256=swmTz8xlj6LvB-i78tBSE_T-sez2e6lFJW2cMzNJEVE,862
|
|
99
|
+
sqlspec/adapters/psycopg/_type_handlers.py,sha256=iD_wXXfwkllKgepKi8odj71eX_tEblMRQnL893NCOfE,2858
|
|
100
|
+
sqlspec/adapters/psycopg/_types.py,sha256=ncc_g5VxYWOZIL6Vhs0BdjrOsWYTpkrRezamjYnc3mg,553
|
|
101
|
+
sqlspec/adapters/psycopg/config.py,sha256=DrdGpbuiPukFX3PyVlL-lznrk41QtFd7rqeAoMleiwk,18066
|
|
102
|
+
sqlspec/adapters/psycopg/data_dictionary.py,sha256=PxJLdkpr-6XopOFROg9O7DoVB6y3YaGpuAOQmuTeqOY,12198
|
|
103
|
+
sqlspec/adapters/psycopg/driver.py,sha256=DmjgDnr-4w68DBks1mr1V6Vd5lJuLMj-dYI4zBZ26-4,32282
|
|
104
|
+
sqlspec/adapters/psycopg/adk/__init__.py,sha256=FOREU2erEdgmiG-1V7o9d8Ar6UrwYoS8KvIiH7Vo-ag,181
|
|
105
|
+
sqlspec/adapters/psycopg/adk/store.py,sha256=uimFeu87xXOKMrG9snNJJ9AamMwxpqZ-_yzNafiVlPE,38286
|
|
106
|
+
sqlspec/adapters/psycopg/litestar/__init__.py,sha256=xFA5YaFgl0hbBE_8MxRjGUDpnx4sPoYQsAMbhZrKkkE,190
|
|
107
|
+
sqlspec/adapters/psycopg/litestar/store.py,sha256=vCpBuBRiUgOrctqTo8NzmzbViGt4yzhEzhK6sBzVziY,19625
|
|
108
|
+
sqlspec/adapters/sqlite/__init__.py,sha256=0uFYe_VL5IwT5bvkH9lUndjPcu8NFArGnQ9nM3AtCTE,624
|
|
109
|
+
sqlspec/adapters/sqlite/_type_handlers.py,sha256=IZJiu5a0CxgnsZe2gVH0HwBLRjcmmzbzD7X_KqrCQ7k,3016
|
|
110
|
+
sqlspec/adapters/sqlite/_types.py,sha256=oYPmPPqBtHAinygPzXVAkZIUV_FU0hbmGAsOaemw1EM,235
|
|
111
|
+
sqlspec/adapters/sqlite/config.py,sha256=vRZOOTKEXuB0ox0lKMZpPQFEAI8AjvE0A5Xiey9OLvo,8206
|
|
112
|
+
sqlspec/adapters/sqlite/data_dictionary.py,sha256=RwG8KfVVl_2i9at02f7VFdkRF9GKk6sUY3rQUj2EKms,5357
|
|
113
|
+
sqlspec/adapters/sqlite/driver.py,sha256=3WUdPjUov4dqfwQ-Jmb0FyZMnEKslpslfWgrp8m27Bs,14904
|
|
114
|
+
sqlspec/adapters/sqlite/pool.py,sha256=dl9AtLrvDKdO78KPy4RimzhOZGzBufFgCBT1-HyX0do,4785
|
|
115
|
+
sqlspec/adapters/sqlite/adk/__init__.py,sha256=nT1sQ9W9PJhcdvgAv-HlnqvLPwMITlT8agl1_s40Ir4,156
|
|
116
|
+
sqlspec/adapters/sqlite/adk/store.py,sha256=BkKoFAb69L53EEX3e7bdvguoE9Jh0iOfNBt2T8uhom4,20803
|
|
117
|
+
sqlspec/adapters/sqlite/litestar/__init__.py,sha256=UFoArqozTzZGoxSCOvAXkxdS2Y1mPjR9WXC62XSlS6I,139
|
|
118
|
+
sqlspec/adapters/sqlite/litestar/store.py,sha256=MaZb2NtEbW47Er2zT_bJMk98r2EkACivrFJwrxK8A1c,10712
|
|
119
|
+
sqlspec/builder/__init__.py,sha256=LqO24DLVjLkSTrrddBJt-QhHpR-1ffdyt7jw60Jt4nk,3255
|
|
120
|
+
sqlspec/builder/_base.py,sha256=kQ_lJIR6FxDMSSLjyYd_vK8bLwpyq3UgJGYNwAOcxHM,23776
|
|
121
|
+
sqlspec/builder/_column.py,sha256=T5yI-Pw3Yw9EBYCib5bCbax3Ozh6hdln8EI7BQ6n2cg,14678
|
|
122
|
+
sqlspec/builder/_ddl.py,sha256=3LfvWDsvN1atwiaLvcWJ8vbk7jmMHqK6Foh-e5o0_gM,58065
|
|
123
|
+
sqlspec/builder/_delete.py,sha256=YNumRMwuVi3VKURgcatW8oIvIMMXcFp9qIiUqph8_hI,2147
|
|
124
|
+
sqlspec/builder/_dml.py,sha256=VE1OOhggo7a7XnV2J4SDU8Q2nd94dT6xMPVBXaalgjw,15675
|
|
125
|
+
sqlspec/builder/_expression_wrappers.py,sha256=HTl8qAFD4sZNXLD2akkJWGCPse2HWS237mTGE4Cx_7I,1244
|
|
126
|
+
sqlspec/builder/_factory.py,sha256=rBI7uA5O1VqkP0qEs5Udho1dRBU_VB82JflB0FYAS3g,44710
|
|
127
|
+
sqlspec/builder/_insert.py,sha256=66TgMqiIscddOrEzwT_SRBli5PV0yZSXMftA_63gcy0,10987
|
|
128
|
+
sqlspec/builder/_join.py,sha256=F4lV_qXGUCBkmtWd_KhSzcEbXKATWvUFGwDiBMjuLp8,13897
|
|
129
|
+
sqlspec/builder/_merge.py,sha256=Dz3JwiUYBKDEtd3dWFhlcACaLvmXNLB_7jaQQeQgdXo,21610
|
|
130
|
+
sqlspec/builder/_parsing_utils.py,sha256=NBrb37TYiy-zNFdHE-RsBl3bfSVb0HUCmaZzsgdz93Q,11890
|
|
131
|
+
sqlspec/builder/_select.py,sha256=201_Ed826ipJqPh7qnGy6ebg5NJfIh8nnYxsAgMrjU0,71340
|
|
132
|
+
sqlspec/builder/_update.py,sha256=bV9WxH884nR8Fy5LxG1ZX2NjHAWhIKCelD6CARGhP0Q,4719
|
|
133
|
+
sqlspec/core/__init__.py,sha256=TmLIXSb1pUDqxxQQwNjl9FZWbWuLn84itmr76F0oI0s,5269
|
|
134
|
+
sqlspec/core/cache.py,sha256=1nkNAuStXN4h2wkCAgByleHKoLx3jbDGKO0kUHJYV7M,22796
|
|
135
|
+
sqlspec/core/compiler.py,sha256=HWVjxGSyjFVHN8eAjTKfxP7e3Y_qhc9NybmCvYvcRh0,14956
|
|
136
|
+
sqlspec/core/filters.py,sha256=vez88M_TrGnDW12wqjGlp0Sk5d9f8VwBoikSds8PwuM,30064
|
|
137
|
+
sqlspec/core/hashing.py,sha256=yAsdHr-Jg4lEjlKEgeqLHZsDtSG8XOdyr1_XnKV-vmo,8475
|
|
138
|
+
sqlspec/core/parameters.py,sha256=DK278ZXXTMWxBhOdUuggoBnncXbnBY9hpuVsQf0VJ3Q,51100
|
|
139
|
+
sqlspec/core/result.py,sha256=hnNY-YmickJv0zwEQXEteKLOv1ZgA2hbmr1WetN_5e0,24576
|
|
140
|
+
sqlspec/core/splitter.py,sha256=t0v7ozAKIYuVMuUUoRXXr2uk483FnQPpihdfs4v7hvA,30906
|
|
141
|
+
sqlspec/core/statement.py,sha256=nejnLn1pV5Ao-DYx7qOt0xwJIOHG6G1onOTz-7fl0Nc,30029
|
|
142
|
+
sqlspec/core/type_conversion.py,sha256=jc84xjkVJ9O1KrJ__wiGKb6JIPmwZUG4i8VKreeDrn0,6040
|
|
143
|
+
sqlspec/driver/__init__.py,sha256=8vv4gBOihBjN05ZkT30Bk6RnBK70DQpY7KBGP3TQ_dg,679
|
|
144
|
+
sqlspec/driver/_async.py,sha256=48AVFIvnciqHetzkZEbiPzLHuwTsWSp28BIAFtToZM0,19148
|
|
145
|
+
sqlspec/driver/_common.py,sha256=9W6Bxca0QBIexVvRzV358e1BWkZ_rJHjXSqZNNA5JmE,31880
|
|
146
|
+
sqlspec/driver/_sync.py,sha256=pxpVAaBqBRpSpF2BHXG_k-uAu-OoUhc6w9Byum2zzrc,18807
|
|
147
|
+
sqlspec/driver/mixins/__init__.py,sha256=gN4pQyJXxNy0xi91dcMJGA7DQ7TbjGjQI24SSpZc6Go,248
|
|
148
|
+
sqlspec/driver/mixins/_result_tools.py,sha256=MYSN34YHPVsSct0h7tYXNNZXXjOycCQAZPymHizRVbs,1940
|
|
149
|
+
sqlspec/driver/mixins/_sql_translator.py,sha256=Tonq6jZsP49C-zvf-UCRy_y4EDWrkT5ikSRXjW0BK1k,3692
|
|
150
|
+
sqlspec/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
151
|
+
sqlspec/extensions/adk/__init__.py,sha256=dss2RuPKgDESTAp3EFTEiMEbvRSnstp1GQemD49RPQE,1793
|
|
152
|
+
sqlspec/extensions/adk/_types.py,sha256=PXwnAZqkQ2MdIvzOXVURLqtB58UvSCuaTyJa_bTR4Rg,1282
|
|
153
|
+
sqlspec/extensions/adk/converters.py,sha256=8VAhnCgZl1Dv-prqGWv86oCJqaW4T8JGF6TsEPVqVxw,5213
|
|
154
|
+
sqlspec/extensions/adk/service.py,sha256=h4LhZXjoakUxGh-Ulw-2BIlXju3wZ8JUrRFMlwQT6sc,5728
|
|
155
|
+
sqlspec/extensions/adk/store.py,sha256=ZGafhuuCAF1pkNP-vx8NeFWoYaUof0lnyZ1CINxdTwo,18304
|
|
156
|
+
sqlspec/extensions/adk/migrations/0001_create_adk_tables.py,sha256=Tx3V-x36xrNKSBmHOB_qfwtL3XGemWuRDl5wuf_DO_U,4710
|
|
157
|
+
sqlspec/extensions/adk/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
158
|
+
sqlspec/extensions/aiosql/__init__.py,sha256=-9cefc9pYPf9vCgALoB-y1DtmcgRjKe2azfl6RIarAA,414
|
|
159
|
+
sqlspec/extensions/aiosql/adapter.py,sha256=irtB0Cf4glG8ipAcok5vsFXvugTUbygDkCESiLdt8fo,16555
|
|
160
|
+
sqlspec/extensions/litestar/__init__.py,sha256=jKafxBsk88967GgaZq5qT4LU3WPTx_Fs8Gx61W8FvdA,600
|
|
161
|
+
sqlspec/extensions/litestar/_utils.py,sha256=iaicqnnkC5CuDwJKStz0T7lFaYMrgR96SYKZpe71v2g,1950
|
|
162
|
+
sqlspec/extensions/litestar/cli.py,sha256=DRfkSSrBvQRIlEbigVNM2YNquPxRv3v9_xHJkBSl5tw,3082
|
|
163
|
+
sqlspec/extensions/litestar/config.py,sha256=1PFW_HyBpsC6mbjfSi5zvRBA5cOKY0EQnXbGhnIssF8,2176
|
|
164
|
+
sqlspec/extensions/litestar/handlers.py,sha256=mDHV7lTWvOmu9l93XpFXSsp0AATQShikfkaT9wQo7io,11430
|
|
165
|
+
sqlspec/extensions/litestar/plugin.py,sha256=9ATV-vzwkCaJPifmvytsJ6VF0aePnYlcSy86F_sjek4,20534
|
|
166
|
+
sqlspec/extensions/litestar/providers.py,sha256=dWteii3K4k4v-g_ss2wwz5BhJW95WZs4fxS5uvgtMeI,18760
|
|
167
|
+
sqlspec/extensions/litestar/store.py,sha256=P-jgaNFSwZuDZ4NPpK4CN2VosRdWqOhecRie2ZGN9tU,8436
|
|
168
|
+
sqlspec/extensions/litestar/migrations/0001_create_session_table.py,sha256=HKOPlSqjRnJ-E8jKs6yKG6d-MpwfZ9tTp6zFEb-DoOM,4456
|
|
169
|
+
sqlspec/extensions/litestar/migrations/__init__.py,sha256=eqGG1LOq1GcLb6ggOJA__7MvoikTtALV_9oTTFuM4QQ,78
|
|
170
|
+
sqlspec/migrations/__init__.py,sha256=Q6FIb529_Eeym_eLyVgRRVeT512iBzwTPGv99okf2_Q,1127
|
|
171
|
+
sqlspec/migrations/base.py,sha256=3nfBsp0pV6-l5MNAHGLtoqPFETQYaGh09A1q9cpih4U,23594
|
|
172
|
+
sqlspec/migrations/commands.py,sha256=k4BAmYeD4OPM48-cEdNFLd-MlHkW7sht5lDsTaNTR-g,40321
|
|
173
|
+
sqlspec/migrations/context.py,sha256=wHfsJa2YSpAe1shkodnhr93J_zuB0qngCn-vNOoNgss,4861
|
|
174
|
+
sqlspec/migrations/fix.py,sha256=oP0XP3Mu6SXNjivHww9WY6JXDb2H0aKyHgUP44hnWQE,6973
|
|
175
|
+
sqlspec/migrations/loaders.py,sha256=Ys9CUVp5t7aGAMXvByqAzXDrhpvhex6zukO6rmR2phM,15305
|
|
176
|
+
sqlspec/migrations/runner.py,sha256=8z_gMYY8UF-AR_5-MXVXCMrdk17e2QiqHl92GDgSgm4,28767
|
|
177
|
+
sqlspec/migrations/tracker.py,sha256=VhoiTpYiTI1YHadhbOmnM4UOq2sY1YyvBhaxRbIEP4A,15531
|
|
178
|
+
sqlspec/migrations/utils.py,sha256=nKzpukPmSqy7ABdhRaCoib6Ls8G6q8Ou7CyocTu6l1w,5128
|
|
179
|
+
sqlspec/migrations/validation.py,sha256=WsxngSRj8jzbfXoEuseDTFgPBbYrEx-lHVHlYJ7svy8,6017
|
|
180
|
+
sqlspec/storage/__init__.py,sha256=IX7xLuymGdQKOBQL1sNEA-bzZRJGjncUbQbs6ZToDDE,395
|
|
181
|
+
sqlspec/storage/_utils.py,sha256=jG7St1z4kR5KDKUoy3e-rtRPlvpeIPe4C0s0krRZzHU,3025
|
|
182
|
+
sqlspec/storage/registry.py,sha256=CWMpB-zLa1ztiIcsliIw3hRi2Mmz8-s2VPwVbOI7_4E,12226
|
|
183
|
+
sqlspec/storage/backends/__init__.py,sha256=3oSqwEQ_trU2QoxtUTX-5IFeOvo7WGcESY6gIfcmSaE,24
|
|
184
|
+
sqlspec/storage/backends/base.py,sha256=KS2JRZILoH_R_xsfKtYkqQ5a1r5OOBDSE5KbibTmhGY,5730
|
|
185
|
+
sqlspec/storage/backends/fsspec.py,sha256=RydZP9m-4u4BX2nwyWCCOQNkaAefMmpm0cJi4-0YgPk,15123
|
|
186
|
+
sqlspec/storage/backends/local.py,sha256=SSAZJcOaq32WZJqbQq5tdQRGXT4bt6F7CZKV6Mpa-PQ,13235
|
|
187
|
+
sqlspec/storage/backends/obstore.py,sha256=89k2-Pn74YVZMtTgpdNxDjUgx4axkPf2xDEhC1tiGZQ,25470
|
|
188
|
+
sqlspec/utils/__init__.py,sha256=cNFX26-bLyZTyTfujUitfDkUy1CeG_d-EIr8kZ0z4W8,474
|
|
189
|
+
sqlspec/utils/config_resolver.py,sha256=bcq30KohF-0zQ15u2QfCdF8AGTRxeB4RaKNs7DpbiLA,5446
|
|
190
|
+
sqlspec/utils/correlation.py,sha256=zZhB8k9w1gBne7Gp6DtrlKBodu5wdS4_ZUfnXqnhUSw,4190
|
|
191
|
+
sqlspec/utils/data_transformation.py,sha256=Eh8lcJ9M3WG3dfyI4R2DDZ2pmXSbbQ3mklHO8DjGqqU,3961
|
|
192
|
+
sqlspec/utils/deprecation.py,sha256=bpNYZkL_2mx9VIwet3579CGRuyOGCclMjGcZShoU2PY,3976
|
|
193
|
+
sqlspec/utils/fixtures.py,sha256=dX__GaKHWD19A-De7Dahv4UJnvEF11pcGzocpHkYdYU,9419
|
|
194
|
+
sqlspec/utils/logging.py,sha256=PK0SFRjfEwAn1eFPdtl0WeCO0h-7S2mGwyMSlnRmPGA,5016
|
|
195
|
+
sqlspec/utils/module_loader.py,sha256=ZP0hAPi9mxbPyvWeF8vwhLAtWyPFl9ABzgrehm0lttQ,2982
|
|
196
|
+
sqlspec/utils/schema.py,sha256=Kby4KwWIof-6uyU53YI_AitfejPndElhDq4V4PY8QNI,9470
|
|
197
|
+
sqlspec/utils/serializers.py,sha256=KnEBAC-Q3bNTkdK3MXi55nyJXelKwj1AqzLT4aXt7tE,1466
|
|
198
|
+
sqlspec/utils/singleton.py,sha256=-j-s6LS0pP_wTEUYIyK2wSdoeIE_tn7O7B-j7_aODRQ,1252
|
|
199
|
+
sqlspec/utils/sync_tools.py,sha256=YMIAguqOCtOut3VdafHpqmgY_ylrUnRPJ3NnrvyhpFg,9067
|
|
200
|
+
sqlspec/utils/text.py,sha256=M_el3hgcSF-gFrFgHWmv4e3u4nvmsXpOolDBuVoMaRs,3302
|
|
201
|
+
sqlspec/utils/type_guards.py,sha256=TWiXZsgtNxPETRJF9k4wt1n_znplJY_uOc7kxqLM5gY,35954
|
|
202
|
+
sqlspec/utils/version.py,sha256=8hKa0dGVNcJ6hRFhabM5U6haCUQGNBJg5LCe0pEbi6A,13767
|
|
203
|
+
sqlspec-0.27.0.dist-info/METADATA,sha256=cCJDk-CYLIOVvrPxIPkQD8mHtbXThNE3AntlYSpF4rI,24255
|
|
204
|
+
sqlspec-0.27.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
205
|
+
sqlspec-0.27.0.dist-info/entry_points.txt,sha256=G-ZqY1Nuuw3Iys7nXw23f6ILenk_Lt47VdK2mhJCWHg,53
|
|
206
|
+
sqlspec-0.27.0.dist-info/licenses/LICENSE,sha256=MdujfZ6l5HuLz4mElxlu049itenOR3gnhN1_Nd3nVcM,1078
|
|
207
|
+
sqlspec-0.27.0.dist-info/RECORD,,
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"""SQL statement builder mixins."""
|
|
2
|
-
|
|
3
|
-
from sqlspec.builder.mixins._cte_and_set_ops import CommonTableExpressionMixin, SetOperationMixin
|
|
4
|
-
from sqlspec.builder.mixins._delete_operations import DeleteFromClauseMixin
|
|
5
|
-
from sqlspec.builder.mixins._insert_operations import InsertFromSelectMixin, InsertIntoClauseMixin, InsertValuesMixin
|
|
6
|
-
from sqlspec.builder.mixins._join_operations import JoinClauseMixin
|
|
7
|
-
from sqlspec.builder.mixins._merge_operations import (
|
|
8
|
-
MergeIntoClauseMixin,
|
|
9
|
-
MergeMatchedClauseMixin,
|
|
10
|
-
MergeNotMatchedBySourceClauseMixin,
|
|
11
|
-
MergeNotMatchedClauseMixin,
|
|
12
|
-
MergeOnClauseMixin,
|
|
13
|
-
MergeUsingClauseMixin,
|
|
14
|
-
)
|
|
15
|
-
from sqlspec.builder.mixins._order_limit_operations import (
|
|
16
|
-
LimitOffsetClauseMixin,
|
|
17
|
-
OrderByClauseMixin,
|
|
18
|
-
ReturningClauseMixin,
|
|
19
|
-
)
|
|
20
|
-
from sqlspec.builder.mixins._pivot_operations import PivotClauseMixin, UnpivotClauseMixin
|
|
21
|
-
from sqlspec.builder.mixins._select_operations import CaseBuilder, SelectClauseMixin
|
|
22
|
-
from sqlspec.builder.mixins._update_operations import (
|
|
23
|
-
UpdateFromClauseMixin,
|
|
24
|
-
UpdateSetClauseMixin,
|
|
25
|
-
UpdateTableClauseMixin,
|
|
26
|
-
)
|
|
27
|
-
from sqlspec.builder.mixins._where_clause import HavingClauseMixin, WhereClauseMixin
|
|
28
|
-
|
|
29
|
-
__all__ = (
|
|
30
|
-
"CaseBuilder",
|
|
31
|
-
"CommonTableExpressionMixin",
|
|
32
|
-
"DeleteFromClauseMixin",
|
|
33
|
-
"HavingClauseMixin",
|
|
34
|
-
"InsertFromSelectMixin",
|
|
35
|
-
"InsertIntoClauseMixin",
|
|
36
|
-
"InsertValuesMixin",
|
|
37
|
-
"JoinClauseMixin",
|
|
38
|
-
"LimitOffsetClauseMixin",
|
|
39
|
-
"MergeIntoClauseMixin",
|
|
40
|
-
"MergeMatchedClauseMixin",
|
|
41
|
-
"MergeNotMatchedBySourceClauseMixin",
|
|
42
|
-
"MergeNotMatchedClauseMixin",
|
|
43
|
-
"MergeOnClauseMixin",
|
|
44
|
-
"MergeUsingClauseMixin",
|
|
45
|
-
"OrderByClauseMixin",
|
|
46
|
-
"PivotClauseMixin",
|
|
47
|
-
"ReturningClauseMixin",
|
|
48
|
-
"SelectClauseMixin",
|
|
49
|
-
"SetOperationMixin",
|
|
50
|
-
"UnpivotClauseMixin",
|
|
51
|
-
"UpdateFromClauseMixin",
|
|
52
|
-
"UpdateSetClauseMixin",
|
|
53
|
-
"UpdateTableClauseMixin",
|
|
54
|
-
"WhereClauseMixin",
|
|
55
|
-
)
|
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
# pyright: reportPrivateUsage=false
|
|
2
|
-
"""CTE and set operation mixins.
|
|
3
|
-
|
|
4
|
-
Provides mixins for Common Table Expressions (WITH clause) and
|
|
5
|
-
set operations (UNION, INTERSECT, EXCEPT).
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
from typing import TYPE_CHECKING, Any, Optional, Union, cast
|
|
9
|
-
|
|
10
|
-
from mypy_extensions import trait
|
|
11
|
-
from sqlglot import exp
|
|
12
|
-
from typing_extensions import Self
|
|
13
|
-
|
|
14
|
-
from sqlspec.exceptions import SQLBuilderError
|
|
15
|
-
|
|
16
|
-
if TYPE_CHECKING:
|
|
17
|
-
from sqlspec.builder._base import QueryBuilder
|
|
18
|
-
|
|
19
|
-
__all__ = ("CommonTableExpressionMixin", "SetOperationMixin")
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
@trait
|
|
23
|
-
class CommonTableExpressionMixin:
|
|
24
|
-
"""Mixin providing WITH clause (Common Table Expressions) support for SQL builders."""
|
|
25
|
-
|
|
26
|
-
__slots__ = ()
|
|
27
|
-
|
|
28
|
-
# Type annotations for PyRight - these will be provided by the base class
|
|
29
|
-
def get_expression(self) -> Optional[exp.Expression]: ...
|
|
30
|
-
def set_expression(self, expression: exp.Expression) -> None: ...
|
|
31
|
-
|
|
32
|
-
_with_ctes: Any # Provided by QueryBuilder
|
|
33
|
-
dialect: Any # Provided by QueryBuilder
|
|
34
|
-
|
|
35
|
-
def add_parameter(self, value: Any, name: Optional[str] = None) -> tuple[Any, str]:
|
|
36
|
-
"""Add parameter - provided by QueryBuilder."""
|
|
37
|
-
msg = "Method must be provided by QueryBuilder subclass"
|
|
38
|
-
raise NotImplementedError(msg)
|
|
39
|
-
|
|
40
|
-
def _generate_unique_parameter_name(self, base_name: str) -> str:
|
|
41
|
-
"""Generate unique parameter name - provided by QueryBuilder."""
|
|
42
|
-
msg = "Method must be provided by QueryBuilder subclass"
|
|
43
|
-
raise NotImplementedError(msg)
|
|
44
|
-
|
|
45
|
-
def _update_placeholders_in_expression(
|
|
46
|
-
self, expression: exp.Expression, param_mapping: dict[str, str]
|
|
47
|
-
) -> exp.Expression:
|
|
48
|
-
"""Update parameter placeholders - provided by QueryBuilder."""
|
|
49
|
-
msg = "Method must be provided by QueryBuilder subclass"
|
|
50
|
-
raise NotImplementedError(msg)
|
|
51
|
-
|
|
52
|
-
def with_(
|
|
53
|
-
self, name: str, query: Union[Any, str], recursive: bool = False, columns: Optional[list[str]] = None
|
|
54
|
-
) -> Self:
|
|
55
|
-
"""Add WITH clause (Common Table Expression).
|
|
56
|
-
|
|
57
|
-
Args:
|
|
58
|
-
name: The name of the CTE.
|
|
59
|
-
query: The query for the CTE (builder instance or SQL string).
|
|
60
|
-
recursive: Whether this is a recursive CTE.
|
|
61
|
-
columns: Optional column names for the CTE.
|
|
62
|
-
|
|
63
|
-
Raises:
|
|
64
|
-
SQLBuilderError: If the query type is unsupported.
|
|
65
|
-
|
|
66
|
-
Returns:
|
|
67
|
-
The current builder instance for method chaining.
|
|
68
|
-
"""
|
|
69
|
-
builder = cast("QueryBuilder", self)
|
|
70
|
-
expression = builder.get_expression()
|
|
71
|
-
if expression is None:
|
|
72
|
-
msg = "Cannot add WITH clause: expression not initialized."
|
|
73
|
-
raise SQLBuilderError(msg)
|
|
74
|
-
|
|
75
|
-
if not isinstance(expression, (exp.Select, exp.Insert, exp.Update, exp.Delete)):
|
|
76
|
-
msg = f"Cannot add WITH clause to {type(expression).__name__} expression."
|
|
77
|
-
raise SQLBuilderError(msg)
|
|
78
|
-
|
|
79
|
-
cte_expr: Optional[exp.Expression] = None
|
|
80
|
-
if isinstance(query, str):
|
|
81
|
-
cte_expr = exp.maybe_parse(query, dialect=self.dialect)
|
|
82
|
-
elif isinstance(query, exp.Expression):
|
|
83
|
-
cte_expr = query
|
|
84
|
-
else:
|
|
85
|
-
built_query = query.to_statement()
|
|
86
|
-
cte_sql = built_query.sql
|
|
87
|
-
cte_expr = exp.maybe_parse(cte_sql, dialect=self.dialect)
|
|
88
|
-
|
|
89
|
-
parameters = built_query.parameters
|
|
90
|
-
if parameters:
|
|
91
|
-
if isinstance(parameters, dict):
|
|
92
|
-
param_mapping = {}
|
|
93
|
-
for param_name, param_value in parameters.items():
|
|
94
|
-
unique_name = self._generate_unique_parameter_name(f"{name}_{param_name}")
|
|
95
|
-
param_mapping[param_name] = unique_name
|
|
96
|
-
self.add_parameter(param_value, name=unique_name)
|
|
97
|
-
|
|
98
|
-
# Update placeholders in the parsed expression
|
|
99
|
-
if cte_expr and param_mapping:
|
|
100
|
-
cte_expr = self._update_placeholders_in_expression(cte_expr, param_mapping)
|
|
101
|
-
elif isinstance(parameters, (list, tuple)):
|
|
102
|
-
for param_value in parameters:
|
|
103
|
-
self.add_parameter(param_value)
|
|
104
|
-
|
|
105
|
-
if not cte_expr:
|
|
106
|
-
msg = f"Could not parse CTE query: {query}"
|
|
107
|
-
raise SQLBuilderError(msg)
|
|
108
|
-
|
|
109
|
-
if columns:
|
|
110
|
-
cte_alias_expr = exp.alias_(cte_expr, name, table=[exp.to_identifier(col) for col in columns])
|
|
111
|
-
else:
|
|
112
|
-
cte_alias_expr = exp.alias_(cte_expr, name)
|
|
113
|
-
|
|
114
|
-
existing_with = expression.args.get("with")
|
|
115
|
-
if existing_with:
|
|
116
|
-
existing_with.expressions.append(cte_alias_expr)
|
|
117
|
-
if recursive:
|
|
118
|
-
existing_with.set("recursive", recursive)
|
|
119
|
-
else:
|
|
120
|
-
if isinstance(expression, (exp.Select, exp.Insert, exp.Update)):
|
|
121
|
-
updated_expression = expression.with_(cte_alias_expr, as_=name, copy=False)
|
|
122
|
-
builder.set_expression(updated_expression)
|
|
123
|
-
if recursive:
|
|
124
|
-
with_clause = updated_expression.find(exp.With)
|
|
125
|
-
if with_clause:
|
|
126
|
-
with_clause.set("recursive", recursive)
|
|
127
|
-
self._with_ctes[name] = exp.CTE(this=cte_expr, alias=exp.to_table(name))
|
|
128
|
-
|
|
129
|
-
return self
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
@trait
|
|
133
|
-
class SetOperationMixin:
|
|
134
|
-
"""Mixin providing set operations (UNION, INTERSECT, EXCEPT) for SELECT builders."""
|
|
135
|
-
|
|
136
|
-
__slots__ = ()
|
|
137
|
-
|
|
138
|
-
# Type annotations for PyRight - these will be provided by the base class
|
|
139
|
-
def get_expression(self) -> Optional[exp.Expression]: ...
|
|
140
|
-
def set_expression(self, expression: exp.Expression) -> None: ...
|
|
141
|
-
def set_parameters(self, parameters: "dict[str, Any]") -> None: ...
|
|
142
|
-
|
|
143
|
-
dialect: Any = None
|
|
144
|
-
|
|
145
|
-
def build(self) -> Any:
|
|
146
|
-
"""Build the query - provided by QueryBuilder."""
|
|
147
|
-
msg = "Method must be provided by QueryBuilder subclass"
|
|
148
|
-
raise NotImplementedError(msg)
|
|
149
|
-
|
|
150
|
-
def union(self, other: Any, all_: bool = False) -> Self:
|
|
151
|
-
"""Combine this query with another using UNION.
|
|
152
|
-
|
|
153
|
-
Args:
|
|
154
|
-
other: Another SelectBuilder or compatible builder to union with.
|
|
155
|
-
all_: If True, use UNION ALL instead of UNION.
|
|
156
|
-
|
|
157
|
-
Raises:
|
|
158
|
-
SQLBuilderError: If the current expression is not a SELECT statement.
|
|
159
|
-
|
|
160
|
-
Returns:
|
|
161
|
-
The new builder instance for the union query.
|
|
162
|
-
"""
|
|
163
|
-
left_query = self.build()
|
|
164
|
-
right_query = other.build()
|
|
165
|
-
left_expr: Optional[exp.Expression] = exp.maybe_parse(left_query.sql, dialect=self.dialect)
|
|
166
|
-
right_expr: Optional[exp.Expression] = exp.maybe_parse(right_query.sql, dialect=self.dialect)
|
|
167
|
-
if not left_expr or not right_expr:
|
|
168
|
-
msg = "Could not parse queries for UNION operation"
|
|
169
|
-
raise SQLBuilderError(msg)
|
|
170
|
-
union_expr = exp.union(left_expr, right_expr, distinct=not all_)
|
|
171
|
-
new_builder = type(self)()
|
|
172
|
-
new_builder.dialect = self.dialect
|
|
173
|
-
cast("QueryBuilder", new_builder).set_expression(union_expr)
|
|
174
|
-
merged_parameters = dict(left_query.parameters)
|
|
175
|
-
for param_name, param_value in right_query.parameters.items():
|
|
176
|
-
if param_name in merged_parameters:
|
|
177
|
-
counter = 1
|
|
178
|
-
new_param_name = f"{param_name}_right_{counter}"
|
|
179
|
-
while new_param_name in merged_parameters:
|
|
180
|
-
counter += 1
|
|
181
|
-
new_param_name = f"{param_name}_right_{counter}"
|
|
182
|
-
|
|
183
|
-
def rename_parameter(
|
|
184
|
-
node: exp.Expression, old_name: str = param_name, new_name: str = new_param_name
|
|
185
|
-
) -> exp.Expression:
|
|
186
|
-
if isinstance(node, exp.Placeholder) and node.name == old_name:
|
|
187
|
-
return exp.Placeholder(this=new_name)
|
|
188
|
-
return node
|
|
189
|
-
|
|
190
|
-
right_expr = right_expr.transform(rename_parameter)
|
|
191
|
-
union_expr = exp.union(left_expr, right_expr, distinct=not all_)
|
|
192
|
-
cast("QueryBuilder", new_builder).set_expression(union_expr)
|
|
193
|
-
merged_parameters[new_param_name] = param_value
|
|
194
|
-
else:
|
|
195
|
-
merged_parameters[param_name] = param_value
|
|
196
|
-
new_builder.set_parameters(merged_parameters)
|
|
197
|
-
return new_builder
|
|
198
|
-
|
|
199
|
-
def intersect(self, other: Any) -> Self:
|
|
200
|
-
"""Add INTERSECT clause.
|
|
201
|
-
|
|
202
|
-
Args:
|
|
203
|
-
other: Another SelectBuilder or compatible builder to intersect with.
|
|
204
|
-
|
|
205
|
-
Raises:
|
|
206
|
-
SQLBuilderError: If the current expression is not a SELECT statement.
|
|
207
|
-
|
|
208
|
-
Returns:
|
|
209
|
-
The new builder instance for the intersect query.
|
|
210
|
-
"""
|
|
211
|
-
left_query = self.build()
|
|
212
|
-
right_query = other.build()
|
|
213
|
-
left_expr: Optional[exp.Expression] = exp.maybe_parse(left_query.sql, dialect=self.dialect)
|
|
214
|
-
right_expr: Optional[exp.Expression] = exp.maybe_parse(right_query.sql, dialect=self.dialect)
|
|
215
|
-
if not left_expr or not right_expr:
|
|
216
|
-
msg = "Could not parse queries for INTERSECT operation"
|
|
217
|
-
raise SQLBuilderError(msg)
|
|
218
|
-
intersect_expr = exp.intersect(left_expr, right_expr, distinct=True)
|
|
219
|
-
new_builder = type(self)()
|
|
220
|
-
new_builder.dialect = self.dialect
|
|
221
|
-
cast("QueryBuilder", new_builder).set_expression(intersect_expr)
|
|
222
|
-
merged_parameters = dict(left_query.parameters)
|
|
223
|
-
merged_parameters.update(right_query.parameters)
|
|
224
|
-
new_builder.set_parameters(merged_parameters)
|
|
225
|
-
return new_builder
|
|
226
|
-
|
|
227
|
-
def except_(self, other: Any) -> Self:
|
|
228
|
-
"""Combine this query with another using EXCEPT.
|
|
229
|
-
|
|
230
|
-
Args:
|
|
231
|
-
other: Another SelectBuilder or compatible builder to except with.
|
|
232
|
-
|
|
233
|
-
Raises:
|
|
234
|
-
SQLBuilderError: If the current expression is not a SELECT statement.
|
|
235
|
-
|
|
236
|
-
Returns:
|
|
237
|
-
The new builder instance for the except query.
|
|
238
|
-
"""
|
|
239
|
-
left_query = self.build()
|
|
240
|
-
right_query = other.build()
|
|
241
|
-
left_expr: Optional[exp.Expression] = exp.maybe_parse(left_query.sql, dialect=self.dialect)
|
|
242
|
-
right_expr: Optional[exp.Expression] = exp.maybe_parse(right_query.sql, dialect=self.dialect)
|
|
243
|
-
if not left_expr or not right_expr:
|
|
244
|
-
msg = "Could not parse queries for EXCEPT operation"
|
|
245
|
-
raise SQLBuilderError(msg)
|
|
246
|
-
except_expr = exp.except_(left_expr, right_expr)
|
|
247
|
-
new_builder = type(self)()
|
|
248
|
-
new_builder.dialect = self.dialect
|
|
249
|
-
cast("QueryBuilder", new_builder).set_expression(except_expr)
|
|
250
|
-
merged_parameters = dict(left_query.parameters)
|
|
251
|
-
merged_parameters.update(right_query.parameters)
|
|
252
|
-
new_builder.set_parameters(merged_parameters)
|
|
253
|
-
return new_builder
|