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.

Files changed (197) hide show
  1. sqlspec/__init__.py +7 -15
  2. sqlspec/_serialization.py +55 -25
  3. sqlspec/_typing.py +62 -52
  4. sqlspec/adapters/adbc/_types.py +1 -1
  5. sqlspec/adapters/adbc/adk/__init__.py +5 -0
  6. sqlspec/adapters/adbc/adk/store.py +870 -0
  7. sqlspec/adapters/adbc/config.py +62 -12
  8. sqlspec/adapters/adbc/data_dictionary.py +52 -2
  9. sqlspec/adapters/adbc/driver.py +144 -45
  10. sqlspec/adapters/adbc/litestar/__init__.py +5 -0
  11. sqlspec/adapters/adbc/litestar/store.py +504 -0
  12. sqlspec/adapters/adbc/type_converter.py +44 -50
  13. sqlspec/adapters/aiosqlite/_types.py +1 -1
  14. sqlspec/adapters/aiosqlite/adk/__init__.py +5 -0
  15. sqlspec/adapters/aiosqlite/adk/store.py +527 -0
  16. sqlspec/adapters/aiosqlite/config.py +86 -16
  17. sqlspec/adapters/aiosqlite/data_dictionary.py +34 -2
  18. sqlspec/adapters/aiosqlite/driver.py +127 -38
  19. sqlspec/adapters/aiosqlite/litestar/__init__.py +5 -0
  20. sqlspec/adapters/aiosqlite/litestar/store.py +281 -0
  21. sqlspec/adapters/aiosqlite/pool.py +7 -7
  22. sqlspec/adapters/asyncmy/__init__.py +7 -1
  23. sqlspec/adapters/asyncmy/_types.py +1 -1
  24. sqlspec/adapters/asyncmy/adk/__init__.py +5 -0
  25. sqlspec/adapters/asyncmy/adk/store.py +493 -0
  26. sqlspec/adapters/asyncmy/config.py +59 -17
  27. sqlspec/adapters/asyncmy/data_dictionary.py +41 -2
  28. sqlspec/adapters/asyncmy/driver.py +293 -62
  29. sqlspec/adapters/asyncmy/litestar/__init__.py +5 -0
  30. sqlspec/adapters/asyncmy/litestar/store.py +296 -0
  31. sqlspec/adapters/asyncpg/__init__.py +2 -1
  32. sqlspec/adapters/asyncpg/_type_handlers.py +71 -0
  33. sqlspec/adapters/asyncpg/_types.py +11 -7
  34. sqlspec/adapters/asyncpg/adk/__init__.py +5 -0
  35. sqlspec/adapters/asyncpg/adk/store.py +450 -0
  36. sqlspec/adapters/asyncpg/config.py +57 -36
  37. sqlspec/adapters/asyncpg/data_dictionary.py +41 -2
  38. sqlspec/adapters/asyncpg/driver.py +153 -23
  39. sqlspec/adapters/asyncpg/litestar/__init__.py +5 -0
  40. sqlspec/adapters/asyncpg/litestar/store.py +253 -0
  41. sqlspec/adapters/bigquery/_types.py +1 -1
  42. sqlspec/adapters/bigquery/adk/__init__.py +5 -0
  43. sqlspec/adapters/bigquery/adk/store.py +576 -0
  44. sqlspec/adapters/bigquery/config.py +25 -11
  45. sqlspec/adapters/bigquery/data_dictionary.py +42 -2
  46. sqlspec/adapters/bigquery/driver.py +352 -144
  47. sqlspec/adapters/bigquery/litestar/__init__.py +5 -0
  48. sqlspec/adapters/bigquery/litestar/store.py +327 -0
  49. sqlspec/adapters/bigquery/type_converter.py +55 -23
  50. sqlspec/adapters/duckdb/_types.py +2 -2
  51. sqlspec/adapters/duckdb/adk/__init__.py +14 -0
  52. sqlspec/adapters/duckdb/adk/store.py +553 -0
  53. sqlspec/adapters/duckdb/config.py +79 -21
  54. sqlspec/adapters/duckdb/data_dictionary.py +41 -2
  55. sqlspec/adapters/duckdb/driver.py +138 -43
  56. sqlspec/adapters/duckdb/litestar/__init__.py +5 -0
  57. sqlspec/adapters/duckdb/litestar/store.py +332 -0
  58. sqlspec/adapters/duckdb/pool.py +5 -5
  59. sqlspec/adapters/duckdb/type_converter.py +51 -21
  60. sqlspec/adapters/oracledb/_numpy_handlers.py +133 -0
  61. sqlspec/adapters/oracledb/_types.py +20 -2
  62. sqlspec/adapters/oracledb/adk/__init__.py +5 -0
  63. sqlspec/adapters/oracledb/adk/store.py +1745 -0
  64. sqlspec/adapters/oracledb/config.py +120 -36
  65. sqlspec/adapters/oracledb/data_dictionary.py +87 -20
  66. sqlspec/adapters/oracledb/driver.py +292 -84
  67. sqlspec/adapters/oracledb/litestar/__init__.py +5 -0
  68. sqlspec/adapters/oracledb/litestar/store.py +767 -0
  69. sqlspec/adapters/oracledb/migrations.py +316 -25
  70. sqlspec/adapters/oracledb/type_converter.py +91 -16
  71. sqlspec/adapters/psqlpy/_type_handlers.py +44 -0
  72. sqlspec/adapters/psqlpy/_types.py +2 -1
  73. sqlspec/adapters/psqlpy/adk/__init__.py +5 -0
  74. sqlspec/adapters/psqlpy/adk/store.py +482 -0
  75. sqlspec/adapters/psqlpy/config.py +45 -19
  76. sqlspec/adapters/psqlpy/data_dictionary.py +41 -2
  77. sqlspec/adapters/psqlpy/driver.py +101 -31
  78. sqlspec/adapters/psqlpy/litestar/__init__.py +5 -0
  79. sqlspec/adapters/psqlpy/litestar/store.py +272 -0
  80. sqlspec/adapters/psqlpy/type_converter.py +40 -11
  81. sqlspec/adapters/psycopg/_type_handlers.py +80 -0
  82. sqlspec/adapters/psycopg/_types.py +2 -1
  83. sqlspec/adapters/psycopg/adk/__init__.py +5 -0
  84. sqlspec/adapters/psycopg/adk/store.py +944 -0
  85. sqlspec/adapters/psycopg/config.py +65 -37
  86. sqlspec/adapters/psycopg/data_dictionary.py +77 -3
  87. sqlspec/adapters/psycopg/driver.py +200 -78
  88. sqlspec/adapters/psycopg/litestar/__init__.py +5 -0
  89. sqlspec/adapters/psycopg/litestar/store.py +554 -0
  90. sqlspec/adapters/sqlite/__init__.py +2 -1
  91. sqlspec/adapters/sqlite/_type_handlers.py +86 -0
  92. sqlspec/adapters/sqlite/_types.py +1 -1
  93. sqlspec/adapters/sqlite/adk/__init__.py +5 -0
  94. sqlspec/adapters/sqlite/adk/store.py +572 -0
  95. sqlspec/adapters/sqlite/config.py +85 -16
  96. sqlspec/adapters/sqlite/data_dictionary.py +34 -2
  97. sqlspec/adapters/sqlite/driver.py +120 -52
  98. sqlspec/adapters/sqlite/litestar/__init__.py +5 -0
  99. sqlspec/adapters/sqlite/litestar/store.py +318 -0
  100. sqlspec/adapters/sqlite/pool.py +5 -5
  101. sqlspec/base.py +45 -26
  102. sqlspec/builder/__init__.py +73 -4
  103. sqlspec/builder/_base.py +91 -58
  104. sqlspec/builder/_column.py +5 -5
  105. sqlspec/builder/_ddl.py +98 -89
  106. sqlspec/builder/_delete.py +5 -4
  107. sqlspec/builder/_dml.py +388 -0
  108. sqlspec/{_sql.py → builder/_factory.py} +41 -44
  109. sqlspec/builder/_insert.py +5 -82
  110. sqlspec/builder/{mixins/_join_operations.py → _join.py} +145 -143
  111. sqlspec/builder/_merge.py +446 -11
  112. sqlspec/builder/_parsing_utils.py +9 -11
  113. sqlspec/builder/_select.py +1313 -25
  114. sqlspec/builder/_update.py +11 -42
  115. sqlspec/cli.py +76 -69
  116. sqlspec/config.py +231 -60
  117. sqlspec/core/__init__.py +5 -4
  118. sqlspec/core/cache.py +18 -18
  119. sqlspec/core/compiler.py +6 -8
  120. sqlspec/core/filters.py +37 -37
  121. sqlspec/core/hashing.py +9 -9
  122. sqlspec/core/parameters.py +76 -45
  123. sqlspec/core/result.py +102 -46
  124. sqlspec/core/splitter.py +16 -17
  125. sqlspec/core/statement.py +32 -31
  126. sqlspec/core/type_conversion.py +3 -2
  127. sqlspec/driver/__init__.py +1 -3
  128. sqlspec/driver/_async.py +95 -161
  129. sqlspec/driver/_common.py +133 -80
  130. sqlspec/driver/_sync.py +95 -162
  131. sqlspec/driver/mixins/_result_tools.py +20 -236
  132. sqlspec/driver/mixins/_sql_translator.py +4 -4
  133. sqlspec/exceptions.py +70 -7
  134. sqlspec/extensions/adk/__init__.py +53 -0
  135. sqlspec/extensions/adk/_types.py +51 -0
  136. sqlspec/extensions/adk/converters.py +172 -0
  137. sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +144 -0
  138. sqlspec/extensions/adk/migrations/__init__.py +0 -0
  139. sqlspec/extensions/adk/service.py +181 -0
  140. sqlspec/extensions/adk/store.py +536 -0
  141. sqlspec/extensions/aiosql/adapter.py +73 -53
  142. sqlspec/extensions/litestar/__init__.py +21 -4
  143. sqlspec/extensions/litestar/cli.py +54 -10
  144. sqlspec/extensions/litestar/config.py +59 -266
  145. sqlspec/extensions/litestar/handlers.py +46 -17
  146. sqlspec/extensions/litestar/migrations/0001_create_session_table.py +137 -0
  147. sqlspec/extensions/litestar/migrations/__init__.py +3 -0
  148. sqlspec/extensions/litestar/plugin.py +324 -223
  149. sqlspec/extensions/litestar/providers.py +25 -25
  150. sqlspec/extensions/litestar/store.py +265 -0
  151. sqlspec/loader.py +30 -49
  152. sqlspec/migrations/base.py +200 -76
  153. sqlspec/migrations/commands.py +591 -62
  154. sqlspec/migrations/context.py +6 -9
  155. sqlspec/migrations/fix.py +199 -0
  156. sqlspec/migrations/loaders.py +47 -19
  157. sqlspec/migrations/runner.py +241 -75
  158. sqlspec/migrations/tracker.py +237 -21
  159. sqlspec/migrations/utils.py +51 -3
  160. sqlspec/migrations/validation.py +177 -0
  161. sqlspec/protocols.py +66 -36
  162. sqlspec/storage/_utils.py +98 -0
  163. sqlspec/storage/backends/fsspec.py +134 -106
  164. sqlspec/storage/backends/local.py +78 -51
  165. sqlspec/storage/backends/obstore.py +278 -162
  166. sqlspec/storage/registry.py +75 -39
  167. sqlspec/typing.py +14 -84
  168. sqlspec/utils/config_resolver.py +6 -6
  169. sqlspec/utils/correlation.py +4 -5
  170. sqlspec/utils/data_transformation.py +3 -2
  171. sqlspec/utils/deprecation.py +9 -8
  172. sqlspec/utils/fixtures.py +4 -4
  173. sqlspec/utils/logging.py +46 -6
  174. sqlspec/utils/module_loader.py +2 -2
  175. sqlspec/utils/schema.py +288 -0
  176. sqlspec/utils/serializers.py +3 -3
  177. sqlspec/utils/sync_tools.py +21 -17
  178. sqlspec/utils/text.py +1 -2
  179. sqlspec/utils/type_guards.py +111 -20
  180. sqlspec/utils/version.py +433 -0
  181. {sqlspec-0.26.0.dist-info → sqlspec-0.27.0.dist-info}/METADATA +40 -21
  182. sqlspec-0.27.0.dist-info/RECORD +207 -0
  183. sqlspec/builder/mixins/__init__.py +0 -55
  184. sqlspec/builder/mixins/_cte_and_set_ops.py +0 -253
  185. sqlspec/builder/mixins/_delete_operations.py +0 -50
  186. sqlspec/builder/mixins/_insert_operations.py +0 -282
  187. sqlspec/builder/mixins/_merge_operations.py +0 -698
  188. sqlspec/builder/mixins/_order_limit_operations.py +0 -145
  189. sqlspec/builder/mixins/_pivot_operations.py +0 -157
  190. sqlspec/builder/mixins/_select_operations.py +0 -930
  191. sqlspec/builder/mixins/_update_operations.py +0 -199
  192. sqlspec/builder/mixins/_where_clause.py +0 -1298
  193. sqlspec-0.26.0.dist-info/RECORD +0 -157
  194. sqlspec-0.26.0.dist-info/licenses/NOTICE +0 -29
  195. {sqlspec-0.26.0.dist-info → sqlspec-0.27.0.dist-info}/WHEEL +0 -0
  196. {sqlspec-0.26.0.dist-info → sqlspec-0.27.0.dist-info}/entry_points.txt +0 -0
  197. {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.26.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
- License-File: NOTICE
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 db init migrations
395
+ sqlspec --config myapp.config init
396
396
 
397
397
  # Generate new migration file
398
- sqlspec db make-migrations "Add user table"
398
+ sqlspec --config myapp.config create-migration -m "Add user table"
399
399
 
400
400
  # Apply all pending migrations
401
- sqlspec db upgrade
401
+ sqlspec --config myapp.config upgrade
402
402
 
403
403
  # Show current migration status
404
- sqlspec db show-current-revision
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 db make-migrations "Add user table"
412
- litestar db upgrade
413
- litestar db show-current-revision
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 DatabaseConfig, SQLSpec
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
- config=DatabaseConfig(
441
- config=AiosqliteConfig(pool_config={"database": ":memory:"}), # built in local pooling
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