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