sqlspec 0.65.0__py3-none-any.whl → 0.67.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 (399) hide show
  1. sqlspec/__init__.py +2 -4
  2. sqlspec/_typing.py +46 -36
  3. sqlspec/adapters/__init__.py +3 -0
  4. sqlspec/adapters/adbc/__init__.py +2 -0
  5. sqlspec/adapters/adbc/_typing.py +5 -13
  6. sqlspec/adapters/adbc/adk/store.py +728 -113
  7. sqlspec/adapters/adbc/config.py +78 -90
  8. sqlspec/adapters/adbc/core.py +741 -234
  9. sqlspec/adapters/adbc/data_dictionary.py +21 -6
  10. sqlspec/adapters/adbc/driver.py +157 -58
  11. sqlspec/adapters/adbc/events/store.py +119 -51
  12. sqlspec/adapters/adbc/litestar/store.py +160 -25
  13. sqlspec/adapters/adbc/type_converter.py +56 -27
  14. sqlspec/adapters/aiomysql/__init__.py +2 -0
  15. sqlspec/adapters/aiomysql/_typing.py +26 -12
  16. sqlspec/adapters/aiomysql/adk/store.py +156 -91
  17. sqlspec/adapters/aiomysql/config.py +81 -81
  18. sqlspec/adapters/aiomysql/core.py +30 -17
  19. sqlspec/adapters/aiomysql/driver.py +67 -46
  20. sqlspec/adapters/aiomysql/litestar/store.py +62 -36
  21. sqlspec/adapters/aiosqlite/__init__.py +2 -0
  22. sqlspec/adapters/aiosqlite/_typing.py +5 -9
  23. sqlspec/adapters/aiosqlite/adk/store.py +214 -116
  24. sqlspec/adapters/aiosqlite/config.py +36 -9
  25. sqlspec/adapters/aiosqlite/core.py +168 -73
  26. sqlspec/adapters/aiosqlite/driver.py +114 -101
  27. sqlspec/adapters/aiosqlite/events/store.py +9 -3
  28. sqlspec/adapters/aiosqlite/litestar/store.py +66 -52
  29. sqlspec/adapters/aiosqlite/pool.py +501 -382
  30. sqlspec/adapters/aiosqlite/type_converter.py +8 -6
  31. sqlspec/adapters/arrow_odbc/adk/store.py +194 -103
  32. sqlspec/adapters/arrow_odbc/config.py +52 -35
  33. sqlspec/adapters/arrow_odbc/core.py +216 -153
  34. sqlspec/adapters/arrow_odbc/data_dictionary.py +46 -25
  35. sqlspec/adapters/arrow_odbc/driver.py +150 -48
  36. sqlspec/adapters/arrow_odbc/events/store.py +19 -1
  37. sqlspec/adapters/arrow_odbc/litestar/store.py +101 -52
  38. sqlspec/adapters/arrow_odbc/type_converter.py +10 -3
  39. sqlspec/adapters/asyncmy/__init__.py +2 -0
  40. sqlspec/adapters/asyncmy/_typing.py +61 -26
  41. sqlspec/adapters/asyncmy/adk/store.py +208 -81
  42. sqlspec/adapters/asyncmy/config.py +127 -90
  43. sqlspec/adapters/asyncmy/core.py +30 -17
  44. sqlspec/adapters/asyncmy/driver.py +74 -58
  45. sqlspec/adapters/asyncmy/litestar/store.py +82 -36
  46. sqlspec/adapters/asyncpg/_typing.py +18 -4
  47. sqlspec/adapters/asyncpg/adk/store.py +19 -19
  48. sqlspec/adapters/asyncpg/config.py +175 -136
  49. sqlspec/adapters/asyncpg/core.py +55 -33
  50. sqlspec/adapters/asyncpg/data_dictionary.py +19 -17
  51. sqlspec/adapters/asyncpg/driver.py +61 -89
  52. sqlspec/adapters/asyncpg/events/_hub.py +1 -1
  53. sqlspec/adapters/asyncpg/events/backend.py +25 -21
  54. sqlspec/adapters/asyncpg/events/store.py +1 -1
  55. sqlspec/adapters/asyncpg/litestar/store.py +79 -62
  56. sqlspec/adapters/bigquery/__init__.py +2 -0
  57. sqlspec/adapters/bigquery/_typing.py +29 -8
  58. sqlspec/adapters/bigquery/adk/store.py +78 -30
  59. sqlspec/adapters/bigquery/config.py +194 -138
  60. sqlspec/adapters/bigquery/core.py +248 -88
  61. sqlspec/adapters/bigquery/data_dictionary.py +35 -11
  62. sqlspec/adapters/bigquery/driver.py +277 -103
  63. sqlspec/adapters/bigquery/events/store.py +24 -1
  64. sqlspec/adapters/bigquery/litestar/store.py +29 -8
  65. sqlspec/adapters/cockroach_asyncpg/__init__.py +2 -0
  66. sqlspec/adapters/cockroach_asyncpg/_typing.py +20 -4
  67. sqlspec/adapters/cockroach_asyncpg/adk/__init__.py +2 -0
  68. sqlspec/adapters/cockroach_asyncpg/adk/store.py +66 -40
  69. sqlspec/adapters/cockroach_asyncpg/config.py +74 -72
  70. sqlspec/adapters/cockroach_asyncpg/core.py +66 -9
  71. sqlspec/adapters/cockroach_asyncpg/data_dictionary.py +14 -11
  72. sqlspec/adapters/cockroach_asyncpg/driver.py +37 -49
  73. sqlspec/adapters/cockroach_asyncpg/events/__init__.py +2 -0
  74. sqlspec/adapters/cockroach_asyncpg/litestar/__init__.py +2 -0
  75. sqlspec/adapters/cockroach_asyncpg/litestar/store.py +7 -7
  76. sqlspec/adapters/cockroach_psycopg/__init__.py +2 -0
  77. sqlspec/adapters/cockroach_psycopg/_typing.py +42 -7
  78. sqlspec/adapters/cockroach_psycopg/adk/__init__.py +2 -0
  79. sqlspec/adapters/cockroach_psycopg/adk/store.py +52 -37
  80. sqlspec/adapters/cockroach_psycopg/config.py +151 -122
  81. sqlspec/adapters/cockroach_psycopg/core.py +40 -7
  82. sqlspec/adapters/cockroach_psycopg/data_dictionary.py +21 -21
  83. sqlspec/adapters/cockroach_psycopg/driver.py +115 -124
  84. sqlspec/adapters/cockroach_psycopg/events/__init__.py +2 -0
  85. sqlspec/adapters/cockroach_psycopg/litestar/__init__.py +2 -0
  86. sqlspec/adapters/cockroach_psycopg/litestar/store.py +12 -10
  87. sqlspec/adapters/db2/_typing.py +26 -9
  88. sqlspec/adapters/db2/adk/store.py +92 -70
  89. sqlspec/adapters/db2/config.py +110 -74
  90. sqlspec/adapters/db2/core.py +239 -170
  91. sqlspec/adapters/db2/driver.py +178 -99
  92. sqlspec/adapters/db2/litestar/store.py +29 -29
  93. sqlspec/adapters/db2/migrations.py +2 -3
  94. sqlspec/adapters/db2/pool.py +76 -71
  95. sqlspec/adapters/duckdb/adk/store.py +69 -108
  96. sqlspec/adapters/duckdb/config.py +37 -39
  97. sqlspec/adapters/duckdb/core.py +83 -14
  98. sqlspec/adapters/duckdb/driver.py +215 -125
  99. sqlspec/adapters/duckdb/litestar/store.py +10 -10
  100. sqlspec/adapters/duckdb/pool.py +86 -81
  101. sqlspec/adapters/mssql_python/_typing.py +10 -4
  102. sqlspec/adapters/mssql_python/adk/store.py +166 -104
  103. sqlspec/adapters/mssql_python/config.py +13 -26
  104. sqlspec/adapters/mssql_python/core.py +167 -10
  105. sqlspec/adapters/mssql_python/driver.py +64 -65
  106. sqlspec/adapters/mssql_python/events/store.py +9 -19
  107. sqlspec/adapters/mssql_python/litestar/store.py +35 -18
  108. sqlspec/adapters/mssql_python/migrations.py +32 -28
  109. sqlspec/adapters/mssql_python/pool.py +15 -10
  110. sqlspec/adapters/mssql_python/type_converter.py +7 -7
  111. sqlspec/adapters/mysql_common.py +145 -86
  112. sqlspec/adapters/mysqlconnector/__init__.py +2 -0
  113. sqlspec/adapters/mysqlconnector/_typing.py +61 -11
  114. sqlspec/adapters/mysqlconnector/adk/store.py +148 -75
  115. sqlspec/adapters/mysqlconnector/config.py +142 -99
  116. sqlspec/adapters/mysqlconnector/core.py +18 -14
  117. sqlspec/adapters/mysqlconnector/driver.py +53 -30
  118. sqlspec/adapters/mysqlconnector/litestar/store.py +124 -110
  119. sqlspec/adapters/oracledb/__init__.py +2 -0
  120. sqlspec/adapters/oracledb/_json_handlers.py +25 -31
  121. sqlspec/adapters/oracledb/_storage.py +7 -7
  122. sqlspec/adapters/oracledb/_typing.py +27 -21
  123. sqlspec/adapters/oracledb/_vector_handlers.py +15 -15
  124. sqlspec/adapters/oracledb/adk/store.py +249 -90
  125. sqlspec/adapters/oracledb/config.py +39 -31
  126. sqlspec/adapters/oracledb/core.py +268 -122
  127. sqlspec/adapters/oracledb/data_dictionary.py +24 -11
  128. sqlspec/adapters/oracledb/driver.py +131 -96
  129. sqlspec/adapters/oracledb/events/_hub.py +30 -1
  130. sqlspec/adapters/oracledb/events/backend.py +2 -2
  131. sqlspec/adapters/oracledb/events/store.py +2 -2
  132. sqlspec/adapters/oracledb/litestar/store.py +14 -12
  133. sqlspec/adapters/oracledb/migrations.py +103 -85
  134. sqlspec/adapters/oracledb/type_converter.py +3 -1
  135. sqlspec/adapters/psqlpy/_typing.py +13 -21
  136. sqlspec/adapters/psqlpy/adk/store.py +255 -91
  137. sqlspec/adapters/psqlpy/config.py +68 -52
  138. sqlspec/adapters/psqlpy/core.py +89 -61
  139. sqlspec/adapters/psqlpy/data_dictionary.py +11 -11
  140. sqlspec/adapters/psqlpy/driver.py +82 -57
  141. sqlspec/adapters/psqlpy/events/_hub.py +10 -8
  142. sqlspec/adapters/psqlpy/events/backend.py +43 -38
  143. sqlspec/adapters/psqlpy/events/store.py +1 -1
  144. sqlspec/adapters/psqlpy/litestar/store.py +3 -5
  145. sqlspec/adapters/psycopg/__init__.py +2 -0
  146. sqlspec/adapters/psycopg/_typing.py +53 -21
  147. sqlspec/adapters/psycopg/adk/store.py +145 -55
  148. sqlspec/adapters/psycopg/config.py +264 -211
  149. sqlspec/adapters/psycopg/core.py +85 -75
  150. sqlspec/adapters/psycopg/data_dictionary.py +27 -23
  151. sqlspec/adapters/psycopg/driver.py +105 -96
  152. sqlspec/adapters/psycopg/events/_hub.py +55 -15
  153. sqlspec/adapters/psycopg/events/backend.py +68 -49
  154. sqlspec/adapters/psycopg/events/store.py +1 -1
  155. sqlspec/adapters/psycopg/litestar/store.py +20 -22
  156. sqlspec/adapters/pymssql/_typing.py +26 -6
  157. sqlspec/adapters/pymssql/adk/store.py +168 -104
  158. sqlspec/adapters/pymssql/config.py +21 -23
  159. sqlspec/adapters/pymssql/core.py +105 -40
  160. sqlspec/adapters/pymssql/driver.py +148 -25
  161. sqlspec/adapters/pymssql/events/store.py +9 -19
  162. sqlspec/adapters/pymssql/litestar/store.py +35 -18
  163. sqlspec/adapters/pymssql/migrations.py +32 -28
  164. sqlspec/adapters/pymssql/pool.py +83 -48
  165. sqlspec/adapters/pymysql/__init__.py +2 -0
  166. sqlspec/adapters/pymysql/_typing.py +23 -7
  167. sqlspec/adapters/pymysql/adk/store.py +75 -36
  168. sqlspec/adapters/pymysql/config.py +77 -51
  169. sqlspec/adapters/pymysql/core.py +2 -0
  170. sqlspec/adapters/pymysql/driver.py +41 -32
  171. sqlspec/adapters/pymysql/litestar/store.py +53 -50
  172. sqlspec/adapters/pymysql/pool.py +87 -60
  173. sqlspec/adapters/spanner/__init__.py +23 -1
  174. sqlspec/adapters/spanner/_typing.py +172 -24
  175. sqlspec/adapters/spanner/adk/__init__.py +13 -1
  176. sqlspec/adapters/spanner/adk/artifact_store.py +668 -0
  177. sqlspec/adapters/spanner/adk/store.py +1608 -561
  178. sqlspec/adapters/spanner/config.py +710 -218
  179. sqlspec/adapters/spanner/core.py +652 -3
  180. sqlspec/adapters/spanner/data_dictionary.py +294 -18
  181. sqlspec/adapters/spanner/driver.py +924 -267
  182. sqlspec/adapters/spanner/events/__init__.py +2 -2
  183. sqlspec/adapters/spanner/events/store.py +219 -77
  184. sqlspec/adapters/spanner/litestar/__init__.py +2 -2
  185. sqlspec/adapters/spanner/litestar/store.py +349 -138
  186. sqlspec/adapters/spanner/type_converter.py +161 -62
  187. sqlspec/adapters/sqlite/_typing.py +5 -6
  188. sqlspec/adapters/sqlite/adk/store.py +250 -146
  189. sqlspec/adapters/sqlite/config.py +39 -11
  190. sqlspec/adapters/sqlite/core.py +131 -46
  191. sqlspec/adapters/sqlite/driver.py +50 -47
  192. sqlspec/adapters/sqlite/events/store.py +9 -3
  193. sqlspec/adapters/sqlite/litestar/store.py +75 -53
  194. sqlspec/adapters/sqlite/pool.py +114 -83
  195. sqlspec/adapters/sqlite/type_converter.py +8 -6
  196. sqlspec/base.py +39 -53
  197. sqlspec/builder/_base.py +617 -469
  198. sqlspec/builder/_column.py +81 -94
  199. sqlspec/builder/_ddl.py +219 -122
  200. sqlspec/builder/_delete.py +11 -13
  201. sqlspec/builder/_dml.py +47 -33
  202. sqlspec/builder/_explain.py +21 -24
  203. sqlspec/builder/_expression_wrappers.py +5 -5
  204. sqlspec/builder/_factory.py +160 -155
  205. sqlspec/builder/_insert.py +64 -65
  206. sqlspec/builder/_join.py +17 -31
  207. sqlspec/builder/_merge.py +126 -112
  208. sqlspec/builder/_parsing_utils.py +66 -62
  209. sqlspec/builder/_select.py +336 -353
  210. sqlspec/builder/_temporal.py +2 -1
  211. sqlspec/builder/_update.py +14 -11
  212. sqlspec/builder/_values.py +5 -6
  213. sqlspec/builder/_vector_distance.py +28 -6
  214. sqlspec/cli.py +36 -11
  215. sqlspec/config.py +19 -7
  216. sqlspec/core/_cursor.py +80 -78
  217. sqlspec/core/_operators.py +10 -4
  218. sqlspec/core/_pipeline.py +7 -6
  219. sqlspec/core/cache.py +93 -94
  220. sqlspec/core/compiler.py +85 -92
  221. sqlspec/core/correlation.py +11 -11
  222. sqlspec/core/explain.py +2 -2
  223. sqlspec/core/filters.py +87 -87
  224. sqlspec/core/hashing.py +2 -2
  225. sqlspec/core/parameters/_alignment.py +0 -2
  226. sqlspec/core/parameters/_converter.py +47 -50
  227. sqlspec/core/parameters/_declared.py +37 -37
  228. sqlspec/core/parameters/_processor.py +251 -151
  229. sqlspec/core/parameters/_types.py +9 -9
  230. sqlspec/core/parameters/_validator.py +30 -30
  231. sqlspec/core/query_modifiers.py +1 -8
  232. sqlspec/core/result/_base.py +293 -211
  233. sqlspec/core/splitter.py +75 -67
  234. sqlspec/core/sqlcommenter.py +0 -2
  235. sqlspec/core/statement.py +853 -768
  236. sqlspec/core/type_converter.py +2 -2
  237. sqlspec/data_dictionary/_dependencies.py +124 -56
  238. sqlspec/data_dictionary/_loader.py +143 -134
  239. sqlspec/data_dictionary/_registry.py +2 -0
  240. sqlspec/data_dictionary/_types.py +182 -179
  241. sqlspec/data_dictionary/dialects/bigquery/config.py +11 -1
  242. sqlspec/data_dictionary/dialects/bigquery/sql/constraints.sql +12 -6
  243. sqlspec/data_dictionary/dialects/bigquery/sql/tables.sql +30 -6
  244. sqlspec/data_dictionary/dialects/cockroachdb/config.py +10 -1
  245. sqlspec/data_dictionary/dialects/cockroachdb/sql/constraints.sql +11 -11
  246. sqlspec/data_dictionary/dialects/cockroachdb/sql/foreign_keys.sql +36 -18
  247. sqlspec/data_dictionary/dialects/cockroachdb/sql/indexes.sql +10 -9
  248. sqlspec/data_dictionary/dialects/db2/sql/tables.sql +2 -0
  249. sqlspec/data_dictionary/dialects/duckdb/config.py +10 -0
  250. sqlspec/data_dictionary/dialects/duckdb/sql/foreign_keys.sql +4 -0
  251. sqlspec/data_dictionary/dialects/duckdb/sql/tables.sql +29 -9
  252. sqlspec/data_dictionary/dialects/mariadb/sql/columns.sql +16 -0
  253. sqlspec/data_dictionary/dialects/mariadb/sql/foreign_keys.sql +28 -0
  254. sqlspec/data_dictionary/dialects/mariadb/sql/indexes.sql +14 -0
  255. sqlspec/data_dictionary/dialects/mariadb/sql/tables.sql +61 -24
  256. sqlspec/data_dictionary/dialects/mariadb/sql/version.sql +7 -0
  257. sqlspec/data_dictionary/dialects/mssql/config.py +36 -9
  258. sqlspec/data_dictionary/dialects/mssql/sql/foreign_keys.sql +2 -0
  259. sqlspec/data_dictionary/dialects/mssql/sql/tables.sql +3 -1
  260. sqlspec/data_dictionary/dialects/mysql/config.py +9 -0
  261. sqlspec/data_dictionary/dialects/mysql/dictionary.py +22 -28
  262. sqlspec/data_dictionary/dialects/mysql/sql/tables.sql +3 -1
  263. sqlspec/data_dictionary/dialects/oracle/config.py +14 -0
  264. sqlspec/data_dictionary/dialects/postgres/config.py +10 -1
  265. sqlspec/data_dictionary/dialects/postgres/sql/foreign_keys.sql +37 -33
  266. sqlspec/data_dictionary/dialects/postgres/sql/tables.sql +12 -3
  267. sqlspec/data_dictionary/dialects/spanner/config.py +10 -0
  268. sqlspec/data_dictionary/dialects/spanner/sql/googlesql/change_streams.sql +13 -13
  269. sqlspec/data_dictionary/dialects/spanner/sql/googlesql/constraints.sql +24 -24
  270. sqlspec/data_dictionary/dialects/spanner/sql/googlesql/database.sql +4 -4
  271. sqlspec/data_dictionary/dialects/spanner/sql/googlesql/objects.sql +5 -5
  272. sqlspec/data_dictionary/dialects/spanner/sql/googlesql/privileges.sql +6 -6
  273. sqlspec/data_dictionary/dialects/spanner/sql/googlesql/property_graphs.sql +4 -4
  274. sqlspec/data_dictionary/dialects/spanner/sql/googlesql/routines.sql +18 -18
  275. sqlspec/data_dictionary/dialects/spanner/sql/googlesql/sequences.sql +7 -7
  276. sqlspec/data_dictionary/dialects/spanner/sql/googlesql/system.sql +12 -11
  277. sqlspec/data_dictionary/dialects/spanner/sql/googlesql/views.sql +6 -6
  278. sqlspec/data_dictionary/dialects/spanner/sql/postgresql/system.sql +1 -0
  279. sqlspec/data_dictionary/dialects/sqlite/config.py +11 -1
  280. sqlspec/data_dictionary/dialects/sqlite/sql/constraints.sql +26 -0
  281. sqlspec/data_dictionary/dialects/sqlite/sql/foreign_keys.sql +3 -1
  282. sqlspec/data_dictionary/dialects/sqlite/sql/tables.sql +16 -7
  283. sqlspec/dialects/db2/__init__.py +1 -0
  284. sqlspec/dialects/db2/_generators.py +50 -26
  285. sqlspec/dialects/db2/_parsers.py +177 -78
  286. sqlspec/dialects/db2/_transforms.py +18 -7
  287. sqlspec/dialects/postgres/_generators.py +24 -9
  288. sqlspec/dialects/postgres/_operators.py +24 -24
  289. sqlspec/dialects/spanner/__init__.py +64 -1
  290. sqlspec/dialects/spanner/_expressions.py +182 -13
  291. sqlspec/dialects/spanner/_generators.py +314 -119
  292. sqlspec/dialects/spanner/_parsers.py +509 -156
  293. sqlspec/driver/_async.py +354 -313
  294. sqlspec/driver/_common.py +408 -249
  295. sqlspec/driver/_exception_handler.py +84 -8
  296. sqlspec/driver/_query_cache.py +167 -18
  297. sqlspec/driver/_storage_helpers.py +0 -3
  298. sqlspec/driver/_stream.py +76 -39
  299. sqlspec/driver/_sync.py +373 -306
  300. sqlspec/exceptions.py +17 -22
  301. sqlspec/extensions/__init__.py +3 -0
  302. sqlspec/extensions/adk/__init__.py +80 -30
  303. sqlspec/extensions/adk/_config_utils.py +2 -2
  304. sqlspec/extensions/adk/artifact/service.py +64 -48
  305. sqlspec/extensions/adk/converters.py +5 -9
  306. sqlspec/extensions/adk/maintenance.py +5 -5
  307. sqlspec/extensions/adk/memory/converters.py +6 -4
  308. sqlspec/extensions/adk/memory/service.py +62 -11
  309. sqlspec/extensions/adk/memory/store.py +48 -17
  310. sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +8 -2
  311. sqlspec/extensions/adk/migrations/__init__.py +3 -0
  312. sqlspec/extensions/adk/service.py +24 -14
  313. sqlspec/extensions/adk/store.py +17 -8
  314. sqlspec/extensions/events/_channel.py +40 -2
  315. sqlspec/extensions/events/_hints.py +3 -3
  316. sqlspec/extensions/events/_models.py +1 -3
  317. sqlspec/extensions/events/_payload.py +7 -7
  318. sqlspec/extensions/events/_queue.py +140 -47
  319. sqlspec/extensions/events/_store.py +2 -0
  320. sqlspec/extensions/fastapi/extension.py +30 -46
  321. sqlspec/extensions/fastapi/providers.py +7 -8
  322. sqlspec/extensions/flask/extension.py +144 -120
  323. sqlspec/extensions/litestar/__init__.py +2 -0
  324. sqlspec/extensions/litestar/_utils.py +2 -2
  325. sqlspec/extensions/litestar/channels.py +24 -18
  326. sqlspec/extensions/litestar/cli.py +2 -0
  327. sqlspec/extensions/litestar/handlers.py +33 -6
  328. sqlspec/extensions/litestar/plugin.py +128 -153
  329. sqlspec/extensions/litestar/providers.py +14 -7
  330. sqlspec/extensions/litestar/store.py +2 -2
  331. sqlspec/extensions/prometheus/_observer.py +13 -2
  332. sqlspec/extensions/sanic/extension.py +96 -52
  333. sqlspec/extensions/starlette/extension.py +120 -103
  334. sqlspec/extensions/starlette/middleware.py +18 -3
  335. sqlspec/loader.py +36 -31
  336. sqlspec/migrations/_backup.py +2 -2
  337. sqlspec/migrations/base.py +34 -19
  338. sqlspec/migrations/commands.py +692 -477
  339. sqlspec/migrations/context.py +22 -22
  340. sqlspec/migrations/fix.py +15 -7
  341. sqlspec/migrations/loaders.py +99 -35
  342. sqlspec/migrations/runner.py +279 -253
  343. sqlspec/migrations/schema.py +28 -2
  344. sqlspec/migrations/squash.py +102 -24
  345. sqlspec/migrations/templates.py +9 -9
  346. sqlspec/migrations/tracker.py +71 -25
  347. sqlspec/migrations/utils.py +6 -2
  348. sqlspec/migrations/validation.py +50 -11
  349. sqlspec/migrations/version.py +48 -10
  350. sqlspec/observability/_common.py +14 -2
  351. sqlspec/observability/_config.py +49 -48
  352. sqlspec/observability/_diagnostics.py +3 -2
  353. sqlspec/observability/_dispatcher.py +9 -1
  354. sqlspec/observability/_formatters/_aws.py +13 -13
  355. sqlspec/observability/_formatters/_azure.py +11 -11
  356. sqlspec/observability/_formatters/_gcp.py +11 -11
  357. sqlspec/observability/_observer.py +95 -44
  358. sqlspec/observability/_runtime.py +90 -49
  359. sqlspec/observability/_sampling.py +41 -30
  360. sqlspec/observability/_spans.py +35 -10
  361. sqlspec/protocols.py +51 -48
  362. sqlspec/service/_base.py +12 -16
  363. sqlspec/service/_core.py +54 -10
  364. sqlspec/storage/__init__.py +64 -17
  365. sqlspec/storage/_arrow_payload.py +9 -7
  366. sqlspec/storage/_paths.py +44 -11
  367. sqlspec/storage/_utils.py +46 -2
  368. sqlspec/storage/backends/__init__.py +42 -0
  369. sqlspec/storage/backends/base.py +98 -41
  370. sqlspec/storage/backends/fsspec.py +79 -58
  371. sqlspec/storage/backends/local.py +89 -76
  372. sqlspec/storage/backends/obstore.py +409 -322
  373. sqlspec/storage/errors.py +4 -1
  374. sqlspec/storage/pipeline.py +70 -59
  375. sqlspec/storage/registry.py +64 -60
  376. sqlspec/typing.py +3 -2
  377. sqlspec/utils/__init__.py +2 -0
  378. sqlspec/utils/arrow_helpers.py +16 -7
  379. sqlspec/utils/config_tools.py +15 -19
  380. sqlspec/utils/correlation.py +4 -5
  381. sqlspec/utils/deprecation.py +24 -0
  382. sqlspec/utils/dispatch.py +6 -9
  383. sqlspec/utils/fixtures.py +69 -14
  384. sqlspec/utils/logging.py +12 -3
  385. sqlspec/utils/module_loader.py +1 -1
  386. sqlspec/utils/portal.py +88 -60
  387. sqlspec/utils/schema.py +153 -54
  388. sqlspec/utils/serializers/_json.py +153 -139
  389. sqlspec/utils/serializers/_schema.py +51 -24
  390. sqlspec/utils/sync_tools.py +54 -37
  391. sqlspec/utils/text.py +3 -2
  392. sqlspec/utils/type_converters.py +66 -63
  393. sqlspec/utils/type_guards.py +30 -7
  394. sqlspec/utils/uuids.py +30 -9
  395. {sqlspec-0.65.0.dist-info → sqlspec-0.67.0.dist-info}/METADATA +4 -5
  396. {sqlspec-0.65.0.dist-info → sqlspec-0.67.0.dist-info}/RECORD +399 -396
  397. {sqlspec-0.65.0.dist-info → sqlspec-0.67.0.dist-info}/WHEEL +0 -0
  398. {sqlspec-0.65.0.dist-info → sqlspec-0.67.0.dist-info}/entry_points.txt +0 -0
  399. {sqlspec-0.65.0.dist-info → sqlspec-0.67.0.dist-info}/licenses/LICENSE +0 -0
sqlspec/__init__.py CHANGED
@@ -1,8 +1,6 @@
1
1
  """SQLSpec: Type-safe SQL query mapper for Python."""
2
2
 
3
3
  # ruff: noqa: E402
4
- # Suppress noisy Google library deprecation warnings about Python version support.
5
- # These are informational and clutter CLI output unnecessarily.
6
4
  import warnings as _warnings
7
5
 
8
6
  _warnings.filterwarnings(
@@ -166,6 +164,7 @@ __all__ = (
166
164
  "adapters",
167
165
  "base",
168
166
  "builder",
167
+ "config",
169
168
  "core",
170
169
  "create_event",
171
170
  "create_statement_observer",
@@ -180,6 +179,7 @@ __all__ = (
180
179
  "matches_param_type",
181
180
  "migrations",
182
181
  "nanoid",
182
+ "observability",
183
183
  "register_param_type",
184
184
  "resolve_param_type",
185
185
  "sql",
@@ -295,8 +295,6 @@ def __dir__() -> list[str]:
295
295
  return sorted(set(globals()) | _EXPORTS.keys())
296
296
 
297
297
 
298
- # Native cross-module initialization is not protected by Python import locks.
299
- # Retain eager exports in compiled wheels until mypyc supports lazy concurrency.
300
298
  if _COMPILED:
301
299
  for _name in __all__:
302
300
  if _name not in globals():
sqlspec/_typing.py CHANGED
@@ -10,9 +10,9 @@ 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 TYPE_CHECKING, Any, ClassVar, Final, Literal, Protocol, cast, runtime_checkable
13
+ from typing import TYPE_CHECKING, Any, ClassVar, Final, Literal, Protocol, Self, cast, runtime_checkable
14
14
 
15
- from typing_extensions import Self, TypeVar, dataclass_transform
15
+ from typing_extensions import TypeVar, dataclass_transform
16
16
 
17
17
  from sqlspec.utils.module_loader import (
18
18
  dependency_flag,
@@ -140,8 +140,6 @@ class DataclassProtocol(Protocol):
140
140
 
141
141
  T = TypeVar("T")
142
142
 
143
- # Always define stub types for type checking
144
-
145
143
 
146
144
  class BaseModelStub:
147
145
  """Placeholder implementation."""
@@ -193,6 +191,8 @@ class BaseModelStub:
193
191
  class TypeAdapterStub:
194
192
  """Placeholder implementation."""
195
193
 
194
+ __slots__ = ("_type",)
195
+
196
196
  def __init__(
197
197
  self,
198
198
  type: Any, # noqa: A002
@@ -225,9 +225,6 @@ class FailFastStub:
225
225
  fail_fast: bool = True
226
226
 
227
227
 
228
- # Always define stub types for msgspec
229
-
230
-
231
228
  @dataclass_transform()
232
229
  class StructStub:
233
230
  """Placeholder implementation."""
@@ -241,7 +238,7 @@ class StructStub:
241
238
 
242
239
 
243
240
  def convert_stub( # noqa: PLR0913
244
- obj: Any, # noqa: ARG001
241
+ obj: Any,
245
242
  type: Any, # noqa: A002,ARG001
246
243
  *,
247
244
  strict: bool = True, # noqa: ARG001
@@ -251,7 +248,7 @@ def convert_stub( # noqa: PLR0913
251
248
  str_keys: bool = False, # noqa: ARG001
252
249
  ) -> Any:
253
250
  """Placeholder implementation."""
254
- return {}
251
+ return obj
255
252
 
256
253
 
257
254
  def msgspec_fields_stub(type_: Any, /) -> "tuple[Any, ...]": # noqa: ARG001
@@ -265,7 +262,6 @@ class UnsetTypeStub(enum.Enum):
265
262
 
266
263
  UNSET_STUB = UnsetTypeStub.UNSET
267
264
 
268
- # Try to import real implementations at runtime
269
265
  try:
270
266
  from msgspec import UNSET as _REAL_UNSET
271
267
  from msgspec import Struct as _RealStruct
@@ -289,7 +285,6 @@ except ImportError:
289
285
  msgspec_fields = msgspec_fields_stub # type: ignore[assignment]
290
286
 
291
287
 
292
- # Always define stub type for DTOData
293
288
  @runtime_checkable
294
289
  class DTODataStub(Protocol[T]):
295
290
  """Placeholder implementation."""
@@ -311,7 +306,6 @@ class DTODataStub(Protocol[T]):
311
306
  return {}
312
307
 
313
308
 
314
- # Always define stub types for attrs
315
309
  @dataclass_transform()
316
310
  class AttrsInstanceStub:
317
311
  """Placeholder Implementation for attrs classes"""
@@ -376,9 +370,6 @@ Empty: Final = EmptyEnum.EMPTY
376
370
  class ArrowTableResult(Protocol):
377
371
  """This is a typed shim for pyarrow.Table."""
378
372
 
379
- def to_batches(self, batch_size: int) -> Any:
380
- return None
381
-
382
373
  @property
383
374
  def num_rows(self) -> int:
384
375
  return 0
@@ -387,6 +378,9 @@ class ArrowTableResult(Protocol):
387
378
  def num_columns(self) -> int:
388
379
  return 0
389
380
 
381
+ def to_batches(self, batch_size: int) -> Any:
382
+ return None
383
+
390
384
  def to_pydict(self) -> dict[str, Any]:
391
385
  return {}
392
386
 
@@ -441,24 +435,28 @@ class ArrowRecordBatchResult(Protocol):
441
435
  class ArrowSchemaProtocol(Protocol):
442
436
  """Typed shim for pyarrow.Schema."""
443
437
 
444
- def field(self, i: int) -> Any:
445
- """Get field by index."""
446
- ...
438
+ def __len__(self) -> int:
439
+ """Get number of fields."""
440
+ return 0
447
441
 
448
442
  @property
449
443
  def names(self) -> "list[str]":
450
444
  """Get list of field names."""
451
445
  ...
452
446
 
453
- def __len__(self) -> int:
454
- """Get number of fields."""
455
- return 0
447
+ def field(self, i: int) -> Any:
448
+ """Get field by index."""
449
+ ...
456
450
 
457
451
 
458
452
  @runtime_checkable
459
453
  class ArrowRecordBatchReaderProtocol(Protocol):
460
454
  """Typed shim for pyarrow.RecordBatchReader."""
461
455
 
456
+ def __iter__(self) -> "Iterable[Any]":
457
+ """Iterate over batches."""
458
+ ...
459
+
462
460
  def read_all(self) -> Any:
463
461
  """Read all batches into a table."""
464
462
  ...
@@ -467,10 +465,6 @@ class ArrowRecordBatchReaderProtocol(Protocol):
467
465
  """Read next batch."""
468
466
  ...
469
467
 
470
- def __iter__(self) -> "Iterable[Any]":
471
- """Iterate over batches."""
472
- ...
473
-
474
468
 
475
469
  _ARROW_TABLE_SHIM = ArrowTableResult
476
470
  _ARROW_RECORD_BATCH_SHIM = ArrowRecordBatchResult
@@ -526,6 +520,14 @@ _NUMPY_ARRAY_SHIM = NumpyArrayStub
526
520
 
527
521
 
528
522
  class _SpanShim:
523
+ __slots__ = ()
524
+
525
+ def __enter__(self) -> Self:
526
+ return self
527
+
528
+ def __exit__(self, exc_type: object, exc_val: object, exc_tb: object) -> None:
529
+ return None
530
+
529
531
  def set_attribute(self, key: str, value: Any) -> None:
530
532
  return None
531
533
 
@@ -544,12 +546,6 @@ class _SpanShim:
544
546
  def end(self, end_time: "int | None" = None) -> None:
545
547
  return None
546
548
 
547
- def __enter__(self) -> Self:
548
- return self
549
-
550
- def __exit__(self, exc_type: object, exc_val: object, exc_tb: object) -> None:
551
- return None
552
-
553
549
 
554
550
  _SPAN_SHIM = _SpanShim
555
551
  _SPAN_SHIM.__name__ = "Span"
@@ -557,6 +553,8 @@ _SPAN_SHIM.__qualname__ = "Span"
557
553
 
558
554
 
559
555
  class _TracerShim:
556
+ __slots__ = ()
557
+
560
558
  def start_span(
561
559
  self,
562
560
  name: str,
@@ -577,6 +575,8 @@ _TRACER_SHIM.__qualname__ = "Tracer"
577
575
 
578
576
 
579
577
  class _TraceModule:
578
+ __slots__ = ()
579
+
580
580
  def get_tracer(
581
581
  self,
582
582
  instrumenting_module_name: str,
@@ -589,9 +589,9 @@ class _TraceModule:
589
589
  def get_tracer_provider(self) -> Any: # pragma: no cover
590
590
  return None
591
591
 
592
- TracerProvider = type(None) # Shim for TracerProvider if needed elsewhere
593
- StatusCode = type(None) # Shim for StatusCode
594
- Status = type(None) # Shim for Status
592
+ TracerProvider = type(None)
593
+ StatusCode = type(None)
594
+ Status = type(None)
595
595
 
596
596
 
597
597
  _TRACE_SHIM = _TraceModule()
@@ -599,7 +599,9 @@ _STATUS_CODE_SHIM = type(None)
599
599
  _STATUS_SHIM = type(None)
600
600
 
601
601
 
602
- class _Metric: # Base shim for metrics
602
+ class _Metric:
603
+ __slots__ = ()
604
+
603
605
  def __init__(
604
606
  self,
605
607
  name: str,
@@ -609,7 +611,7 @@ class _Metric: # Base shim for metrics
609
611
  subsystem: str = "",
610
612
  unit: str = "",
611
613
  registry: Any = None,
612
- ejemplar_fn: Any = None,
614
+ exemplar_fn: Any = None,
613
615
  buckets: Any = None,
614
616
  **_: Any,
615
617
  ) -> None:
@@ -620,6 +622,8 @@ class _Metric: # Base shim for metrics
620
622
 
621
623
 
622
624
  class _MetricInstance:
625
+ __slots__ = ()
626
+
623
627
  def inc(self, amount: float = 1) -> None:
624
628
  return None
625
629
 
@@ -634,6 +638,8 @@ class _MetricInstance:
634
638
 
635
639
 
636
640
  class _CounterShim(_Metric):
641
+ __slots__ = ()
642
+
637
643
  def labels(self, *labelvalues: str, **labelkwargs: str) -> "_MetricInstance":
638
644
  return _MetricInstance() # pragma: no cover
639
645
 
@@ -644,6 +650,8 @@ _COUNTER_SHIM.__qualname__ = "Counter"
644
650
 
645
651
 
646
652
  class _GaugeShim(_Metric):
653
+ __slots__ = ()
654
+
647
655
  def labels(self, *labelvalues: str, **labelkwargs: str) -> "_MetricInstance":
648
656
  return _MetricInstance() # pragma: no cover
649
657
 
@@ -654,6 +662,8 @@ _GAUGE_SHIM.__qualname__ = "Gauge"
654
662
 
655
663
 
656
664
  class _HistogramShim(_Metric):
665
+ __slots__ = ()
666
+
657
667
  def labels(self, *labelvalues: str, **labelkwargs: str) -> "_MetricInstance":
658
668
  return _MetricInstance() # pragma: no cover
659
669
 
@@ -0,0 +1,3 @@
1
+ """SQLSpec database adapters namespace package."""
2
+
3
+ __all__ = ()
@@ -1,3 +1,5 @@
1
+ """ADBC adapter for SQLSpec."""
2
+
1
3
  from sqlspec.adapters.adbc._typing import AdbcConnection
2
4
  from sqlspec.adapters.adbc.config import AdbcConfig, AdbcConnectionParams, AdbcDriverFeatures
3
5
  from sqlspec.adapters.adbc.driver import AdbcCursor, AdbcDriver, AdbcExceptionHandler
@@ -1,4 +1,3 @@
1
- # pyright: reportCallIssue=false, reportAttributeAccessIssue=false, reportArgumentType=false
2
1
  """ADBC adapter type definitions.
3
2
 
4
3
  This module contains type aliases and classes that are excluded from mypyc
@@ -6,7 +5,7 @@ compilation to avoid ABI boundary issues.
6
5
  """
7
6
 
8
7
  import contextlib
9
- from typing import TYPE_CHECKING, Any
8
+ from typing import TYPE_CHECKING, Any, TypeAlias
10
9
 
11
10
  from adbc_driver_manager import Error as _AdbcNativeError
12
11
  from adbc_driver_manager import NotSupportedError as AdbcNotSupportedError
@@ -14,27 +13,21 @@ from adbc_driver_manager import OperationalError as AdbcOperationalError
14
13
  from adbc_driver_manager.dbapi import Connection
15
14
  from adbc_driver_manager.dbapi import Cursor as _AdbcRawCursor
16
15
 
16
+ from sqlspec.adapters.adbc.core import resolve_dialect_name
17
17
  from sqlspec.typing import import_optional_attr
18
18
 
19
- _AdbcConnection = Connection
20
-
21
19
  if TYPE_CHECKING:
22
20
  from collections.abc import Callable
23
21
  from types import TracebackType
24
- from typing import TypeAlias
25
22
 
26
23
  from adbc_driver_flightsql import DatabaseOptions as AdbcFlightSqlDatabaseOptions
27
24
 
28
25
  from sqlspec.adapters.adbc.driver import AdbcDriver
29
26
  from sqlspec.core import StatementConfig
30
27
 
31
- AdbcConnection: TypeAlias = _AdbcConnection
32
- AdbcRawCursor: TypeAlias = _AdbcRawCursor
33
- AdbcNativeError: TypeAlias = _AdbcNativeError
34
- else:
35
- AdbcConnection = _AdbcConnection
36
- AdbcRawCursor = _AdbcRawCursor
37
- AdbcNativeError = _AdbcNativeError
28
+ AdbcConnection: TypeAlias = Connection
29
+ AdbcRawCursor: TypeAlias = _AdbcRawCursor
30
+ AdbcNativeError: TypeAlias = _AdbcNativeError
38
31
 
39
32
  __all__ = (
40
33
  "AdbcConnection",
@@ -105,7 +98,6 @@ class AdbcSessionContext:
105
98
  self._driver: AdbcDriver | None = None
106
99
 
107
100
  def __enter__(self) -> "AdbcDriver":
108
- from sqlspec.adapters.adbc.core import resolve_dialect_name
109
101
  from sqlspec.adapters.adbc.driver import AdbcDriver
110
102
 
111
103
  self._connection = self._acquire_connection()