sqlspec 0.29.0__tar.gz → 0.30.0__tar.gz

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.
Files changed (692) hide show
  1. {sqlspec-0.29.0 → sqlspec-0.30.0}/.gitignore +1 -0
  2. {sqlspec-0.29.0 → sqlspec-0.30.0}/.pre-commit-config.yaml +2 -1
  3. {sqlspec-0.29.0 → sqlspec-0.30.0}/AGENTS.md +44 -0
  4. sqlspec-0.30.0/PKG-INFO +202 -0
  5. sqlspec-0.30.0/README.md +108 -0
  6. {sqlspec-0.29.0 → sqlspec-0.30.0}/pyproject.toml +20 -10
  7. sqlspec-0.30.0/specs/guides/docs_examples_alignment.md +33 -0
  8. sqlspec-0.30.0/specs/guides/query-stack.md +67 -0
  9. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/__init__.py +8 -0
  10. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/_typing.py +5 -0
  11. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/adbc/config.py +9 -3
  12. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/adbc/driver.py +2 -2
  13. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/aiosqlite/config.py +8 -3
  14. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/aiosqlite/driver.py +2 -2
  15. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/asyncmy/config.py +8 -3
  16. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/asyncmy/driver.py +2 -2
  17. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/asyncpg/__init__.py +2 -1
  18. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/asyncpg/_types.py +5 -3
  19. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/asyncpg/config.py +10 -4
  20. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/asyncpg/driver.py +153 -5
  21. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/bigquery/config.py +27 -12
  22. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/bigquery/driver.py +59 -6
  23. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/duckdb/config.py +54 -19
  24. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/duckdb/driver.py +2 -2
  25. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/duckdb/pool.py +33 -0
  26. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/oracledb/config.py +7 -13
  27. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/oracledb/data_dictionary.py +106 -53
  28. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/oracledb/driver.py +430 -10
  29. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psqlpy/config.py +4 -3
  30. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psqlpy/driver.py +2 -2
  31. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psycopg/config.py +7 -13
  32. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psycopg/driver.py +295 -26
  33. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/sqlite/config.py +8 -3
  34. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/sqlite/driver.py +2 -2
  35. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/base.py +145 -41
  36. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/cli.py +44 -37
  37. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/config.py +246 -15
  38. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/core/__init__.py +16 -1
  39. sqlspec-0.30.0/sqlspec/core/metrics.py +83 -0
  40. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/core/parameters/_alignment.py +36 -1
  41. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/core/result.py +115 -5
  42. sqlspec-0.30.0/sqlspec/core/stack.py +163 -0
  43. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/driver/__init__.py +9 -1
  44. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/driver/_async.py +163 -14
  45. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/driver/_common.py +181 -4
  46. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/driver/_sync.py +162 -15
  47. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/driver/mixins/__init__.py +1 -1
  48. sqlspec-0.29.0/sqlspec/driver/mixins/storage.py → sqlspec-0.30.0/sqlspec/driver/mixins/_storage.py +89 -2
  49. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/exceptions.py +41 -1
  50. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/litestar/handlers.py +11 -5
  51. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/litestar/plugin.py +122 -3
  52. sqlspec-0.30.0/sqlspec/extensions/otel/__init__.py +58 -0
  53. sqlspec-0.30.0/sqlspec/extensions/prometheus/__init__.py +107 -0
  54. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/loader.py +66 -6
  55. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/migrations/base.py +71 -9
  56. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/migrations/commands.py +236 -25
  57. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/migrations/runner.py +230 -61
  58. sqlspec-0.30.0/sqlspec/migrations/templates.py +234 -0
  59. sqlspec-0.30.0/sqlspec/migrations/utils.py +256 -0
  60. sqlspec-0.30.0/sqlspec/observability/__init__.py +22 -0
  61. sqlspec-0.30.0/sqlspec/observability/_config.py +228 -0
  62. sqlspec-0.30.0/sqlspec/observability/_diagnostics.py +66 -0
  63. sqlspec-0.30.0/sqlspec/observability/_dispatcher.py +129 -0
  64. sqlspec-0.30.0/sqlspec/observability/_observer.py +180 -0
  65. sqlspec-0.30.0/sqlspec/observability/_runtime.py +381 -0
  66. sqlspec-0.30.0/sqlspec/observability/_spans.py +148 -0
  67. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/protocols.py +25 -0
  68. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/storage/pipeline.py +34 -4
  69. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/utils/config_resolver.py +5 -1
  70. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/utils/portal.py +22 -6
  71. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_adbc_driver.py +47 -1
  72. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_aiosqlite/test_connection.py +42 -0
  73. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_aiosqlite/test_driver.py +49 -1
  74. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncmy/test_driver.py +48 -1
  75. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_driver.py +66 -1
  76. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_extensions/test_adk/test_owner_id_column.py +5 -5
  77. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_bigquery/test_driver.py +45 -1
  78. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_duckdb/test_connection.py +46 -4
  79. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_duckdb/test_driver.py +47 -1
  80. sqlspec-0.30.0/tests/integration/test_adapters/test_oracledb/test_stack.py +144 -0
  81. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psqlpy/test_driver.py +46 -1
  82. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psycopg/test_async_copy.py +53 -1
  83. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psycopg/test_driver.py +57 -1
  84. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_sqlite/test_driver.py +49 -1
  85. sqlspec-0.30.0/tests/integration/test_extensions/test_litestar/test_correlation_middleware.py +91 -0
  86. sqlspec-0.30.0/tests/integration/test_stack_edge_cases.py +183 -0
  87. sqlspec-0.30.0/tests/unit/test_adapters/test_duckdb/test_extension_flags.py +42 -0
  88. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_extension_config.py +31 -21
  89. sqlspec-0.30.0/tests/unit/test_adapters/test_oracledb/test_data_dictionary.py +139 -0
  90. sqlspec-0.30.0/tests/unit/test_adapters/test_oracledb/test_pipeline_helpers.py +121 -0
  91. sqlspec-0.30.0/tests/unit/test_adapters/test_oracledb/test_uuid_handlers.py +240 -0
  92. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_cli/test_migration_commands.py +92 -2
  93. sqlspec-0.30.0/tests/unit/test_config/test_observability_extensions.py +49 -0
  94. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_config_resolver.py +66 -0
  95. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_core/test_result.py +30 -1
  96. sqlspec-0.30.0/tests/unit/test_core/test_stack.py +94 -0
  97. sqlspec-0.30.0/tests/unit/test_core/test_stack_metrics.py +42 -0
  98. sqlspec-0.30.0/tests/unit/test_driver/test_stack_base.py +121 -0
  99. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_exceptions.py +19 -0
  100. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_extensions/test_litestar/test_handlers.py +24 -0
  101. sqlspec-0.30.0/tests/unit/test_extensions/test_observability_integrations.py +42 -0
  102. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_migrations/test_migration_runner.py +51 -0
  103. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_migrations/test_utils.py +111 -0
  104. sqlspec-0.30.0/tests/unit/test_observability.py +461 -0
  105. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_utils/test_portal.py +31 -1
  106. sqlspec-0.30.0/tools/run_pre_commit.py +57 -0
  107. {sqlspec-0.29.0 → sqlspec-0.30.0}/uv.lock +491 -475
  108. sqlspec-0.29.0/PKG-INFO +0 -575
  109. sqlspec-0.29.0/README.md +0 -481
  110. sqlspec-0.29.0/sqlspec/migrations/utils.py +0 -177
  111. sqlspec-0.29.0/tests/unit/adapters/test_oracledb_uuid_handlers.py +0 -358
  112. {sqlspec-0.29.0 → sqlspec-0.30.0}/.claude/AGENTS.md +0 -0
  113. {sqlspec-0.29.0 → sqlspec-0.30.0}/.claude/README.md +0 -0
  114. {sqlspec-0.29.0 → sqlspec-0.30.0}/.claude/agents/docs-vision.md +0 -0
  115. {sqlspec-0.29.0 → sqlspec-0.30.0}/.claude/agents/expert.md +0 -0
  116. {sqlspec-0.29.0 → sqlspec-0.30.0}/.claude/agents/prd.md +0 -0
  117. {sqlspec-0.29.0 → sqlspec-0.30.0}/.claude/agents/testing.md +0 -0
  118. {sqlspec-0.29.0 → sqlspec-0.30.0}/.claude/bootstrap.md +0 -0
  119. {sqlspec-0.29.0 → sqlspec-0.30.0}/.claude/commands/implement.md +0 -0
  120. {sqlspec-0.29.0 → sqlspec-0.30.0}/.claude/commands/prd.md +0 -0
  121. {sqlspec-0.29.0 → sqlspec-0.30.0}/.claude/commands/review.md +0 -0
  122. {sqlspec-0.29.0 → sqlspec-0.30.0}/.claude/commands/test.md +0 -0
  123. {sqlspec-0.29.0 → sqlspec-0.30.0}/.gemini/GEMINI.md +0 -0
  124. {sqlspec-0.29.0 → sqlspec-0.30.0}/.gemini/bootstrap.md +0 -0
  125. {sqlspec-0.29.0 → sqlspec-0.30.0}/.gemini/commands/implement.toml +0 -0
  126. {sqlspec-0.29.0 → sqlspec-0.30.0}/.gemini/commands/prd.toml +0 -0
  127. {sqlspec-0.29.0 → sqlspec-0.30.0}/.gemini/commands/review.toml +0 -0
  128. {sqlspec-0.29.0 → sqlspec-0.30.0}/.gemini/commands/sync-guides.toml +0 -0
  129. {sqlspec-0.29.0 → sqlspec-0.30.0}/.gemini/commands/test.toml +0 -0
  130. {sqlspec-0.29.0 → sqlspec-0.30.0}/CLAUDE.md +0 -0
  131. {sqlspec-0.29.0 → sqlspec-0.30.0}/CONTRIBUTING.rst +0 -0
  132. {sqlspec-0.29.0 → sqlspec-0.30.0}/GEMINI.md +0 -0
  133. {sqlspec-0.29.0 → sqlspec-0.30.0}/LICENSE +0 -0
  134. {sqlspec-0.29.0 → sqlspec-0.30.0}/Makefile +0 -0
  135. {sqlspec-0.29.0 → sqlspec-0.30.0}/specs/AGENTS.md +0 -0
  136. {sqlspec-0.29.0 → sqlspec-0.30.0}/specs/README.md +0 -0
  137. {sqlspec-0.29.0 → sqlspec-0.30.0}/specs/active/.gitkeep +0 -0
  138. {sqlspec-0.29.0 → sqlspec-0.30.0}/specs/agents/expert.md +0 -0
  139. {sqlspec-0.29.0 → sqlspec-0.30.0}/specs/agents/guides.md +0 -0
  140. {sqlspec-0.29.0 → sqlspec-0.30.0}/specs/agents/prd.md +0 -0
  141. {sqlspec-0.29.0 → sqlspec-0.30.0}/specs/agents/review.md +0 -0
  142. {sqlspec-0.29.0 → sqlspec-0.30.0}/specs/agents/testing.md +0 -0
  143. {sqlspec-0.29.0 → sqlspec-0.30.0}/specs/archive/.gitkeep +0 -0
  144. {sqlspec-0.29.0 → sqlspec-0.30.0}/specs/template-spec/README.md +0 -0
  145. {sqlspec-0.29.0 → sqlspec-0.30.0}/specs/template-spec/prd.md +0 -0
  146. {sqlspec-0.29.0 → sqlspec-0.30.0}/specs/template-spec/recovery.md +0 -0
  147. {sqlspec-0.29.0 → sqlspec-0.30.0}/specs/template-spec/research/.gitkeep +0 -0
  148. {sqlspec-0.29.0 → sqlspec-0.30.0}/specs/template-spec/tasks.md +0 -0
  149. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/__main__.py +0 -0
  150. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/__metadata__.py +0 -0
  151. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/_serialization.py +0 -0
  152. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/__init__.py +0 -0
  153. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/adbc/__init__.py +0 -0
  154. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/adbc/_types.py +0 -0
  155. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/adbc/adk/__init__.py +0 -0
  156. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/adbc/adk/store.py +0 -0
  157. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/adbc/data_dictionary.py +0 -0
  158. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/adbc/litestar/__init__.py +0 -0
  159. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/adbc/litestar/store.py +0 -0
  160. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/adbc/type_converter.py +0 -0
  161. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/aiosqlite/__init__.py +0 -0
  162. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/aiosqlite/_types.py +0 -0
  163. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/aiosqlite/adk/__init__.py +0 -0
  164. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/aiosqlite/adk/store.py +0 -0
  165. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/aiosqlite/data_dictionary.py +0 -0
  166. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/aiosqlite/litestar/__init__.py +0 -0
  167. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/aiosqlite/litestar/store.py +0 -0
  168. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/aiosqlite/pool.py +0 -0
  169. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/asyncmy/__init__.py +0 -0
  170. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/asyncmy/_types.py +0 -0
  171. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/asyncmy/adk/__init__.py +0 -0
  172. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/asyncmy/adk/store.py +0 -0
  173. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/asyncmy/data_dictionary.py +0 -0
  174. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/asyncmy/litestar/__init__.py +0 -0
  175. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/asyncmy/litestar/store.py +0 -0
  176. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/asyncpg/_type_handlers.py +0 -0
  177. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/asyncpg/adk/__init__.py +0 -0
  178. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/asyncpg/adk/store.py +0 -0
  179. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/asyncpg/data_dictionary.py +0 -0
  180. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/asyncpg/litestar/__init__.py +0 -0
  181. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/asyncpg/litestar/store.py +0 -0
  182. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/bigquery/__init__.py +0 -0
  183. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/bigquery/_types.py +0 -0
  184. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/bigquery/adk/__init__.py +0 -0
  185. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/bigquery/adk/store.py +0 -0
  186. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/bigquery/data_dictionary.py +0 -0
  187. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/bigquery/litestar/__init__.py +0 -0
  188. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/bigquery/litestar/store.py +0 -0
  189. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/bigquery/type_converter.py +0 -0
  190. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/duckdb/__init__.py +0 -0
  191. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/duckdb/_types.py +0 -0
  192. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/duckdb/adk/__init__.py +0 -0
  193. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/duckdb/adk/store.py +0 -0
  194. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/duckdb/data_dictionary.py +0 -0
  195. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/duckdb/litestar/__init__.py +0 -0
  196. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/duckdb/litestar/store.py +0 -0
  197. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/duckdb/type_converter.py +0 -0
  198. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/oracledb/__init__.py +0 -0
  199. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/oracledb/_numpy_handlers.py +0 -0
  200. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/oracledb/_types.py +0 -0
  201. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/oracledb/_uuid_handlers.py +0 -0
  202. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/oracledb/adk/__init__.py +0 -0
  203. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/oracledb/adk/store.py +0 -0
  204. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/oracledb/litestar/__init__.py +0 -0
  205. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/oracledb/litestar/store.py +0 -0
  206. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/oracledb/migrations.py +0 -0
  207. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/oracledb/type_converter.py +0 -0
  208. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psqlpy/__init__.py +0 -0
  209. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psqlpy/_type_handlers.py +0 -0
  210. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psqlpy/_types.py +0 -0
  211. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psqlpy/adk/__init__.py +0 -0
  212. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psqlpy/adk/store.py +0 -0
  213. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psqlpy/data_dictionary.py +0 -0
  214. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psqlpy/litestar/__init__.py +0 -0
  215. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psqlpy/litestar/store.py +0 -0
  216. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psqlpy/type_converter.py +0 -0
  217. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psycopg/__init__.py +0 -0
  218. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psycopg/_type_handlers.py +0 -0
  219. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psycopg/_types.py +0 -0
  220. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psycopg/adk/__init__.py +0 -0
  221. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psycopg/adk/store.py +0 -0
  222. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psycopg/data_dictionary.py +0 -0
  223. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psycopg/litestar/__init__.py +0 -0
  224. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/psycopg/litestar/store.py +0 -0
  225. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/sqlite/__init__.py +0 -0
  226. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/sqlite/_type_handlers.py +0 -0
  227. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/sqlite/_types.py +0 -0
  228. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/sqlite/adk/__init__.py +0 -0
  229. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/sqlite/adk/store.py +0 -0
  230. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/sqlite/data_dictionary.py +0 -0
  231. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/sqlite/litestar/__init__.py +0 -0
  232. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/sqlite/litestar/store.py +0 -0
  233. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/adapters/sqlite/pool.py +0 -0
  234. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/builder/__init__.py +0 -0
  235. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/builder/_base.py +0 -0
  236. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/builder/_column.py +0 -0
  237. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/builder/_ddl.py +0 -0
  238. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/builder/_delete.py +0 -0
  239. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/builder/_dml.py +0 -0
  240. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/builder/_expression_wrappers.py +0 -0
  241. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/builder/_factory.py +0 -0
  242. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/builder/_insert.py +0 -0
  243. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/builder/_join.py +0 -0
  244. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/builder/_merge.py +0 -0
  245. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/builder/_parsing_utils.py +0 -0
  246. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/builder/_select.py +0 -0
  247. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/builder/_update.py +0 -0
  248. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/core/cache.py +0 -0
  249. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/core/compiler.py +0 -0
  250. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/core/filters.py +0 -0
  251. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/core/hashing.py +0 -0
  252. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/core/parameters/__init__.py +0 -0
  253. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/core/parameters/_converter.py +0 -0
  254. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/core/parameters/_processor.py +0 -0
  255. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/core/parameters/_registry.py +0 -0
  256. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/core/parameters/_transformers.py +0 -0
  257. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/core/parameters/_types.py +0 -0
  258. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/core/parameters/_validator.py +0 -0
  259. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/core/pipeline.py +0 -0
  260. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/core/splitter.py +0 -0
  261. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/core/statement.py +0 -0
  262. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/core/type_conversion.py +0 -0
  263. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/driver/mixins/_result_tools.py +0 -0
  264. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/driver/mixins/_sql_translator.py +0 -0
  265. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/__init__.py +0 -0
  266. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/adk/__init__.py +0 -0
  267. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/adk/_types.py +0 -0
  268. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/adk/converters.py +0 -0
  269. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +0 -0
  270. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/adk/migrations/__init__.py +0 -0
  271. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/adk/service.py +0 -0
  272. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/adk/store.py +0 -0
  273. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/aiosql/__init__.py +0 -0
  274. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/aiosql/adapter.py +0 -0
  275. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/fastapi/__init__.py +0 -0
  276. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/fastapi/extension.py +0 -0
  277. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/fastapi/providers.py +0 -0
  278. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/flask/__init__.py +0 -0
  279. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/flask/_state.py +0 -0
  280. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/flask/_utils.py +0 -0
  281. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/flask/extension.py +0 -0
  282. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/litestar/__init__.py +0 -0
  283. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/litestar/_utils.py +0 -0
  284. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/litestar/cli.py +0 -0
  285. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/litestar/config.py +0 -0
  286. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/litestar/migrations/0001_create_session_table.py +0 -0
  287. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/litestar/migrations/__init__.py +0 -0
  288. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/litestar/providers.py +0 -0
  289. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/litestar/store.py +0 -0
  290. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/starlette/__init__.py +0 -0
  291. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/starlette/_state.py +0 -0
  292. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/starlette/_utils.py +0 -0
  293. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/starlette/extension.py +0 -0
  294. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/extensions/starlette/middleware.py +0 -0
  295. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/migrations/__init__.py +0 -0
  296. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/migrations/context.py +0 -0
  297. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/migrations/fix.py +0 -0
  298. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/migrations/loaders.py +0 -0
  299. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/migrations/tracker.py +0 -0
  300. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/migrations/validation.py +0 -0
  301. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/py.typed +0 -0
  302. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/storage/__init__.py +0 -0
  303. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/storage/_utils.py +0 -0
  304. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/storage/backends/__init__.py +0 -0
  305. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/storage/backends/base.py +0 -0
  306. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/storage/backends/fsspec.py +0 -0
  307. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/storage/backends/local.py +0 -0
  308. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/storage/backends/obstore.py +0 -0
  309. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/storage/errors.py +0 -0
  310. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/storage/registry.py +0 -0
  311. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/typing.py +0 -0
  312. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/utils/__init__.py +0 -0
  313. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/utils/arrow_helpers.py +0 -0
  314. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/utils/correlation.py +0 -0
  315. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/utils/data_transformation.py +0 -0
  316. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/utils/deprecation.py +0 -0
  317. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/utils/fixtures.py +0 -0
  318. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/utils/logging.py +0 -0
  319. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/utils/module_loader.py +0 -0
  320. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/utils/schema.py +0 -0
  321. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/utils/serializers.py +0 -0
  322. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/utils/singleton.py +0 -0
  323. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/utils/sync_tools.py +0 -0
  324. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/utils/text.py +0 -0
  325. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/utils/type_converters.py +0 -0
  326. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/utils/type_guards.py +0 -0
  327. {sqlspec-0.29.0 → sqlspec-0.30.0}/sqlspec/utils/version.py +0 -0
  328. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/__init__.py +0 -0
  329. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/conftest.py +0 -0
  330. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/__init__.py +0 -0
  331. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/asset_maintenance.sql +0 -0
  332. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/ddls-mysql-collection.sql +0 -0
  333. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/ddls-postgres-collection.sql +0 -0
  334. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/example_usage.py +0 -0
  335. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/init.sql +0 -0
  336. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/mysql/collection-config.sql +0 -0
  337. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/mysql/collection-data_types.sql +0 -0
  338. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/mysql/collection-database_details.sql +0 -0
  339. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/mysql/collection-engines.sql +0 -0
  340. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/mysql/collection-hostname.sql +0 -0
  341. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/mysql/collection-plugins.sql +0 -0
  342. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/mysql/collection-process_list.sql +0 -0
  343. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/mysql/collection-resource-groups.sql +0 -0
  344. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/mysql/collection-schema_objects.sql +0 -0
  345. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/mysql/collection-table_details.sql +0 -0
  346. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/mysql/collection-users.sql +0 -0
  347. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/mysql/init.sql +0 -0
  348. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/oracle.ddl.sql +0 -0
  349. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/collection-applications.sql +0 -0
  350. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/collection-aws_extension_dependency.sql +0 -0
  351. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/collection-aws_oracle_exists.sql +0 -0
  352. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/collection-bg_writer_stats.sql +0 -0
  353. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/collection-calculated_metrics.sql +0 -0
  354. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/collection-data_types.sql +0 -0
  355. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/collection-database_details.sql +0 -0
  356. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/collection-extensions.sql +0 -0
  357. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/collection-index_details.sql +0 -0
  358. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/collection-pglogical-details.sql +0 -0
  359. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/collection-privileges.sql +0 -0
  360. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/collection-replication_slots.sql +0 -0
  361. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/collection-replication_stats.sql +0 -0
  362. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/collection-schema_details.sql +0 -0
  363. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/collection-schema_objects.sql +0 -0
  364. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/collection-settings.sql +0 -0
  365. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/collection-source_details.sql +0 -0
  366. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/collection-table_details.sql +0 -0
  367. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/extended-collection-all-databases.sql +0 -0
  368. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/postgres/init.sql +0 -0
  369. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/readiness-check.sql +0 -0
  370. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/fixtures/sql_utils.py +0 -0
  371. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/__init__.py +0 -0
  372. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/conftest.py +0 -0
  373. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/__init__.py +0 -0
  374. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/_storage_bridge_helpers.py +0 -0
  375. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/__init__.py +0 -0
  376. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/conftest.py +0 -0
  377. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_adbc_arrow_features.py +0 -0
  378. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_adbc_backends.py +0 -0
  379. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_adbc_connection.py +0 -0
  380. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_adbc_edge_cases.py +0 -0
  381. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_adbc_results.py +0 -0
  382. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_arrow_duckdb.py +0 -0
  383. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_data_dictionary.py +0 -0
  384. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_exceptions.py +0 -0
  385. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_extensions/__init__.py +0 -0
  386. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/__init__.py +0 -0
  387. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_dialect_integration.py +0 -0
  388. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_dialect_support.py +0 -0
  389. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_edge_cases.py +0 -0
  390. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_event_operations.py +0 -0
  391. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_owner_id_column.py +0 -0
  392. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_session_operations.py +0 -0
  393. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_extensions/test_litestar/__init__.py +0 -0
  394. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_extensions/test_litestar/test_store.py +0 -0
  395. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_migrations.py +0 -0
  396. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_parameter_styles.py +0 -0
  397. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_adbc/test_storage_bridge.py +0 -0
  398. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_aiosqlite/__init__.py +0 -0
  399. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_aiosqlite/conftest.py +0 -0
  400. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_aiosqlite/test_arrow.py +0 -0
  401. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_aiosqlite/test_exceptions.py +0 -0
  402. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_aiosqlite/test_extensions/__init__.py +0 -0
  403. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_aiosqlite/test_extensions/test_litestar/__init__.py +0 -0
  404. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_aiosqlite/test_extensions/test_litestar/test_numpy_serialization.py +0 -0
  405. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_aiosqlite/test_extensions/test_litestar/test_store.py +0 -0
  406. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_aiosqlite/test_migrations.py +0 -0
  407. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_aiosqlite/test_parameter_styles.py +0 -0
  408. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_aiosqlite/test_pooling.py +0 -0
  409. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_aiosqlite/test_storage_bridge.py +0 -0
  410. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncmy/__init__.py +0 -0
  411. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncmy/conftest.py +0 -0
  412. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncmy/test_arrow.py +0 -0
  413. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncmy/test_asyncmy_features.py +0 -0
  414. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncmy/test_config.py +0 -0
  415. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncmy/test_exceptions.py +0 -0
  416. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncmy/test_extensions/__init__.py +0 -0
  417. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncmy/test_extensions/test_adk/__init__.py +0 -0
  418. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncmy/test_extensions/test_adk/conftest.py +0 -0
  419. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncmy/test_extensions/test_adk/test_store.py +0 -0
  420. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncmy/test_extensions/test_litestar/__init__.py +0 -0
  421. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncmy/test_extensions/test_litestar/test_store.py +0 -0
  422. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncmy/test_migrations.py +0 -0
  423. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncmy/test_parameter_styles.py +0 -0
  424. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncmy/test_storage_bridge.py +0 -0
  425. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/__init__.py +0 -0
  426. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/conftest.py +0 -0
  427. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_arrow.py +0 -0
  428. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_cloud_connectors_integration.py +0 -0
  429. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_connection.py +0 -0
  430. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_data_dictionary.py +0 -0
  431. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_exceptions.py +0 -0
  432. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_execute_many.py +0 -0
  433. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_extensions/__init__.py +0 -0
  434. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_extensions/test_adk/__init__.py +0 -0
  435. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_extensions/test_adk/conftest.py +0 -0
  436. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_extensions/test_adk/test_session_operations.py +0 -0
  437. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_extensions/test_litestar/__init__.py +0 -0
  438. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_extensions/test_litestar/test_store.py +0 -0
  439. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_merge.py +0 -0
  440. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_merge_bulk.py +0 -0
  441. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_migrations.py +0 -0
  442. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_parameter_styles.py +0 -0
  443. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_schema_migration.py +0 -0
  444. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_asyncpg/test_storage_bridge.py +0 -0
  445. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_bigquery/__init__.py +0 -0
  446. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_bigquery/conftest.py +0 -0
  447. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_bigquery/test_arrow_bigquery.py +0 -0
  448. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_bigquery/test_bigquery_features.py +0 -0
  449. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_bigquery/test_config.py +0 -0
  450. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_bigquery/test_connection.py +0 -0
  451. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_bigquery/test_exceptions.py +0 -0
  452. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_duckdb/__init__.py +0 -0
  453. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_duckdb/conftest.py +0 -0
  454. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_duckdb/test_arrow.py +0 -0
  455. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_duckdb/test_driver_features.py +0 -0
  456. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_duckdb/test_exceptions.py +0 -0
  457. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_duckdb/test_execute_many.py +0 -0
  458. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_duckdb/test_extensions/__init__.py +0 -0
  459. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_duckdb/test_extensions/test_adk/__init__.py +0 -0
  460. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_duckdb/test_extensions/test_adk/test_store.py +0 -0
  461. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_duckdb/test_extensions/test_litestar/__init__.py +0 -0
  462. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_duckdb/test_extensions/test_litestar/test_store.py +0 -0
  463. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_duckdb/test_migrations.py +0 -0
  464. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_duckdb/test_mixed_parameter_styles.py +0 -0
  465. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_duckdb/test_parameter_styles.py +0 -0
  466. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_duckdb/test_pooling.py +0 -0
  467. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_duckdb/test_storage_bridge.py +0 -0
  468. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_duckdb/utils.py +0 -0
  469. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/__init__.py +0 -0
  470. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/conftest.py +0 -0
  471. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_arrow.py +0 -0
  472. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_connection.py +0 -0
  473. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_driver_async.py +0 -0
  474. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_driver_sync.py +0 -0
  475. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_exceptions.py +0 -0
  476. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_execute_many.py +0 -0
  477. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_extensions/__init__.py +0 -0
  478. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_extensions/test_adk/__init__.py +0 -0
  479. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_extensions/test_adk/test_inmemory.py +0 -0
  480. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_extensions/test_adk/test_oracle_specific.py +0 -0
  481. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_extensions/test_litestar/__init__.py +0 -0
  482. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_extensions/test_litestar/test_inmemory.py +0 -0
  483. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_extensions/test_litestar/test_store_async.py +0 -0
  484. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_extensions/test_litestar/test_store_sync.py +0 -0
  485. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_merge.py +0 -0
  486. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_merge_bulk.py +0 -0
  487. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_migrations.py +0 -0
  488. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_msgspec_clob.py +0 -0
  489. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_numpy_vectors.py +0 -0
  490. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_oracle_features.py +0 -0
  491. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_parameter_styles.py +0 -0
  492. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_oracledb/test_uuid_binary.py +0 -0
  493. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psqlpy/__init__.py +0 -0
  494. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psqlpy/conftest.py +0 -0
  495. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psqlpy/test_arrow.py +0 -0
  496. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psqlpy/test_connection.py +0 -0
  497. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psqlpy/test_exceptions.py +0 -0
  498. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psqlpy/test_extensions/__init__.py +0 -0
  499. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psqlpy/test_extensions/test_adk/__init__.py +0 -0
  500. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psqlpy/test_extensions/test_adk/test_owner_id_column.py +0 -0
  501. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psqlpy/test_extensions/test_litestar/__init__.py +0 -0
  502. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psqlpy/test_extensions/test_litestar/test_store.py +0 -0
  503. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psqlpy/test_merge_bulk.py +0 -0
  504. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psqlpy/test_migrations.py +0 -0
  505. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psqlpy/test_parameter_styles.py +0 -0
  506. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psqlpy/test_psqlpy_features.py +0 -0
  507. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psqlpy/test_storage_bridge.py +0 -0
  508. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psycopg/__init__.py +0 -0
  509. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psycopg/conftest.py +0 -0
  510. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psycopg/test_arrow.py +0 -0
  511. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psycopg/test_connection.py +0 -0
  512. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psycopg/test_exceptions.py +0 -0
  513. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psycopg/test_execute_many.py +0 -0
  514. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psycopg/test_extensions/__init__.py +0 -0
  515. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psycopg/test_extensions/test_adk/__init__.py +0 -0
  516. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psycopg/test_extensions/test_adk/test_owner_id_column.py +0 -0
  517. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psycopg/test_extensions/test_litestar/__init__.py +0 -0
  518. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psycopg/test_extensions/test_litestar/test_store_async.py +0 -0
  519. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psycopg/test_extensions/test_litestar/test_store_sync.py +0 -0
  520. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psycopg/test_merge_bulk.py +0 -0
  521. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psycopg/test_migrations.py +0 -0
  522. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psycopg/test_parameter_styles.py +0 -0
  523. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_psycopg/test_storage_bridge.py +0 -0
  524. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_sqlite/__init__.py +0 -0
  525. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_sqlite/conftest.py +0 -0
  526. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_sqlite/test_arrow.py +0 -0
  527. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_sqlite/test_data_dictionary.py +0 -0
  528. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_sqlite/test_driver_features.py +0 -0
  529. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_sqlite/test_exceptions.py +0 -0
  530. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_sqlite/test_extensions/__init__.py +0 -0
  531. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_sqlite/test_extensions/test_adk/__init__.py +0 -0
  532. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_sqlite/test_extensions/test_adk/test_owner_id_column.py +0 -0
  533. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_sqlite/test_extensions/test_litestar/__init__.py +0 -0
  534. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_sqlite/test_extensions/test_litestar/test_store.py +0 -0
  535. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_sqlite/test_migrations.py +0 -0
  536. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_sqlite/test_parameter_styles.py +0 -0
  537. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_sqlite/test_pooling.py +0 -0
  538. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_sqlite/test_query_mixin.py +0 -0
  539. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_adapters/test_sqlite/test_storage_bridge.py +0 -0
  540. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_async_migrations.py +0 -0
  541. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_dishka/__init__.py +0 -0
  542. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_dishka/conftest.py +0 -0
  543. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_dishka/test_dishka_integration.py +0 -0
  544. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_extensions/__init__.py +0 -0
  545. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_extensions/test_fastapi/test_fastapi_filters_integration.py +0 -0
  546. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_extensions/test_fastapi/test_fastapi_integration.py +0 -0
  547. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_extensions/test_flask/test_flask_disable_di.py +0 -0
  548. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_extensions/test_flask/test_flask_integration.py +0 -0
  549. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_extensions/test_litestar/test_litestar_disable_di.py +0 -0
  550. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_extensions/test_starlette/test_starlette_disable_di.py +0 -0
  551. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_extensions/test_starlette/test_starlette_integration.py +0 -0
  552. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_loader/__init__.py +0 -0
  553. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_loader/test_file_system_loading.py +0 -0
  554. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_migrations/__init__.py +0 -0
  555. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_migrations/test_auto_sync.py +0 -0
  556. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_migrations/test_fix_checksum_stability.py +0 -0
  557. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_migrations/test_fix_file_operations.py +0 -0
  558. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_migrations/test_fix_idempotency_workflow.py +0 -0
  559. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_migrations/test_schema_migration.py +0 -0
  560. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_migrations/test_upgrade_downgrade_versions.py +0 -0
  561. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_storage/__init__.py +0 -0
  562. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/integration/test_storage/test_storage_integration.py +0 -0
  563. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/conftest.py +0 -0
  564. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/__init__.py +0 -0
  565. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/conftest.py +0 -0
  566. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_adapter_implementations.py +0 -0
  567. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_adbc/test_adbc_serialization.py +0 -0
  568. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_async_adapters.py +0 -0
  569. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_asyncmy/__init__.py +0 -0
  570. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_asyncmy/test_config.py +0 -0
  571. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_asyncpg/__init__.py +0 -0
  572. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_asyncpg/test_cloud_connectors.py +0 -0
  573. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_asyncpg/test_config.py +0 -0
  574. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_asyncpg/test_type_handlers.py +0 -0
  575. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_bigquery/__init__.py +0 -0
  576. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_bigquery/test_config.py +0 -0
  577. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_bigquery/test_parameters.py +0 -0
  578. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_duckdb/__init__.py +0 -0
  579. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_duckdb/test_config.py +0 -0
  580. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_duckdb/test_type_converter.py +0 -0
  581. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_oracledb/test_adk_store.py +0 -0
  582. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_oracledb/test_numpy_handlers.py +0 -0
  583. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_oracledb/test_type_converter_vectors.py +0 -0
  584. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_psqlpy/__init__.py +0 -0
  585. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_psqlpy/test_config.py +0 -0
  586. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_psycopg/test_config.py +0 -0
  587. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_psycopg/test_type_handlers.py +0 -0
  588. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_sqlite/__init__.py +0 -0
  589. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_sqlite/test_type_handlers.py +0 -0
  590. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_adapters/test_sync_adapters.py +0 -0
  591. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_arrow_helpers.py +0 -0
  592. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_arrow_result.py +0 -0
  593. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_base/__init__.py +0 -0
  594. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_base/test_sql_integration.py +0 -0
  595. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_base/test_sqlspec_class.py +0 -0
  596. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_builder/__init__.py +0 -0
  597. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_builder/test_copy_helpers.py +0 -0
  598. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_builder/test_dialect_override.py +0 -0
  599. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_builder/test_insert_builder.py +0 -0
  600. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_builder/test_lateral_joins.py +0 -0
  601. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_builder/test_merge.py +0 -0
  602. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_builder/test_merge_dialect_validation.py +0 -0
  603. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_builder/test_merge_property_shorthand.py +0 -0
  604. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_builder/test_parameter_naming.py +0 -0
  605. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_builder/test_select_locking.py +0 -0
  606. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_builder/test_to_sql.py +0 -0
  607. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_builder/test_to_sql_edge_cases.py +0 -0
  608. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_builder/test_upsert_factory.py +0 -0
  609. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_builder/test_upsert_factory_edge_cases.py +0 -0
  610. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_builder_parameter_naming.py +0 -0
  611. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_cli/__init__.py +0 -0
  612. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_cli/test_config_loading.py +0 -0
  613. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_cli/test_shell_completion.py +0 -0
  614. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_config/test_migration_methods.py +0 -0
  615. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_config/test_storage_capabilities.py +0 -0
  616. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_core/test_cache.py +0 -0
  617. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_core/test_compiler.py +0 -0
  618. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_core/test_filters.py +0 -0
  619. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_core/test_hashing.py +0 -0
  620. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_core/test_parameter_regex_performance.py +0 -0
  621. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_core/test_parameters.py +0 -0
  622. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_core/test_statement.py +0 -0
  623. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_cte_parameter_collisions.py +0 -0
  624. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_driver/__init__.py +0 -0
  625. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_driver/test_data_dictionary.py +0 -0
  626. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_driver/test_result_tools.py +0 -0
  627. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_extensions/__init__.py +0 -0
  628. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_extensions/test_fastapi/__init__.py +0 -0
  629. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_extensions/test_fastapi/test_extension.py +0 -0
  630. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_extensions/test_fastapi/test_providers.py +0 -0
  631. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_extensions/test_flask/__init__.py +0 -0
  632. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_extensions/test_flask/test_extension.py +0 -0
  633. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_extensions/test_flask/test_state.py +0 -0
  634. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_extensions/test_litestar/__init__.py +0 -0
  635. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_extensions/test_starlette/__init__.py +0 -0
  636. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_extensions/test_starlette/test_config_state.py +0 -0
  637. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_extensions/test_starlette/test_extension.py +0 -0
  638. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_extensions/test_starlette/test_utils.py +0 -0
  639. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_loader/__init__.py +0 -0
  640. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_loader/test_cache_integration.py +0 -0
  641. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_loader/test_fixtures_directory_loading.py +0 -0
  642. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_loader/test_loading_patterns.py +0 -0
  643. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_loader/test_sql_file_loader.py +0 -0
  644. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_migration_context.py +0 -0
  645. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_migrations/__init__.py +0 -0
  646. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_migrations/test_checksum_canonicalization.py +0 -0
  647. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_migrations/test_extension_discovery.py +0 -0
  648. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_migrations/test_fix_regex_precision.py +0 -0
  649. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_migrations/test_migration.py +0 -0
  650. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_migrations/test_migration_commands.py +0 -0
  651. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_migrations/test_migration_context.py +0 -0
  652. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_migrations/test_migration_execution.py +0 -0
  653. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_migrations/test_null_handling_fixes.py +0 -0
  654. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_migrations/test_tracker_idempotency.py +0 -0
  655. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_migrations/test_validation.py +0 -0
  656. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_migrations/test_version.py +0 -0
  657. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_migrations/test_version_conversion.py +0 -0
  658. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_migrations/test_version_parsing_edge_cases.py +0 -0
  659. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_parsing_utils.py +0 -0
  660. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_serialization.py +0 -0
  661. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_sql_factory.py +0 -0
  662. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_storage/__init__.py +0 -0
  663. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_storage/test_errors.py +0 -0
  664. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_storage/test_fsspec_backend.py +0 -0
  665. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_storage/test_local_store.py +0 -0
  666. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_storage/test_obstore_backend.py +0 -0
  667. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_storage/test_storage_registry.py +0 -0
  668. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_storage/test_storage_utils.py +0 -0
  669. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_storage_bridge.py +0 -0
  670. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_type_conversion.py +0 -0
  671. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_utils/__init__.py +0 -0
  672. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_utils/test_correlation.py +0 -0
  673. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_utils/test_data_transformation.py +0 -0
  674. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_utils/test_dependencies.py +0 -0
  675. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_utils/test_deprecation.py +0 -0
  676. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_utils/test_fixtures.py +0 -0
  677. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_utils/test_logging.py +0 -0
  678. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_utils/test_module_loader.py +0 -0
  679. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_utils/test_serializers.py +0 -0
  680. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_utils/test_singleton.py +0 -0
  681. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_utils/test_sync_tools.py +0 -0
  682. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_utils/test_text.py +0 -0
  683. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_utils/test_type_guards.py +0 -0
  684. {sqlspec-0.29.0 → sqlspec-0.30.0}/tests/unit/test_where_or_operations.py +0 -0
  685. {sqlspec-0.29.0 → sqlspec-0.30.0}/tools/__init__.py +0 -0
  686. {sqlspec-0.29.0 → sqlspec-0.30.0}/tools/build_docs.py +0 -0
  687. {sqlspec-0.29.0 → sqlspec-0.30.0}/tools/fix_documentation.py +0 -0
  688. {sqlspec-0.29.0 → sqlspec-0.30.0}/tools/local-infra.sh +0 -0
  689. {sqlspec-0.29.0 → sqlspec-0.30.0}/tools/pypi_readme.py +0 -0
  690. {sqlspec-0.29.0 → sqlspec-0.30.0}/tools/sphinx_ext/__init__.py +0 -0
  691. {sqlspec-0.29.0 → sqlspec-0.30.0}/tools/sphinx_ext/changelog.py +0 -0
  692. {sqlspec-0.29.0 → sqlspec-0.30.0}/tools/sphinx_ext/missing_references.py +0 -0
@@ -19,6 +19,7 @@ target/
19
19
  .vscode/
20
20
  .cursor/
21
21
  .zed/
22
+ .cache
22
23
  .coverage*
23
24
  # files
24
25
  **/*.so
@@ -17,7 +17,7 @@ repos:
17
17
  - id: mixed-line-ending
18
18
  - id: trailing-whitespace
19
19
  - repo: https://github.com/charliermarsh/ruff-pre-commit
20
- rev: "v0.14.3"
20
+ rev: "v0.14.5"
21
21
  hooks:
22
22
  - id: ruff
23
23
  args: ["--fix"]
@@ -43,6 +43,7 @@ repos:
43
43
  rev: "v1.0.1"
44
44
  hooks:
45
45
  - id: sphinx-lint
46
+ args: ["--jobs", "1"]
46
47
  - repo: local
47
48
  hooks:
48
49
  - id: pypi-readme
@@ -185,6 +185,25 @@ SQLSpec is a type-safe SQL query mapper designed for minimal abstraction between
185
185
  - **Single-Pass Processing**: Parse once → transform once → validate once - SQL object is single source of truth
186
186
  - **Abstract Methods with Concrete Implementations**: Protocol defines abstract methods, base classes provide concrete sync/async implementations
187
187
 
188
+ ### Query Stack Implementation Guidelines
189
+
190
+ - **Builder Discipline**
191
+ - `StatementStack` and `StackOperation` are immutable (`__slots__`, tuple storage). Every push helper returns a new stack; never mutate `_operations` in place.
192
+ - Validate inputs at push time (non-empty SQL, execute_many payloads, reject nested stacks) so drivers can assume well-formed operations.
193
+ - **Adapter Responsibilities**
194
+ - Add a single capability gate per adapter (e.g., Oracle pipeline version check, `psycopg.capabilities.has_pipeline()`), return `super().execute_stack()` immediately when unsupported.
195
+ - Preserve `StackResult.result` by building SQL/Arrow results via `create_sql_result()` / `create_arrow_result()` instead of copying row data.
196
+ - Honor manual toggles via `driver_features={"stack_native_disabled": True}` and document the behavior in the adapter guide.
197
+ - **Telemetry + Tracing**
198
+ - Always wrap adapter overrides with `StackExecutionObserver(self, stack, continue_on_error, native_pipeline=bool)`.
199
+ - Do **not** emit duplicate metrics; the observer already increments `stack.execute.*`, logs `stack.execute.start/complete/failed`, and publishes the `sqlspec.stack.execute` span.
200
+ - **Error Handling**
201
+ - Wrap driver exceptions in `StackExecutionError` with `operation_index`, summarized SQL (`describe_stack_statement()`), adapter name, and execution mode.
202
+ - Continue-on-error stacks append `StackResult.from_error()` and keep executing. Fail-fast stacks roll back (if they started the transaction) before re-raising the wrapped error.
203
+ - **Testing Expectations**
204
+ - Add integration tests under `tests/integration/test_adapters/<adapter>/test_driver.py::test_*statement_stack*` that cover native path, sequential fallback, and continue-on-error.
205
+ - Guard base behavior (empty stacks, large stacks, transaction boundaries) via `tests/integration/test_stack_edge_cases.py`.
206
+
188
207
  ### Driver Parameter Profile Registry
189
208
 
190
209
  - All adapter parameter defaults live in `DriverParameterProfile` entries inside `sqlspec/core/parameters.py`.
@@ -507,6 +526,23 @@ When processing user input that may be incomplete or malformed, use a two-tier a
507
526
 
508
527
  **Implementation Pattern:**
509
528
 
529
+ ## Recent edit: Configuration examples (2025-11-04)
530
+
531
+ - Updated docs/examples/usage examples: consolidated example filenames to
532
+ docs/examples/usage/test_configuration_*.py and ensured the documentation
533
+ references match the renamed examples.
534
+ - Added an explicit :lines: range and a :dedent: directive to the
535
+ literalinclude for test_configuration_23.py so Sphinx renders the snippet
536
+ with correct indentation.
537
+ - Built the Sphinx documentation (make docs) and verified HTML output was
538
+ generated successfully. Two minor warnings were reported (dedent and a
539
+ missing stylesheet copy) but they did not prevent the build.
540
+ - Updated project TODOs to reflect completed steps.
541
+
542
+ This summary documents the small documentation and example maintenance
543
+ performed on the configuration usage guide and can be expanded into a
544
+ longer changelog entry if desired.
545
+
510
546
  ```python
511
547
  def parse_user_input(content: str, source: str) -> "dict[str, Result]":
512
548
  """Parse user input with two-tier error handling.
@@ -2025,6 +2061,14 @@ class GoodDriverFeatures(TypedDict):
2025
2061
 
2026
2062
  ### Compliance Table
2027
2063
 
2064
+ ### Change log: configuration examples
2065
+
2066
+ - Renamed documentation example references to use docs/examples/usage/test_configuration_*.py
2067
+ - Added explicit :lines: ranges and :dedent: directive for the literalinclude at the top of docs/usage/configuration.rst
2068
+ - Rebuilt documentation to verify the changes (make docs). Build completed with 2 warnings about dedent and a missing stylesheet; output HTML written to docs/_build/html
2069
+
2070
+ ### Compliance Table
2071
+
2028
2072
  Current state of all adapters (as of type-cleanup branch):
2029
2073
 
2030
2074
  | Adapter | TypedDict | Auto-Detect | enable_ Prefix | Defaults | Grade | Notes |
@@ -0,0 +1,202 @@
1
+ Metadata-Version: 2.4
2
+ Name: sqlspec
3
+ Version: 0.30.0
4
+ Summary: SQL Experiments in Python
5
+ Project-URL: Discord, https://discord.gg/litestar
6
+ Project-URL: Issue, https://github.com/litestar-org/sqlspec/issues/
7
+ Project-URL: Source, https://github.com/litestar-org/sqlspec
8
+ Author-email: Cody Fincher <cody@litestar.dev>
9
+ Maintainer-email: Litestar Developers <hello@litestar.dev>
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Requires-Python: <4.0,>=3.10
13
+ Requires-Dist: mypy-extensions
14
+ Requires-Dist: rich-click
15
+ Requires-Dist: sqlglot>=19.9.0
16
+ Requires-Dist: typing-extensions
17
+ Provides-Extra: adbc
18
+ Requires-Dist: adbc-driver-manager; extra == 'adbc'
19
+ Requires-Dist: pyarrow; extra == 'adbc'
20
+ Provides-Extra: adk
21
+ Requires-Dist: google-adk; extra == 'adk'
22
+ Provides-Extra: aioodbc
23
+ Requires-Dist: aioodbc; extra == 'aioodbc'
24
+ Provides-Extra: aiosql
25
+ Requires-Dist: aiosql; extra == 'aiosql'
26
+ Provides-Extra: aiosqlite
27
+ Requires-Dist: aiosqlite; extra == 'aiosqlite'
28
+ Provides-Extra: alloydb
29
+ Requires-Dist: google-cloud-alloydb-connector; extra == 'alloydb'
30
+ Provides-Extra: asyncmy
31
+ Requires-Dist: asyncmy; extra == 'asyncmy'
32
+ Provides-Extra: asyncpg
33
+ Requires-Dist: asyncpg; extra == 'asyncpg'
34
+ Provides-Extra: attrs
35
+ Requires-Dist: attrs; extra == 'attrs'
36
+ Requires-Dist: cattrs; extra == 'attrs'
37
+ Provides-Extra: bigquery
38
+ Requires-Dist: google-cloud-bigquery; extra == 'bigquery'
39
+ Requires-Dist: google-cloud-storage; extra == 'bigquery'
40
+ Provides-Extra: cli
41
+ Requires-Dist: rich-click; extra == 'cli'
42
+ Provides-Extra: cloud-sql
43
+ Requires-Dist: cloud-sql-python-connector; extra == 'cloud-sql'
44
+ Provides-Extra: duckdb
45
+ Requires-Dist: duckdb; extra == 'duckdb'
46
+ Provides-Extra: fastapi
47
+ Requires-Dist: fastapi; extra == 'fastapi'
48
+ Provides-Extra: flask
49
+ Requires-Dist: flask; extra == 'flask'
50
+ Provides-Extra: fsspec
51
+ Requires-Dist: fsspec; extra == 'fsspec'
52
+ Provides-Extra: litestar
53
+ Requires-Dist: litestar; extra == 'litestar'
54
+ Provides-Extra: msgspec
55
+ Requires-Dist: msgspec; extra == 'msgspec'
56
+ Provides-Extra: mypyc
57
+ Provides-Extra: nanoid
58
+ Requires-Dist: fastnanoid>=0.4.1; extra == 'nanoid'
59
+ Provides-Extra: obstore
60
+ Requires-Dist: obstore; extra == 'obstore'
61
+ Provides-Extra: opentelemetry
62
+ Requires-Dist: opentelemetry-instrumentation; extra == 'opentelemetry'
63
+ Provides-Extra: oracledb
64
+ Requires-Dist: oracledb; extra == 'oracledb'
65
+ Provides-Extra: orjson
66
+ Requires-Dist: orjson; extra == 'orjson'
67
+ Provides-Extra: pandas
68
+ Requires-Dist: pandas; extra == 'pandas'
69
+ Requires-Dist: pyarrow; extra == 'pandas'
70
+ Provides-Extra: performance
71
+ Requires-Dist: msgspec; extra == 'performance'
72
+ Requires-Dist: sqlglot[rs]; extra == 'performance'
73
+ Provides-Extra: polars
74
+ Requires-Dist: polars; extra == 'polars'
75
+ Requires-Dist: pyarrow; extra == 'polars'
76
+ Provides-Extra: prometheus
77
+ Requires-Dist: prometheus-client; extra == 'prometheus'
78
+ Provides-Extra: psqlpy
79
+ Requires-Dist: psqlpy; extra == 'psqlpy'
80
+ Provides-Extra: psycopg
81
+ Requires-Dist: psycopg[binary,pool]; extra == 'psycopg'
82
+ Provides-Extra: pydantic
83
+ Requires-Dist: pydantic; extra == 'pydantic'
84
+ Requires-Dist: pydantic-extra-types; extra == 'pydantic'
85
+ Provides-Extra: pymssql
86
+ Requires-Dist: pymssql; extra == 'pymssql'
87
+ Provides-Extra: pymysql
88
+ Requires-Dist: pymysql; extra == 'pymysql'
89
+ Provides-Extra: spanner
90
+ Requires-Dist: google-cloud-spanner; extra == 'spanner'
91
+ Provides-Extra: uuid
92
+ Requires-Dist: uuid-utils; extra == 'uuid'
93
+ Description-Content-Type: text/markdown
94
+
95
+ # SQLSpec
96
+
97
+ **Type-safe SQL execution layer for Python.**
98
+
99
+ SQLSpec handles database connectivity and result mapping so you can focus on SQL. Write raw queries when you need precision, use the builder API when you need composability, or load SQL from files when you need organization. Every statement passes through a [sqlglot](https://github.com/tobymao/sqlglot)-powered AST pipeline for validation, dialect conversion, and optimization before execution. Export results as Python objects, Arrow tables, Polars or pandas DataFrames.
100
+
101
+ It's not an ORM. It's the connectivity and processing layer between your application and your database that provides the right abstraction for each situation without dictating how you write SQL.
102
+
103
+ ## Status
104
+
105
+ SQLSpec is currently in active development. The public API may change. Follow the [docs](https://sqlspec.dev/) and changelog for updates.
106
+
107
+ ## What You Get
108
+
109
+ **Connection Management**
110
+
111
+ - Connection pooling with configurable size, timeout, and lifecycle hooks
112
+ - Sync and async support with a unified API surface
113
+ - Adapters for PostgreSQL (psycopg, asyncpg, psqlpy), SQLite (sqlite3, aiosqlite), DuckDB, MySQL (asyncmy), Oracle, BigQuery, and ADBC-compatible databases
114
+
115
+ **Query Execution**
116
+
117
+ - Raw SQL strings with automatic parameter binding and dialect translation
118
+ - SQL AST parsing via sqlglot for validation, optimization, and dialect conversion
119
+ - Builder API for programmatic query construction without string concatenation
120
+ - SQL file loading to keep queries organized alongside your code (aiosql-style)
121
+ - Statement stacks for batching multiple operations with transaction control
122
+
123
+ **Result Handling**
124
+
125
+ - Type-safe result mapping to Pydantic, msgspec, attrs, or dataclasses
126
+ - Apache Arrow export for zero-copy integration with pandas, Polars, and analytical tools
127
+ - Result iteration, single-row fetch, or bulk retrieval based on your use case
128
+
129
+ **Framework Integration**
130
+
131
+ - Litestar plugin with dependency injection for connections, sessions, and pools
132
+ - Starlette/FastAPI middleware for automatic transaction management
133
+ - Flask extension with sync/async portal support
134
+
135
+ **Production Features**
136
+
137
+ - SQL validation and caching via sqlglot AST parsing
138
+ - OpenTelemetry and Prometheus instrumentation hooks
139
+ - Structured logging with correlation ID support
140
+ - Migration CLI for schema versioning
141
+
142
+ ## Quick Start
143
+
144
+ ### Install
145
+
146
+ ```bash
147
+ pip install "sqlspec"
148
+ ```
149
+
150
+ ### Run your first query
151
+
152
+ ```python
153
+ from pydantic import BaseModel
154
+ from sqlspec import SQLSpec
155
+ from sqlspec.adapters.sqlite import SqliteConfig
156
+
157
+ class Greeting(BaseModel):
158
+ message: str
159
+
160
+ spec = SQLSpec()
161
+ db = sql.add_config(SqliteConfig(pool_config={"database": ":memory:"}))
162
+
163
+ with spec.provide_session(db) as session:
164
+ greeting = session.select_one(
165
+ "SELECT 'Hello, SQLSpec!' AS message",
166
+ schema_type=Greeting,
167
+ )
168
+ print(greeting.message) # Output: Hello, SQLSpec!
169
+ ```
170
+
171
+ That's it. Write SQL, define a schema, get typed objects back. Connection pooling, parameter binding, and result mapping are handled automatically.
172
+
173
+ See the [Getting Started guide](https://sqlspec.dev/getting_started/) for installation variants, adapter selection, and advanced result mapping options.
174
+
175
+ ## Documentation
176
+
177
+ - [Getting Started](https://sqlspec.dev/getting_started/)
178
+ - [Usage Guides](https://sqlspec.dev/usage/)
179
+ - [Examples Gallery](https://sqlspec.dev/examples/)
180
+ - [API Reference](https://sqlspec.dev/reference/)
181
+ - [CLI Reference](https://sqlspec.dev/usage/cli.html)
182
+
183
+ ## Reference Applications
184
+
185
+ - **[PostgreSQL + Vertex AI Demo](https://github.com/cofin/postgres-vertexai-demo)** - Vector search with pgvector and real-time chat using Litestar and Google ADK. Shows connection pooling, migrations, type-safe result mapping, vector embeddings, and response caching.
186
+ - **[Oracle + Vertex AI Demo](https://github.com/cofin/oracledb-vertexai-demo)** - Oracle 23ai vector search with semantic similarity using HNSW indexes. Demonstrates NumPy array conversion, large object (CLOB) handling, and real-time performance metrics.
187
+
188
+ See the [usage docs](https://sqlspec.dev/usage/) for detailed guides on adapters, configuration patterns, and features like the [SQL file loader](https://sqlspec.dev/usage/loader.html).
189
+
190
+ ## Built With
191
+
192
+ - **[sqlglot](https://github.com/tobymao/sqlglot)** - SQL parser, transpiler, and optimizer powering SQLSpec's AST pipeline
193
+
194
+ ## Contributing
195
+
196
+ Contributions, issue reports, and adapter ideas are welcome. Review the
197
+ [contributor guide](https://sqlspec.dev/contributing/) and follow the project
198
+ coding standards before opening a pull request.
199
+
200
+ ## License
201
+
202
+ SQLSpec is distributed under the MIT License.
@@ -0,0 +1,108 @@
1
+ # SQLSpec
2
+
3
+ **Type-safe SQL execution layer for Python.**
4
+
5
+ SQLSpec handles database connectivity and result mapping so you can focus on SQL. Write raw queries when you need precision, use the builder API when you need composability, or load SQL from files when you need organization. Every statement passes through a [sqlglot](https://github.com/tobymao/sqlglot)-powered AST pipeline for validation, dialect conversion, and optimization before execution. Export results as Python objects, Arrow tables, Polars or pandas DataFrames.
6
+
7
+ It's not an ORM. It's the connectivity and processing layer between your application and your database that provides the right abstraction for each situation without dictating how you write SQL.
8
+
9
+ ## Status
10
+
11
+ SQLSpec is currently in active development. The public API may change. Follow the [docs](https://sqlspec.dev/) and changelog for updates.
12
+
13
+ ## What You Get
14
+
15
+ **Connection Management**
16
+
17
+ - Connection pooling with configurable size, timeout, and lifecycle hooks
18
+ - Sync and async support with a unified API surface
19
+ - Adapters for PostgreSQL (psycopg, asyncpg, psqlpy), SQLite (sqlite3, aiosqlite), DuckDB, MySQL (asyncmy), Oracle, BigQuery, and ADBC-compatible databases
20
+
21
+ **Query Execution**
22
+
23
+ - Raw SQL strings with automatic parameter binding and dialect translation
24
+ - SQL AST parsing via sqlglot for validation, optimization, and dialect conversion
25
+ - Builder API for programmatic query construction without string concatenation
26
+ - SQL file loading to keep queries organized alongside your code (aiosql-style)
27
+ - Statement stacks for batching multiple operations with transaction control
28
+
29
+ **Result Handling**
30
+
31
+ - Type-safe result mapping to Pydantic, msgspec, attrs, or dataclasses
32
+ - Apache Arrow export for zero-copy integration with pandas, Polars, and analytical tools
33
+ - Result iteration, single-row fetch, or bulk retrieval based on your use case
34
+
35
+ **Framework Integration**
36
+
37
+ - Litestar plugin with dependency injection for connections, sessions, and pools
38
+ - Starlette/FastAPI middleware for automatic transaction management
39
+ - Flask extension with sync/async portal support
40
+
41
+ **Production Features**
42
+
43
+ - SQL validation and caching via sqlglot AST parsing
44
+ - OpenTelemetry and Prometheus instrumentation hooks
45
+ - Structured logging with correlation ID support
46
+ - Migration CLI for schema versioning
47
+
48
+ ## Quick Start
49
+
50
+ ### Install
51
+
52
+ ```bash
53
+ pip install "sqlspec"
54
+ ```
55
+
56
+ ### Run your first query
57
+
58
+ ```python
59
+ from pydantic import BaseModel
60
+ from sqlspec import SQLSpec
61
+ from sqlspec.adapters.sqlite import SqliteConfig
62
+
63
+ class Greeting(BaseModel):
64
+ message: str
65
+
66
+ spec = SQLSpec()
67
+ db = sql.add_config(SqliteConfig(pool_config={"database": ":memory:"}))
68
+
69
+ with spec.provide_session(db) as session:
70
+ greeting = session.select_one(
71
+ "SELECT 'Hello, SQLSpec!' AS message",
72
+ schema_type=Greeting,
73
+ )
74
+ print(greeting.message) # Output: Hello, SQLSpec!
75
+ ```
76
+
77
+ That's it. Write SQL, define a schema, get typed objects back. Connection pooling, parameter binding, and result mapping are handled automatically.
78
+
79
+ See the [Getting Started guide](https://sqlspec.dev/getting_started/) for installation variants, adapter selection, and advanced result mapping options.
80
+
81
+ ## Documentation
82
+
83
+ - [Getting Started](https://sqlspec.dev/getting_started/)
84
+ - [Usage Guides](https://sqlspec.dev/usage/)
85
+ - [Examples Gallery](https://sqlspec.dev/examples/)
86
+ - [API Reference](https://sqlspec.dev/reference/)
87
+ - [CLI Reference](https://sqlspec.dev/usage/cli.html)
88
+
89
+ ## Reference Applications
90
+
91
+ - **[PostgreSQL + Vertex AI Demo](https://github.com/cofin/postgres-vertexai-demo)** - Vector search with pgvector and real-time chat using Litestar and Google ADK. Shows connection pooling, migrations, type-safe result mapping, vector embeddings, and response caching.
92
+ - **[Oracle + Vertex AI Demo](https://github.com/cofin/oracledb-vertexai-demo)** - Oracle 23ai vector search with semantic similarity using HNSW indexes. Demonstrates NumPy array conversion, large object (CLOB) handling, and real-time performance metrics.
93
+
94
+ See the [usage docs](https://sqlspec.dev/usage/) for detailed guides on adapters, configuration patterns, and features like the [SQL file loader](https://sqlspec.dev/usage/loader.html).
95
+
96
+ ## Built With
97
+
98
+ - **[sqlglot](https://github.com/tobymao/sqlglot)** - SQL parser, transpiler, and optimizer powering SQLSpec's AST pipeline
99
+
100
+ ## Contributing
101
+
102
+ Contributions, issue reports, and adapter ideas are welcome. Review the
103
+ [contributor guide](https://sqlspec.dev/contributing/) and follow the project
104
+ coding standards before opening a pull request.
105
+
106
+ ## License
107
+
108
+ SQLSpec is distributed under the MIT License.
@@ -7,7 +7,7 @@ maintainers = [{ name = "Litestar Developers", email = "hello@litestar.dev" }]
7
7
  name = "sqlspec"
8
8
  readme = "README.md"
9
9
  requires-python = ">=3.10, <4.0"
10
- version = "0.29.0"
10
+ version = "0.30.0"
11
11
 
12
12
  [project.urls]
13
13
  Discord = "https://discord.gg/litestar"
@@ -179,13 +179,21 @@ include = [
179
179
  "sqlspec/utils/fixtures.py", # File fixture loading
180
180
  "sqlspec/utils/data_transformation.py", # Data transformation utilities
181
181
 
182
+ # === OBSERVABILITY ===
183
+ "sqlspec/observability/_config.py",
184
+ "sqlspec/observability/_diagnostics.py",
185
+ "sqlspec/observability/_dispatcher.py",
186
+ "sqlspec/observability/_observer.py",
187
+ "sqlspec/observability/_runtime.py",
188
+ "sqlspec/observability/_spans.py",
189
+
182
190
  # === STORAGE LAYER ===
183
- "sqlspec/storage/_utils.py",
184
- "sqlspec/storage/registry.py",
185
- "sqlspec/storage/backends/base.py",
186
- "sqlspec/storage/backends/obstore.py",
187
- "sqlspec/storage/backends/fsspec.py",
188
- "sqlspec/storage/backends/local.py",
191
+ # "sqlspec/storage/_utils.py",
192
+ # "sqlspec/storage/registry.py",
193
+ # "sqlspec/storage/backends/base.py",
194
+ # "sqlspec/storage/backends/obstore.py",
195
+ # "sqlspec/storage/backends/fsspec.py",
196
+ # "sqlspec/storage/backends/local.py",
189
197
  ]
190
198
  mypy-args = [
191
199
  "--ignore-missing-imports",
@@ -209,7 +217,7 @@ opt_level = "3" # Maximum optimization (0-3)
209
217
  allow_dirty = true
210
218
  commit = false
211
219
  commit_args = "--no-verify"
212
- current_version = "0.29.0"
220
+ current_version = "0.30.0"
213
221
  ignore_missing_files = false
214
222
  ignore_missing_version = false
215
223
  message = "chore(release): bump to v{new_version}"
@@ -322,7 +330,8 @@ markers = [
322
330
  "pymysql: marks tests using pymysql",
323
331
  "psqlpy: marks tests using psqlpy",
324
332
  ]
325
- testpaths = ["tests"]
333
+ python_files = ["test_*.py", "quickstart_*.py", "usage_*.py"]
334
+ testpaths = ["tests", "docs/examples/quickstart", "docs/examples/usage"]
326
335
 
327
336
  [tool.mypy]
328
337
  exclude = ["tmp/", ".tmp/", ".bugs/"]
@@ -490,10 +499,11 @@ known-first-party = ["sqlspec", "tests"]
490
499
  split-on-trailing-comma = false
491
500
 
492
501
  [tool.ruff.lint.per-file-ignores]
493
- "docs/**/*.*" = ["S", "B", "DTZ", "A", "TC", "ERA", "D", "RET", "PLW0127"]
502
+ "docs/**/*.*" = ["S", "B", "DTZ", "A", "TC", "ERA", "D", "RET", "PLW0127", "PLR2004"]
494
503
  "docs/examples/**" = ["T201"]
495
504
  "sqlspec/builder/mixins/**/*.*" = ["SLF001"]
496
505
  "sqlspec/extensions/adk/converters.py" = ["S403"]
506
+ "sqlspec/migrations/utils.py" = ["S404"]
497
507
  "tests/**/*.*" = [
498
508
  "A",
499
509
  "ARG",
@@ -0,0 +1,33 @@
1
+ # Docs & Example Alignment
2
+
3
+ ## Why
4
+
5
+ - Keep literalincluded snippets in `docs/` authoritative and executable.
6
+ - Reduce drift between prose and runnable code by treating documentation examples as pytest cases.
7
+
8
+ ## Workflow
9
+
10
+ 1. Update the Python example under `docs/examples/...` first and keep it function-based (`def test_*`).
11
+ 2. Refresh the corresponding ``literalinclude`` in the `.rst` file:
12
+ - Adjust `:lines:` and `:dedent:` ranges so the rendered snippet only shows the relevant part of the test.
13
+ - Mention any helper imports or context (e.g., `contextlib.suppress`) in nearby prose.
14
+ 3. Re-run the targeted example tests locally and record failures that require external services (Postgres, etc.) so reviewers know what still needs coverage. Use helpers like `SQLSPEC_QUICKSTART_PG_*` to keep DSNs out of docs snippets.
15
+ 4. When SQLite pooling is involved, use `tempfile.NamedTemporaryFile` (or `tmp_path`) to guarantee isolation. Delete any prior tables at the top of the example to keep re-runs deterministic.
16
+ 5. Reference this checklist in PR descriptions whenever docs/examples are touched.
17
+
18
+ ## Testing Command Examples
19
+
20
+ ```bash
21
+ uv run pytest docs/examples/quickstart docs/examples/usage -q
22
+ ```
23
+
24
+ - `docs/examples/quickstart/conftest.py` sets `SQLSPEC_QUICKSTART_PG_*` from `pytest-databases` so `quickstart_5.py` stays copy/paste friendly in the docs.
25
+ - Usage samples are function-based (`usage_*.py`) and collected automatically because `python_files` now includes that pattern.
26
+ - Prefer smaller batches (per topic/section) to keep feedback loops fast.
27
+
28
+ ## Review Checklist
29
+
30
+ - [ ] Example is function-based and runnable via pytest.
31
+ - [ ] Docs include/excerpt ranges match the function body.
32
+ - [ ] Tests were re-run or limitations were documented.
33
+ - [ ] Temporary SQLite files are used for pooled configs to avoid leakage between examples.
@@ -0,0 +1,67 @@
1
+ # Query Stack Guide
2
+
3
+ Query Stack executes multiple SQL statements in a single driver call while preserving raw SQL semantics. Each stack is immutable, MyPy-friendly, and can be shared across asyncio tasks or worker threads without synchronization.
4
+
5
+ ## When to Use Query Stack
6
+
7
+ - Multi-step workflows (audit insert + update + permission read) that would otherwise require multiple round-trips.
8
+ - Adapter-specific native pipelines (Oracle 23ai+, psycopg pipeline mode, asyncpg batch execution) where batching reduces latency.
9
+ - Sequential fallback adapters (SQLite, DuckDB, BigQuery, ADBC, AsyncMy) when you still want the ergonomic benefits of a single API call.
10
+ - Continue-on-error workflows that need to run every statement but report failures alongside successful operations.
11
+
12
+ ## Building StatementStack Instances
13
+
14
+ 1. Start with an empty stack: `stack = StatementStack()`.
15
+ 2. Add operations via the push helpers (each returns a new instance):
16
+ - `.push_execute(sql, parameters, *, statement_config=None, **kwargs)`
17
+ - `.push_execute_many(sql, parameter_sets, *filters, statement_config=None, **kwargs)`
18
+ - `.push_execute_script(sql, *filters, statement_config=None, **kwargs)`
19
+ - `.push_execute_arrow(sql, *filters, statement_config=None, **kwargs)`
20
+ 3. Use `.extend()` or `StatementStack.from_operations()` to combine stacks.
21
+ 4. Store stacks at module scope or factory functions—the tuple-based storage makes them hashable and thread-safe.
22
+
23
+ ## Execution Modes
24
+
25
+ `Session.execute_stack(stack, continue_on_error=False)` mirrors the driver’s transaction rules:
26
+
27
+ - **Fail-fast (default):** The driver creates a transaction if one is not already active. Any failure raises `StackExecutionError` and rolls back the transaction.
28
+ - **Continue-on-error:** Each operation commits immediately. Failures still raise `StackExecutionError`, but execution continues and the error is preserved on the corresponding `StackResult`.
29
+
30
+ When using adapters with native pipelines (Oracle, psycopg, asyncpg), continue-on-error downgrades to sequential mode if the native API cannot honor the semantics (e.g., psycopg pipeline requires fail-fast).
31
+
32
+ ## Transaction Boundaries
33
+
34
+ - Existing transactions are respected—`execute_stack()` never commits or rolls back a transaction it did not create.
35
+ - For fail-fast stacks, drivers call `begin()`/`commit()` (or `rollback()` on error) only when no transaction is active.
36
+ - Continue-on-error uses commit/rollback hooks after each operation to keep the connection clean.
37
+
38
+ ## Arrow Operations
39
+
40
+ `push_execute_arrow()` delegates to `select_to_arrow()` when the adapter implements Arrow support (DuckDB, BigQuery, ADBC, etc.). The returned `StackResult.result` is an `ArrowResult`, so downstream helpers like `to_pandas()` or `to_polars()` continue to work.
41
+
42
+ ## Telemetry and Tracing
43
+
44
+ Every stack execution routes through `StackExecutionObserver`, which provides:
45
+
46
+ - `StackExecutionMetrics`: increments `stack.execute.*` counters (invocations, statements, partial errors, duration) for any observability runtime (built-in logger, OTLP exporter, Prometheus bridge, etc.).
47
+ - `sqlspec.stack.execute` tracing spans containing adapter, statement count, native pipeline flag, continue-on-error, and hashed SQL identifiers.
48
+ - Structured DEBUG/ERROR logs (`stack.execute.start`, `stack.execute.complete`, `stack.execute.failed`).
49
+
50
+ Adapters only need to report whether they used a native pipeline; the observer handles the rest.
51
+
52
+ ## Troubleshooting
53
+
54
+ | Symptom | Cause | Fix |
55
+ | --- | --- | --- |
56
+ | `ValueError: Cannot execute an empty StatementStack` | Stack has zero operations | Ensure you push at least one statement before calling `execute_stack()` |
57
+ | `StackExecutionError(operation_index=1, ...)` | Driver error on a specific statement | Inspect `StackResult.error` to see the wrapped exception; use `StackResult.result` to inspect partial data |
58
+ | `push_execute_many` raising `TypeError` | Parameter payload not a sequence | Pass an actual list/tuple of parameter sets |
59
+ | Continue-on-error seems to run sequentially on psycopg | Psycopg pipeline mode does not support partial failures | Expected—SQLSpec downgrades to sequential mode automatically |
60
+
61
+ ## Related Resources
62
+
63
+ - [Query Stack API Reference](/reference/query-stack)
64
+ - :doc:`/examples/patterns/stacks/query_stack_example`
65
+ - [Adapter Guides](/guides/adapters/) for native vs. fallback behavior per database
66
+
67
+ Use the new :doc:`/reference/query-stack` page for low-level API details and :doc:`/examples/patterns/stacks/query_stack_example` to see the end-to-end workflow.
@@ -29,11 +29,15 @@ from sqlspec.core import (
29
29
  ParameterStyle,
30
30
  ParameterStyleConfig,
31
31
  SQLResult,
32
+ StackOperation,
33
+ StackResult,
32
34
  Statement,
33
35
  StatementConfig,
36
+ StatementStack,
34
37
  )
35
38
  from sqlspec.core import filters as filters
36
39
  from sqlspec.driver import AsyncDriverAdapterBase, ExecutionResult, SyncDriverAdapterBase
40
+ from sqlspec.exceptions import StackExecutionError
37
41
  from sqlspec.loader import SQLFile, SQLFileLoader
38
42
  from sqlspec.typing import ConnectionT, PoolT, SchemaT, StatementParameters, SupportedSchemaModel
39
43
  from sqlspec.utils.logging import suppress_erroneous_sqlglot_log_messages
@@ -70,9 +74,13 @@ __all__ = (
70
74
  "SQLSpec",
71
75
  "SchemaT",
72
76
  "Select",
77
+ "StackExecutionError",
78
+ "StackOperation",
79
+ "StackResult",
73
80
  "Statement",
74
81
  "StatementConfig",
75
82
  "StatementParameters",
83
+ "StatementStack",
76
84
  "SupportedSchemaModel",
77
85
  "SyncDatabaseConfig",
78
86
  "SyncDriverAdapterBase",
@@ -568,6 +568,9 @@ except ImportError:
568
568
  ) -> Tracer:
569
569
  return Tracer() # type: ignore[abstract] # pragma: no cover
570
570
 
571
+ def get_tracer_provider(self) -> Any: # pragma: no cover
572
+ return None
573
+
571
574
  TracerProvider = type(None) # Shim for TracerProvider if needed elsewhere
572
575
  StatusCode = type(None) # Shim for StatusCode
573
576
  Status = type(None) # Shim for Status
@@ -600,6 +603,8 @@ except ImportError:
600
603
  unit: str = "",
601
604
  registry: Any = None,
602
605
  ejemplar_fn: Any = None,
606
+ buckets: Any = None,
607
+ **_: Any,
603
608
  ) -> None:
604
609
  return None
605
610