sqlspec 0.47.0__cp314-cp314-win_amd64.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 (621) hide show
  1. f68e0789eb443ecb1c2c__mypyc.cp314-win_amd64.pyd +0 -0
  2. sqlspec/__init__.py +167 -0
  3. sqlspec/__main__.py +12 -0
  4. sqlspec/__metadata__.py +14 -0
  5. sqlspec/_typing.py +714 -0
  6. sqlspec/adapters/__init__.py +0 -0
  7. sqlspec/adapters/adbc/__init__.py +13 -0
  8. sqlspec/adapters/adbc/_typing.py +106 -0
  9. sqlspec/adapters/adbc/adk/__init__.py +5 -0
  10. sqlspec/adapters/adbc/adk/store.py +1280 -0
  11. sqlspec/adapters/adbc/config.py +378 -0
  12. sqlspec/adapters/adbc/core.cp314-win_amd64.pyd +0 -0
  13. sqlspec/adapters/adbc/core.py +922 -0
  14. sqlspec/adapters/adbc/data_dictionary.py +339 -0
  15. sqlspec/adapters/adbc/driver.py +534 -0
  16. sqlspec/adapters/adbc/events/__init__.py +5 -0
  17. sqlspec/adapters/adbc/events/store.py +285 -0
  18. sqlspec/adapters/adbc/litestar/__init__.py +5 -0
  19. sqlspec/adapters/adbc/litestar/store.py +534 -0
  20. sqlspec/adapters/adbc/type_converter.cp314-win_amd64.pyd +0 -0
  21. sqlspec/adapters/adbc/type_converter.py +142 -0
  22. sqlspec/adapters/aiomysql/__init__.py +21 -0
  23. sqlspec/adapters/aiomysql/_typing.py +137 -0
  24. sqlspec/adapters/aiomysql/adk/__init__.py +5 -0
  25. sqlspec/adapters/aiomysql/adk/store.py +678 -0
  26. sqlspec/adapters/aiomysql/config.py +305 -0
  27. sqlspec/adapters/aiomysql/core.cp314-win_amd64.pyd +0 -0
  28. sqlspec/adapters/aiomysql/core.py +536 -0
  29. sqlspec/adapters/aiomysql/data_dictionary.py +121 -0
  30. sqlspec/adapters/aiomysql/driver.py +386 -0
  31. sqlspec/adapters/aiomysql/events/__init__.py +5 -0
  32. sqlspec/adapters/aiomysql/events/store.py +104 -0
  33. sqlspec/adapters/aiomysql/litestar/__init__.py +5 -0
  34. sqlspec/adapters/aiomysql/litestar/store.py +314 -0
  35. sqlspec/adapters/aiosqlite/__init__.py +26 -0
  36. sqlspec/adapters/aiosqlite/_typing.py +109 -0
  37. sqlspec/adapters/aiosqlite/adk/__init__.py +5 -0
  38. sqlspec/adapters/aiosqlite/adk/store.py +829 -0
  39. sqlspec/adapters/aiosqlite/config.py +315 -0
  40. sqlspec/adapters/aiosqlite/core.cp314-win_amd64.pyd +0 -0
  41. sqlspec/adapters/aiosqlite/core.py +315 -0
  42. sqlspec/adapters/aiosqlite/data_dictionary.py +202 -0
  43. sqlspec/adapters/aiosqlite/driver.py +311 -0
  44. sqlspec/adapters/aiosqlite/events/__init__.py +5 -0
  45. sqlspec/adapters/aiosqlite/events/store.py +20 -0
  46. sqlspec/adapters/aiosqlite/litestar/__init__.py +5 -0
  47. sqlspec/adapters/aiosqlite/litestar/store.py +279 -0
  48. sqlspec/adapters/aiosqlite/pool.cp314-win_amd64.pyd +0 -0
  49. sqlspec/adapters/aiosqlite/pool.py +734 -0
  50. sqlspec/adapters/asyncmy/__init__.py +21 -0
  51. sqlspec/adapters/asyncmy/_typing.py +113 -0
  52. sqlspec/adapters/asyncmy/adk/__init__.py +5 -0
  53. sqlspec/adapters/asyncmy/adk/store.py +644 -0
  54. sqlspec/adapters/asyncmy/config.py +307 -0
  55. sqlspec/adapters/asyncmy/core.cp314-win_amd64.pyd +0 -0
  56. sqlspec/adapters/asyncmy/core.py +538 -0
  57. sqlspec/adapters/asyncmy/data_dictionary.py +122 -0
  58. sqlspec/adapters/asyncmy/driver.py +391 -0
  59. sqlspec/adapters/asyncmy/events/__init__.py +5 -0
  60. sqlspec/adapters/asyncmy/events/store.py +104 -0
  61. sqlspec/adapters/asyncmy/litestar/__init__.py +5 -0
  62. sqlspec/adapters/asyncmy/litestar/store.py +296 -0
  63. sqlspec/adapters/asyncpg/__init__.py +26 -0
  64. sqlspec/adapters/asyncpg/_typing.py +103 -0
  65. sqlspec/adapters/asyncpg/adk/__init__.py +5 -0
  66. sqlspec/adapters/asyncpg/adk/store.py +483 -0
  67. sqlspec/adapters/asyncpg/config.py +575 -0
  68. sqlspec/adapters/asyncpg/core.cp314-win_amd64.pyd +0 -0
  69. sqlspec/adapters/asyncpg/core.py +480 -0
  70. sqlspec/adapters/asyncpg/data_dictionary.py +157 -0
  71. sqlspec/adapters/asyncpg/driver.py +487 -0
  72. sqlspec/adapters/asyncpg/events/__init__.py +6 -0
  73. sqlspec/adapters/asyncpg/events/_hub.py +181 -0
  74. sqlspec/adapters/asyncpg/events/backend.py +210 -0
  75. sqlspec/adapters/asyncpg/events/store.py +40 -0
  76. sqlspec/adapters/asyncpg/litestar/__init__.py +5 -0
  77. sqlspec/adapters/asyncpg/litestar/store.py +251 -0
  78. sqlspec/adapters/bigquery/__init__.py +15 -0
  79. sqlspec/adapters/bigquery/_typing.py +108 -0
  80. sqlspec/adapters/bigquery/config.py +362 -0
  81. sqlspec/adapters/bigquery/core.cp314-win_amd64.pyd +0 -0
  82. sqlspec/adapters/bigquery/core.py +768 -0
  83. sqlspec/adapters/bigquery/data_dictionary.py +120 -0
  84. sqlspec/adapters/bigquery/driver.py +542 -0
  85. sqlspec/adapters/bigquery/events/__init__.py +5 -0
  86. sqlspec/adapters/bigquery/events/store.py +139 -0
  87. sqlspec/adapters/bigquery/litestar/__init__.py +5 -0
  88. sqlspec/adapters/bigquery/litestar/store.py +325 -0
  89. sqlspec/adapters/bigquery/type_converter.cp314-win_amd64.pyd +0 -0
  90. sqlspec/adapters/bigquery/type_converter.py +107 -0
  91. sqlspec/adapters/cockroach_asyncpg/__init__.py +26 -0
  92. sqlspec/adapters/cockroach_asyncpg/_typing.py +73 -0
  93. sqlspec/adapters/cockroach_asyncpg/adk/__init__.py +3 -0
  94. sqlspec/adapters/cockroach_asyncpg/adk/store.py +465 -0
  95. sqlspec/adapters/cockroach_asyncpg/config.py +248 -0
  96. sqlspec/adapters/cockroach_asyncpg/core.cp314-win_amd64.pyd +0 -0
  97. sqlspec/adapters/cockroach_asyncpg/core.py +55 -0
  98. sqlspec/adapters/cockroach_asyncpg/data_dictionary.py +110 -0
  99. sqlspec/adapters/cockroach_asyncpg/driver.py +142 -0
  100. sqlspec/adapters/cockroach_asyncpg/events/__init__.py +3 -0
  101. sqlspec/adapters/cockroach_asyncpg/events/store.py +20 -0
  102. sqlspec/adapters/cockroach_asyncpg/litestar/__init__.py +3 -0
  103. sqlspec/adapters/cockroach_asyncpg/litestar/store.py +142 -0
  104. sqlspec/adapters/cockroach_psycopg/__init__.py +39 -0
  105. sqlspec/adapters/cockroach_psycopg/_typing.py +137 -0
  106. sqlspec/adapters/cockroach_psycopg/adk/__init__.py +13 -0
  107. sqlspec/adapters/cockroach_psycopg/adk/store.py +1039 -0
  108. sqlspec/adapters/cockroach_psycopg/config.py +511 -0
  109. sqlspec/adapters/cockroach_psycopg/core.cp314-win_amd64.pyd +0 -0
  110. sqlspec/adapters/cockroach_psycopg/core.py +63 -0
  111. sqlspec/adapters/cockroach_psycopg/data_dictionary.py +220 -0
  112. sqlspec/adapters/cockroach_psycopg/driver.py +273 -0
  113. sqlspec/adapters/cockroach_psycopg/events/__init__.py +6 -0
  114. sqlspec/adapters/cockroach_psycopg/events/store.py +34 -0
  115. sqlspec/adapters/cockroach_psycopg/litestar/__init__.py +3 -0
  116. sqlspec/adapters/cockroach_psycopg/litestar/store.py +327 -0
  117. sqlspec/adapters/duckdb/__init__.py +29 -0
  118. sqlspec/adapters/duckdb/_typing.py +104 -0
  119. sqlspec/adapters/duckdb/adk/__init__.py +14 -0
  120. sqlspec/adapters/duckdb/adk/store.py +935 -0
  121. sqlspec/adapters/duckdb/config.py +386 -0
  122. sqlspec/adapters/duckdb/core.cp314-win_amd64.pyd +0 -0
  123. sqlspec/adapters/duckdb/core.py +332 -0
  124. sqlspec/adapters/duckdb/data_dictionary.py +140 -0
  125. sqlspec/adapters/duckdb/driver.py +426 -0
  126. sqlspec/adapters/duckdb/events/__init__.py +5 -0
  127. sqlspec/adapters/duckdb/events/store.py +57 -0
  128. sqlspec/adapters/duckdb/litestar/__init__.py +5 -0
  129. sqlspec/adapters/duckdb/litestar/store.py +330 -0
  130. sqlspec/adapters/duckdb/pool.cp314-win_amd64.pyd +0 -0
  131. sqlspec/adapters/duckdb/pool.py +350 -0
  132. sqlspec/adapters/duckdb/type_converter.cp314-win_amd64.pyd +0 -0
  133. sqlspec/adapters/duckdb/type_converter.py +118 -0
  134. sqlspec/adapters/mysqlconnector/__init__.py +39 -0
  135. sqlspec/adapters/mysqlconnector/_typing.py +186 -0
  136. sqlspec/adapters/mysqlconnector/adk/__init__.py +15 -0
  137. sqlspec/adapters/mysqlconnector/adk/store.py +1183 -0
  138. sqlspec/adapters/mysqlconnector/config.py +421 -0
  139. sqlspec/adapters/mysqlconnector/core.cp314-win_amd64.pyd +0 -0
  140. sqlspec/adapters/mysqlconnector/core.py +472 -0
  141. sqlspec/adapters/mysqlconnector/data_dictionary.py +230 -0
  142. sqlspec/adapters/mysqlconnector/driver.py +516 -0
  143. sqlspec/adapters/mysqlconnector/events/__init__.py +8 -0
  144. sqlspec/adapters/mysqlconnector/events/store.py +98 -0
  145. sqlspec/adapters/mysqlconnector/litestar/__init__.py +5 -0
  146. sqlspec/adapters/mysqlconnector/litestar/store.py +426 -0
  147. sqlspec/adapters/oracledb/__init__.py +39 -0
  148. sqlspec/adapters/oracledb/_json_handlers.cp314-win_amd64.pyd +0 -0
  149. sqlspec/adapters/oracledb/_json_handlers.py +196 -0
  150. sqlspec/adapters/oracledb/_param_types.cp314-win_amd64.pyd +0 -0
  151. sqlspec/adapters/oracledb/_param_types.py +46 -0
  152. sqlspec/adapters/oracledb/_typing.py +258 -0
  153. sqlspec/adapters/oracledb/_uuid_handlers.cp314-win_amd64.pyd +0 -0
  154. sqlspec/adapters/oracledb/_uuid_handlers.py +163 -0
  155. sqlspec/adapters/oracledb/_vector_handlers.cp314-win_amd64.pyd +0 -0
  156. sqlspec/adapters/oracledb/_vector_handlers.py +228 -0
  157. sqlspec/adapters/oracledb/adk/__init__.py +21 -0
  158. sqlspec/adapters/oracledb/adk/store.py +2453 -0
  159. sqlspec/adapters/oracledb/config.py +575 -0
  160. sqlspec/adapters/oracledb/core.cp314-win_amd64.pyd +0 -0
  161. sqlspec/adapters/oracledb/core.py +820 -0
  162. sqlspec/adapters/oracledb/data_dictionary.py +404 -0
  163. sqlspec/adapters/oracledb/driver.py +1277 -0
  164. sqlspec/adapters/oracledb/events/__init__.py +16 -0
  165. sqlspec/adapters/oracledb/events/_hub.py +345 -0
  166. sqlspec/adapters/oracledb/events/backend.py +300 -0
  167. sqlspec/adapters/oracledb/events/store.py +420 -0
  168. sqlspec/adapters/oracledb/litestar/__init__.py +5 -0
  169. sqlspec/adapters/oracledb/litestar/store.py +781 -0
  170. sqlspec/adapters/oracledb/migrations.py +539 -0
  171. sqlspec/adapters/oracledb/type_converter.cp314-win_amd64.pyd +0 -0
  172. sqlspec/adapters/oracledb/type_converter.py +211 -0
  173. sqlspec/adapters/psqlpy/__init__.py +18 -0
  174. sqlspec/adapters/psqlpy/_typing.py +121 -0
  175. sqlspec/adapters/psqlpy/adk/__init__.py +5 -0
  176. sqlspec/adapters/psqlpy/adk/store.py +591 -0
  177. sqlspec/adapters/psqlpy/config.py +376 -0
  178. sqlspec/adapters/psqlpy/core.cp314-win_amd64.pyd +0 -0
  179. sqlspec/adapters/psqlpy/core.py +694 -0
  180. sqlspec/adapters/psqlpy/data_dictionary.py +121 -0
  181. sqlspec/adapters/psqlpy/driver.py +411 -0
  182. sqlspec/adapters/psqlpy/events/__init__.py +6 -0
  183. sqlspec/adapters/psqlpy/events/_hub.py +204 -0
  184. sqlspec/adapters/psqlpy/events/backend.py +210 -0
  185. sqlspec/adapters/psqlpy/events/store.py +20 -0
  186. sqlspec/adapters/psqlpy/litestar/__init__.py +5 -0
  187. sqlspec/adapters/psqlpy/litestar/store.py +270 -0
  188. sqlspec/adapters/psqlpy/type_converter.cp314-win_amd64.pyd +0 -0
  189. sqlspec/adapters/psqlpy/type_converter.py +113 -0
  190. sqlspec/adapters/psycopg/__init__.py +38 -0
  191. sqlspec/adapters/psycopg/_typing.py +218 -0
  192. sqlspec/adapters/psycopg/adk/__init__.py +10 -0
  193. sqlspec/adapters/psycopg/adk/store.py +1106 -0
  194. sqlspec/adapters/psycopg/config.py +695 -0
  195. sqlspec/adapters/psycopg/core.cp314-win_amd64.pyd +0 -0
  196. sqlspec/adapters/psycopg/core.py +520 -0
  197. sqlspec/adapters/psycopg/data_dictionary.py +278 -0
  198. sqlspec/adapters/psycopg/driver.py +1033 -0
  199. sqlspec/adapters/psycopg/events/__init__.py +20 -0
  200. sqlspec/adapters/psycopg/events/_hub.py +388 -0
  201. sqlspec/adapters/psycopg/events/backend.py +398 -0
  202. sqlspec/adapters/psycopg/events/store.py +42 -0
  203. sqlspec/adapters/psycopg/litestar/__init__.py +5 -0
  204. sqlspec/adapters/psycopg/litestar/store.py +554 -0
  205. sqlspec/adapters/psycopg/type_converter.cp314-win_amd64.pyd +0 -0
  206. sqlspec/adapters/psycopg/type_converter.py +93 -0
  207. sqlspec/adapters/pymysql/__init__.py +21 -0
  208. sqlspec/adapters/pymysql/_typing.py +92 -0
  209. sqlspec/adapters/pymysql/adk/__init__.py +5 -0
  210. sqlspec/adapters/pymysql/adk/store.py +657 -0
  211. sqlspec/adapters/pymysql/config.py +176 -0
  212. sqlspec/adapters/pymysql/core.cp314-win_amd64.pyd +0 -0
  213. sqlspec/adapters/pymysql/core.py +469 -0
  214. sqlspec/adapters/pymysql/data_dictionary.py +120 -0
  215. sqlspec/adapters/pymysql/driver.py +271 -0
  216. sqlspec/adapters/pymysql/events/__init__.py +5 -0
  217. sqlspec/adapters/pymysql/events/store.py +50 -0
  218. sqlspec/adapters/pymysql/litestar/__init__.py +5 -0
  219. sqlspec/adapters/pymysql/litestar/store.py +232 -0
  220. sqlspec/adapters/pymysql/pool.cp314-win_amd64.pyd +0 -0
  221. sqlspec/adapters/pymysql/pool.py +184 -0
  222. sqlspec/adapters/spanner/__init__.py +33 -0
  223. sqlspec/adapters/spanner/_typing.py +102 -0
  224. sqlspec/adapters/spanner/adk/__init__.py +5 -0
  225. sqlspec/adapters/spanner/adk/store.py +758 -0
  226. sqlspec/adapters/spanner/config.py +355 -0
  227. sqlspec/adapters/spanner/core.cp314-win_amd64.pyd +0 -0
  228. sqlspec/adapters/spanner/core.py +263 -0
  229. sqlspec/adapters/spanner/data_dictionary.py +120 -0
  230. sqlspec/adapters/spanner/driver.py +407 -0
  231. sqlspec/adapters/spanner/events/__init__.py +5 -0
  232. sqlspec/adapters/spanner/events/store.py +187 -0
  233. sqlspec/adapters/spanner/litestar/__init__.py +5 -0
  234. sqlspec/adapters/spanner/litestar/store.py +291 -0
  235. sqlspec/adapters/spanner/type_converter.cp314-win_amd64.pyd +0 -0
  236. sqlspec/adapters/spanner/type_converter.py +342 -0
  237. sqlspec/adapters/sqlite/__init__.py +19 -0
  238. sqlspec/adapters/sqlite/_typing.py +123 -0
  239. sqlspec/adapters/sqlite/adk/__init__.py +5 -0
  240. sqlspec/adapters/sqlite/adk/store.py +992 -0
  241. sqlspec/adapters/sqlite/config.py +240 -0
  242. sqlspec/adapters/sqlite/core.cp314-win_amd64.pyd +0 -0
  243. sqlspec/adapters/sqlite/core.py +357 -0
  244. sqlspec/adapters/sqlite/data_dictionary.py +198 -0
  245. sqlspec/adapters/sqlite/driver.py +527 -0
  246. sqlspec/adapters/sqlite/events/__init__.py +5 -0
  247. sqlspec/adapters/sqlite/events/store.py +20 -0
  248. sqlspec/adapters/sqlite/litestar/__init__.py +5 -0
  249. sqlspec/adapters/sqlite/litestar/store.py +316 -0
  250. sqlspec/adapters/sqlite/pool.cp314-win_amd64.pyd +0 -0
  251. sqlspec/adapters/sqlite/pool.py +237 -0
  252. sqlspec/adapters/sqlite/type_converter.cp314-win_amd64.pyd +0 -0
  253. sqlspec/adapters/sqlite/type_converter.py +114 -0
  254. sqlspec/base.py +832 -0
  255. sqlspec/builder/__init__.py +181 -0
  256. sqlspec/builder/_base.cp314-win_amd64.pyd +0 -0
  257. sqlspec/builder/_base.py +1071 -0
  258. sqlspec/builder/_column.cp314-win_amd64.pyd +0 -0
  259. sqlspec/builder/_column.py +521 -0
  260. sqlspec/builder/_ddl.cp314-win_amd64.pyd +0 -0
  261. sqlspec/builder/_ddl.py +1691 -0
  262. sqlspec/builder/_delete.cp314-win_amd64.pyd +0 -0
  263. sqlspec/builder/_delete.py +95 -0
  264. sqlspec/builder/_dml.cp314-win_amd64.pyd +0 -0
  265. sqlspec/builder/_dml.py +386 -0
  266. sqlspec/builder/_explain.cp314-win_amd64.pyd +0 -0
  267. sqlspec/builder/_explain.py +579 -0
  268. sqlspec/builder/_expression_wrappers.cp314-win_amd64.pyd +0 -0
  269. sqlspec/builder/_expression_wrappers.py +46 -0
  270. sqlspec/builder/_factory.cp314-win_amd64.pyd +0 -0
  271. sqlspec/builder/_factory.py +1884 -0
  272. sqlspec/builder/_insert.cp314-win_amd64.pyd +0 -0
  273. sqlspec/builder/_insert.py +405 -0
  274. sqlspec/builder/_join.cp314-win_amd64.pyd +0 -0
  275. sqlspec/builder/_join.py +489 -0
  276. sqlspec/builder/_merge.cp314-win_amd64.pyd +0 -0
  277. sqlspec/builder/_merge.py +823 -0
  278. sqlspec/builder/_parsing_utils.cp314-win_amd64.pyd +0 -0
  279. sqlspec/builder/_parsing_utils.py +295 -0
  280. sqlspec/builder/_select.cp314-win_amd64.pyd +0 -0
  281. sqlspec/builder/_select.py +1666 -0
  282. sqlspec/builder/_temporal.cp314-win_amd64.pyd +0 -0
  283. sqlspec/builder/_temporal.py +167 -0
  284. sqlspec/builder/_update.cp314-win_amd64.pyd +0 -0
  285. sqlspec/builder/_update.py +173 -0
  286. sqlspec/builder/_vector_distance.cp314-win_amd64.pyd +0 -0
  287. sqlspec/builder/_vector_distance.py +330 -0
  288. sqlspec/cli.py +1095 -0
  289. sqlspec/config.py +2383 -0
  290. sqlspec/core/__init__.py +372 -0
  291. sqlspec/core/_correlation.cp314-win_amd64.pyd +0 -0
  292. sqlspec/core/_correlation.py +176 -0
  293. sqlspec/core/_pagination.py +42 -0
  294. sqlspec/core/_pool.cp314-win_amd64.pyd +0 -0
  295. sqlspec/core/_pool.py +76 -0
  296. sqlspec/core/cache.cp314-win_amd64.pyd +0 -0
  297. sqlspec/core/cache.py +1085 -0
  298. sqlspec/core/compiler.cp314-win_amd64.pyd +0 -0
  299. sqlspec/core/compiler.py +1090 -0
  300. sqlspec/core/config_runtime.cp314-win_amd64.pyd +0 -0
  301. sqlspec/core/config_runtime.py +174 -0
  302. sqlspec/core/explain.cp314-win_amd64.pyd +0 -0
  303. sqlspec/core/explain.py +275 -0
  304. sqlspec/core/filters.cp314-win_amd64.pyd +0 -0
  305. sqlspec/core/filters.py +969 -0
  306. sqlspec/core/hashing.cp314-win_amd64.pyd +0 -0
  307. sqlspec/core/hashing.py +266 -0
  308. sqlspec/core/metrics.cp314-win_amd64.pyd +0 -0
  309. sqlspec/core/metrics.py +83 -0
  310. sqlspec/core/parameters/__init__.py +72 -0
  311. sqlspec/core/parameters/_alignment.cp314-win_amd64.pyd +0 -0
  312. sqlspec/core/parameters/_alignment.py +283 -0
  313. sqlspec/core/parameters/_converter.cp314-win_amd64.pyd +0 -0
  314. sqlspec/core/parameters/_converter.py +554 -0
  315. sqlspec/core/parameters/_processor.cp314-win_amd64.pyd +0 -0
  316. sqlspec/core/parameters/_processor.py +1182 -0
  317. sqlspec/core/parameters/_registry.cp314-win_amd64.pyd +0 -0
  318. sqlspec/core/parameters/_registry.py +206 -0
  319. sqlspec/core/parameters/_transformers.cp314-win_amd64.pyd +0 -0
  320. sqlspec/core/parameters/_transformers.py +324 -0
  321. sqlspec/core/parameters/_types.cp314-win_amd64.pyd +0 -0
  322. sqlspec/core/parameters/_types.py +536 -0
  323. sqlspec/core/parameters/_validator.cp314-win_amd64.pyd +0 -0
  324. sqlspec/core/parameters/_validator.py +171 -0
  325. sqlspec/core/pipeline.cp314-win_amd64.pyd +0 -0
  326. sqlspec/core/pipeline.py +333 -0
  327. sqlspec/core/query_modifiers.cp314-win_amd64.pyd +0 -0
  328. sqlspec/core/query_modifiers.py +508 -0
  329. sqlspec/core/result/__init__.py +25 -0
  330. sqlspec/core/result/_base.cp314-win_amd64.pyd +0 -0
  331. sqlspec/core/result/_base.py +1232 -0
  332. sqlspec/core/result/_io.cp314-win_amd64.pyd +0 -0
  333. sqlspec/core/result/_io.py +28 -0
  334. sqlspec/core/splitter.cp314-win_amd64.pyd +0 -0
  335. sqlspec/core/splitter.py +1021 -0
  336. sqlspec/core/sqlcommenter.cp314-win_amd64.pyd +0 -0
  337. sqlspec/core/sqlcommenter.py +249 -0
  338. sqlspec/core/stack.cp314-win_amd64.pyd +0 -0
  339. sqlspec/core/stack.py +163 -0
  340. sqlspec/core/statement.cp314-win_amd64.pyd +0 -0
  341. sqlspec/core/statement.py +1865 -0
  342. sqlspec/core/type_converter.cp314-win_amd64.pyd +0 -0
  343. sqlspec/core/type_converter.py +340 -0
  344. sqlspec/data_dictionary/__init__.py +22 -0
  345. sqlspec/data_dictionary/_loader.cp314-win_amd64.pyd +0 -0
  346. sqlspec/data_dictionary/_loader.py +138 -0
  347. sqlspec/data_dictionary/_registry.cp314-win_amd64.pyd +0 -0
  348. sqlspec/data_dictionary/_registry.py +74 -0
  349. sqlspec/data_dictionary/_types.cp314-win_amd64.pyd +0 -0
  350. sqlspec/data_dictionary/_types.py +121 -0
  351. sqlspec/data_dictionary/dialects/__init__.py +21 -0
  352. sqlspec/data_dictionary/dialects/bigquery.cp314-win_amd64.pyd +0 -0
  353. sqlspec/data_dictionary/dialects/bigquery.py +81 -0
  354. sqlspec/data_dictionary/dialects/cockroachdb.cp314-win_amd64.pyd +0 -0
  355. sqlspec/data_dictionary/dialects/cockroachdb.py +54 -0
  356. sqlspec/data_dictionary/dialects/duckdb.cp314-win_amd64.pyd +0 -0
  357. sqlspec/data_dictionary/dialects/duckdb.py +47 -0
  358. sqlspec/data_dictionary/dialects/mysql.cp314-win_amd64.pyd +0 -0
  359. sqlspec/data_dictionary/dialects/mysql.py +53 -0
  360. sqlspec/data_dictionary/dialects/oracle.cp314-win_amd64.pyd +0 -0
  361. sqlspec/data_dictionary/dialects/oracle.py +197 -0
  362. sqlspec/data_dictionary/dialects/postgres.cp314-win_amd64.pyd +0 -0
  363. sqlspec/data_dictionary/dialects/postgres.py +69 -0
  364. sqlspec/data_dictionary/dialects/spanner.cp314-win_amd64.pyd +0 -0
  365. sqlspec/data_dictionary/dialects/spanner.py +37 -0
  366. sqlspec/data_dictionary/dialects/sqlite.cp314-win_amd64.pyd +0 -0
  367. sqlspec/data_dictionary/dialects/sqlite.py +59 -0
  368. sqlspec/data_dictionary/sql/.gitkeep +0 -0
  369. sqlspec/data_dictionary/sql/bigquery/columns.sql +23 -0
  370. sqlspec/data_dictionary/sql/bigquery/foreign_keys.sql +34 -0
  371. sqlspec/data_dictionary/sql/bigquery/indexes.sql +19 -0
  372. sqlspec/data_dictionary/sql/bigquery/tables.sql +33 -0
  373. sqlspec/data_dictionary/sql/bigquery/version.sql +3 -0
  374. sqlspec/data_dictionary/sql/cockroachdb/columns.sql +34 -0
  375. sqlspec/data_dictionary/sql/cockroachdb/foreign_keys.sql +40 -0
  376. sqlspec/data_dictionary/sql/cockroachdb/indexes.sql +32 -0
  377. sqlspec/data_dictionary/sql/cockroachdb/tables.sql +44 -0
  378. sqlspec/data_dictionary/sql/cockroachdb/version.sql +3 -0
  379. sqlspec/data_dictionary/sql/duckdb/columns.sql +23 -0
  380. sqlspec/data_dictionary/sql/duckdb/foreign_keys.sql +36 -0
  381. sqlspec/data_dictionary/sql/duckdb/indexes.sql +19 -0
  382. sqlspec/data_dictionary/sql/duckdb/tables.sql +38 -0
  383. sqlspec/data_dictionary/sql/duckdb/version.sql +3 -0
  384. sqlspec/data_dictionary/sql/mysql/columns.sql +23 -0
  385. sqlspec/data_dictionary/sql/mysql/foreign_keys.sql +28 -0
  386. sqlspec/data_dictionary/sql/mysql/indexes.sql +26 -0
  387. sqlspec/data_dictionary/sql/mysql/tables.sql +33 -0
  388. sqlspec/data_dictionary/sql/mysql/version.sql +3 -0
  389. sqlspec/data_dictionary/sql/oracle/columns.sql +23 -0
  390. sqlspec/data_dictionary/sql/oracle/foreign_keys.sql +48 -0
  391. sqlspec/data_dictionary/sql/oracle/indexes.sql +44 -0
  392. sqlspec/data_dictionary/sql/oracle/tables.sql +25 -0
  393. sqlspec/data_dictionary/sql/oracle/version.sql +20 -0
  394. sqlspec/data_dictionary/sql/postgres/columns.sql +34 -0
  395. sqlspec/data_dictionary/sql/postgres/foreign_keys.sql +40 -0
  396. sqlspec/data_dictionary/sql/postgres/indexes.sql +56 -0
  397. sqlspec/data_dictionary/sql/postgres/tables.sql +44 -0
  398. sqlspec/data_dictionary/sql/postgres/version.sql +3 -0
  399. sqlspec/data_dictionary/sql/spanner/columns.sql +23 -0
  400. sqlspec/data_dictionary/sql/spanner/foreign_keys.sql +70 -0
  401. sqlspec/data_dictionary/sql/spanner/indexes.sql +30 -0
  402. sqlspec/data_dictionary/sql/spanner/tables.sql +9 -0
  403. sqlspec/data_dictionary/sql/spanner/version.sql +3 -0
  404. sqlspec/data_dictionary/sql/sqlite/columns.sql +23 -0
  405. sqlspec/data_dictionary/sql/sqlite/foreign_keys.sql +22 -0
  406. sqlspec/data_dictionary/sql/sqlite/indexes.sql +7 -0
  407. sqlspec/data_dictionary/sql/sqlite/tables.sql +28 -0
  408. sqlspec/data_dictionary/sql/sqlite/version.sql +3 -0
  409. sqlspec/dialects/__init__.py +22 -0
  410. sqlspec/dialects/_compat.cp314-win_amd64.pyd +0 -0
  411. sqlspec/dialects/_compat.py +14 -0
  412. sqlspec/dialects/postgres/__init__.py +9 -0
  413. sqlspec/dialects/postgres/_generators.cp314-win_amd64.pyd +0 -0
  414. sqlspec/dialects/postgres/_generators.py +57 -0
  415. sqlspec/dialects/postgres/_operators.cp314-win_amd64.pyd +0 -0
  416. sqlspec/dialects/postgres/_operators.py +81 -0
  417. sqlspec/dialects/postgres/_paradedb.py +50 -0
  418. sqlspec/dialects/postgres/_pgvector.py +36 -0
  419. sqlspec/dialects/spanner/__init__.py +6 -0
  420. sqlspec/dialects/spanner/_generators.cp314-win_amd64.pyd +0 -0
  421. sqlspec/dialects/spanner/_generators.py +206 -0
  422. sqlspec/dialects/spanner/_spangres.py +77 -0
  423. sqlspec/dialects/spanner/_spanner.py +179 -0
  424. sqlspec/driver/__init__.py +49 -0
  425. sqlspec/driver/_async.cp314-win_amd64.pyd +0 -0
  426. sqlspec/driver/_async.py +1830 -0
  427. sqlspec/driver/_common.cp314-win_amd64.pyd +0 -0
  428. sqlspec/driver/_common.py +2292 -0
  429. sqlspec/driver/_exception_handler.cp314-win_amd64.pyd +0 -0
  430. sqlspec/driver/_exception_handler.py +108 -0
  431. sqlspec/driver/_query_cache.cp314-win_amd64.pyd +0 -0
  432. sqlspec/driver/_query_cache.py +96 -0
  433. sqlspec/driver/_sql_helpers.cp314-win_amd64.pyd +0 -0
  434. sqlspec/driver/_sql_helpers.py +139 -0
  435. sqlspec/driver/_storage_helpers.cp314-win_amd64.pyd +0 -0
  436. sqlspec/driver/_storage_helpers.py +153 -0
  437. sqlspec/driver/_sync.cp314-win_amd64.pyd +0 -0
  438. sqlspec/driver/_sync.py +1817 -0
  439. sqlspec/exceptions.cp314-win_amd64.pyd +0 -0
  440. sqlspec/exceptions.py +480 -0
  441. sqlspec/extensions/__init__.py +0 -0
  442. sqlspec/extensions/adk/__init__.py +84 -0
  443. sqlspec/extensions/adk/_config_utils.py +199 -0
  444. sqlspec/extensions/adk/_types.cp314-win_amd64.pyd +0 -0
  445. sqlspec/extensions/adk/_types.py +41 -0
  446. sqlspec/extensions/adk/artifact/__init__.py +57 -0
  447. sqlspec/extensions/adk/artifact/_types.cp314-win_amd64.pyd +0 -0
  448. sqlspec/extensions/adk/artifact/_types.py +32 -0
  449. sqlspec/extensions/adk/artifact/service.py +508 -0
  450. sqlspec/extensions/adk/artifact/store.py +361 -0
  451. sqlspec/extensions/adk/converters.py +212 -0
  452. sqlspec/extensions/adk/memory/__init__.py +69 -0
  453. sqlspec/extensions/adk/memory/_types.cp314-win_amd64.pyd +0 -0
  454. sqlspec/extensions/adk/memory/_types.py +30 -0
  455. sqlspec/extensions/adk/memory/converters.py +225 -0
  456. sqlspec/extensions/adk/memory/service.py +316 -0
  457. sqlspec/extensions/adk/memory/store.py +525 -0
  458. sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +184 -0
  459. sqlspec/extensions/adk/migrations/__init__.py +0 -0
  460. sqlspec/extensions/adk/service.py +279 -0
  461. sqlspec/extensions/adk/store.py +590 -0
  462. sqlspec/extensions/events/__init__.py +51 -0
  463. sqlspec/extensions/events/_channel.py +703 -0
  464. sqlspec/extensions/events/_hints.cp314-win_amd64.pyd +0 -0
  465. sqlspec/extensions/events/_hints.py +45 -0
  466. sqlspec/extensions/events/_models.py +23 -0
  467. sqlspec/extensions/events/_payload.cp314-win_amd64.pyd +0 -0
  468. sqlspec/extensions/events/_payload.py +69 -0
  469. sqlspec/extensions/events/_protocols.py +134 -0
  470. sqlspec/extensions/events/_queue.py +462 -0
  471. sqlspec/extensions/events/_store.py +209 -0
  472. sqlspec/extensions/events/migrations/0001_create_event_queue.py +59 -0
  473. sqlspec/extensions/events/migrations/__init__.py +3 -0
  474. sqlspec/extensions/fastapi/__init__.py +22 -0
  475. sqlspec/extensions/fastapi/extension.py +391 -0
  476. sqlspec/extensions/fastapi/providers.cp314-win_amd64.pyd +0 -0
  477. sqlspec/extensions/fastapi/providers.py +712 -0
  478. sqlspec/extensions/flask/__init__.py +38 -0
  479. sqlspec/extensions/flask/_state.py +87 -0
  480. sqlspec/extensions/flask/_utils.py +71 -0
  481. sqlspec/extensions/flask/extension.py +539 -0
  482. sqlspec/extensions/litestar/__init__.py +31 -0
  483. sqlspec/extensions/litestar/_utils.py +52 -0
  484. sqlspec/extensions/litestar/channels.py +165 -0
  485. sqlspec/extensions/litestar/cli.py +102 -0
  486. sqlspec/extensions/litestar/config.py +90 -0
  487. sqlspec/extensions/litestar/handlers.py +316 -0
  488. sqlspec/extensions/litestar/migrations/0001_create_session_table.py +137 -0
  489. sqlspec/extensions/litestar/migrations/__init__.py +3 -0
  490. sqlspec/extensions/litestar/plugin.py +1066 -0
  491. sqlspec/extensions/litestar/providers.cp314-win_amd64.pyd +0 -0
  492. sqlspec/extensions/litestar/providers.py +784 -0
  493. sqlspec/extensions/litestar/store.py +298 -0
  494. sqlspec/extensions/otel/__init__.py +58 -0
  495. sqlspec/extensions/prometheus/__init__.py +113 -0
  496. sqlspec/extensions/sanic/__init__.py +19 -0
  497. sqlspec/extensions/sanic/_state.py +43 -0
  498. sqlspec/extensions/sanic/_utils.py +127 -0
  499. sqlspec/extensions/sanic/extension.py +647 -0
  500. sqlspec/extensions/starlette/__init__.py +22 -0
  501. sqlspec/extensions/starlette/_state.py +42 -0
  502. sqlspec/extensions/starlette/_utils.py +96 -0
  503. sqlspec/extensions/starlette/extension.py +374 -0
  504. sqlspec/extensions/starlette/middleware.py +281 -0
  505. sqlspec/loader.cp314-win_amd64.pyd +0 -0
  506. sqlspec/loader.py +727 -0
  507. sqlspec/migrations/__init__.py +39 -0
  508. sqlspec/migrations/base.cp314-win_amd64.pyd +0 -0
  509. sqlspec/migrations/base.py +862 -0
  510. sqlspec/migrations/commands.py +2151 -0
  511. sqlspec/migrations/context.cp314-win_amd64.pyd +0 -0
  512. sqlspec/migrations/context.py +157 -0
  513. sqlspec/migrations/fix.cp314-win_amd64.pyd +0 -0
  514. sqlspec/migrations/fix.py +204 -0
  515. sqlspec/migrations/loaders.cp314-win_amd64.pyd +0 -0
  516. sqlspec/migrations/loaders.py +443 -0
  517. sqlspec/migrations/runner.cp314-win_amd64.pyd +0 -0
  518. sqlspec/migrations/runner.py +1195 -0
  519. sqlspec/migrations/squash.cp314-win_amd64.pyd +0 -0
  520. sqlspec/migrations/squash.py +490 -0
  521. sqlspec/migrations/templates.cp314-win_amd64.pyd +0 -0
  522. sqlspec/migrations/templates.py +234 -0
  523. sqlspec/migrations/tracker.cp314-win_amd64.pyd +0 -0
  524. sqlspec/migrations/tracker.py +792 -0
  525. sqlspec/migrations/utils.cp314-win_amd64.pyd +0 -0
  526. sqlspec/migrations/utils.py +256 -0
  527. sqlspec/migrations/validation.cp314-win_amd64.pyd +0 -0
  528. sqlspec/migrations/validation.py +359 -0
  529. sqlspec/migrations/version.cp314-win_amd64.pyd +0 -0
  530. sqlspec/migrations/version.py +446 -0
  531. sqlspec/observability/__init__.py +57 -0
  532. sqlspec/observability/_common.cp314-win_amd64.pyd +0 -0
  533. sqlspec/observability/_common.py +77 -0
  534. sqlspec/observability/_config.cp314-win_amd64.pyd +0 -0
  535. sqlspec/observability/_config.py +364 -0
  536. sqlspec/observability/_diagnostics.cp314-win_amd64.pyd +0 -0
  537. sqlspec/observability/_diagnostics.py +74 -0
  538. sqlspec/observability/_dispatcher.cp314-win_amd64.pyd +0 -0
  539. sqlspec/observability/_dispatcher.py +200 -0
  540. sqlspec/observability/_formatters/__init__.py +13 -0
  541. sqlspec/observability/_formatters/_aws.cp314-win_amd64.pyd +0 -0
  542. sqlspec/observability/_formatters/_aws.py +102 -0
  543. sqlspec/observability/_formatters/_azure.cp314-win_amd64.pyd +0 -0
  544. sqlspec/observability/_formatters/_azure.py +96 -0
  545. sqlspec/observability/_formatters/_base.cp314-win_amd64.pyd +0 -0
  546. sqlspec/observability/_formatters/_base.py +57 -0
  547. sqlspec/observability/_formatters/_gcp.cp314-win_amd64.pyd +0 -0
  548. sqlspec/observability/_formatters/_gcp.py +131 -0
  549. sqlspec/observability/_formatting.py +58 -0
  550. sqlspec/observability/_observer.cp314-win_amd64.pyd +0 -0
  551. sqlspec/observability/_observer.py +361 -0
  552. sqlspec/observability/_runtime.cp314-win_amd64.pyd +0 -0
  553. sqlspec/observability/_runtime.py +461 -0
  554. sqlspec/observability/_sampling.cp314-win_amd64.pyd +0 -0
  555. sqlspec/observability/_sampling.py +188 -0
  556. sqlspec/observability/_spans.cp314-win_amd64.pyd +0 -0
  557. sqlspec/observability/_spans.py +161 -0
  558. sqlspec/protocols.py +955 -0
  559. sqlspec/py.typed +0 -0
  560. sqlspec/service.py +433 -0
  561. sqlspec/storage/__init__.py +48 -0
  562. sqlspec/storage/_arrow_payload.py +68 -0
  563. sqlspec/storage/_paths.cp314-win_amd64.pyd +0 -0
  564. sqlspec/storage/_paths.py +58 -0
  565. sqlspec/storage/_utils.py +46 -0
  566. sqlspec/storage/backends/__init__.py +1 -0
  567. sqlspec/storage/backends/base.cp314-win_amd64.pyd +0 -0
  568. sqlspec/storage/backends/base.py +374 -0
  569. sqlspec/storage/backends/fsspec.py +574 -0
  570. sqlspec/storage/backends/local.py +468 -0
  571. sqlspec/storage/backends/obstore.py +956 -0
  572. sqlspec/storage/errors.cp314-win_amd64.pyd +0 -0
  573. sqlspec/storage/errors.py +102 -0
  574. sqlspec/storage/pipeline.cp314-win_amd64.pyd +0 -0
  575. sqlspec/storage/pipeline.py +628 -0
  576. sqlspec/storage/registry.cp314-win_amd64.pyd +0 -0
  577. sqlspec/storage/registry.py +329 -0
  578. sqlspec/typing.py +405 -0
  579. sqlspec/utils/__init__.py +7 -0
  580. sqlspec/utils/arrow_helpers.py +384 -0
  581. sqlspec/utils/config_tools.cp314-win_amd64.pyd +0 -0
  582. sqlspec/utils/config_tools.py +314 -0
  583. sqlspec/utils/correlation.cp314-win_amd64.pyd +0 -0
  584. sqlspec/utils/correlation.py +134 -0
  585. sqlspec/utils/deprecation.cp314-win_amd64.pyd +0 -0
  586. sqlspec/utils/deprecation.py +157 -0
  587. sqlspec/utils/dispatch.cp314-win_amd64.pyd +0 -0
  588. sqlspec/utils/dispatch.py +101 -0
  589. sqlspec/utils/fixtures.cp314-win_amd64.pyd +0 -0
  590. sqlspec/utils/fixtures.py +260 -0
  591. sqlspec/utils/logging.cp314-win_amd64.pyd +0 -0
  592. sqlspec/utils/logging.py +251 -0
  593. sqlspec/utils/module_loader.py +306 -0
  594. sqlspec/utils/portal.cp314-win_amd64.pyd +0 -0
  595. sqlspec/utils/portal.py +377 -0
  596. sqlspec/utils/schema.cp314-win_amd64.pyd +0 -0
  597. sqlspec/utils/schema.py +1040 -0
  598. sqlspec/utils/serializers/__init__.py +30 -0
  599. sqlspec/utils/serializers/_json.cp314-win_amd64.pyd +0 -0
  600. sqlspec/utils/serializers/_json.py +415 -0
  601. sqlspec/utils/serializers/_numpy.cp314-win_amd64.pyd +0 -0
  602. sqlspec/utils/serializers/_numpy.py +65 -0
  603. sqlspec/utils/serializers/_schema.cp314-win_amd64.pyd +0 -0
  604. sqlspec/utils/serializers/_schema.py +285 -0
  605. sqlspec/utils/singleton.cp314-win_amd64.pyd +0 -0
  606. sqlspec/utils/singleton.py +41 -0
  607. sqlspec/utils/sync_tools.cp314-win_amd64.pyd +0 -0
  608. sqlspec/utils/sync_tools.py +316 -0
  609. sqlspec/utils/text.cp314-win_amd64.pyd +0 -0
  610. sqlspec/utils/text.py +109 -0
  611. sqlspec/utils/type_converters.cp314-win_amd64.pyd +0 -0
  612. sqlspec/utils/type_converters.py +216 -0
  613. sqlspec/utils/type_guards.cp314-win_amd64.pyd +0 -0
  614. sqlspec/utils/type_guards.py +1508 -0
  615. sqlspec/utils/uuids.cp314-win_amd64.pyd +0 -0
  616. sqlspec/utils/uuids.py +241 -0
  617. sqlspec-0.47.0.dist-info/METADATA +202 -0
  618. sqlspec-0.47.0.dist-info/RECORD +621 -0
  619. sqlspec-0.47.0.dist-info/WHEEL +4 -0
  620. sqlspec-0.47.0.dist-info/entry_points.txt +6 -0
  621. sqlspec-0.47.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,534 @@
1
+ """ADBC driver implementation for Arrow Database Connectivity.
2
+
3
+ Provides database connectivity through ADBC with support for multiple
4
+ database dialects, parameter style conversion, and transaction management.
5
+ """
6
+
7
+ from typing import TYPE_CHECKING, Any, Literal, cast
8
+
9
+ from sqlspec.adapters.adbc._typing import AdbcCursor, AdbcSessionContext
10
+ from sqlspec.adapters.adbc.core import (
11
+ collect_rows,
12
+ create_mapped_exception,
13
+ detect_dialect,
14
+ driver_profile,
15
+ get_statement_config,
16
+ handle_postgres_rollback,
17
+ is_postgres_dialect,
18
+ normalize_postgres_empty_parameters,
19
+ normalize_script_rowcount,
20
+ prepare_postgres_parameters,
21
+ resolve_column_names,
22
+ resolve_dialect_name,
23
+ resolve_many_rowcount,
24
+ resolve_parameter_casts,
25
+ resolve_rowcount,
26
+ )
27
+ from sqlspec.adapters.adbc.data_dictionary import AdbcDataDictionary
28
+ from sqlspec.core import SQL, StatementConfig, build_arrow_result_from_table, get_cache_config, register_driver_profile
29
+ from sqlspec.driver import BaseSyncExceptionHandler, SyncDriverAdapterBase
30
+ from sqlspec.exceptions import DatabaseConnectionError, SQLSpecError
31
+ from sqlspec.utils.logging import get_logger
32
+ from sqlspec.utils.module_loader import ensure_pyarrow
33
+ from sqlspec.utils.serializers import to_json
34
+
35
+ if TYPE_CHECKING:
36
+ from collections.abc import Callable
37
+
38
+ from sqlspec.adapters.adbc._typing import AdbcConnection, AdbcRawCursor
39
+ from sqlspec.builder import QueryBuilder
40
+ from sqlspec.core import ArrowResult, Statement, StatementFilter
41
+ from sqlspec.driver import ExecutionResult
42
+ from sqlspec.storage import StorageBridgeJob, StorageDestination, StorageFormat, StorageTelemetry
43
+ from sqlspec.typing import ArrowReturnFormat, StatementParameters
44
+
45
+ __all__ = ("AdbcCursor", "AdbcDriver", "AdbcExceptionHandler", "AdbcSessionContext")
46
+
47
+ logger = get_logger("sqlspec.adapters.adbc")
48
+
49
+
50
+ class AdbcExceptionHandler(BaseSyncExceptionHandler):
51
+ """Context manager for handling ADBC database exceptions.
52
+
53
+ ADBC propagates underlying database errors. Exception mapping
54
+ depends on the specific ADBC driver being used.
55
+
56
+ Uses deferred exception pattern for mypyc compatibility: exceptions
57
+ are stored in pending_exception rather than raised from __exit__
58
+ to avoid ABI boundary violations with compiled code.
59
+ """
60
+
61
+ __slots__ = ()
62
+
63
+ def _handle_exception(self, exc_type: "type[BaseException] | None", exc_val: "BaseException") -> bool:
64
+ if exc_type is None:
65
+ return False
66
+ self.pending_exception = create_mapped_exception(exc_val)
67
+ return True
68
+
69
+
70
+ class AdbcDriver(SyncDriverAdapterBase):
71
+ """ADBC driver for Arrow Database Connectivity.
72
+
73
+ Provides database connectivity through ADBC with support for multiple
74
+ database dialects, parameter style conversion, and transaction management.
75
+ """
76
+
77
+ __slots__ = (
78
+ "_column_name_cache",
79
+ "_data_dictionary",
80
+ "_detected_dialect",
81
+ "_dialect_name",
82
+ "_is_postgres",
83
+ "_json_serializer",
84
+ "dialect",
85
+ )
86
+
87
+ def __init__(
88
+ self,
89
+ connection: "AdbcConnection",
90
+ statement_config: "StatementConfig | None" = None,
91
+ driver_features: "dict[str, Any] | None" = None,
92
+ ) -> None:
93
+ self._detected_dialect = detect_dialect(connection, logger)
94
+
95
+ if statement_config is None:
96
+ base_config = get_statement_config(self._detected_dialect)
97
+ statement_config = base_config.replace(enable_caching=get_cache_config().compiled_cache_enabled)
98
+
99
+ super().__init__(connection=connection, statement_config=statement_config, driver_features=driver_features)
100
+ self.dialect = statement_config.dialect
101
+ self._dialect_name = resolve_dialect_name(self.dialect)
102
+ self._is_postgres = is_postgres_dialect(self._dialect_name)
103
+ self._json_serializer = cast("Callable[[Any], str]", self.driver_features.get("json_serializer", to_json))
104
+ self._data_dictionary: AdbcDataDictionary | None = None
105
+ self._column_name_cache: dict[int, tuple[Any, list[str]]] = {}
106
+
107
+ # ─────────────────────────────────────────────────────────────────────────────
108
+ # CORE DISPATCH METHODS
109
+ # ─────────────────────────────────────────────────────────────────────────────
110
+
111
+ def dispatch_execute(self, cursor: "AdbcRawCursor", statement: SQL) -> "ExecutionResult":
112
+ """Execute single SQL statement.
113
+
114
+ Args:
115
+ cursor: Database cursor
116
+ statement: SQL statement to execute
117
+
118
+ Returns:
119
+ Execution result with data or row count
120
+ """
121
+ sql, prepared_parameters = self._get_compiled_sql(statement, self.statement_config)
122
+ parameter_casts = resolve_parameter_casts(statement) if self._is_postgres else {}
123
+
124
+ try:
125
+ if self._is_postgres and parameter_casts:
126
+ execute_parameters = prepare_postgres_parameters(
127
+ prepared_parameters,
128
+ parameter_casts,
129
+ self.statement_config,
130
+ dialect=self._dialect_name,
131
+ json_serializer=self._json_serializer,
132
+ )
133
+ else:
134
+ execute_parameters = normalize_postgres_empty_parameters(self._dialect_name, prepared_parameters)
135
+ cursor.execute(sql, parameters=execute_parameters)
136
+
137
+ except Exception:
138
+ handle_postgres_rollback(self._dialect_name, cursor, logger)
139
+ raise
140
+
141
+ is_select_like = statement.returns_rows() or self._should_force_select(statement, cursor)
142
+
143
+ if is_select_like:
144
+ fetched_data = cursor.fetchall()
145
+ column_names = self._resolve_column_names(cursor.description)
146
+ data, column_names = collect_rows(
147
+ cast("list[Any] | None", fetched_data), cursor.description, column_names=column_names
148
+ )
149
+ row_format = "dict" if data and isinstance(data[0], dict) else "tuple"
150
+ return self.create_execution_result(
151
+ cursor,
152
+ selected_data=data,
153
+ column_names=column_names,
154
+ data_row_count=len(data),
155
+ is_select_result=True,
156
+ row_format=row_format,
157
+ )
158
+
159
+ row_count = resolve_rowcount(cursor)
160
+ return self.create_execution_result(cursor, rowcount_override=row_count)
161
+
162
+ def dispatch_execute_many(self, cursor: "AdbcRawCursor", statement: SQL) -> "ExecutionResult":
163
+ """Execute SQL with multiple parameter sets.
164
+
165
+ Args:
166
+ cursor: Database cursor
167
+ statement: SQL statement to execute
168
+
169
+ Returns:
170
+ Execution result with row counts
171
+ """
172
+ sql, prepared_parameters = self._get_compiled_sql(statement, self.statement_config)
173
+
174
+ try:
175
+ if not prepared_parameters:
176
+ cursor._rowcount = 0 # pyright: ignore[reportPrivateUsage]
177
+ row_count = 0
178
+ elif isinstance(prepared_parameters, (list, tuple)) and prepared_parameters:
179
+ parameter_count = len(prepared_parameters)
180
+ if self._is_postgres:
181
+ parameter_casts = resolve_parameter_casts(statement)
182
+ processed_params: list[Any] | tuple[Any, ...]
183
+ if parameter_casts:
184
+ processed_params = [
185
+ prepare_postgres_parameters(
186
+ param_set,
187
+ parameter_casts,
188
+ self.statement_config,
189
+ dialect=self._dialect_name,
190
+ json_serializer=self._json_serializer,
191
+ )
192
+ for param_set in prepared_parameters
193
+ ]
194
+ else:
195
+ processed_params = prepared_parameters
196
+ cursor.executemany(sql, processed_params)
197
+ row_count = resolve_many_rowcount(cursor, processed_params, fallback_count=parameter_count)
198
+ else:
199
+ cursor.executemany(sql, prepared_parameters)
200
+ row_count = resolve_many_rowcount(cursor, prepared_parameters, fallback_count=parameter_count)
201
+ else:
202
+ cursor.executemany(sql, prepared_parameters)
203
+ row_count = resolve_rowcount(cursor)
204
+
205
+ except Exception:
206
+ handle_postgres_rollback(self._dialect_name, cursor, logger)
207
+ raise
208
+
209
+ return self.create_execution_result(cursor, rowcount_override=row_count, is_many_result=True)
210
+
211
+ def dispatch_execute_script(self, cursor: "AdbcRawCursor", statement: "SQL") -> "ExecutionResult":
212
+ """Execute SQL script containing multiple statements.
213
+
214
+ Args:
215
+ cursor: Database cursor
216
+ statement: SQL script to execute
217
+
218
+ Returns:
219
+ Execution result with statement counts
220
+ """
221
+ prepared_parameters: Any | None = None
222
+ if statement.is_script:
223
+ sql = statement.raw_sql
224
+ else:
225
+ sql, prepared_parameters = self._get_compiled_sql(statement, self.statement_config)
226
+
227
+ statements = self.split_script_statements(sql, self.statement_config, strip_trailing_semicolon=True)
228
+
229
+ successful_count = 0
230
+ last_rowcount = 0
231
+ try:
232
+ for stmt in statements:
233
+ if prepared_parameters:
234
+ postgres_compatible_params = normalize_postgres_empty_parameters(
235
+ self._dialect_name, prepared_parameters
236
+ )
237
+ cursor.execute(stmt, parameters=postgres_compatible_params)
238
+ else:
239
+ cursor.execute(stmt)
240
+ successful_count += 1
241
+ last_rowcount = normalize_script_rowcount(last_rowcount, cursor)
242
+ except Exception:
243
+ handle_postgres_rollback(self._dialect_name, cursor, logger)
244
+ raise
245
+
246
+ return self.create_execution_result(
247
+ cursor,
248
+ statement_count=len(statements),
249
+ successful_statements=successful_count,
250
+ rowcount_override=last_rowcount,
251
+ is_script_result=True,
252
+ )
253
+
254
+ # ─────────────────────────────────────────────────────────────────────────────
255
+ # TRANSACTION MANAGEMENT
256
+ # ─────────────────────────────────────────────────────────────────────────────
257
+
258
+ def begin(self) -> None:
259
+ """Begin database transaction."""
260
+ try:
261
+ with self.with_cursor(self.connection) as cursor:
262
+ cursor.execute("BEGIN")
263
+ except Exception as e:
264
+ msg = f"Failed to begin transaction: {e}"
265
+ raise SQLSpecError(msg) from e
266
+
267
+ def commit(self) -> None:
268
+ """Commit database transaction."""
269
+ try:
270
+ with self.with_cursor(self.connection) as cursor:
271
+ cursor.execute("COMMIT")
272
+ except Exception as e:
273
+ msg = f"Failed to commit transaction: {e}"
274
+ raise SQLSpecError(msg) from e
275
+
276
+ def rollback(self) -> None:
277
+ """Rollback database transaction."""
278
+ try:
279
+ with self.with_cursor(self.connection) as cursor:
280
+ cursor.execute("ROLLBACK")
281
+ except Exception as e:
282
+ msg = f"Failed to rollback transaction: {e}"
283
+ raise SQLSpecError(msg) from e
284
+
285
+ def with_cursor(self, connection: "AdbcConnection") -> "AdbcCursor":
286
+ """Create context manager for cursor.
287
+
288
+ Args:
289
+ connection: Database connection
290
+
291
+ Returns:
292
+ Cursor context manager
293
+ """
294
+ return AdbcCursor(connection)
295
+
296
+ def handle_database_exceptions(self) -> "AdbcExceptionHandler":
297
+ """Handle database-specific exceptions and wrap them appropriately.
298
+
299
+ Returns:
300
+ Exception handler context manager
301
+ """
302
+ return AdbcExceptionHandler()
303
+
304
+ # ─────────────────────────────────────────────────────────────────────────────
305
+ # ARROW API METHODS
306
+ # ─────────────────────────────────────────────────────────────────────────────
307
+
308
+ def select_to_arrow(
309
+ self,
310
+ statement: "Statement | QueryBuilder",
311
+ /,
312
+ *parameters: "StatementParameters | StatementFilter",
313
+ statement_config: "StatementConfig | None" = None,
314
+ return_format: "ArrowReturnFormat" = "table",
315
+ native_only: bool = False,
316
+ batch_size: int | None = None,
317
+ arrow_schema: Any = None,
318
+ **kwargs: Any,
319
+ ) -> "ArrowResult":
320
+ """Execute query and return results as Apache Arrow (ADBC native path).
321
+
322
+ ADBC provides zero-copy Arrow support via cursor.fetch_arrow_table().
323
+ This is 5-10x faster than the conversion path for large datasets.
324
+
325
+ Args:
326
+ statement: SQL statement, string, or QueryBuilder
327
+ *parameters: Query parameters or filters
328
+ statement_config: Optional statement configuration override
329
+ return_format: "table" for pyarrow.Table (default), "batch" for RecordBatch,
330
+ "batches" for list of RecordBatch, "reader" for RecordBatchReader
331
+ native_only: Ignored for ADBC (always uses native path)
332
+ batch_size: Batch size hint (for future streaming implementation)
333
+ arrow_schema: Optional pyarrow.Schema for type casting
334
+ **kwargs: Additional keyword arguments
335
+
336
+ Returns:
337
+ ArrowResult with native Arrow data
338
+
339
+ Example:
340
+ >>> result = driver.select_to_arrow(
341
+ ... "SELECT * FROM users WHERE age > $1", 18
342
+ ... )
343
+ >>> df = result.to_pandas() # Fast zero-copy conversion
344
+ """
345
+ ensure_pyarrow()
346
+
347
+ # Prepare statement
348
+ config = statement_config or self.statement_config
349
+ prepared_statement = self.prepare_statement(statement, parameters, statement_config=config, kwargs=kwargs)
350
+
351
+ exc_handler = self.handle_database_exceptions()
352
+ arrow_result: ArrowResult | None = None
353
+
354
+ # Use ADBC cursor for native Arrow
355
+ with self.with_cursor(self.connection) as cursor, exc_handler:
356
+ if cursor is None:
357
+ msg = "Failed to create cursor"
358
+ raise DatabaseConnectionError(msg)
359
+
360
+ # Get compiled SQL and parameters
361
+ sql, driver_params = self._get_compiled_sql(prepared_statement, config)
362
+
363
+ # Execute query
364
+ cursor.execute(sql, driver_params or ())
365
+
366
+ # Fetch as Arrow table (zero-copy!)
367
+ arrow_table = cursor.fetch_arrow_table()
368
+
369
+ arrow_result = build_arrow_result_from_table(
370
+ prepared_statement,
371
+ arrow_table,
372
+ return_format=return_format,
373
+ batch_size=batch_size,
374
+ arrow_schema=arrow_schema,
375
+ )
376
+
377
+ if exc_handler.pending_exception is not None:
378
+ raise exc_handler.pending_exception from None
379
+
380
+ if arrow_result is None:
381
+ msg = "Unreachable"
382
+ raise RuntimeError(msg) # pragma: no cover
383
+
384
+ return arrow_result
385
+
386
+ # ─────────────────────────────────────────────────────────────────────────────
387
+ # STORAGE API METHODS
388
+ # ─────────────────────────────────────────────────────────────────────────────
389
+
390
+ def select_to_storage(
391
+ self,
392
+ statement: "Statement | QueryBuilder | SQL | str",
393
+ destination: "StorageDestination",
394
+ /,
395
+ *parameters: "StatementParameters | StatementFilter",
396
+ statement_config: "StatementConfig | None" = None,
397
+ partitioner: "dict[str, object] | None" = None,
398
+ format_hint: "StorageFormat | None" = None,
399
+ telemetry: "StorageTelemetry | None" = None,
400
+ **kwargs: Any,
401
+ ) -> "StorageBridgeJob":
402
+ """Stream query results to storage via the Arrow fast path."""
403
+
404
+ _ = kwargs
405
+ self._require_capability("arrow_export_enabled")
406
+ arrow_result = self.select_to_arrow(statement, *parameters, statement_config=statement_config, **kwargs)
407
+ sync_pipeline = self._storage_pipeline()
408
+ telemetry_payload = self._write_result_to_storage_sync(
409
+ arrow_result, destination, format_hint=format_hint, pipeline=sync_pipeline
410
+ )
411
+ self._attach_partition_telemetry(telemetry_payload, partitioner)
412
+ return self._create_storage_job(telemetry_payload, telemetry)
413
+
414
+ def load_from_arrow(
415
+ self,
416
+ table: str,
417
+ source: "ArrowResult | Any",
418
+ *,
419
+ partitioner: "dict[str, object] | None" = None,
420
+ overwrite: bool = False,
421
+ telemetry: "StorageTelemetry | None" = None,
422
+ ) -> "StorageBridgeJob":
423
+ """Ingest an Arrow payload directly through the ADBC cursor."""
424
+
425
+ self._require_capability("arrow_import_enabled")
426
+ arrow_table = self._coerce_arrow_table(source)
427
+ ingest_mode: Literal["append", "create", "replace", "create_append"]
428
+ ingest_mode = "replace" if overwrite else "create_append"
429
+ exc_handler = self.handle_database_exceptions()
430
+ with self.with_cursor(self.connection) as cursor, exc_handler:
431
+ cursor.adbc_ingest(table, arrow_table, mode=ingest_mode)
432
+
433
+ if exc_handler.pending_exception is not None:
434
+ raise exc_handler.pending_exception from None
435
+ telemetry_payload = self._build_ingest_telemetry(arrow_table)
436
+ telemetry_payload["destination"] = table
437
+ self._attach_partition_telemetry(telemetry_payload, partitioner)
438
+ return self._create_storage_job(telemetry_payload, telemetry)
439
+
440
+ def load_from_storage(
441
+ self,
442
+ table: str,
443
+ source: "StorageDestination",
444
+ *,
445
+ file_format: "StorageFormat",
446
+ partitioner: "dict[str, object] | None" = None,
447
+ overwrite: bool = False,
448
+ ) -> "StorageBridgeJob":
449
+ """Read an artifact from storage and ingest it via ADBC."""
450
+
451
+ arrow_table, inbound = self._read_arrow_from_storage_sync(source, file_format=file_format)
452
+ return self.load_from_arrow(table, arrow_table, partitioner=partitioner, overwrite=overwrite, telemetry=inbound)
453
+
454
+ # ─────────────────────────────────────────────────────────────────────────────
455
+ # UTILITY METHODS
456
+ # ─────────────────────────────────────────────────────────────────────────────
457
+
458
+ @property
459
+ def data_dictionary(self) -> "AdbcDataDictionary":
460
+ """Get the data dictionary for this driver.
461
+
462
+ Returns:
463
+ Data dictionary instance for metadata queries
464
+ """
465
+ if self._data_dictionary is None:
466
+ self._data_dictionary = AdbcDataDictionary()
467
+ return self._data_dictionary
468
+
469
+ # ─────────────────────────────────────────────────────────────────────────────
470
+ # PRIVATE/INTERNAL METHODS
471
+ # ─────────────────────────────────────────────────────────────────────────────
472
+
473
+ def collect_rows(self, cursor: "AdbcRawCursor", fetched: "list[Any]") -> "tuple[list[Any], list[str], int]":
474
+ """Collect ADBC rows for the direct execution path."""
475
+ column_names = self._resolve_column_names(cursor.description)
476
+ data, column_names = collect_rows(
477
+ cast("list[Any] | None", fetched), cursor.description, column_names=column_names
478
+ )
479
+ return data, column_names, len(data)
480
+
481
+ def resolve_rowcount(self, cursor: "AdbcRawCursor") -> int:
482
+ """Resolve rowcount from ADBC cursor for the direct execution path."""
483
+ return resolve_rowcount(cursor)
484
+
485
+ def _connection_in_transaction(self) -> bool:
486
+ """Check if connection is in transaction.
487
+
488
+ ADBC uses explicit BEGIN and does not expose reliable transaction state.
489
+
490
+ Returns:
491
+ False - ADBC requires explicit transaction management.
492
+ """
493
+ return False
494
+
495
+ def _resolve_column_names(self, description: Any) -> list[str]:
496
+ return resolve_column_names(description, self._column_name_cache)
497
+
498
+ def prepare_driver_parameters(
499
+ self,
500
+ parameters: Any,
501
+ statement_config: "StatementConfig",
502
+ is_many: bool = False,
503
+ prepared_statement: Any | None = None,
504
+ ) -> Any:
505
+ """Prepare parameters with cast-aware type coercion for ADBC.
506
+
507
+ For PostgreSQL, applies cast-aware parameter processing using metadata from the compiled statement.
508
+ This allows proper handling of JSONB casts and other type conversions.
509
+ Respects driver_features['enable_cast_detection'] configuration.
510
+
511
+ Args:
512
+ parameters: Parameters in any format
513
+ statement_config: Statement configuration
514
+ is_many: Whether this is for execute_many operation
515
+ prepared_statement: Prepared statement containing the original SQL statement
516
+
517
+ Returns:
518
+ Parameters with cast-aware type coercion applied
519
+ """
520
+ enable_cast_detection = self.driver_features.get("enable_cast_detection", True)
521
+ if enable_cast_detection and prepared_statement and self._is_postgres and not is_many:
522
+ parameter_casts = resolve_parameter_casts(prepared_statement)
523
+ return prepare_postgres_parameters(
524
+ parameters,
525
+ parameter_casts,
526
+ statement_config,
527
+ dialect=self._dialect_name,
528
+ json_serializer=self._json_serializer,
529
+ )
530
+
531
+ return super().prepare_driver_parameters(parameters, statement_config, is_many, prepared_statement)
532
+
533
+
534
+ register_driver_profile("adbc", driver_profile)
@@ -0,0 +1,5 @@
1
+ """Events helpers for adbc adapter."""
2
+
3
+ from sqlspec.adapters.adbc.events.store import AdbcEventQueueStore
4
+
5
+ __all__ = ("AdbcEventQueueStore",)