sqlspec 0.54.2__py3-none-any.whl → 0.55.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. sqlspec/_typing.py +234 -200
  2. sqlspec/adapters/adbc/_typing.py +4 -1
  3. sqlspec/adapters/adbc/config.py +5 -5
  4. sqlspec/adapters/adbc/core.py +2 -1
  5. sqlspec/adapters/adbc/data_dictionary.py +376 -5
  6. sqlspec/adapters/adbc/driver.py +20 -15
  7. sqlspec/adapters/aiomysql/config.py +5 -5
  8. sqlspec/adapters/aiomysql/core.py +7 -14
  9. sqlspec/adapters/aiomysql/data_dictionary.py +188 -7
  10. sqlspec/adapters/aiomysql/driver.py +2 -8
  11. sqlspec/adapters/aiosqlite/config.py +16 -6
  12. sqlspec/adapters/aiosqlite/core.py +252 -14
  13. sqlspec/adapters/aiosqlite/data_dictionary.py +80 -58
  14. sqlspec/adapters/aiosqlite/driver.py +103 -32
  15. sqlspec/adapters/aiosqlite/pool.py +78 -74
  16. sqlspec/adapters/arrow_odbc/config.py +2 -2
  17. sqlspec/adapters/arrow_odbc/core.py +55 -2
  18. sqlspec/adapters/arrow_odbc/data_dictionary.py +119 -0
  19. sqlspec/adapters/arrow_odbc/driver.py +37 -18
  20. sqlspec/adapters/asyncmy/config.py +5 -5
  21. sqlspec/adapters/asyncmy/core.py +7 -14
  22. sqlspec/adapters/asyncmy/data_dictionary.py +188 -7
  23. sqlspec/adapters/asyncmy/driver.py +2 -8
  24. sqlspec/adapters/asyncpg/config.py +7 -8
  25. sqlspec/adapters/asyncpg/core.py +5 -2
  26. sqlspec/adapters/asyncpg/data_dictionary.py +299 -7
  27. sqlspec/adapters/asyncpg/driver.py +3 -0
  28. sqlspec/adapters/asyncpg/events/_hub.py +46 -4
  29. sqlspec/adapters/asyncpg/events/backend.py +203 -21
  30. sqlspec/adapters/bigquery/_typing.py +3 -10
  31. sqlspec/adapters/bigquery/adk/store.py +2 -2
  32. sqlspec/adapters/bigquery/config.py +5 -5
  33. sqlspec/adapters/bigquery/core.py +1 -1
  34. sqlspec/adapters/bigquery/data_dictionary.py +236 -18
  35. sqlspec/adapters/bigquery/driver.py +14 -13
  36. sqlspec/adapters/cockroach_asyncpg/config.py +1 -1
  37. sqlspec/adapters/cockroach_asyncpg/data_dictionary.py +270 -7
  38. sqlspec/adapters/cockroach_psycopg/adk/store.py +348 -419
  39. sqlspec/adapters/cockroach_psycopg/config.py +2 -2
  40. sqlspec/adapters/cockroach_psycopg/data_dictionary.py +400 -12
  41. sqlspec/adapters/cockroach_psycopg/driver.py +17 -16
  42. sqlspec/adapters/duckdb/config.py +5 -5
  43. sqlspec/adapters/duckdb/core.py +58 -0
  44. sqlspec/adapters/duckdb/data_dictionary.py +101 -9
  45. sqlspec/adapters/duckdb/driver.py +43 -25
  46. sqlspec/adapters/duckdb/pool.py +51 -27
  47. sqlspec/adapters/mssql_python/__init__.py +3 -23
  48. sqlspec/adapters/mssql_python/_typing.py +2 -71
  49. sqlspec/adapters/mssql_python/adk/__init__.py +2 -6
  50. sqlspec/adapters/mssql_python/adk/store.py +6 -371
  51. sqlspec/adapters/mssql_python/config.py +4 -143
  52. sqlspec/adapters/mssql_python/core.py +24 -2
  53. sqlspec/adapters/mssql_python/data_dictionary.py +96 -145
  54. sqlspec/adapters/mssql_python/driver.py +27 -365
  55. sqlspec/adapters/mssql_python/events/__init__.py +2 -6
  56. sqlspec/adapters/mssql_python/events/store.py +2 -11
  57. sqlspec/adapters/mssql_python/litestar/store.py +168 -115
  58. sqlspec/adapters/mssql_python/migrations.py +3 -66
  59. sqlspec/adapters/mysqlconnector/adk/store.py +201 -243
  60. sqlspec/adapters/mysqlconnector/config.py +4 -6
  61. sqlspec/adapters/mysqlconnector/core.py +27 -23
  62. sqlspec/adapters/mysqlconnector/data_dictionary.py +347 -11
  63. sqlspec/adapters/mysqlconnector/driver.py +2 -22
  64. sqlspec/adapters/oracledb/_typing.py +2 -36
  65. sqlspec/adapters/oracledb/_vector_handlers.py +5 -1
  66. sqlspec/adapters/oracledb/adk/store.py +1131 -1284
  67. sqlspec/adapters/oracledb/config.py +5 -5
  68. sqlspec/adapters/oracledb/core.py +4 -16
  69. sqlspec/adapters/oracledb/data_dictionary.py +613 -2
  70. sqlspec/adapters/oracledb/driver.py +63 -23
  71. sqlspec/adapters/oracledb/events/_hub.py +5 -3
  72. sqlspec/adapters/oracledb/events/backend.py +6 -4
  73. sqlspec/adapters/oracledb/migrations.py +32 -11
  74. sqlspec/adapters/psqlpy/_typing.py +16 -8
  75. sqlspec/adapters/psqlpy/config.py +9 -9
  76. sqlspec/adapters/psqlpy/core.py +19 -6
  77. sqlspec/adapters/psqlpy/data_dictionary.py +299 -7
  78. sqlspec/adapters/psqlpy/driver.py +0 -5
  79. sqlspec/adapters/psqlpy/events/_hub.py +49 -5
  80. sqlspec/adapters/psqlpy/events/backend.py +204 -20
  81. sqlspec/adapters/psycopg/adk/store.py +343 -422
  82. sqlspec/adapters/psycopg/config.py +10 -11
  83. sqlspec/adapters/psycopg/core.py +11 -5
  84. sqlspec/adapters/psycopg/data_dictionary.py +446 -12
  85. sqlspec/adapters/psycopg/driver.py +131 -47
  86. sqlspec/adapters/psycopg/events/_hub.py +136 -29
  87. sqlspec/adapters/psycopg/events/backend.py +347 -42
  88. sqlspec/adapters/pymssql/adk/__init__.py +2 -7
  89. sqlspec/adapters/pymssql/adk/store.py +2 -5
  90. sqlspec/adapters/pymssql/config.py +2 -2
  91. sqlspec/adapters/pymssql/core.py +11 -6
  92. sqlspec/adapters/pymssql/data_dictionary.py +97 -9
  93. sqlspec/adapters/pymssql/driver.py +5 -7
  94. sqlspec/adapters/pymssql/events/__init__.py +2 -2
  95. sqlspec/adapters/pymssql/events/store.py +1 -4
  96. sqlspec/adapters/pymssql/pool.py +2 -2
  97. sqlspec/adapters/pymysql/config.py +2 -2
  98. sqlspec/adapters/pymysql/core.py +7 -11
  99. sqlspec/adapters/pymysql/data_dictionary.py +186 -7
  100. sqlspec/adapters/pymysql/driver.py +0 -4
  101. sqlspec/adapters/pymysql/pool.py +2 -2
  102. sqlspec/adapters/spanner/_typing.py +1 -1
  103. sqlspec/adapters/spanner/config.py +4 -4
  104. sqlspec/adapters/spanner/data_dictionary.py +184 -2
  105. sqlspec/adapters/spanner/driver.py +18 -31
  106. sqlspec/adapters/spanner/type_converter.py +5 -5
  107. sqlspec/adapters/sqlite/adk/store.py +242 -333
  108. sqlspec/adapters/sqlite/config.py +13 -8
  109. sqlspec/adapters/sqlite/core.py +213 -8
  110. sqlspec/adapters/sqlite/data_dictionary.py +79 -59
  111. sqlspec/adapters/sqlite/driver.py +50 -3
  112. sqlspec/adapters/sqlite/pool.py +46 -26
  113. sqlspec/base.py +19 -18
  114. sqlspec/builder/_base.py +28 -18
  115. sqlspec/builder/_column.py +106 -164
  116. sqlspec/builder/_ddl.py +178 -195
  117. sqlspec/builder/_delete.py +1 -11
  118. sqlspec/builder/_dml.py +6 -5
  119. sqlspec/builder/_factory.py +147 -169
  120. sqlspec/builder/_insert.py +1 -11
  121. sqlspec/builder/_join.py +15 -44
  122. sqlspec/builder/_merge.py +58 -101
  123. sqlspec/builder/_parsing_utils.py +43 -3
  124. sqlspec/builder/_select.py +119 -167
  125. sqlspec/builder/_update.py +8 -16
  126. sqlspec/cli.py +200 -270
  127. sqlspec/config.py +136 -99
  128. sqlspec/core/filters.py +2 -2
  129. sqlspec/core/result/_base.py +25 -20
  130. sqlspec/core/statement.py +108 -96
  131. sqlspec/data_dictionary/__init__.py +44 -0
  132. sqlspec/data_dictionary/_capabilities.py +142 -0
  133. sqlspec/data_dictionary/_dependencies.py +534 -0
  134. sqlspec/data_dictionary/_registry.py +0 -1
  135. sqlspec/data_dictionary/_types.py +615 -2
  136. sqlspec/data_dictionary/dialects/__init__.py +2 -1
  137. sqlspec/data_dictionary/dialects/cockroachdb.py +1 -0
  138. sqlspec/data_dictionary/dialects/mssql.py +371 -3
  139. sqlspec/data_dictionary/dialects/mysql.py +278 -2
  140. sqlspec/data_dictionary/sql/bigquery/columns/by_dataset.sql +22 -0
  141. sqlspec/data_dictionary/sql/bigquery/columns/field_paths_by_dataset.sql +16 -0
  142. sqlspec/data_dictionary/sql/bigquery/constraints/by_dataset.sql +31 -0
  143. sqlspec/data_dictionary/sql/bigquery/datasets/list.sql +14 -0
  144. sqlspec/data_dictionary/sql/bigquery/ddl/table_ddl_by_dataset.sql +12 -0
  145. sqlspec/data_dictionary/sql/bigquery/dependencies/hints_by_dataset.sql +22 -0
  146. sqlspec/data_dictionary/sql/bigquery/indexes/search_by_dataset.sql +19 -0
  147. sqlspec/data_dictionary/sql/bigquery/indexes/vector_by_dataset.sql +19 -0
  148. sqlspec/data_dictionary/sql/bigquery/objects/by_dataset.sql +13 -0
  149. sqlspec/data_dictionary/sql/bigquery/privileges/by_dataset.sql +13 -0
  150. sqlspec/data_dictionary/sql/bigquery/routines/by_dataset.sql +19 -0
  151. sqlspec/data_dictionary/sql/bigquery/routines/options_by_dataset.sql +13 -0
  152. sqlspec/data_dictionary/sql/bigquery/routines/parameters_by_dataset.sql +16 -0
  153. sqlspec/data_dictionary/sql/bigquery/system/jobs_by_region.sql +26 -0
  154. sqlspec/data_dictionary/sql/bigquery/system/reservations_by_region.sql +16 -0
  155. sqlspec/data_dictionary/sql/bigquery/system/sessions_by_region.sql +15 -0
  156. sqlspec/data_dictionary/sql/bigquery/tables/options_by_dataset.sql +13 -0
  157. sqlspec/data_dictionary/sql/bigquery/tables/partitions_by_dataset.sql +15 -0
  158. sqlspec/data_dictionary/sql/bigquery/tables/storage_by_dataset.sql +20 -0
  159. sqlspec/data_dictionary/sql/bigquery/tables.sql +3 -0
  160. sqlspec/data_dictionary/sql/bigquery/views/by_dataset.sql +13 -0
  161. sqlspec/data_dictionary/sql/bigquery/views/materialized_by_dataset.sql +17 -0
  162. sqlspec/data_dictionary/sql/cockroachdb/columns/by_schema.sql +18 -0
  163. sqlspec/data_dictionary/sql/cockroachdb/comments/by_schema.sql +10 -0
  164. sqlspec/data_dictionary/sql/cockroachdb/constraints/by_schema.sql +43 -0
  165. sqlspec/data_dictionary/sql/cockroachdb/crdb_internal/ranges.sql +11 -0
  166. sqlspec/data_dictionary/sql/cockroachdb/ddl/by_object.sql +10 -0
  167. sqlspec/data_dictionary/sql/cockroachdb/dependencies/by_schema.sql +20 -0
  168. sqlspec/data_dictionary/sql/cockroachdb/indexes/by_schema.sql +15 -0
  169. sqlspec/data_dictionary/sql/cockroachdb/objects/by_schema.sql +15 -0
  170. sqlspec/data_dictionary/sql/cockroachdb/privileges/by_schema.sql +13 -0
  171. sqlspec/data_dictionary/sql/cockroachdb/schemas/list.sql +10 -0
  172. sqlspec/data_dictionary/sql/cockroachdb/sequences/by_schema.sql +14 -0
  173. sqlspec/data_dictionary/sql/cockroachdb/tables/by_schema.sql +15 -0
  174. sqlspec/data_dictionary/sql/cockroachdb/views/by_schema.sql +11 -0
  175. sqlspec/data_dictionary/sql/duckdb/columns/by_schema.sql +20 -0
  176. sqlspec/data_dictionary/sql/duckdb/columns/by_table.sql +21 -0
  177. sqlspec/data_dictionary/sql/duckdb/constraints/by_schema.sql +16 -0
  178. sqlspec/data_dictionary/sql/duckdb/constraints/by_table.sql +17 -0
  179. sqlspec/data_dictionary/sql/duckdb/databases/list.sql +11 -0
  180. sqlspec/data_dictionary/sql/duckdb/dependencies/by_schema.sql +50 -0
  181. sqlspec/data_dictionary/sql/duckdb/extensions/list.sql +14 -0
  182. sqlspec/data_dictionary/sql/duckdb/functions/by_schema.sql +18 -0
  183. sqlspec/data_dictionary/sql/duckdb/indexes/by_schema.sql +16 -0
  184. sqlspec/data_dictionary/sql/duckdb/indexes/by_table.sql +17 -0
  185. sqlspec/data_dictionary/sql/duckdb/objects/by_schema.sql +30 -0
  186. sqlspec/data_dictionary/sql/duckdb/schemas/list.sql +10 -0
  187. sqlspec/data_dictionary/sql/duckdb/sequences/by_schema.sql +19 -0
  188. sqlspec/data_dictionary/sql/duckdb/system/logs.sql +4 -0
  189. sqlspec/data_dictionary/sql/duckdb/system/memory.sql +4 -0
  190. sqlspec/data_dictionary/sql/duckdb/system/settings.sql +11 -0
  191. sqlspec/data_dictionary/sql/duckdb/views/by_schema.sql +15 -0
  192. sqlspec/data_dictionary/sql/mariadb/columns/by_schema.sql +23 -0
  193. sqlspec/data_dictionary/sql/mariadb/constraints/by_schema.sql +30 -0
  194. sqlspec/data_dictionary/sql/mariadb/ddl/show_create_event.sql +3 -0
  195. sqlspec/data_dictionary/sql/mariadb/ddl/show_create_function.sql +3 -0
  196. sqlspec/data_dictionary/sql/mariadb/ddl/show_create_procedure.sql +3 -0
  197. sqlspec/data_dictionary/sql/mariadb/ddl/show_create_sequence.sql +3 -0
  198. sqlspec/data_dictionary/sql/mariadb/ddl/show_create_table.sql +3 -0
  199. sqlspec/data_dictionary/sql/mariadb/ddl/show_create_trigger.sql +3 -0
  200. sqlspec/data_dictionary/sql/mariadb/ddl/show_create_view.sql +3 -0
  201. sqlspec/data_dictionary/sql/mariadb/events/by_schema.sql +29 -0
  202. sqlspec/data_dictionary/sql/mariadb/indexes/by_schema.sql +19 -0
  203. sqlspec/data_dictionary/sql/mariadb/objects/by_schema.sql +50 -0
  204. sqlspec/data_dictionary/sql/mariadb/partitions/by_schema.sql +27 -0
  205. sqlspec/data_dictionary/sql/mariadb/plugins/list.sql +16 -0
  206. sqlspec/data_dictionary/sql/mariadb/privileges/by_schema.sql +24 -0
  207. sqlspec/data_dictionary/sql/mariadb/routines/by_schema.sql +21 -0
  208. sqlspec/data_dictionary/sql/mariadb/schemas/list.sql +10 -0
  209. sqlspec/data_dictionary/sql/mariadb/system/performance_schema_tables.sql +12 -0
  210. sqlspec/data_dictionary/sql/mariadb/tables/by_schema.sql +27 -0
  211. sqlspec/data_dictionary/sql/mariadb/triggers/by_schema.sql +21 -0
  212. sqlspec/data_dictionary/sql/mariadb/views/by_schema.sql +15 -0
  213. sqlspec/data_dictionary/sql/mssql/columns/by_schema.sql +53 -0
  214. sqlspec/data_dictionary/sql/mssql/columns/by_table.sql +54 -0
  215. sqlspec/data_dictionary/sql/mssql/constraints/by_schema.sql +42 -0
  216. sqlspec/data_dictionary/sql/mssql/constraints/by_table.sql +45 -0
  217. sqlspec/data_dictionary/sql/mssql/constraints/foreign_keys_by_schema.sql +21 -0
  218. sqlspec/data_dictionary/sql/mssql/constraints/foreign_keys_by_table.sql +22 -0
  219. sqlspec/data_dictionary/sql/mssql/ddl/index_inputs_by_table.sql +40 -0
  220. sqlspec/data_dictionary/sql/mssql/ddl/table_inputs_by_table.sql +38 -0
  221. sqlspec/data_dictionary/sql/mssql/dependencies/by_schema.sql +17 -0
  222. sqlspec/data_dictionary/sql/mssql/extended_properties/by_schema.sql +16 -0
  223. sqlspec/data_dictionary/sql/mssql/indexes/by_schema.sql +42 -0
  224. sqlspec/data_dictionary/sql/mssql/indexes/by_table.sql +43 -0
  225. sqlspec/data_dictionary/sql/mssql/modules/by_schema.sql +19 -0
  226. sqlspec/data_dictionary/sql/mssql/objects/by_schema.sql +16 -0
  227. sqlspec/data_dictionary/sql/mssql/permissions/by_schema.sql +20 -0
  228. sqlspec/data_dictionary/sql/mssql/permissions/role_members.sql +10 -0
  229. sqlspec/data_dictionary/sql/mssql/routines/by_schema.sql +17 -0
  230. sqlspec/data_dictionary/sql/mssql/routines/parameters_by_schema.sql +21 -0
  231. sqlspec/data_dictionary/sql/mssql/schemas/list.sql +9 -0
  232. sqlspec/data_dictionary/sql/mssql/sequences/by_schema.sql +18 -0
  233. sqlspec/data_dictionary/sql/mssql/storage/by_schema.sql +22 -0
  234. sqlspec/data_dictionary/sql/mssql/system/dmv_exec_requests.sql +20 -0
  235. sqlspec/data_dictionary/sql/mssql/system/query_store_runtime.sql +17 -0
  236. sqlspec/data_dictionary/sql/mssql/tables/all_by_schema.sql +16 -0
  237. sqlspec/data_dictionary/sql/mssql/tables/by_schema.sql +42 -0
  238. sqlspec/data_dictionary/sql/mssql/tables/details_by_table.sql +23 -0
  239. sqlspec/data_dictionary/sql/mssql/triggers/by_schema.sql +21 -0
  240. sqlspec/data_dictionary/sql/mssql/views/by_schema.sql +18 -0
  241. sqlspec/data_dictionary/sql/mysql/columns/by_schema.sql +23 -0
  242. sqlspec/data_dictionary/sql/mysql/columns.sql +9 -9
  243. sqlspec/data_dictionary/sql/mysql/components/list.sql +8 -0
  244. sqlspec/data_dictionary/sql/mysql/constraints/by_schema.sql +30 -0
  245. sqlspec/data_dictionary/sql/mysql/ddl/show_create_event.sql +3 -0
  246. sqlspec/data_dictionary/sql/mysql/ddl/show_create_function.sql +3 -0
  247. sqlspec/data_dictionary/sql/mysql/ddl/show_create_procedure.sql +3 -0
  248. sqlspec/data_dictionary/sql/mysql/ddl/show_create_table.sql +3 -0
  249. sqlspec/data_dictionary/sql/mysql/ddl/show_create_trigger.sql +3 -0
  250. sqlspec/data_dictionary/sql/mysql/ddl/show_create_view.sql +3 -0
  251. sqlspec/data_dictionary/sql/mysql/events/by_schema.sql +29 -0
  252. sqlspec/data_dictionary/sql/mysql/foreign_keys.sql +14 -14
  253. sqlspec/data_dictionary/sql/mysql/indexes/by_schema.sql +19 -0
  254. sqlspec/data_dictionary/sql/mysql/objects/by_schema.sql +38 -0
  255. sqlspec/data_dictionary/sql/mysql/partitions/by_schema.sql +27 -0
  256. sqlspec/data_dictionary/sql/mysql/plugins/list.sql +16 -0
  257. sqlspec/data_dictionary/sql/mysql/privileges/by_schema.sql +24 -0
  258. sqlspec/data_dictionary/sql/mysql/routines/by_schema.sql +21 -0
  259. sqlspec/data_dictionary/sql/mysql/schemas/list.sql +10 -0
  260. sqlspec/data_dictionary/sql/mysql/system/performance_schema_tables.sql +12 -0
  261. sqlspec/data_dictionary/sql/mysql/system/sys_schema_table_statistics.sql +12 -0
  262. sqlspec/data_dictionary/sql/mysql/tables/by_schema.sql +27 -0
  263. sqlspec/data_dictionary/sql/mysql/tables.sql +4 -1
  264. sqlspec/data_dictionary/sql/mysql/triggers/by_schema.sql +21 -0
  265. sqlspec/data_dictionary/sql/mysql/views/by_schema.sql +15 -0
  266. sqlspec/data_dictionary/sql/oracle/arguments/by_owner.sql +29 -0
  267. sqlspec/data_dictionary/sql/oracle/columns/by_owner.sql +30 -0
  268. sqlspec/data_dictionary/sql/oracle/columns.sql +12 -4
  269. sqlspec/data_dictionary/sql/oracle/comments/by_owner.sql +22 -0
  270. sqlspec/data_dictionary/sql/oracle/constraints/by_owner.sql +49 -0
  271. sqlspec/data_dictionary/sql/oracle/ddl/dbms_metadata.sql +4 -0
  272. sqlspec/data_dictionary/sql/oracle/dependencies/by_owner.sql +16 -0
  273. sqlspec/data_dictionary/sql/oracle/grants/by_owner.sql +34 -0
  274. sqlspec/data_dictionary/sql/oracle/indexes/by_owner.sql +55 -0
  275. sqlspec/data_dictionary/sql/oracle/lob_storage/by_owner.sql +28 -0
  276. sqlspec/data_dictionary/sql/oracle/materialized_views/by_owner.sql +27 -0
  277. sqlspec/data_dictionary/sql/oracle/objects/by_owner.sql +18 -0
  278. sqlspec/data_dictionary/sql/oracle/partitions/by_owner.sql +44 -0
  279. sqlspec/data_dictionary/sql/oracle/routines/by_owner.sql +21 -0
  280. sqlspec/data_dictionary/sql/oracle/schemas/by_owner.sql +13 -0
  281. sqlspec/data_dictionary/sql/oracle/sequences/by_owner.sql +21 -0
  282. sqlspec/data_dictionary/sql/oracle/source/by_owner.sql +13 -0
  283. sqlspec/data_dictionary/sql/oracle/system/awr.sql +10 -0
  284. sqlspec/data_dictionary/sql/oracle/system/no_diagnostics.sql +7 -0
  285. sqlspec/data_dictionary/sql/oracle/system/statspack.sql +10 -0
  286. sqlspec/data_dictionary/sql/oracle/tables/by_owner.sql +40 -0
  287. sqlspec/data_dictionary/sql/oracle/tables.sql +2 -2
  288. sqlspec/data_dictionary/sql/oracle/triggers/by_owner.sql +29 -0
  289. sqlspec/data_dictionary/sql/oracle/views/by_owner.sql +23 -0
  290. sqlspec/data_dictionary/sql/postgres/columns/by_schema.sql +41 -0
  291. sqlspec/data_dictionary/sql/postgres/comments/by_schema.sql +27 -0
  292. sqlspec/data_dictionary/sql/postgres/constraints/by_schema.sql +43 -0
  293. sqlspec/data_dictionary/sql/postgres/ddl/by_object.sql +44 -0
  294. sqlspec/data_dictionary/sql/postgres/dependencies/by_schema.sql +42 -0
  295. sqlspec/data_dictionary/sql/postgres/extensions/list.sql +11 -0
  296. sqlspec/data_dictionary/sql/postgres/indexes/by_schema.sql +43 -0
  297. sqlspec/data_dictionary/sql/postgres/materialized_views/by_schema.sql +17 -0
  298. sqlspec/data_dictionary/sql/postgres/objects/by_schema.sql +22 -7
  299. sqlspec/data_dictionary/sql/postgres/partitions/by_schema.sql +19 -0
  300. sqlspec/data_dictionary/sql/postgres/privileges/by_schema.sql +29 -0
  301. sqlspec/data_dictionary/sql/postgres/routines/by_schema.sql +25 -0
  302. sqlspec/data_dictionary/sql/postgres/schemas/list.sql +13 -0
  303. sqlspec/data_dictionary/sql/postgres/sequences/by_schema.sql +18 -0
  304. sqlspec/data_dictionary/sql/postgres/system/pg_stat_statements.sql +14 -0
  305. sqlspec/data_dictionary/sql/postgres/system/settings.sql +15 -0
  306. sqlspec/data_dictionary/sql/postgres/system/table_stats.sql +22 -0
  307. sqlspec/data_dictionary/sql/postgres/tables/by_schema.sql +58 -0
  308. sqlspec/data_dictionary/sql/postgres/triggers/by_schema.sql +20 -0
  309. sqlspec/data_dictionary/sql/postgres/views/by_schema.sql +17 -0
  310. sqlspec/data_dictionary/sql/spanner/change_streams/googlesql/list.sql +12 -0
  311. sqlspec/data_dictionary/sql/spanner/change_streams/googlesql/tables.sql +15 -0
  312. sqlspec/data_dictionary/sql/spanner/columns/googlesql/by_schema.sql +23 -0
  313. sqlspec/data_dictionary/sql/spanner/constraints/googlesql/by_schema.sql +31 -0
  314. sqlspec/data_dictionary/sql/spanner/database/googlesql/options.sql +9 -0
  315. sqlspec/data_dictionary/sql/spanner/indexes/googlesql/by_schema.sql +33 -0
  316. sqlspec/data_dictionary/sql/spanner/placements/googlesql/list.sql +8 -0
  317. sqlspec/data_dictionary/sql/spanner/privileges/googlesql/by_schema.sql +13 -0
  318. sqlspec/data_dictionary/sql/spanner/property_graphs/googlesql/list.sql +11 -0
  319. sqlspec/data_dictionary/sql/spanner/routines/googlesql/by_schema.sql +17 -0
  320. sqlspec/data_dictionary/sql/spanner/routines/googlesql/parameters_by_schema.sql +15 -0
  321. sqlspec/data_dictionary/sql/spanner/sequences/googlesql/by_schema.sql +14 -0
  322. sqlspec/data_dictionary/sql/spanner/system/googlesql/query_stats_top.sql +15 -0
  323. sqlspec/data_dictionary/sql/spanner/system/googlesql/table_sizes.sql +11 -0
  324. sqlspec/data_dictionary/sql/spanner/tables/googlesql/by_schema.sql +15 -0
  325. sqlspec/data_dictionary/sql/spanner/views/googlesql/by_schema.sql +13 -0
  326. sqlspec/data_dictionary/sql/sqlite/columns/by_schema.sql +22 -0
  327. sqlspec/data_dictionary/sql/sqlite/columns/by_table.sql +18 -0
  328. sqlspec/data_dictionary/sql/sqlite/compile_options/list.sql +3 -0
  329. sqlspec/data_dictionary/sql/sqlite/constraints/foreign_keys_by_schema.sql +19 -0
  330. sqlspec/data_dictionary/sql/sqlite/constraints/foreign_keys_by_table.sql +15 -0
  331. sqlspec/data_dictionary/sql/sqlite/functions/list.sql +3 -0
  332. sqlspec/data_dictionary/sql/sqlite/indexes/by_schema.sql +28 -0
  333. sqlspec/data_dictionary/sql/sqlite/indexes/by_table.sql +24 -0
  334. sqlspec/data_dictionary/sql/sqlite/indexes/columns_by_index.sql +13 -0
  335. sqlspec/data_dictionary/sql/sqlite/modules/list.sql +3 -0
  336. sqlspec/data_dictionary/sql/sqlite/native_sql/by_object.sql +10 -0
  337. sqlspec/data_dictionary/sql/sqlite/objects/by_schema.sql +13 -0
  338. sqlspec/data_dictionary/sql/sqlite/schemas/database_list.sql +3 -0
  339. sqlspec/data_dictionary/sql/sqlite/system/foreign_key_check.sql +3 -0
  340. sqlspec/data_dictionary/sql/sqlite/system/integrity_check.sql +3 -0
  341. sqlspec/data_dictionary/sql/sqlite/tables/by_schema.sql +49 -0
  342. sqlspec/data_dictionary/sql/sqlite/triggers/by_schema.sql +10 -0
  343. sqlspec/data_dictionary/sql/sqlite/views/by_schema.sql +10 -0
  344. sqlspec/driver/_async.py +119 -13
  345. sqlspec/driver/_common.py +34 -198
  346. sqlspec/driver/_storage_helpers.py +5 -1
  347. sqlspec/driver/_stream.py +43 -12
  348. sqlspec/driver/_sync.py +120 -12
  349. sqlspec/exceptions.py +5 -15
  350. sqlspec/extensions/adk/_config_utils.py +9 -6
  351. sqlspec/extensions/adk/artifact/service.py +13 -12
  352. sqlspec/extensions/adk/artifact/store.py +20 -35
  353. sqlspec/extensions/adk/memory/converters.py +3 -3
  354. sqlspec/extensions/adk/memory/service.py +20 -8
  355. sqlspec/extensions/adk/memory/store.py +72 -163
  356. sqlspec/extensions/adk/service.py +2 -2
  357. sqlspec/extensions/adk/store.py +174 -312
  358. sqlspec/extensions/events/__init__.py +2 -0
  359. sqlspec/extensions/events/_channel.py +468 -282
  360. sqlspec/extensions/events/_hints.py +0 -1
  361. sqlspec/extensions/events/_payload.py +19 -3
  362. sqlspec/extensions/events/_protocols.py +20 -0
  363. sqlspec/extensions/events/_queue.py +150 -62
  364. sqlspec/extensions/fastapi/extension.py +16 -35
  365. sqlspec/extensions/flask/_state.py +10 -24
  366. sqlspec/extensions/flask/_utils.py +4 -8
  367. sqlspec/extensions/flask/extension.py +0 -4
  368. sqlspec/extensions/litestar/channels.py +17 -5
  369. sqlspec/extensions/litestar/handlers.py +6 -31
  370. sqlspec/extensions/litestar/plugin.py +64 -78
  371. sqlspec/extensions/litestar/providers.py +4 -4
  372. sqlspec/extensions/sanic/_state.py +24 -9
  373. sqlspec/extensions/sanic/_utils.py +1 -4
  374. sqlspec/extensions/sanic/extension.py +19 -48
  375. sqlspec/extensions/starlette/_state.py +24 -9
  376. sqlspec/extensions/starlette/_utils.py +1 -5
  377. sqlspec/extensions/starlette/extension.py +17 -35
  378. sqlspec/extensions/starlette/middleware.py +4 -20
  379. sqlspec/loader.py +76 -27
  380. sqlspec/migrations/__init__.py +1 -2
  381. sqlspec/migrations/base.py +104 -12
  382. sqlspec/migrations/commands.py +199 -193
  383. sqlspec/migrations/fix.py +1 -1
  384. sqlspec/migrations/loaders.py +17 -1
  385. sqlspec/migrations/runner.py +206 -287
  386. sqlspec/migrations/squash.py +37 -43
  387. sqlspec/migrations/templates.py +17 -27
  388. sqlspec/migrations/tracker.py +287 -371
  389. sqlspec/migrations/utils.py +4 -19
  390. sqlspec/migrations/validation.py +8 -8
  391. sqlspec/migrations/version.py +11 -3
  392. sqlspec/protocols.py +87 -30
  393. sqlspec/storage/backends/base.py +9 -62
  394. sqlspec/storage/backends/obstore.py +8 -11
  395. sqlspec/storage/pipeline.py +1 -1
  396. sqlspec/typing.py +62 -32
  397. sqlspec/utils/arrow_helpers.py +18 -1
  398. sqlspec/utils/correlation.py +3 -2
  399. sqlspec/utils/fixtures.py +3 -3
  400. sqlspec/utils/module_loader.py +29 -1
  401. sqlspec/utils/schema.py +5 -12
  402. sqlspec/utils/serializers/__init__.py +1 -2
  403. sqlspec/utils/serializers/_json.py +134 -24
  404. sqlspec/utils/serializers/_numpy.py +1 -1
  405. sqlspec/utils/serializers/_schema.py +2 -5
  406. sqlspec/utils/sync_tools.py +2 -2
  407. sqlspec/utils/text.py +6 -4
  408. sqlspec/utils/type_converters.py +12 -7
  409. sqlspec/utils/type_guards.py +33 -11
  410. sqlspec/utils/uuids.py +3 -15
  411. {sqlspec-0.54.2.dist-info → sqlspec-0.55.0.dist-info}/METADATA +2 -2
  412. sqlspec-0.55.0.dist-info/RECORD +731 -0
  413. {sqlspec-0.54.2.dist-info → sqlspec-0.55.0.dist-info}/WHEEL +1 -1
  414. sqlspec-0.54.2.dist-info/RECORD +0 -532
  415. {sqlspec-0.54.2.dist-info → sqlspec-0.55.0.dist-info}/entry_points.txt +0 -0
  416. {sqlspec-0.54.2.dist-info → sqlspec-0.55.0.dist-info}/licenses/LICENSE +0 -0
sqlspec/_typing.py CHANGED
@@ -10,11 +10,39 @@ import enum
10
10
  from collections.abc import Iterable, Mapping
11
11
  from dataclasses import dataclass
12
12
  from enum import Enum
13
- from typing import Any, ClassVar, Final, Literal, Protocol, cast, runtime_checkable
13
+ from typing import TYPE_CHECKING, Any, ClassVar, Final, Literal, Protocol, cast, runtime_checkable
14
14
 
15
15
  from typing_extensions import Self, TypeVar, dataclass_transform
16
16
 
17
- from sqlspec.utils.module_loader import dependency_flag, import_optional, import_optional_attr, module_available
17
+ from sqlspec.utils.module_loader import (
18
+ dependency_flag,
19
+ import_optional,
20
+ import_optional_attr,
21
+ module_available,
22
+ resolve_optional_attr,
23
+ )
24
+
25
+ if TYPE_CHECKING:
26
+ from attrs import AttrsInstance
27
+ from attrs import asdict as attrs_asdict
28
+ from attrs import define as attrs_define
29
+ from attrs import field as attrs_field
30
+ from attrs import fields as attrs_fields
31
+ from attrs import has as attrs_has
32
+ from cattrs import structure as cattrs_structure
33
+ from cattrs import unstructure as cattrs_unstructure
34
+ from litestar.dto.data_structures import DTOData
35
+ from numpy import ndarray as NumpyArray # noqa: N812
36
+ from opentelemetry import trace
37
+ from opentelemetry.trace import Span, Status, StatusCode, Tracer
38
+ from pandas import DataFrame as PandasDataFrame
39
+ from polars import DataFrame as PolarsDataFrame
40
+ from prometheus_client import Counter, Gauge, Histogram
41
+ from pyarrow import RecordBatch as ArrowRecordBatch
42
+ from pyarrow import RecordBatchReader as ArrowRecordBatchReader
43
+ from pyarrow import Schema as ArrowSchema
44
+ from pyarrow import Table as ArrowTable
45
+ from pydantic import BaseModel, FailFast, TypeAdapter
18
46
 
19
47
  __all__ = (
20
48
  "ALLOYDB_CONNECTOR_INSTALLED",
@@ -198,20 +226,6 @@ class FailFastStub:
198
226
  fail_fast: bool = True
199
227
 
200
228
 
201
- # Try to import real implementations at runtime
202
- try:
203
- from pydantic import BaseModel as _RealBaseModel
204
- from pydantic import FailFast as _RealFailFast
205
- from pydantic import TypeAdapter as _RealTypeAdapter
206
-
207
- BaseModel = _RealBaseModel
208
- TypeAdapter = _RealTypeAdapter
209
- FailFast = _RealFailFast
210
- except ImportError:
211
- BaseModel = BaseModelStub # type: ignore[assignment,misc]
212
- TypeAdapter = TypeAdapterStub # type: ignore[assignment,misc]
213
- FailFast = FailFastStub # type: ignore[assignment,misc]
214
-
215
229
  # Always define stub types for msgspec
216
230
 
217
231
 
@@ -276,12 +290,6 @@ except ImportError:
276
290
  msgspec_fields = msgspec_fields_stub # type: ignore[assignment]
277
291
 
278
292
 
279
- try:
280
- import orjson # noqa: F401
281
- except ImportError:
282
- orjson = None # type: ignore[assignment]
283
-
284
-
285
293
  # Always define stub type for DTOData
286
294
  @runtime_checkable
287
295
  class DTODataStub(Protocol[T]):
@@ -304,15 +312,6 @@ class DTODataStub(Protocol[T]):
304
312
  return {}
305
313
 
306
314
 
307
- # Try to import real implementation at runtime
308
- try:
309
- from litestar.dto.data_structures import DTOData as _RealDTOData # pyright: ignore[reportUnknownVariableType]
310
-
311
- DTOData = _RealDTOData
312
- except ImportError:
313
- DTOData = DTODataStub # type: ignore[assignment,misc]
314
-
315
-
316
315
  # Always define stub types for attrs
317
316
  @dataclass_transform()
318
317
  class AttrsInstanceStub:
@@ -358,41 +357,14 @@ def attrs_has_stub(*args: Any, **kwargs: Any) -> bool: # noqa: ARG001
358
357
  return False
359
358
 
360
359
 
361
- # Try to import real implementations at runtime
362
- try:
363
- from attrs import AttrsInstance as _RealAttrsInstance # pyright: ignore
364
- from attrs import asdict as _real_attrs_asdict
365
- from attrs import define as _real_attrs_define
366
- from attrs import field as _real_attrs_field
367
- from attrs import fields as _real_attrs_fields
368
- from attrs import has as _real_attrs_has
369
-
370
- AttrsInstance = _RealAttrsInstance
371
- attrs_asdict = _real_attrs_asdict
372
- attrs_define = _real_attrs_define
373
- attrs_field = _real_attrs_field
374
- attrs_fields = _real_attrs_fields
375
- attrs_has = _real_attrs_has
376
- except ImportError:
377
- AttrsInstance = AttrsInstanceStub # type: ignore[misc]
378
- attrs_asdict = attrs_asdict_stub
379
- attrs_define = attrs_define_stub
380
- attrs_field = attrs_field_stub
381
- attrs_fields = attrs_fields_stub
382
- attrs_has = attrs_has_stub # type: ignore[assignment]
383
-
384
- try:
385
- from cattrs import structure as cattrs_structure
386
- from cattrs import unstructure as cattrs_unstructure
387
- except ImportError:
360
+ def cattrs_unstructure_stub(*args: Any, **kwargs: Any) -> Any: # noqa: ARG001
361
+ """Placeholder implementation"""
362
+ return {}
388
363
 
389
- def cattrs_unstructure(*args: Any, **kwargs: Any) -> Any: # noqa: ARG001
390
- """Placeholder implementation"""
391
- return {}
392
364
 
393
- def cattrs_structure(*args: Any, **kwargs: Any) -> Any: # noqa: ARG001
394
- """Placeholder implementation"""
395
- return {}
365
+ def cattrs_structure_stub(*args: Any, **kwargs: Any) -> Any: # noqa: ARG001
366
+ """Placeholder implementation"""
367
+ return {}
396
368
 
397
369
 
398
370
  class EmptyEnum(Enum):
@@ -505,16 +477,10 @@ class ArrowRecordBatchReaderProtocol(Protocol):
505
477
  ...
506
478
 
507
479
 
508
- try:
509
- from pyarrow import RecordBatch as ArrowRecordBatch
510
- from pyarrow import RecordBatchReader as ArrowRecordBatchReader
511
- from pyarrow import Schema as ArrowSchema
512
- from pyarrow import Table as ArrowTable
513
- except ImportError:
514
- ArrowTable = ArrowTableResult # type: ignore[assignment,misc]
515
- ArrowRecordBatch = ArrowRecordBatchResult # type: ignore[assignment,misc]
516
- ArrowSchema = ArrowSchemaProtocol # type: ignore[assignment,misc]
517
- ArrowRecordBatchReader = ArrowRecordBatchReaderProtocol # type: ignore[assignment,misc]
480
+ _ARROW_TABLE_SHIM = ArrowTableResult
481
+ _ARROW_RECORD_BATCH_SHIM = ArrowRecordBatchResult
482
+ _ARROW_SCHEMA_SHIM = ArrowSchemaProtocol
483
+ _ARROW_RECORD_BATCH_READER_SHIM = ArrowRecordBatchReaderProtocol
518
484
 
519
485
 
520
486
  @runtime_checkable
@@ -543,17 +509,10 @@ class PolarsDataFrameProtocol(Protocol):
543
509
  ...
544
510
 
545
511
 
546
- try:
547
- from pandas import DataFrame as PandasDataFrame
548
- except ImportError:
549
- PandasDataFrame = PandasDataFrameProtocol # type: ignore[assignment,misc]
550
-
512
+ _PANDAS_DATAFRAME_SHIM = PandasDataFrameProtocol
551
513
 
552
- try:
553
- from polars import DataFrame as PolarsDataFrame
554
514
 
555
- except ImportError:
556
- PolarsDataFrame = PolarsDataFrameProtocol # type: ignore[assignment,misc]
515
+ _POLARS_DATAFRAME_SHIM = PolarsDataFrameProtocol
557
516
 
558
517
 
559
518
  @runtime_checkable
@@ -568,136 +527,145 @@ class NumpyArrayStub(Protocol):
568
527
  ...
569
528
 
570
529
 
571
- try:
572
- from numpy import ndarray as NumpyArray # noqa: N812
573
- except ImportError:
574
- NumpyArray = NumpyArrayStub # type: ignore[assignment,misc]
530
+ _NUMPY_ARRAY_SHIM = NumpyArrayStub
575
531
 
576
532
 
577
- try:
578
- from opentelemetry import trace # pyright: ignore[reportMissingImports, reportAssignmentType]
579
- from opentelemetry.trace import ( # pyright: ignore[reportMissingImports, reportAssignmentType]
580
- Span, # pyright: ignore[reportMissingImports, reportAssignmentType]
581
- Status,
582
- StatusCode,
583
- Tracer, # pyright: ignore[reportMissingImports, reportAssignmentType]
584
- )
585
- except ImportError:
586
- # Define shims for when opentelemetry is not installed
587
-
588
- class Span: # type: ignore[no-redef]
589
- def set_attribute(self, key: str, value: Any) -> None:
590
- return None
591
-
592
- def record_exception(
593
- self,
594
- exception: "Exception",
595
- attributes: "Mapping[str, Any] | None" = None,
596
- timestamp: "int | None" = None,
597
- escaped: bool = False,
598
- ) -> None:
599
- return None
600
-
601
- def set_status(self, status: Any, description: "str | None" = None) -> None:
602
- return None
603
-
604
- def end(self, end_time: "int | None" = None) -> None:
605
- return None
606
-
607
- def __enter__(self) -> Self:
608
- return self
609
-
610
- def __exit__(self, exc_type: object, exc_val: object, exc_tb: object) -> None:
611
- return None
612
-
613
- class Tracer: # type: ignore[no-redef]
614
- def start_span(
615
- self,
616
- name: str,
617
- context: Any = None,
618
- kind: Any = None,
619
- attributes: Any = None,
620
- links: Any = None,
621
- start_time: Any = None,
622
- record_exception: bool = True,
623
- set_status_on_exception: bool = True,
624
- ) -> Span:
625
- return Span() # type: ignore[abstract]
626
-
627
- class _TraceModule:
628
- def get_tracer(
629
- self,
630
- instrumenting_module_name: str,
631
- instrumenting_library_version: "str | None" = None,
632
- schema_url: "str | None" = None,
633
- tracer_provider: Any = None,
634
- ) -> Tracer:
635
- return Tracer() # type: ignore[abstract] # pragma: no cover
636
-
637
- def get_tracer_provider(self) -> Any: # pragma: no cover
638
- return None
639
-
640
- TracerProvider = type(None) # Shim for TracerProvider if needed elsewhere
641
- StatusCode = type(None) # Shim for StatusCode
642
- Status = type(None) # Shim for Status
643
-
644
- trace = _TraceModule() # type: ignore[assignment]
645
- StatusCode = trace.StatusCode # type: ignore[misc]
646
- Status = trace.Status # type: ignore[misc]
533
+ class _SpanShim:
534
+ def set_attribute(self, key: str, value: Any) -> None:
535
+ return None
647
536
 
537
+ def record_exception(
538
+ self,
539
+ exception: "Exception",
540
+ attributes: "Mapping[str, Any] | None" = None,
541
+ timestamp: "int | None" = None,
542
+ escaped: bool = False,
543
+ ) -> None:
544
+ return None
648
545
 
649
- try:
650
- from prometheus_client import ( # pyright: ignore[reportMissingImports, reportAssignmentType]
651
- Counter, # pyright: ignore[reportAssignmentType]
652
- Gauge, # pyright: ignore[reportAssignmentType]
653
- Histogram, # pyright: ignore[reportAssignmentType]
654
- )
655
- except ImportError:
656
- # Define shims for when prometheus_client is not installed
546
+ def set_status(self, status: Any, description: "str | None" = None) -> None:
547
+ return None
548
+
549
+ def end(self, end_time: "int | None" = None) -> None:
550
+ return None
551
+
552
+ def __enter__(self) -> Self:
553
+ return self
657
554
 
658
- class _Metric: # Base shim for metrics
659
- def __init__(
660
- self,
661
- name: str,
662
- documentation: str,
663
- labelnames: tuple[str, ...] = (),
664
- namespace: str = "",
665
- subsystem: str = "",
666
- unit: str = "",
667
- registry: Any = None,
668
- ejemplar_fn: Any = None,
669
- buckets: Any = None,
670
- **_: Any,
671
- ) -> None:
672
- return None
555
+ def __exit__(self, exc_type: object, exc_val: object, exc_tb: object) -> None:
556
+ return None
673
557
 
674
- def labels(self, *labelvalues: str, **labelkwargs: str) -> "_MetricInstance":
675
- return _MetricInstance()
676
558
 
677
- class _MetricInstance:
678
- def inc(self, amount: float = 1) -> None:
679
- return None
559
+ _SPAN_SHIM = _SpanShim
560
+ _SPAN_SHIM.__name__ = "Span"
561
+ _SPAN_SHIM.__qualname__ = "Span"
680
562
 
681
- def dec(self, amount: float = 1) -> None:
682
- return None
683
563
 
684
- def set(self, value: float) -> None:
685
- return None
564
+ class _TracerShim:
565
+ def start_span(
566
+ self,
567
+ name: str,
568
+ context: Any = None,
569
+ kind: Any = None,
570
+ attributes: Any = None,
571
+ links: Any = None,
572
+ start_time: Any = None,
573
+ record_exception: bool = True,
574
+ set_status_on_exception: bool = True,
575
+ ) -> "_SpanShim":
576
+ return _SPAN_SHIM()
686
577
 
687
- def observe(self, amount: float) -> None:
688
- return None
689
578
 
690
- class Counter(_Metric): # type: ignore[no-redef]
691
- def labels(self, *labelvalues: str, **labelkwargs: str) -> _MetricInstance:
692
- return _MetricInstance() # pragma: no cover
579
+ _TRACER_SHIM = _TracerShim
580
+ _TRACER_SHIM.__name__ = "Tracer"
581
+ _TRACER_SHIM.__qualname__ = "Tracer"
693
582
 
694
- class Gauge(_Metric): # type: ignore[no-redef]
695
- def labels(self, *labelvalues: str, **labelkwargs: str) -> _MetricInstance:
696
- return _MetricInstance() # pragma: no cover
697
583
 
698
- class Histogram(_Metric): # type: ignore[no-redef]
699
- def labels(self, *labelvalues: str, **labelkwargs: str) -> _MetricInstance:
700
- return _MetricInstance() # pragma: no cover
584
+ class _TraceModule:
585
+ def get_tracer(
586
+ self,
587
+ instrumenting_module_name: str,
588
+ instrumenting_library_version: "str | None" = None,
589
+ schema_url: "str | None" = None,
590
+ tracer_provider: Any = None,
591
+ ) -> "_TracerShim":
592
+ return _TRACER_SHIM() # pragma: no cover
593
+
594
+ def get_tracer_provider(self) -> Any: # pragma: no cover
595
+ return None
596
+
597
+ TracerProvider = type(None) # Shim for TracerProvider if needed elsewhere
598
+ StatusCode = type(None) # Shim for StatusCode
599
+ Status = type(None) # Shim for Status
600
+
601
+
602
+ _TRACE_SHIM = _TraceModule()
603
+ _STATUS_CODE_SHIM = type(None)
604
+ _STATUS_SHIM = type(None)
605
+
606
+
607
+ class _Metric: # Base shim for metrics
608
+ def __init__(
609
+ self,
610
+ name: str,
611
+ documentation: str,
612
+ labelnames: tuple[str, ...] = (),
613
+ namespace: str = "",
614
+ subsystem: str = "",
615
+ unit: str = "",
616
+ registry: Any = None,
617
+ ejemplar_fn: Any = None,
618
+ buckets: Any = None,
619
+ **_: Any,
620
+ ) -> None:
621
+ return None
622
+
623
+ def labels(self, *labelvalues: str, **labelkwargs: str) -> "_MetricInstance":
624
+ return _MetricInstance()
625
+
626
+
627
+ class _MetricInstance:
628
+ def inc(self, amount: float = 1) -> None:
629
+ return None
630
+
631
+ def dec(self, amount: float = 1) -> None:
632
+ return None
633
+
634
+ def set(self, value: float) -> None:
635
+ return None
636
+
637
+ def observe(self, amount: float) -> None:
638
+ return None
639
+
640
+
641
+ class _CounterShim(_Metric):
642
+ def labels(self, *labelvalues: str, **labelkwargs: str) -> "_MetricInstance":
643
+ return _MetricInstance() # pragma: no cover
644
+
645
+
646
+ _COUNTER_SHIM = _CounterShim
647
+ _COUNTER_SHIM.__name__ = "Counter"
648
+ _COUNTER_SHIM.__qualname__ = "Counter"
649
+
650
+
651
+ class _GaugeShim(_Metric):
652
+ def labels(self, *labelvalues: str, **labelkwargs: str) -> "_MetricInstance":
653
+ return _MetricInstance() # pragma: no cover
654
+
655
+
656
+ _GAUGE_SHIM = _GaugeShim
657
+ _GAUGE_SHIM.__name__ = "Gauge"
658
+ _GAUGE_SHIM.__qualname__ = "Gauge"
659
+
660
+
661
+ class _HistogramShim(_Metric):
662
+ def labels(self, *labelvalues: str, **labelkwargs: str) -> "_MetricInstance":
663
+ return _MetricInstance() # pragma: no cover
664
+
665
+
666
+ _HISTOGRAM_SHIM = _HistogramShim
667
+ _HISTOGRAM_SHIM.__name__ = "Histogram"
668
+ _HISTOGRAM_SHIM.__qualname__ = "Histogram"
701
669
 
702
670
 
703
671
  ATTRS_INSTALLED = dependency_flag("attrs")
@@ -719,3 +687,69 @@ PYDANTIC_INSTALLED = dependency_flag("pydantic")
719
687
  ALLOYDB_CONNECTOR_INSTALLED = dependency_flag("google.cloud.alloydb.connector")
720
688
  NANOID_INSTALLED = dependency_flag("fastnanoid")
721
689
  UUID_UTILS_INSTALLED = dependency_flag("uuid_utils")
690
+
691
+ _BASE_MODEL_SHIM = BaseModelStub
692
+ _TYPE_ADAPTER_SHIM = TypeAdapterStub
693
+ _FAIL_FAST_SHIM = FailFastStub
694
+ _DTO_DATA_SHIM = DTODataStub
695
+ _ATTRS_INSTANCE_SHIM = AttrsInstanceStub
696
+ _ATTRS_ASDICT_SHIM = attrs_asdict_stub
697
+ _ATTRS_DEFINE_SHIM = attrs_define_stub
698
+ _ATTRS_FIELD_SHIM = attrs_field_stub
699
+ _ATTRS_FIELDS_SHIM = attrs_fields_stub
700
+ _ATTRS_HAS_SHIM = attrs_has_stub
701
+ _CATTRS_STRUCTURE_SHIM = cattrs_structure_stub
702
+ _CATTRS_STRUCTURE_SHIM.__name__ = "cattrs_structure"
703
+ _CATTRS_STRUCTURE_SHIM.__qualname__ = "cattrs_structure"
704
+ _CATTRS_UNSTRUCTURE_SHIM = cattrs_unstructure_stub
705
+ _CATTRS_UNSTRUCTURE_SHIM.__name__ = "cattrs_unstructure"
706
+ _CATTRS_UNSTRUCTURE_SHIM.__qualname__ = "cattrs_unstructure"
707
+ _LAZY_EXPORTS: "dict[str, tuple[str, str | None, Any]]" = {
708
+ "ArrowRecordBatch": ("pyarrow", "RecordBatch", _ARROW_RECORD_BATCH_SHIM),
709
+ "ArrowRecordBatchReader": ("pyarrow", "RecordBatchReader", _ARROW_RECORD_BATCH_READER_SHIM),
710
+ "ArrowSchema": ("pyarrow", "Schema", _ARROW_SCHEMA_SHIM),
711
+ "ArrowTable": ("pyarrow", "Table", _ARROW_TABLE_SHIM),
712
+ "AttrsInstance": ("attrs", "AttrsInstance", _ATTRS_INSTANCE_SHIM),
713
+ "BaseModel": ("pydantic", "BaseModel", _BASE_MODEL_SHIM),
714
+ "Counter": ("prometheus_client", "Counter", _COUNTER_SHIM),
715
+ "DTOData": ("litestar.dto.data_structures", "DTOData", _DTO_DATA_SHIM),
716
+ "FailFast": ("pydantic", "FailFast", _FAIL_FAST_SHIM),
717
+ "Gauge": ("prometheus_client", "Gauge", _GAUGE_SHIM),
718
+ "Histogram": ("prometheus_client", "Histogram", _HISTOGRAM_SHIM),
719
+ "NumpyArray": ("numpy", "ndarray", _NUMPY_ARRAY_SHIM),
720
+ "PandasDataFrame": ("pandas", "DataFrame", _PANDAS_DATAFRAME_SHIM),
721
+ "PolarsDataFrame": ("polars", "DataFrame", _POLARS_DATAFRAME_SHIM),
722
+ "Span": ("opentelemetry.trace", "Span", _SPAN_SHIM),
723
+ "Status": ("opentelemetry.trace", "Status", _STATUS_SHIM),
724
+ "StatusCode": ("opentelemetry.trace", "StatusCode", _STATUS_CODE_SHIM),
725
+ "Tracer": ("opentelemetry.trace", "Tracer", _TRACER_SHIM),
726
+ "TypeAdapter": ("pydantic", "TypeAdapter", _TYPE_ADAPTER_SHIM),
727
+ "attrs_asdict": ("attrs", "asdict", _ATTRS_ASDICT_SHIM),
728
+ "attrs_define": ("attrs", "define", _ATTRS_DEFINE_SHIM),
729
+ "attrs_field": ("attrs", "field", _ATTRS_FIELD_SHIM),
730
+ "attrs_fields": ("attrs", "fields", _ATTRS_FIELDS_SHIM),
731
+ "attrs_has": ("attrs", "has", _ATTRS_HAS_SHIM),
732
+ "cattrs_structure": ("cattrs", "structure", _CATTRS_STRUCTURE_SHIM),
733
+ "cattrs_unstructure": ("cattrs", "unstructure", _CATTRS_UNSTRUCTURE_SHIM),
734
+ "trace": ("opentelemetry.trace", None, _TRACE_SHIM),
735
+ }
736
+
737
+
738
+ def __getattr__(name: str) -> Any:
739
+ """Resolve optional dependency symbols lazily on first access."""
740
+
741
+ try:
742
+ module_name, attr_name, fallback = _LAZY_EXPORTS[name]
743
+ except KeyError:
744
+ msg = f"module {__name__!r} has no attribute {name!r}"
745
+ raise AttributeError(msg) from None
746
+
747
+ resolved = resolve_optional_attr(module_name, attr_name, fallback)
748
+ globals()[name] = resolved
749
+ return resolved
750
+
751
+
752
+ def __dir__() -> "list[str]":
753
+ """Expose the public surface for autocomplete and ``dir()``."""
754
+
755
+ return sorted(set(globals()) | set(__all__))
@@ -8,6 +8,7 @@ compilation to avoid ABI boundary issues.
8
8
  import contextlib
9
9
  from typing import TYPE_CHECKING, Any
10
10
 
11
+ from adbc_driver_manager import Error as _AdbcNativeError
11
12
  from adbc_driver_manager.dbapi import Connection
12
13
  from adbc_driver_manager.dbapi import Cursor as _AdbcRawCursor
13
14
 
@@ -23,12 +24,14 @@ if TYPE_CHECKING:
23
24
 
24
25
  AdbcConnection: TypeAlias = _AdbcConnection
25
26
  AdbcRawCursor: TypeAlias = _AdbcRawCursor
27
+ AdbcNativeError: TypeAlias = _AdbcNativeError
26
28
 
27
29
  if not TYPE_CHECKING:
28
30
  AdbcConnection = _AdbcConnection
29
31
  AdbcRawCursor = _AdbcRawCursor
32
+ AdbcNativeError = _AdbcNativeError
30
33
 
31
- __all__ = ("AdbcConnection", "AdbcCursor", "AdbcRawCursor", "AdbcSessionContext")
34
+ __all__ = ("AdbcConnection", "AdbcCursor", "AdbcNativeError", "AdbcRawCursor", "AdbcSessionContext")
32
35
 
33
36
 
34
37
  class AdbcCursor:
@@ -1,6 +1,6 @@
1
1
  """ADBC database configuration."""
2
2
 
3
- from typing import TYPE_CHECKING, Any, ClassVar, TypedDict, cast
3
+ from typing import TYPE_CHECKING, Any, ClassVar, Literal, TypedDict, cast
4
4
 
5
5
  from typing_extensions import NotRequired
6
6
 
@@ -111,9 +111,9 @@ class AdbcDriverFeatures(TypedDict):
111
111
  on_connection_create: Callback executed when a connection is created.
112
112
  Receives the raw ADBC connection for low-level driver configuration.
113
113
  events_backend: Event channel backend selection.
114
- Only option: "table_queue" (durable table-backed queue with retries and exactly-once delivery).
115
- ADBC does not have native pub/sub, so table_queue is the only backend.
116
- Defaults to "table_queue".
114
+ Only option: "poll_queue" (durable table-backed queue with lease-based retries and acknowledgements).
115
+ ADBC does not have native pub/sub, so poll_queue is the only backend.
116
+ Defaults to "poll_queue".
117
117
  """
118
118
 
119
119
  json_serializer: "NotRequired[Callable[[Any], str]]"
@@ -126,7 +126,7 @@ class AdbcDriverFeatures(TypedDict):
126
126
  enable_paradedb: NotRequired[bool]
127
127
  enable_events: NotRequired[bool]
128
128
  on_connection_create: "NotRequired[Callable[[AdbcConnection], None]]"
129
- events_backend: NotRequired[str]
129
+ events_backend: NotRequired[Literal["poll_queue"]]
130
130
 
131
131
 
132
132
  class AdbcConnectionContext(SyncPoolConnectionContext):
@@ -28,6 +28,7 @@ from sqlspec.exceptions import (
28
28
  NotNullViolationError,
29
29
  PermissionDeniedError,
30
30
  QueryTimeoutError,
31
+ SerializationConflictError,
31
32
  SQLParsingError,
32
33
  SQLSpecError,
33
34
  UniqueViolationError,
@@ -541,7 +542,7 @@ def create_mapped_exception(error: Any, *, logger: Any | None = None) -> SQLSpec
541
542
  if sqlstate == "40P01":
542
543
  return _create_adbc_error(error, DeadlockError, "deadlock detected")
543
544
  if sqlstate == "40001":
544
- return _create_adbc_error(error, DeadlockError, "serialization failure")
545
+ return _create_adbc_error(error, SerializationConflictError, "serialization failure")
545
546
 
546
547
  # Query timeout/cancellation
547
548
  if sqlstate == "57014":