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,202 @@
1
+ """SQLite-specific data dictionary for metadata queries."""
2
+
3
+ from typing import TYPE_CHECKING, ClassVar
4
+
5
+ from mypy_extensions import mypyc_attr
6
+
7
+ from sqlspec.adapters.sqlite.core import format_identifier
8
+ from sqlspec.data_dictionary import get_dialect_config
9
+ from sqlspec.driver import SyncDataDictionaryBase
10
+ from sqlspec.typing import ColumnMetadata, ForeignKeyMetadata, IndexMetadata, TableMetadata, VersionInfo
11
+
12
+ __all__ = ("SqliteDataDictionary",)
13
+
14
+ if TYPE_CHECKING:
15
+ from sqlspec.adapters.sqlite.driver import SqliteDriver
16
+
17
+
18
+ @mypyc_attr(allow_interpreted_subclasses=True, native_class=False)
19
+ class SqliteDataDictionary(SyncDataDictionaryBase):
20
+ """SQLite-specific sync data dictionary."""
21
+
22
+ dialect: ClassVar[str] = "sqlite"
23
+
24
+ def __init__(self) -> None:
25
+ super().__init__()
26
+
27
+ def resolve_schema(self, schema: "str | None") -> "str | None":
28
+ """Return a schema name using dialect defaults when missing."""
29
+ if schema is not None:
30
+ return schema
31
+ return get_dialect_config(type(self).dialect).default_schema
32
+
33
+ def get_version(self, driver: "SqliteDriver") -> "VersionInfo | None":
34
+ """Get SQLite database version information.
35
+
36
+ Args:
37
+ driver: Sync database driver instance.
38
+
39
+ Returns:
40
+ SQLite version information or None if detection fails.
41
+
42
+ """
43
+ driver_id = id(driver)
44
+ # Inline cache check to avoid cross-module method call that causes mypyc segfault
45
+ if driver_id in self._version_fetch_attempted:
46
+ return self._version_cache.get(driver_id)
47
+ # Not cached, fetch from database
48
+
49
+ version_value = driver.select_value_or_none(self.get_query("version"))
50
+ if not version_value:
51
+ self._log_version_unavailable(type(self).dialect, "missing")
52
+ self.cache_version(driver_id, None)
53
+ return None
54
+
55
+ config = get_dialect_config(type(self).dialect)
56
+ version_info = self.parse_version_with_pattern(config.version_pattern, str(version_value))
57
+ if version_info is None:
58
+ self._log_version_unavailable(type(self).dialect, "parse_failed")
59
+ self.cache_version(driver_id, None)
60
+ return None
61
+
62
+ self._log_version_detected(type(self).dialect, version_info)
63
+ self.cache_version(driver_id, version_info)
64
+ return version_info
65
+
66
+ def get_feature_flag(self, driver: "SqliteDriver", feature: str) -> bool:
67
+ """Check if SQLite database supports a specific feature.
68
+
69
+ Args:
70
+ driver: Sync database driver instance.
71
+ feature: Feature name to check.
72
+
73
+ Returns:
74
+ True if feature is supported, False otherwise.
75
+
76
+ """
77
+ version_info = self.get_version(driver)
78
+ return self.resolve_feature_flag(feature, version_info)
79
+
80
+ def get_optimal_type(self, driver: "SqliteDriver", type_category: str) -> str:
81
+ """Get optimal SQLite type for a category.
82
+
83
+ Args:
84
+ driver: Sync database driver instance.
85
+ type_category: Type category.
86
+
87
+ Returns:
88
+ SQLite-specific type name.
89
+
90
+ """
91
+ config = get_dialect_config(type(self).dialect)
92
+ version_info = self.get_version(driver)
93
+
94
+ if type_category == "json":
95
+ json_version = config.get_feature_version("supports_json")
96
+ if version_info and json_version and version_info >= json_version:
97
+ return "JSON"
98
+ return "TEXT"
99
+
100
+ return config.get_optimal_type(type_category)
101
+
102
+ def list_available_features(self) -> "list[str]":
103
+ """List available feature flags for this dialect."""
104
+ config = get_dialect_config(type(self).dialect)
105
+ features = set(config.feature_flags.keys()) | set(config.feature_versions.keys())
106
+ return sorted(features)
107
+
108
+ def get_tables(self, driver: "SqliteDriver", schema: "str | None" = None) -> "list[TableMetadata]":
109
+ """Get tables sorted by topological dependency order using SQLite catalog."""
110
+ schema_name = self.resolve_schema(schema)
111
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="tables")
112
+ schema_prefix = f"{format_identifier(schema_name)}." if schema_name else ""
113
+ query_text = self.get_query_text("tables_by_schema").format(schema_prefix=schema_prefix)
114
+ return driver.select(query_text, schema_type=TableMetadata)
115
+
116
+ def get_columns(
117
+ self, driver: "SqliteDriver", table: "str | None" = None, schema: "str | None" = None
118
+ ) -> "list[ColumnMetadata]":
119
+ """Get column information for a table or schema."""
120
+ schema_name = self.resolve_schema(schema)
121
+ schema_prefix = f"{format_identifier(schema_name)}." if schema_name else ""
122
+ if table is None:
123
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="columns")
124
+ query_text = self.get_query_text("columns_by_schema").format(schema_prefix=schema_prefix)
125
+ return driver.select(query_text, schema_type=ColumnMetadata)
126
+
127
+ assert table is not None
128
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="columns")
129
+ table_name = table
130
+ table_identifier = f"{schema_name}.{table_name}" if schema_name else table_name
131
+ query_text = self.get_query_text("columns_by_table").format(table_name=format_identifier(table_identifier))
132
+ return driver.select(query_text, schema_type=ColumnMetadata)
133
+
134
+ def get_indexes(
135
+ self, driver: "SqliteDriver", table: "str | None" = None, schema: "str | None" = None
136
+ ) -> "list[IndexMetadata]":
137
+ """Get index metadata for a table or schema."""
138
+ schema_name = self.resolve_schema(schema)
139
+ indexes: list[IndexMetadata] = []
140
+ if table is None:
141
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="indexes")
142
+ for table_info in self.get_tables(driver, schema=schema_name):
143
+ table_name = table_info.get("table_name")
144
+ if not table_name:
145
+ continue
146
+ indexes.extend(self.get_indexes(driver, table=table_name, schema=schema_name))
147
+ return indexes
148
+
149
+ assert table is not None
150
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="indexes")
151
+ table_name = table
152
+ table_identifier = f"{schema_name}.{table_name}" if schema_name else table_name
153
+ index_list_sql = self.get_query_text("indexes_by_table").format(table_name=format_identifier(table_identifier))
154
+ index_rows = driver.select(index_list_sql)
155
+ for row in index_rows:
156
+ index_name = row.get("name")
157
+ if not index_name:
158
+ continue
159
+ index_identifier = f"{schema_name}.{index_name}" if schema_name else index_name
160
+ columns_sql = self.get_query_text("index_columns_by_index").format(
161
+ index_name=format_identifier(index_identifier)
162
+ )
163
+ columns_rows = driver.select(columns_sql)
164
+ columns: list[str] = []
165
+ for col in columns_rows:
166
+ column_name = col.get("name")
167
+ if column_name is None:
168
+ continue
169
+ columns.append(str(column_name))
170
+ is_primary = row.get("origin") == "pk"
171
+ index_metadata: IndexMetadata = {
172
+ "index_name": index_name,
173
+ "table_name": table_name,
174
+ "columns": columns,
175
+ "is_primary": is_primary,
176
+ }
177
+ if schema_name is not None:
178
+ index_metadata["schema_name"] = schema_name
179
+ unique_value = row.get("unique")
180
+ if unique_value is not None:
181
+ index_metadata["is_unique"] = unique_value
182
+ indexes.append(index_metadata)
183
+ return indexes
184
+
185
+ def get_foreign_keys(
186
+ self, driver: "SqliteDriver", table: "str | None" = None, schema: "str | None" = None
187
+ ) -> "list[ForeignKeyMetadata]":
188
+ """Get foreign key metadata."""
189
+ schema_name = self.resolve_schema(schema)
190
+ schema_prefix = f"{format_identifier(schema_name)}." if schema_name else ""
191
+ if table is None:
192
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="foreign_keys")
193
+ query_text = self.get_query_text("foreign_keys_by_schema").format(schema_prefix=schema_prefix)
194
+ return driver.select(query_text, schema_type=ForeignKeyMetadata)
195
+
196
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="foreign_keys")
197
+ table_label = table.replace("'", "''")
198
+ table_identifier = f"{schema_name}.{table}" if schema_name else table
199
+ query_text = self.get_query_text("foreign_keys_by_table").format(
200
+ table_name=format_identifier(table_identifier), table_label=table_label
201
+ )
202
+ return driver.select(query_text, schema_type=ForeignKeyMetadata)
@@ -0,0 +1,359 @@
1
+ """SQLite driver implementation."""
2
+
3
+ import contextlib
4
+ import sqlite3
5
+ from typing import TYPE_CHECKING, Any
6
+
7
+ from sqlspec.adapters.sqlite._typing import SqliteSessionContext
8
+ from sqlspec.adapters.sqlite.core import (
9
+ build_insert_statement,
10
+ collect_rows,
11
+ create_mapped_exception,
12
+ default_statement_config,
13
+ driver_profile,
14
+ format_identifier,
15
+ normalize_execute_many_parameters,
16
+ normalize_execute_parameters,
17
+ resolve_rowcount,
18
+ )
19
+ from sqlspec.adapters.sqlite.data_dictionary import SqliteDataDictionary
20
+ from sqlspec.core import ArrowResult, get_cache_config, register_driver_profile
21
+ from sqlspec.driver import SyncDriverAdapterBase
22
+ from sqlspec.exceptions import SQLSpecError
23
+
24
+ if TYPE_CHECKING:
25
+ from sqlspec.adapters.sqlite._typing import SqliteConnection
26
+ from sqlspec.core import SQL, StatementConfig
27
+ from sqlspec.driver import ExecutionResult
28
+ from sqlspec.storage import StorageBridgeJob, StorageDestination, StorageFormat, StorageTelemetry
29
+
30
+ __all__ = ("SqliteCursor", "SqliteDriver", "SqliteExceptionHandler", "SqliteSessionContext")
31
+
32
+
33
+ class SqliteCursor:
34
+ """Context manager for SQLite cursor management.
35
+
36
+ Provides automatic cursor creation and cleanup for SQLite database operations.
37
+ """
38
+
39
+ __slots__ = ("connection", "cursor")
40
+
41
+ def __init__(self, connection: "SqliteConnection") -> None:
42
+ """Initialize cursor manager.
43
+
44
+ Args:
45
+ connection: SQLite database connection
46
+ """
47
+ self.connection = connection
48
+ self.cursor: sqlite3.Cursor | None = None
49
+
50
+ def __enter__(self) -> "sqlite3.Cursor":
51
+ """Create and return a new cursor.
52
+
53
+ Returns:
54
+ Active SQLite cursor object
55
+ """
56
+ self.cursor = self.connection.cursor()
57
+ return self.cursor
58
+
59
+ def __exit__(self, *_: Any) -> None:
60
+ """Clean up cursor resources.
61
+
62
+ Args:
63
+ exc_type: Exception type if an exception occurred
64
+ exc_val: Exception value if an exception occurred
65
+ exc_tb: Exception traceback if an exception occurred
66
+ """
67
+ if self.cursor is not None:
68
+ with contextlib.suppress(Exception):
69
+ self.cursor.close()
70
+
71
+
72
+ class SqliteExceptionHandler:
73
+ """Context manager for handling SQLite database exceptions.
74
+
75
+ Maps SQLite extended result codes to specific SQLSpec exceptions
76
+ for better error handling in application code.
77
+
78
+ Uses deferred exception pattern for mypyc compatibility: exceptions
79
+ are stored in pending_exception rather than raised from __exit__
80
+ to avoid ABI boundary violations with compiled code.
81
+ """
82
+
83
+ __slots__ = ("pending_exception",)
84
+
85
+ def __init__(self) -> None:
86
+ self.pending_exception: Exception | None = None
87
+
88
+ def __enter__(self) -> "SqliteExceptionHandler":
89
+ return self
90
+
91
+ def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> bool:
92
+ if exc_type is None:
93
+ return False
94
+ if issubclass(exc_type, sqlite3.Error):
95
+ self.pending_exception = create_mapped_exception(exc_val)
96
+ return True
97
+ return False
98
+
99
+
100
+ class SqliteDriver(SyncDriverAdapterBase):
101
+ """SQLite driver implementation.
102
+
103
+ Provides SQL statement execution, transaction management, and result handling
104
+ for SQLite databases using the standard sqlite3 module.
105
+ """
106
+
107
+ __slots__ = ("_data_dictionary",)
108
+ dialect = "sqlite"
109
+
110
+ def __init__(
111
+ self,
112
+ connection: "SqliteConnection",
113
+ statement_config: "StatementConfig | None" = None,
114
+ driver_features: "dict[str, Any] | None" = None,
115
+ ) -> None:
116
+ """Initialize SQLite driver.
117
+
118
+ Args:
119
+ connection: SQLite database connection
120
+ statement_config: Statement configuration settings
121
+ driver_features: Driver-specific feature flags
122
+ """
123
+ if statement_config is None:
124
+ statement_config = default_statement_config.replace(
125
+ enable_caching=get_cache_config().compiled_cache_enabled
126
+ )
127
+
128
+ super().__init__(connection=connection, statement_config=statement_config, driver_features=driver_features)
129
+ self._data_dictionary: SqliteDataDictionary | None = None
130
+
131
+ # ─────────────────────────────────────────────────────────────────────────────
132
+ # CORE DISPATCH METHODS
133
+ # ─────────────────────────────────────────────────────────────────────────────
134
+
135
+ def dispatch_execute(self, cursor: "sqlite3.Cursor", statement: "SQL") -> "ExecutionResult":
136
+ """Execute single SQL statement.
137
+
138
+ Args:
139
+ cursor: SQLite cursor object
140
+ statement: SQL statement to execute
141
+
142
+ Returns:
143
+ ExecutionResult with statement execution details
144
+ """
145
+ sql, prepared_parameters = self._get_compiled_sql(statement, self.statement_config)
146
+ cursor.execute(sql, normalize_execute_parameters(prepared_parameters))
147
+
148
+ if statement.returns_rows():
149
+ fetched_data = cursor.fetchall()
150
+ data, column_names, row_count = collect_rows(fetched_data, cursor.description)
151
+
152
+ return self.create_execution_result(
153
+ cursor, selected_data=data, column_names=column_names, data_row_count=row_count, is_select_result=True
154
+ )
155
+
156
+ affected_rows = resolve_rowcount(cursor)
157
+ return self.create_execution_result(cursor, rowcount_override=affected_rows)
158
+
159
+ def dispatch_execute_many(self, cursor: "sqlite3.Cursor", statement: "SQL") -> "ExecutionResult":
160
+ """Execute SQL with multiple parameter sets.
161
+
162
+ Args:
163
+ cursor: SQLite cursor object
164
+ statement: SQL statement with multiple parameter sets
165
+
166
+ Returns:
167
+ ExecutionResult with batch execution details
168
+ """
169
+ sql, prepared_parameters = self._get_compiled_sql(statement, self.statement_config)
170
+
171
+ cursor.executemany(sql, normalize_execute_many_parameters(prepared_parameters))
172
+
173
+ affected_rows = resolve_rowcount(cursor)
174
+
175
+ return self.create_execution_result(cursor, rowcount_override=affected_rows, is_many_result=True)
176
+
177
+ def dispatch_execute_script(self, cursor: "sqlite3.Cursor", statement: "SQL") -> "ExecutionResult":
178
+ """Execute SQL script with statement splitting and parameter handling.
179
+
180
+ Args:
181
+ cursor: SQLite cursor object
182
+ statement: SQL statement containing multiple statements
183
+
184
+ Returns:
185
+ ExecutionResult with script execution details
186
+ """
187
+ sql, prepared_parameters = self._get_compiled_sql(statement, self.statement_config)
188
+ statements = self.split_script_statements(sql, statement.statement_config, strip_trailing_semicolon=True)
189
+
190
+ successful_count = 0
191
+ last_cursor = cursor
192
+
193
+ for stmt in statements:
194
+ cursor.execute(stmt, normalize_execute_parameters(prepared_parameters))
195
+ successful_count += 1
196
+
197
+ return self.create_execution_result(
198
+ last_cursor, statement_count=len(statements), successful_statements=successful_count, is_script_result=True
199
+ )
200
+
201
+ # ─────────────────────────────────────────────────────────────────────────────
202
+ # TRANSACTION MANAGEMENT
203
+ # ─────────────────────────────────────────────────────────────────────────────
204
+
205
+ def begin(self) -> None:
206
+ """Begin a database transaction.
207
+
208
+ Raises:
209
+ SQLSpecError: If transaction cannot be started
210
+ """
211
+ try:
212
+ if not self.connection.in_transaction:
213
+ self.connection.execute("BEGIN")
214
+ except sqlite3.Error as e:
215
+ msg = f"Failed to begin transaction: {e}"
216
+ raise SQLSpecError(msg) from e
217
+
218
+ def commit(self) -> None:
219
+ """Commit the current transaction.
220
+
221
+ Raises:
222
+ SQLSpecError: If transaction cannot be committed
223
+ """
224
+ try:
225
+ self.connection.commit()
226
+ except sqlite3.Error as e:
227
+ msg = f"Failed to commit transaction: {e}"
228
+ raise SQLSpecError(msg) from e
229
+
230
+ def rollback(self) -> None:
231
+ """Rollback the current transaction.
232
+
233
+ Raises:
234
+ SQLSpecError: If transaction cannot be rolled back
235
+ """
236
+ try:
237
+ self.connection.rollback()
238
+ except sqlite3.Error as e:
239
+ msg = f"Failed to rollback transaction: {e}"
240
+ raise SQLSpecError(msg) from e
241
+
242
+ def with_cursor(self, connection: "SqliteConnection") -> "SqliteCursor":
243
+ """Create context manager for SQLite cursor.
244
+
245
+ Args:
246
+ connection: SQLite database connection
247
+
248
+ Returns:
249
+ Cursor context manager for safe cursor operations
250
+ """
251
+ return SqliteCursor(connection)
252
+
253
+ def handle_database_exceptions(self) -> "SqliteExceptionHandler":
254
+ """Handle database-specific exceptions and wrap them appropriately.
255
+
256
+ Returns:
257
+ Exception handler with deferred exception pattern for mypyc compatibility.
258
+ """
259
+ return SqliteExceptionHandler()
260
+
261
+ # ─────────────────────────────────────────────────────────────────────────────
262
+ # STORAGE API
263
+ # ─────────────────────────────────────────────────────────────────────────────
264
+
265
+ def select_to_storage(
266
+ self,
267
+ statement: "SQL | str",
268
+ destination: "StorageDestination",
269
+ /,
270
+ *parameters: Any,
271
+ statement_config: "StatementConfig | None" = None,
272
+ partitioner: "dict[str, object] | None" = None,
273
+ format_hint: "StorageFormat | None" = None,
274
+ telemetry: "StorageTelemetry | None" = None,
275
+ **kwargs: Any,
276
+ ) -> "StorageBridgeJob":
277
+ """Execute a query and write Arrow-compatible output to storage (sync)."""
278
+
279
+ self._require_capability("arrow_export_enabled")
280
+ arrow_result = self.select_to_arrow(statement, *parameters, statement_config=statement_config, **kwargs)
281
+ sync_pipeline = self._storage_pipeline()
282
+ telemetry_payload = self._write_result_to_storage_sync(
283
+ arrow_result, destination, format_hint=format_hint, pipeline=sync_pipeline
284
+ )
285
+ self._attach_partition_telemetry(telemetry_payload, partitioner)
286
+ return self._create_storage_job(telemetry_payload, telemetry)
287
+
288
+ def load_from_arrow(
289
+ self,
290
+ table: str,
291
+ source: "ArrowResult | Any",
292
+ *,
293
+ partitioner: "dict[str, object] | None" = None,
294
+ overwrite: bool = False,
295
+ telemetry: "StorageTelemetry | None" = None,
296
+ ) -> "StorageBridgeJob":
297
+ """Load Arrow data into SQLite using batched inserts."""
298
+
299
+ self._require_capability("arrow_import_enabled")
300
+ arrow_table = self._coerce_arrow_table(source)
301
+ if overwrite:
302
+ statement = f"DELETE FROM {format_identifier(table)}"
303
+ with self.handle_database_exceptions(), self.with_cursor(self.connection) as cursor:
304
+ cursor.execute(statement)
305
+
306
+ columns, records = self._arrow_table_to_rows(arrow_table)
307
+ if records:
308
+ insert_sql = build_insert_statement(table, columns)
309
+ with self.handle_database_exceptions(), self.with_cursor(self.connection) as cursor:
310
+ cursor.executemany(insert_sql, records)
311
+
312
+ telemetry_payload = self._build_ingest_telemetry(arrow_table)
313
+ telemetry_payload["destination"] = table
314
+ self._attach_partition_telemetry(telemetry_payload, partitioner)
315
+ return self._create_storage_job(telemetry_payload, telemetry)
316
+
317
+ def load_from_storage(
318
+ self,
319
+ table: str,
320
+ source: "StorageDestination",
321
+ *,
322
+ file_format: "StorageFormat",
323
+ partitioner: "dict[str, object] | None" = None,
324
+ overwrite: bool = False,
325
+ ) -> "StorageBridgeJob":
326
+ """Load staged artifacts from storage into SQLite."""
327
+
328
+ arrow_table, inbound = self._read_arrow_from_storage_sync(source, file_format=file_format)
329
+ return self.load_from_arrow(table, arrow_table, partitioner=partitioner, overwrite=overwrite, telemetry=inbound)
330
+
331
+ # ─────────────────────────────────────────────────────────────────────────────
332
+ # UTILITY METHODS
333
+ # ─────────────────────────────────────────────────────────────────────────────
334
+
335
+ @property
336
+ def data_dictionary(self) -> "SqliteDataDictionary":
337
+ """Get the data dictionary for this driver.
338
+
339
+ Returns:
340
+ Data dictionary instance for metadata queries
341
+ """
342
+ if self._data_dictionary is None:
343
+ self._data_dictionary = SqliteDataDictionary()
344
+ return self._data_dictionary
345
+
346
+ # ─────────────────────────────────────────────────────────────────────────────
347
+ # PRIVATE/INTERNAL METHODS
348
+ # ─────────────────────────────────────────────────────────────────────────────
349
+
350
+ def _connection_in_transaction(self) -> bool:
351
+ """Check if connection is in transaction.
352
+
353
+ Returns:
354
+ True if connection is in an active transaction.
355
+ """
356
+ return bool(self.connection.in_transaction)
357
+
358
+
359
+ register_driver_profile("sqlite", driver_profile)
@@ -0,0 +1,5 @@
1
+ """Events helpers for the sqlite adapter."""
2
+
3
+ from sqlspec.adapters.sqlite.events.store import SqliteEventQueueStore
4
+
5
+ __all__ = ("SqliteEventQueueStore",)
@@ -0,0 +1,20 @@
1
+ """SQLite event queue store."""
2
+
3
+ from sqlspec.adapters.sqlite.config import SqliteConfig
4
+ from sqlspec.extensions.events import BaseEventQueueStore
5
+
6
+ __all__ = ("SqliteEventQueueStore",)
7
+
8
+
9
+ class SqliteEventQueueStore(BaseEventQueueStore[SqliteConfig]):
10
+ """Provide SQLite-specific column types for the events queue.
11
+
12
+ SQLite stores JSON as TEXT since it lacks a native JSON column type.
13
+ JSON functions can still operate on TEXT columns containing valid JSON.
14
+ """
15
+
16
+ __slots__ = ()
17
+
18
+ def _column_types(self) -> "tuple[str, str, str]":
19
+ """Return SQLite-compatible column types for the event queue."""
20
+ return "TEXT", "TEXT", "TIMESTAMP"
@@ -0,0 +1,5 @@
1
+ """Litestar integration for SQLite adapter."""
2
+
3
+ from sqlspec.adapters.sqlite.litestar.store import SQLiteStore
4
+
5
+ __all__ = ("SQLiteStore",)