sqlspec 0.47.0__cp314-cp314-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (621) hide show
  1. f68e0789eb443ecb1c2c__mypyc.cp314-win_amd64.pyd +0 -0
  2. sqlspec/__init__.py +167 -0
  3. sqlspec/__main__.py +12 -0
  4. sqlspec/__metadata__.py +14 -0
  5. sqlspec/_typing.py +714 -0
  6. sqlspec/adapters/__init__.py +0 -0
  7. sqlspec/adapters/adbc/__init__.py +13 -0
  8. sqlspec/adapters/adbc/_typing.py +106 -0
  9. sqlspec/adapters/adbc/adk/__init__.py +5 -0
  10. sqlspec/adapters/adbc/adk/store.py +1280 -0
  11. sqlspec/adapters/adbc/config.py +378 -0
  12. sqlspec/adapters/adbc/core.cp314-win_amd64.pyd +0 -0
  13. sqlspec/adapters/adbc/core.py +922 -0
  14. sqlspec/adapters/adbc/data_dictionary.py +339 -0
  15. sqlspec/adapters/adbc/driver.py +534 -0
  16. sqlspec/adapters/adbc/events/__init__.py +5 -0
  17. sqlspec/adapters/adbc/events/store.py +285 -0
  18. sqlspec/adapters/adbc/litestar/__init__.py +5 -0
  19. sqlspec/adapters/adbc/litestar/store.py +534 -0
  20. sqlspec/adapters/adbc/type_converter.cp314-win_amd64.pyd +0 -0
  21. sqlspec/adapters/adbc/type_converter.py +142 -0
  22. sqlspec/adapters/aiomysql/__init__.py +21 -0
  23. sqlspec/adapters/aiomysql/_typing.py +137 -0
  24. sqlspec/adapters/aiomysql/adk/__init__.py +5 -0
  25. sqlspec/adapters/aiomysql/adk/store.py +678 -0
  26. sqlspec/adapters/aiomysql/config.py +305 -0
  27. sqlspec/adapters/aiomysql/core.cp314-win_amd64.pyd +0 -0
  28. sqlspec/adapters/aiomysql/core.py +536 -0
  29. sqlspec/adapters/aiomysql/data_dictionary.py +121 -0
  30. sqlspec/adapters/aiomysql/driver.py +386 -0
  31. sqlspec/adapters/aiomysql/events/__init__.py +5 -0
  32. sqlspec/adapters/aiomysql/events/store.py +104 -0
  33. sqlspec/adapters/aiomysql/litestar/__init__.py +5 -0
  34. sqlspec/adapters/aiomysql/litestar/store.py +314 -0
  35. sqlspec/adapters/aiosqlite/__init__.py +26 -0
  36. sqlspec/adapters/aiosqlite/_typing.py +109 -0
  37. sqlspec/adapters/aiosqlite/adk/__init__.py +5 -0
  38. sqlspec/adapters/aiosqlite/adk/store.py +829 -0
  39. sqlspec/adapters/aiosqlite/config.py +315 -0
  40. sqlspec/adapters/aiosqlite/core.cp314-win_amd64.pyd +0 -0
  41. sqlspec/adapters/aiosqlite/core.py +315 -0
  42. sqlspec/adapters/aiosqlite/data_dictionary.py +202 -0
  43. sqlspec/adapters/aiosqlite/driver.py +311 -0
  44. sqlspec/adapters/aiosqlite/events/__init__.py +5 -0
  45. sqlspec/adapters/aiosqlite/events/store.py +20 -0
  46. sqlspec/adapters/aiosqlite/litestar/__init__.py +5 -0
  47. sqlspec/adapters/aiosqlite/litestar/store.py +279 -0
  48. sqlspec/adapters/aiosqlite/pool.cp314-win_amd64.pyd +0 -0
  49. sqlspec/adapters/aiosqlite/pool.py +734 -0
  50. sqlspec/adapters/asyncmy/__init__.py +21 -0
  51. sqlspec/adapters/asyncmy/_typing.py +113 -0
  52. sqlspec/adapters/asyncmy/adk/__init__.py +5 -0
  53. sqlspec/adapters/asyncmy/adk/store.py +644 -0
  54. sqlspec/adapters/asyncmy/config.py +307 -0
  55. sqlspec/adapters/asyncmy/core.cp314-win_amd64.pyd +0 -0
  56. sqlspec/adapters/asyncmy/core.py +538 -0
  57. sqlspec/adapters/asyncmy/data_dictionary.py +122 -0
  58. sqlspec/adapters/asyncmy/driver.py +391 -0
  59. sqlspec/adapters/asyncmy/events/__init__.py +5 -0
  60. sqlspec/adapters/asyncmy/events/store.py +104 -0
  61. sqlspec/adapters/asyncmy/litestar/__init__.py +5 -0
  62. sqlspec/adapters/asyncmy/litestar/store.py +296 -0
  63. sqlspec/adapters/asyncpg/__init__.py +26 -0
  64. sqlspec/adapters/asyncpg/_typing.py +103 -0
  65. sqlspec/adapters/asyncpg/adk/__init__.py +5 -0
  66. sqlspec/adapters/asyncpg/adk/store.py +483 -0
  67. sqlspec/adapters/asyncpg/config.py +575 -0
  68. sqlspec/adapters/asyncpg/core.cp314-win_amd64.pyd +0 -0
  69. sqlspec/adapters/asyncpg/core.py +480 -0
  70. sqlspec/adapters/asyncpg/data_dictionary.py +157 -0
  71. sqlspec/adapters/asyncpg/driver.py +487 -0
  72. sqlspec/adapters/asyncpg/events/__init__.py +6 -0
  73. sqlspec/adapters/asyncpg/events/_hub.py +181 -0
  74. sqlspec/adapters/asyncpg/events/backend.py +210 -0
  75. sqlspec/adapters/asyncpg/events/store.py +40 -0
  76. sqlspec/adapters/asyncpg/litestar/__init__.py +5 -0
  77. sqlspec/adapters/asyncpg/litestar/store.py +251 -0
  78. sqlspec/adapters/bigquery/__init__.py +15 -0
  79. sqlspec/adapters/bigquery/_typing.py +108 -0
  80. sqlspec/adapters/bigquery/config.py +362 -0
  81. sqlspec/adapters/bigquery/core.cp314-win_amd64.pyd +0 -0
  82. sqlspec/adapters/bigquery/core.py +768 -0
  83. sqlspec/adapters/bigquery/data_dictionary.py +120 -0
  84. sqlspec/adapters/bigquery/driver.py +542 -0
  85. sqlspec/adapters/bigquery/events/__init__.py +5 -0
  86. sqlspec/adapters/bigquery/events/store.py +139 -0
  87. sqlspec/adapters/bigquery/litestar/__init__.py +5 -0
  88. sqlspec/adapters/bigquery/litestar/store.py +325 -0
  89. sqlspec/adapters/bigquery/type_converter.cp314-win_amd64.pyd +0 -0
  90. sqlspec/adapters/bigquery/type_converter.py +107 -0
  91. sqlspec/adapters/cockroach_asyncpg/__init__.py +26 -0
  92. sqlspec/adapters/cockroach_asyncpg/_typing.py +73 -0
  93. sqlspec/adapters/cockroach_asyncpg/adk/__init__.py +3 -0
  94. sqlspec/adapters/cockroach_asyncpg/adk/store.py +465 -0
  95. sqlspec/adapters/cockroach_asyncpg/config.py +248 -0
  96. sqlspec/adapters/cockroach_asyncpg/core.cp314-win_amd64.pyd +0 -0
  97. sqlspec/adapters/cockroach_asyncpg/core.py +55 -0
  98. sqlspec/adapters/cockroach_asyncpg/data_dictionary.py +110 -0
  99. sqlspec/adapters/cockroach_asyncpg/driver.py +142 -0
  100. sqlspec/adapters/cockroach_asyncpg/events/__init__.py +3 -0
  101. sqlspec/adapters/cockroach_asyncpg/events/store.py +20 -0
  102. sqlspec/adapters/cockroach_asyncpg/litestar/__init__.py +3 -0
  103. sqlspec/adapters/cockroach_asyncpg/litestar/store.py +142 -0
  104. sqlspec/adapters/cockroach_psycopg/__init__.py +39 -0
  105. sqlspec/adapters/cockroach_psycopg/_typing.py +137 -0
  106. sqlspec/adapters/cockroach_psycopg/adk/__init__.py +13 -0
  107. sqlspec/adapters/cockroach_psycopg/adk/store.py +1039 -0
  108. sqlspec/adapters/cockroach_psycopg/config.py +511 -0
  109. sqlspec/adapters/cockroach_psycopg/core.cp314-win_amd64.pyd +0 -0
  110. sqlspec/adapters/cockroach_psycopg/core.py +63 -0
  111. sqlspec/adapters/cockroach_psycopg/data_dictionary.py +220 -0
  112. sqlspec/adapters/cockroach_psycopg/driver.py +273 -0
  113. sqlspec/adapters/cockroach_psycopg/events/__init__.py +6 -0
  114. sqlspec/adapters/cockroach_psycopg/events/store.py +34 -0
  115. sqlspec/adapters/cockroach_psycopg/litestar/__init__.py +3 -0
  116. sqlspec/adapters/cockroach_psycopg/litestar/store.py +327 -0
  117. sqlspec/adapters/duckdb/__init__.py +29 -0
  118. sqlspec/adapters/duckdb/_typing.py +104 -0
  119. sqlspec/adapters/duckdb/adk/__init__.py +14 -0
  120. sqlspec/adapters/duckdb/adk/store.py +935 -0
  121. sqlspec/adapters/duckdb/config.py +386 -0
  122. sqlspec/adapters/duckdb/core.cp314-win_amd64.pyd +0 -0
  123. sqlspec/adapters/duckdb/core.py +332 -0
  124. sqlspec/adapters/duckdb/data_dictionary.py +140 -0
  125. sqlspec/adapters/duckdb/driver.py +426 -0
  126. sqlspec/adapters/duckdb/events/__init__.py +5 -0
  127. sqlspec/adapters/duckdb/events/store.py +57 -0
  128. sqlspec/adapters/duckdb/litestar/__init__.py +5 -0
  129. sqlspec/adapters/duckdb/litestar/store.py +330 -0
  130. sqlspec/adapters/duckdb/pool.cp314-win_amd64.pyd +0 -0
  131. sqlspec/adapters/duckdb/pool.py +350 -0
  132. sqlspec/adapters/duckdb/type_converter.cp314-win_amd64.pyd +0 -0
  133. sqlspec/adapters/duckdb/type_converter.py +118 -0
  134. sqlspec/adapters/mysqlconnector/__init__.py +39 -0
  135. sqlspec/adapters/mysqlconnector/_typing.py +186 -0
  136. sqlspec/adapters/mysqlconnector/adk/__init__.py +15 -0
  137. sqlspec/adapters/mysqlconnector/adk/store.py +1183 -0
  138. sqlspec/adapters/mysqlconnector/config.py +421 -0
  139. sqlspec/adapters/mysqlconnector/core.cp314-win_amd64.pyd +0 -0
  140. sqlspec/adapters/mysqlconnector/core.py +472 -0
  141. sqlspec/adapters/mysqlconnector/data_dictionary.py +230 -0
  142. sqlspec/adapters/mysqlconnector/driver.py +516 -0
  143. sqlspec/adapters/mysqlconnector/events/__init__.py +8 -0
  144. sqlspec/adapters/mysqlconnector/events/store.py +98 -0
  145. sqlspec/adapters/mysqlconnector/litestar/__init__.py +5 -0
  146. sqlspec/adapters/mysqlconnector/litestar/store.py +426 -0
  147. sqlspec/adapters/oracledb/__init__.py +39 -0
  148. sqlspec/adapters/oracledb/_json_handlers.cp314-win_amd64.pyd +0 -0
  149. sqlspec/adapters/oracledb/_json_handlers.py +196 -0
  150. sqlspec/adapters/oracledb/_param_types.cp314-win_amd64.pyd +0 -0
  151. sqlspec/adapters/oracledb/_param_types.py +46 -0
  152. sqlspec/adapters/oracledb/_typing.py +258 -0
  153. sqlspec/adapters/oracledb/_uuid_handlers.cp314-win_amd64.pyd +0 -0
  154. sqlspec/adapters/oracledb/_uuid_handlers.py +163 -0
  155. sqlspec/adapters/oracledb/_vector_handlers.cp314-win_amd64.pyd +0 -0
  156. sqlspec/adapters/oracledb/_vector_handlers.py +228 -0
  157. sqlspec/adapters/oracledb/adk/__init__.py +21 -0
  158. sqlspec/adapters/oracledb/adk/store.py +2453 -0
  159. sqlspec/adapters/oracledb/config.py +575 -0
  160. sqlspec/adapters/oracledb/core.cp314-win_amd64.pyd +0 -0
  161. sqlspec/adapters/oracledb/core.py +820 -0
  162. sqlspec/adapters/oracledb/data_dictionary.py +404 -0
  163. sqlspec/adapters/oracledb/driver.py +1277 -0
  164. sqlspec/adapters/oracledb/events/__init__.py +16 -0
  165. sqlspec/adapters/oracledb/events/_hub.py +345 -0
  166. sqlspec/adapters/oracledb/events/backend.py +300 -0
  167. sqlspec/adapters/oracledb/events/store.py +420 -0
  168. sqlspec/adapters/oracledb/litestar/__init__.py +5 -0
  169. sqlspec/adapters/oracledb/litestar/store.py +781 -0
  170. sqlspec/adapters/oracledb/migrations.py +539 -0
  171. sqlspec/adapters/oracledb/type_converter.cp314-win_amd64.pyd +0 -0
  172. sqlspec/adapters/oracledb/type_converter.py +211 -0
  173. sqlspec/adapters/psqlpy/__init__.py +18 -0
  174. sqlspec/adapters/psqlpy/_typing.py +121 -0
  175. sqlspec/adapters/psqlpy/adk/__init__.py +5 -0
  176. sqlspec/adapters/psqlpy/adk/store.py +591 -0
  177. sqlspec/adapters/psqlpy/config.py +376 -0
  178. sqlspec/adapters/psqlpy/core.cp314-win_amd64.pyd +0 -0
  179. sqlspec/adapters/psqlpy/core.py +694 -0
  180. sqlspec/adapters/psqlpy/data_dictionary.py +121 -0
  181. sqlspec/adapters/psqlpy/driver.py +411 -0
  182. sqlspec/adapters/psqlpy/events/__init__.py +6 -0
  183. sqlspec/adapters/psqlpy/events/_hub.py +204 -0
  184. sqlspec/adapters/psqlpy/events/backend.py +210 -0
  185. sqlspec/adapters/psqlpy/events/store.py +20 -0
  186. sqlspec/adapters/psqlpy/litestar/__init__.py +5 -0
  187. sqlspec/adapters/psqlpy/litestar/store.py +270 -0
  188. sqlspec/adapters/psqlpy/type_converter.cp314-win_amd64.pyd +0 -0
  189. sqlspec/adapters/psqlpy/type_converter.py +113 -0
  190. sqlspec/adapters/psycopg/__init__.py +38 -0
  191. sqlspec/adapters/psycopg/_typing.py +218 -0
  192. sqlspec/adapters/psycopg/adk/__init__.py +10 -0
  193. sqlspec/adapters/psycopg/adk/store.py +1106 -0
  194. sqlspec/adapters/psycopg/config.py +695 -0
  195. sqlspec/adapters/psycopg/core.cp314-win_amd64.pyd +0 -0
  196. sqlspec/adapters/psycopg/core.py +520 -0
  197. sqlspec/adapters/psycopg/data_dictionary.py +278 -0
  198. sqlspec/adapters/psycopg/driver.py +1033 -0
  199. sqlspec/adapters/psycopg/events/__init__.py +20 -0
  200. sqlspec/adapters/psycopg/events/_hub.py +388 -0
  201. sqlspec/adapters/psycopg/events/backend.py +398 -0
  202. sqlspec/adapters/psycopg/events/store.py +42 -0
  203. sqlspec/adapters/psycopg/litestar/__init__.py +5 -0
  204. sqlspec/adapters/psycopg/litestar/store.py +554 -0
  205. sqlspec/adapters/psycopg/type_converter.cp314-win_amd64.pyd +0 -0
  206. sqlspec/adapters/psycopg/type_converter.py +93 -0
  207. sqlspec/adapters/pymysql/__init__.py +21 -0
  208. sqlspec/adapters/pymysql/_typing.py +92 -0
  209. sqlspec/adapters/pymysql/adk/__init__.py +5 -0
  210. sqlspec/adapters/pymysql/adk/store.py +657 -0
  211. sqlspec/adapters/pymysql/config.py +176 -0
  212. sqlspec/adapters/pymysql/core.cp314-win_amd64.pyd +0 -0
  213. sqlspec/adapters/pymysql/core.py +469 -0
  214. sqlspec/adapters/pymysql/data_dictionary.py +120 -0
  215. sqlspec/adapters/pymysql/driver.py +271 -0
  216. sqlspec/adapters/pymysql/events/__init__.py +5 -0
  217. sqlspec/adapters/pymysql/events/store.py +50 -0
  218. sqlspec/adapters/pymysql/litestar/__init__.py +5 -0
  219. sqlspec/adapters/pymysql/litestar/store.py +232 -0
  220. sqlspec/adapters/pymysql/pool.cp314-win_amd64.pyd +0 -0
  221. sqlspec/adapters/pymysql/pool.py +184 -0
  222. sqlspec/adapters/spanner/__init__.py +33 -0
  223. sqlspec/adapters/spanner/_typing.py +102 -0
  224. sqlspec/adapters/spanner/adk/__init__.py +5 -0
  225. sqlspec/adapters/spanner/adk/store.py +758 -0
  226. sqlspec/adapters/spanner/config.py +355 -0
  227. sqlspec/adapters/spanner/core.cp314-win_amd64.pyd +0 -0
  228. sqlspec/adapters/spanner/core.py +263 -0
  229. sqlspec/adapters/spanner/data_dictionary.py +120 -0
  230. sqlspec/adapters/spanner/driver.py +407 -0
  231. sqlspec/adapters/spanner/events/__init__.py +5 -0
  232. sqlspec/adapters/spanner/events/store.py +187 -0
  233. sqlspec/adapters/spanner/litestar/__init__.py +5 -0
  234. sqlspec/adapters/spanner/litestar/store.py +291 -0
  235. sqlspec/adapters/spanner/type_converter.cp314-win_amd64.pyd +0 -0
  236. sqlspec/adapters/spanner/type_converter.py +342 -0
  237. sqlspec/adapters/sqlite/__init__.py +19 -0
  238. sqlspec/adapters/sqlite/_typing.py +123 -0
  239. sqlspec/adapters/sqlite/adk/__init__.py +5 -0
  240. sqlspec/adapters/sqlite/adk/store.py +992 -0
  241. sqlspec/adapters/sqlite/config.py +240 -0
  242. sqlspec/adapters/sqlite/core.cp314-win_amd64.pyd +0 -0
  243. sqlspec/adapters/sqlite/core.py +357 -0
  244. sqlspec/adapters/sqlite/data_dictionary.py +198 -0
  245. sqlspec/adapters/sqlite/driver.py +527 -0
  246. sqlspec/adapters/sqlite/events/__init__.py +5 -0
  247. sqlspec/adapters/sqlite/events/store.py +20 -0
  248. sqlspec/adapters/sqlite/litestar/__init__.py +5 -0
  249. sqlspec/adapters/sqlite/litestar/store.py +316 -0
  250. sqlspec/adapters/sqlite/pool.cp314-win_amd64.pyd +0 -0
  251. sqlspec/adapters/sqlite/pool.py +237 -0
  252. sqlspec/adapters/sqlite/type_converter.cp314-win_amd64.pyd +0 -0
  253. sqlspec/adapters/sqlite/type_converter.py +114 -0
  254. sqlspec/base.py +832 -0
  255. sqlspec/builder/__init__.py +181 -0
  256. sqlspec/builder/_base.cp314-win_amd64.pyd +0 -0
  257. sqlspec/builder/_base.py +1071 -0
  258. sqlspec/builder/_column.cp314-win_amd64.pyd +0 -0
  259. sqlspec/builder/_column.py +521 -0
  260. sqlspec/builder/_ddl.cp314-win_amd64.pyd +0 -0
  261. sqlspec/builder/_ddl.py +1691 -0
  262. sqlspec/builder/_delete.cp314-win_amd64.pyd +0 -0
  263. sqlspec/builder/_delete.py +95 -0
  264. sqlspec/builder/_dml.cp314-win_amd64.pyd +0 -0
  265. sqlspec/builder/_dml.py +386 -0
  266. sqlspec/builder/_explain.cp314-win_amd64.pyd +0 -0
  267. sqlspec/builder/_explain.py +579 -0
  268. sqlspec/builder/_expression_wrappers.cp314-win_amd64.pyd +0 -0
  269. sqlspec/builder/_expression_wrappers.py +46 -0
  270. sqlspec/builder/_factory.cp314-win_amd64.pyd +0 -0
  271. sqlspec/builder/_factory.py +1884 -0
  272. sqlspec/builder/_insert.cp314-win_amd64.pyd +0 -0
  273. sqlspec/builder/_insert.py +405 -0
  274. sqlspec/builder/_join.cp314-win_amd64.pyd +0 -0
  275. sqlspec/builder/_join.py +489 -0
  276. sqlspec/builder/_merge.cp314-win_amd64.pyd +0 -0
  277. sqlspec/builder/_merge.py +823 -0
  278. sqlspec/builder/_parsing_utils.cp314-win_amd64.pyd +0 -0
  279. sqlspec/builder/_parsing_utils.py +295 -0
  280. sqlspec/builder/_select.cp314-win_amd64.pyd +0 -0
  281. sqlspec/builder/_select.py +1666 -0
  282. sqlspec/builder/_temporal.cp314-win_amd64.pyd +0 -0
  283. sqlspec/builder/_temporal.py +167 -0
  284. sqlspec/builder/_update.cp314-win_amd64.pyd +0 -0
  285. sqlspec/builder/_update.py +173 -0
  286. sqlspec/builder/_vector_distance.cp314-win_amd64.pyd +0 -0
  287. sqlspec/builder/_vector_distance.py +330 -0
  288. sqlspec/cli.py +1095 -0
  289. sqlspec/config.py +2383 -0
  290. sqlspec/core/__init__.py +372 -0
  291. sqlspec/core/_correlation.cp314-win_amd64.pyd +0 -0
  292. sqlspec/core/_correlation.py +176 -0
  293. sqlspec/core/_pagination.py +42 -0
  294. sqlspec/core/_pool.cp314-win_amd64.pyd +0 -0
  295. sqlspec/core/_pool.py +76 -0
  296. sqlspec/core/cache.cp314-win_amd64.pyd +0 -0
  297. sqlspec/core/cache.py +1085 -0
  298. sqlspec/core/compiler.cp314-win_amd64.pyd +0 -0
  299. sqlspec/core/compiler.py +1090 -0
  300. sqlspec/core/config_runtime.cp314-win_amd64.pyd +0 -0
  301. sqlspec/core/config_runtime.py +174 -0
  302. sqlspec/core/explain.cp314-win_amd64.pyd +0 -0
  303. sqlspec/core/explain.py +275 -0
  304. sqlspec/core/filters.cp314-win_amd64.pyd +0 -0
  305. sqlspec/core/filters.py +969 -0
  306. sqlspec/core/hashing.cp314-win_amd64.pyd +0 -0
  307. sqlspec/core/hashing.py +266 -0
  308. sqlspec/core/metrics.cp314-win_amd64.pyd +0 -0
  309. sqlspec/core/metrics.py +83 -0
  310. sqlspec/core/parameters/__init__.py +72 -0
  311. sqlspec/core/parameters/_alignment.cp314-win_amd64.pyd +0 -0
  312. sqlspec/core/parameters/_alignment.py +283 -0
  313. sqlspec/core/parameters/_converter.cp314-win_amd64.pyd +0 -0
  314. sqlspec/core/parameters/_converter.py +554 -0
  315. sqlspec/core/parameters/_processor.cp314-win_amd64.pyd +0 -0
  316. sqlspec/core/parameters/_processor.py +1182 -0
  317. sqlspec/core/parameters/_registry.cp314-win_amd64.pyd +0 -0
  318. sqlspec/core/parameters/_registry.py +206 -0
  319. sqlspec/core/parameters/_transformers.cp314-win_amd64.pyd +0 -0
  320. sqlspec/core/parameters/_transformers.py +324 -0
  321. sqlspec/core/parameters/_types.cp314-win_amd64.pyd +0 -0
  322. sqlspec/core/parameters/_types.py +536 -0
  323. sqlspec/core/parameters/_validator.cp314-win_amd64.pyd +0 -0
  324. sqlspec/core/parameters/_validator.py +171 -0
  325. sqlspec/core/pipeline.cp314-win_amd64.pyd +0 -0
  326. sqlspec/core/pipeline.py +333 -0
  327. sqlspec/core/query_modifiers.cp314-win_amd64.pyd +0 -0
  328. sqlspec/core/query_modifiers.py +508 -0
  329. sqlspec/core/result/__init__.py +25 -0
  330. sqlspec/core/result/_base.cp314-win_amd64.pyd +0 -0
  331. sqlspec/core/result/_base.py +1232 -0
  332. sqlspec/core/result/_io.cp314-win_amd64.pyd +0 -0
  333. sqlspec/core/result/_io.py +28 -0
  334. sqlspec/core/splitter.cp314-win_amd64.pyd +0 -0
  335. sqlspec/core/splitter.py +1021 -0
  336. sqlspec/core/sqlcommenter.cp314-win_amd64.pyd +0 -0
  337. sqlspec/core/sqlcommenter.py +249 -0
  338. sqlspec/core/stack.cp314-win_amd64.pyd +0 -0
  339. sqlspec/core/stack.py +163 -0
  340. sqlspec/core/statement.cp314-win_amd64.pyd +0 -0
  341. sqlspec/core/statement.py +1865 -0
  342. sqlspec/core/type_converter.cp314-win_amd64.pyd +0 -0
  343. sqlspec/core/type_converter.py +340 -0
  344. sqlspec/data_dictionary/__init__.py +22 -0
  345. sqlspec/data_dictionary/_loader.cp314-win_amd64.pyd +0 -0
  346. sqlspec/data_dictionary/_loader.py +138 -0
  347. sqlspec/data_dictionary/_registry.cp314-win_amd64.pyd +0 -0
  348. sqlspec/data_dictionary/_registry.py +74 -0
  349. sqlspec/data_dictionary/_types.cp314-win_amd64.pyd +0 -0
  350. sqlspec/data_dictionary/_types.py +121 -0
  351. sqlspec/data_dictionary/dialects/__init__.py +21 -0
  352. sqlspec/data_dictionary/dialects/bigquery.cp314-win_amd64.pyd +0 -0
  353. sqlspec/data_dictionary/dialects/bigquery.py +81 -0
  354. sqlspec/data_dictionary/dialects/cockroachdb.cp314-win_amd64.pyd +0 -0
  355. sqlspec/data_dictionary/dialects/cockroachdb.py +54 -0
  356. sqlspec/data_dictionary/dialects/duckdb.cp314-win_amd64.pyd +0 -0
  357. sqlspec/data_dictionary/dialects/duckdb.py +47 -0
  358. sqlspec/data_dictionary/dialects/mysql.cp314-win_amd64.pyd +0 -0
  359. sqlspec/data_dictionary/dialects/mysql.py +53 -0
  360. sqlspec/data_dictionary/dialects/oracle.cp314-win_amd64.pyd +0 -0
  361. sqlspec/data_dictionary/dialects/oracle.py +197 -0
  362. sqlspec/data_dictionary/dialects/postgres.cp314-win_amd64.pyd +0 -0
  363. sqlspec/data_dictionary/dialects/postgres.py +69 -0
  364. sqlspec/data_dictionary/dialects/spanner.cp314-win_amd64.pyd +0 -0
  365. sqlspec/data_dictionary/dialects/spanner.py +37 -0
  366. sqlspec/data_dictionary/dialects/sqlite.cp314-win_amd64.pyd +0 -0
  367. sqlspec/data_dictionary/dialects/sqlite.py +59 -0
  368. sqlspec/data_dictionary/sql/.gitkeep +0 -0
  369. sqlspec/data_dictionary/sql/bigquery/columns.sql +23 -0
  370. sqlspec/data_dictionary/sql/bigquery/foreign_keys.sql +34 -0
  371. sqlspec/data_dictionary/sql/bigquery/indexes.sql +19 -0
  372. sqlspec/data_dictionary/sql/bigquery/tables.sql +33 -0
  373. sqlspec/data_dictionary/sql/bigquery/version.sql +3 -0
  374. sqlspec/data_dictionary/sql/cockroachdb/columns.sql +34 -0
  375. sqlspec/data_dictionary/sql/cockroachdb/foreign_keys.sql +40 -0
  376. sqlspec/data_dictionary/sql/cockroachdb/indexes.sql +32 -0
  377. sqlspec/data_dictionary/sql/cockroachdb/tables.sql +44 -0
  378. sqlspec/data_dictionary/sql/cockroachdb/version.sql +3 -0
  379. sqlspec/data_dictionary/sql/duckdb/columns.sql +23 -0
  380. sqlspec/data_dictionary/sql/duckdb/foreign_keys.sql +36 -0
  381. sqlspec/data_dictionary/sql/duckdb/indexes.sql +19 -0
  382. sqlspec/data_dictionary/sql/duckdb/tables.sql +38 -0
  383. sqlspec/data_dictionary/sql/duckdb/version.sql +3 -0
  384. sqlspec/data_dictionary/sql/mysql/columns.sql +23 -0
  385. sqlspec/data_dictionary/sql/mysql/foreign_keys.sql +28 -0
  386. sqlspec/data_dictionary/sql/mysql/indexes.sql +26 -0
  387. sqlspec/data_dictionary/sql/mysql/tables.sql +33 -0
  388. sqlspec/data_dictionary/sql/mysql/version.sql +3 -0
  389. sqlspec/data_dictionary/sql/oracle/columns.sql +23 -0
  390. sqlspec/data_dictionary/sql/oracle/foreign_keys.sql +48 -0
  391. sqlspec/data_dictionary/sql/oracle/indexes.sql +44 -0
  392. sqlspec/data_dictionary/sql/oracle/tables.sql +25 -0
  393. sqlspec/data_dictionary/sql/oracle/version.sql +20 -0
  394. sqlspec/data_dictionary/sql/postgres/columns.sql +34 -0
  395. sqlspec/data_dictionary/sql/postgres/foreign_keys.sql +40 -0
  396. sqlspec/data_dictionary/sql/postgres/indexes.sql +56 -0
  397. sqlspec/data_dictionary/sql/postgres/tables.sql +44 -0
  398. sqlspec/data_dictionary/sql/postgres/version.sql +3 -0
  399. sqlspec/data_dictionary/sql/spanner/columns.sql +23 -0
  400. sqlspec/data_dictionary/sql/spanner/foreign_keys.sql +70 -0
  401. sqlspec/data_dictionary/sql/spanner/indexes.sql +30 -0
  402. sqlspec/data_dictionary/sql/spanner/tables.sql +9 -0
  403. sqlspec/data_dictionary/sql/spanner/version.sql +3 -0
  404. sqlspec/data_dictionary/sql/sqlite/columns.sql +23 -0
  405. sqlspec/data_dictionary/sql/sqlite/foreign_keys.sql +22 -0
  406. sqlspec/data_dictionary/sql/sqlite/indexes.sql +7 -0
  407. sqlspec/data_dictionary/sql/sqlite/tables.sql +28 -0
  408. sqlspec/data_dictionary/sql/sqlite/version.sql +3 -0
  409. sqlspec/dialects/__init__.py +22 -0
  410. sqlspec/dialects/_compat.cp314-win_amd64.pyd +0 -0
  411. sqlspec/dialects/_compat.py +14 -0
  412. sqlspec/dialects/postgres/__init__.py +9 -0
  413. sqlspec/dialects/postgres/_generators.cp314-win_amd64.pyd +0 -0
  414. sqlspec/dialects/postgres/_generators.py +57 -0
  415. sqlspec/dialects/postgres/_operators.cp314-win_amd64.pyd +0 -0
  416. sqlspec/dialects/postgres/_operators.py +81 -0
  417. sqlspec/dialects/postgres/_paradedb.py +50 -0
  418. sqlspec/dialects/postgres/_pgvector.py +36 -0
  419. sqlspec/dialects/spanner/__init__.py +6 -0
  420. sqlspec/dialects/spanner/_generators.cp314-win_amd64.pyd +0 -0
  421. sqlspec/dialects/spanner/_generators.py +206 -0
  422. sqlspec/dialects/spanner/_spangres.py +77 -0
  423. sqlspec/dialects/spanner/_spanner.py +179 -0
  424. sqlspec/driver/__init__.py +49 -0
  425. sqlspec/driver/_async.cp314-win_amd64.pyd +0 -0
  426. sqlspec/driver/_async.py +1830 -0
  427. sqlspec/driver/_common.cp314-win_amd64.pyd +0 -0
  428. sqlspec/driver/_common.py +2292 -0
  429. sqlspec/driver/_exception_handler.cp314-win_amd64.pyd +0 -0
  430. sqlspec/driver/_exception_handler.py +108 -0
  431. sqlspec/driver/_query_cache.cp314-win_amd64.pyd +0 -0
  432. sqlspec/driver/_query_cache.py +96 -0
  433. sqlspec/driver/_sql_helpers.cp314-win_amd64.pyd +0 -0
  434. sqlspec/driver/_sql_helpers.py +139 -0
  435. sqlspec/driver/_storage_helpers.cp314-win_amd64.pyd +0 -0
  436. sqlspec/driver/_storage_helpers.py +153 -0
  437. sqlspec/driver/_sync.cp314-win_amd64.pyd +0 -0
  438. sqlspec/driver/_sync.py +1817 -0
  439. sqlspec/exceptions.cp314-win_amd64.pyd +0 -0
  440. sqlspec/exceptions.py +480 -0
  441. sqlspec/extensions/__init__.py +0 -0
  442. sqlspec/extensions/adk/__init__.py +84 -0
  443. sqlspec/extensions/adk/_config_utils.py +199 -0
  444. sqlspec/extensions/adk/_types.cp314-win_amd64.pyd +0 -0
  445. sqlspec/extensions/adk/_types.py +41 -0
  446. sqlspec/extensions/adk/artifact/__init__.py +57 -0
  447. sqlspec/extensions/adk/artifact/_types.cp314-win_amd64.pyd +0 -0
  448. sqlspec/extensions/adk/artifact/_types.py +32 -0
  449. sqlspec/extensions/adk/artifact/service.py +508 -0
  450. sqlspec/extensions/adk/artifact/store.py +361 -0
  451. sqlspec/extensions/adk/converters.py +212 -0
  452. sqlspec/extensions/adk/memory/__init__.py +69 -0
  453. sqlspec/extensions/adk/memory/_types.cp314-win_amd64.pyd +0 -0
  454. sqlspec/extensions/adk/memory/_types.py +30 -0
  455. sqlspec/extensions/adk/memory/converters.py +225 -0
  456. sqlspec/extensions/adk/memory/service.py +316 -0
  457. sqlspec/extensions/adk/memory/store.py +525 -0
  458. sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +184 -0
  459. sqlspec/extensions/adk/migrations/__init__.py +0 -0
  460. sqlspec/extensions/adk/service.py +279 -0
  461. sqlspec/extensions/adk/store.py +590 -0
  462. sqlspec/extensions/events/__init__.py +51 -0
  463. sqlspec/extensions/events/_channel.py +703 -0
  464. sqlspec/extensions/events/_hints.cp314-win_amd64.pyd +0 -0
  465. sqlspec/extensions/events/_hints.py +45 -0
  466. sqlspec/extensions/events/_models.py +23 -0
  467. sqlspec/extensions/events/_payload.cp314-win_amd64.pyd +0 -0
  468. sqlspec/extensions/events/_payload.py +69 -0
  469. sqlspec/extensions/events/_protocols.py +134 -0
  470. sqlspec/extensions/events/_queue.py +462 -0
  471. sqlspec/extensions/events/_store.py +209 -0
  472. sqlspec/extensions/events/migrations/0001_create_event_queue.py +59 -0
  473. sqlspec/extensions/events/migrations/__init__.py +3 -0
  474. sqlspec/extensions/fastapi/__init__.py +22 -0
  475. sqlspec/extensions/fastapi/extension.py +391 -0
  476. sqlspec/extensions/fastapi/providers.cp314-win_amd64.pyd +0 -0
  477. sqlspec/extensions/fastapi/providers.py +712 -0
  478. sqlspec/extensions/flask/__init__.py +38 -0
  479. sqlspec/extensions/flask/_state.py +87 -0
  480. sqlspec/extensions/flask/_utils.py +71 -0
  481. sqlspec/extensions/flask/extension.py +539 -0
  482. sqlspec/extensions/litestar/__init__.py +31 -0
  483. sqlspec/extensions/litestar/_utils.py +52 -0
  484. sqlspec/extensions/litestar/channels.py +165 -0
  485. sqlspec/extensions/litestar/cli.py +102 -0
  486. sqlspec/extensions/litestar/config.py +90 -0
  487. sqlspec/extensions/litestar/handlers.py +316 -0
  488. sqlspec/extensions/litestar/migrations/0001_create_session_table.py +137 -0
  489. sqlspec/extensions/litestar/migrations/__init__.py +3 -0
  490. sqlspec/extensions/litestar/plugin.py +1066 -0
  491. sqlspec/extensions/litestar/providers.cp314-win_amd64.pyd +0 -0
  492. sqlspec/extensions/litestar/providers.py +784 -0
  493. sqlspec/extensions/litestar/store.py +298 -0
  494. sqlspec/extensions/otel/__init__.py +58 -0
  495. sqlspec/extensions/prometheus/__init__.py +113 -0
  496. sqlspec/extensions/sanic/__init__.py +19 -0
  497. sqlspec/extensions/sanic/_state.py +43 -0
  498. sqlspec/extensions/sanic/_utils.py +127 -0
  499. sqlspec/extensions/sanic/extension.py +647 -0
  500. sqlspec/extensions/starlette/__init__.py +22 -0
  501. sqlspec/extensions/starlette/_state.py +42 -0
  502. sqlspec/extensions/starlette/_utils.py +96 -0
  503. sqlspec/extensions/starlette/extension.py +374 -0
  504. sqlspec/extensions/starlette/middleware.py +281 -0
  505. sqlspec/loader.cp314-win_amd64.pyd +0 -0
  506. sqlspec/loader.py +727 -0
  507. sqlspec/migrations/__init__.py +39 -0
  508. sqlspec/migrations/base.cp314-win_amd64.pyd +0 -0
  509. sqlspec/migrations/base.py +862 -0
  510. sqlspec/migrations/commands.py +2151 -0
  511. sqlspec/migrations/context.cp314-win_amd64.pyd +0 -0
  512. sqlspec/migrations/context.py +157 -0
  513. sqlspec/migrations/fix.cp314-win_amd64.pyd +0 -0
  514. sqlspec/migrations/fix.py +204 -0
  515. sqlspec/migrations/loaders.cp314-win_amd64.pyd +0 -0
  516. sqlspec/migrations/loaders.py +443 -0
  517. sqlspec/migrations/runner.cp314-win_amd64.pyd +0 -0
  518. sqlspec/migrations/runner.py +1195 -0
  519. sqlspec/migrations/squash.cp314-win_amd64.pyd +0 -0
  520. sqlspec/migrations/squash.py +490 -0
  521. sqlspec/migrations/templates.cp314-win_amd64.pyd +0 -0
  522. sqlspec/migrations/templates.py +234 -0
  523. sqlspec/migrations/tracker.cp314-win_amd64.pyd +0 -0
  524. sqlspec/migrations/tracker.py +792 -0
  525. sqlspec/migrations/utils.cp314-win_amd64.pyd +0 -0
  526. sqlspec/migrations/utils.py +256 -0
  527. sqlspec/migrations/validation.cp314-win_amd64.pyd +0 -0
  528. sqlspec/migrations/validation.py +359 -0
  529. sqlspec/migrations/version.cp314-win_amd64.pyd +0 -0
  530. sqlspec/migrations/version.py +446 -0
  531. sqlspec/observability/__init__.py +57 -0
  532. sqlspec/observability/_common.cp314-win_amd64.pyd +0 -0
  533. sqlspec/observability/_common.py +77 -0
  534. sqlspec/observability/_config.cp314-win_amd64.pyd +0 -0
  535. sqlspec/observability/_config.py +364 -0
  536. sqlspec/observability/_diagnostics.cp314-win_amd64.pyd +0 -0
  537. sqlspec/observability/_diagnostics.py +74 -0
  538. sqlspec/observability/_dispatcher.cp314-win_amd64.pyd +0 -0
  539. sqlspec/observability/_dispatcher.py +200 -0
  540. sqlspec/observability/_formatters/__init__.py +13 -0
  541. sqlspec/observability/_formatters/_aws.cp314-win_amd64.pyd +0 -0
  542. sqlspec/observability/_formatters/_aws.py +102 -0
  543. sqlspec/observability/_formatters/_azure.cp314-win_amd64.pyd +0 -0
  544. sqlspec/observability/_formatters/_azure.py +96 -0
  545. sqlspec/observability/_formatters/_base.cp314-win_amd64.pyd +0 -0
  546. sqlspec/observability/_formatters/_base.py +57 -0
  547. sqlspec/observability/_formatters/_gcp.cp314-win_amd64.pyd +0 -0
  548. sqlspec/observability/_formatters/_gcp.py +131 -0
  549. sqlspec/observability/_formatting.py +58 -0
  550. sqlspec/observability/_observer.cp314-win_amd64.pyd +0 -0
  551. sqlspec/observability/_observer.py +361 -0
  552. sqlspec/observability/_runtime.cp314-win_amd64.pyd +0 -0
  553. sqlspec/observability/_runtime.py +461 -0
  554. sqlspec/observability/_sampling.cp314-win_amd64.pyd +0 -0
  555. sqlspec/observability/_sampling.py +188 -0
  556. sqlspec/observability/_spans.cp314-win_amd64.pyd +0 -0
  557. sqlspec/observability/_spans.py +161 -0
  558. sqlspec/protocols.py +955 -0
  559. sqlspec/py.typed +0 -0
  560. sqlspec/service.py +433 -0
  561. sqlspec/storage/__init__.py +48 -0
  562. sqlspec/storage/_arrow_payload.py +68 -0
  563. sqlspec/storage/_paths.cp314-win_amd64.pyd +0 -0
  564. sqlspec/storage/_paths.py +58 -0
  565. sqlspec/storage/_utils.py +46 -0
  566. sqlspec/storage/backends/__init__.py +1 -0
  567. sqlspec/storage/backends/base.cp314-win_amd64.pyd +0 -0
  568. sqlspec/storage/backends/base.py +374 -0
  569. sqlspec/storage/backends/fsspec.py +574 -0
  570. sqlspec/storage/backends/local.py +468 -0
  571. sqlspec/storage/backends/obstore.py +956 -0
  572. sqlspec/storage/errors.cp314-win_amd64.pyd +0 -0
  573. sqlspec/storage/errors.py +102 -0
  574. sqlspec/storage/pipeline.cp314-win_amd64.pyd +0 -0
  575. sqlspec/storage/pipeline.py +628 -0
  576. sqlspec/storage/registry.cp314-win_amd64.pyd +0 -0
  577. sqlspec/storage/registry.py +329 -0
  578. sqlspec/typing.py +405 -0
  579. sqlspec/utils/__init__.py +7 -0
  580. sqlspec/utils/arrow_helpers.py +384 -0
  581. sqlspec/utils/config_tools.cp314-win_amd64.pyd +0 -0
  582. sqlspec/utils/config_tools.py +314 -0
  583. sqlspec/utils/correlation.cp314-win_amd64.pyd +0 -0
  584. sqlspec/utils/correlation.py +134 -0
  585. sqlspec/utils/deprecation.cp314-win_amd64.pyd +0 -0
  586. sqlspec/utils/deprecation.py +157 -0
  587. sqlspec/utils/dispatch.cp314-win_amd64.pyd +0 -0
  588. sqlspec/utils/dispatch.py +101 -0
  589. sqlspec/utils/fixtures.cp314-win_amd64.pyd +0 -0
  590. sqlspec/utils/fixtures.py +260 -0
  591. sqlspec/utils/logging.cp314-win_amd64.pyd +0 -0
  592. sqlspec/utils/logging.py +251 -0
  593. sqlspec/utils/module_loader.py +306 -0
  594. sqlspec/utils/portal.cp314-win_amd64.pyd +0 -0
  595. sqlspec/utils/portal.py +377 -0
  596. sqlspec/utils/schema.cp314-win_amd64.pyd +0 -0
  597. sqlspec/utils/schema.py +1040 -0
  598. sqlspec/utils/serializers/__init__.py +30 -0
  599. sqlspec/utils/serializers/_json.cp314-win_amd64.pyd +0 -0
  600. sqlspec/utils/serializers/_json.py +415 -0
  601. sqlspec/utils/serializers/_numpy.cp314-win_amd64.pyd +0 -0
  602. sqlspec/utils/serializers/_numpy.py +65 -0
  603. sqlspec/utils/serializers/_schema.cp314-win_amd64.pyd +0 -0
  604. sqlspec/utils/serializers/_schema.py +285 -0
  605. sqlspec/utils/singleton.cp314-win_amd64.pyd +0 -0
  606. sqlspec/utils/singleton.py +41 -0
  607. sqlspec/utils/sync_tools.cp314-win_amd64.pyd +0 -0
  608. sqlspec/utils/sync_tools.py +316 -0
  609. sqlspec/utils/text.cp314-win_amd64.pyd +0 -0
  610. sqlspec/utils/text.py +109 -0
  611. sqlspec/utils/type_converters.cp314-win_amd64.pyd +0 -0
  612. sqlspec/utils/type_converters.py +216 -0
  613. sqlspec/utils/type_guards.cp314-win_amd64.pyd +0 -0
  614. sqlspec/utils/type_guards.py +1508 -0
  615. sqlspec/utils/uuids.cp314-win_amd64.pyd +0 -0
  616. sqlspec/utils/uuids.py +241 -0
  617. sqlspec-0.47.0.dist-info/METADATA +202 -0
  618. sqlspec-0.47.0.dist-info/RECORD +621 -0
  619. sqlspec-0.47.0.dist-info/WHEEL +4 -0
  620. sqlspec-0.47.0.dist-info/entry_points.txt +6 -0
  621. sqlspec-0.47.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,240 @@
1
+ """SQLite database configuration with thread-local connections."""
2
+
3
+ import uuid
4
+ from typing import TYPE_CHECKING, Any, ClassVar, TypedDict
5
+
6
+ from typing_extensions import NotRequired
7
+
8
+ from sqlspec.adapters.sqlite._typing import SqliteConnection, SqliteCursor, SqliteSessionContext
9
+ from sqlspec.adapters.sqlite.core import apply_driver_features, build_connection_config, default_statement_config
10
+ from sqlspec.adapters.sqlite.driver import SqliteDriver, SqliteExceptionHandler
11
+ from sqlspec.adapters.sqlite.pool import SqliteConnectionPool
12
+ from sqlspec.adapters.sqlite.type_converter import register_type_handlers
13
+ from sqlspec.config import ExtensionConfigs, SyncDatabaseConfig
14
+ from sqlspec.driver._sync import SyncPoolConnectionContext, SyncPoolSessionFactory
15
+ from sqlspec.utils.logging import get_logger
16
+
17
+ logger = get_logger("sqlspec.adapters.sqlite")
18
+
19
+ if TYPE_CHECKING:
20
+ from collections.abc import Callable
21
+
22
+ from sqlspec.core import StatementConfig
23
+ from sqlspec.observability import ObservabilityConfig
24
+
25
+
26
+ class SqliteConnectionParams(TypedDict):
27
+ """SQLite connection parameters."""
28
+
29
+ database: NotRequired[str]
30
+ timeout: NotRequired[float]
31
+ detect_types: NotRequired[int]
32
+ isolation_level: "NotRequired[str | None]"
33
+ check_same_thread: NotRequired[bool]
34
+ factory: "NotRequired[type[SqliteConnection] | None]"
35
+ cached_statements: NotRequired[int]
36
+ uri: NotRequired[bool]
37
+
38
+
39
+ class SqliteDriverFeatures(TypedDict):
40
+ """SQLite driver feature configuration.
41
+
42
+ Controls optional type handling and serialization features for SQLite connections.
43
+
44
+ enable_custom_adapters: Enable custom type adapters for JSON/UUID/datetime conversion.
45
+ Defaults to True for enhanced Python type support.
46
+ Set to False only if you need pure SQLite behavior without type conversions.
47
+ json_serializer: Custom JSON serializer function.
48
+ Defaults to sqlspec.utils.serializers.to_json.
49
+ json_deserializer: Custom JSON deserializer function.
50
+ Defaults to sqlspec.utils.serializers.from_json.
51
+ on_connection_create: Callback executed when a connection is created.
52
+ Receives the raw sqlite3 connection for low-level driver configuration.
53
+ Runs after internal setup (PRAGMA optimizations).
54
+ enable_events: Enable database event channel support.
55
+ Defaults to True when extension_config["events"] is configured.
56
+ Provides pub/sub capabilities via table-backed queue (SQLite has no native pub/sub).
57
+ Requires extension_config["events"] for migration setup.
58
+ events_backend: Event channel backend selection.
59
+ Only option: "table_queue" (durable table-backed queue with retries and exactly-once delivery).
60
+ SQLite does not have native pub/sub, so table_queue is the only backend.
61
+ Defaults to "table_queue".
62
+ """
63
+
64
+ enable_custom_adapters: NotRequired[bool]
65
+ json_serializer: "NotRequired[Callable[[Any], str]]"
66
+ json_deserializer: "NotRequired[Callable[[str], Any]]"
67
+ on_connection_create: "NotRequired[Callable[[SqliteConnection], None]]"
68
+ enable_events: NotRequired[bool]
69
+ events_backend: NotRequired[str]
70
+
71
+
72
+ __all__ = ("SqliteConfig", "SqliteConnectionParams", "SqliteDriverFeatures")
73
+
74
+
75
+ class SqliteConnectionContext(SyncPoolConnectionContext):
76
+ """Context manager for Sqlite connections."""
77
+
78
+ __slots__ = ()
79
+
80
+
81
+ class _SqliteSessionConnectionHandler(SyncPoolSessionFactory):
82
+ __slots__ = ()
83
+
84
+
85
+ class SqliteConfig(SyncDatabaseConfig[SqliteConnection, SqliteConnectionPool, SqliteDriver]):
86
+ """SQLite configuration with thread-local connections.
87
+
88
+ Example::
89
+
90
+ config = SqliteConfig(
91
+ connection_config=SqliteConnectionParams(
92
+ database="app.db"
93
+ )
94
+ )
95
+ """
96
+
97
+ driver_type: "ClassVar[type[SqliteDriver]]" = SqliteDriver
98
+ connection_type: "ClassVar[type[SqliteConnection]]" = SqliteConnection
99
+ supports_transactional_ddl: "ClassVar[bool]" = True
100
+ supports_native_arrow_export: "ClassVar[bool]" = True
101
+ supports_native_arrow_import: "ClassVar[bool]" = True
102
+ supports_native_parquet_export: "ClassVar[bool]" = True
103
+ supports_native_parquet_import: "ClassVar[bool]" = True
104
+ _connection_context_class: "ClassVar[type[SqliteConnectionContext]]" = SqliteConnectionContext
105
+ _session_factory_class: "ClassVar[type[_SqliteSessionConnectionHandler]]" = _SqliteSessionConnectionHandler
106
+ _session_context_class: "ClassVar[type[SqliteSessionContext]]" = SqliteSessionContext
107
+ _default_statement_config = default_statement_config
108
+
109
+ def __init__(
110
+ self,
111
+ *,
112
+ connection_config: "SqliteConnectionParams | dict[str, Any] | None" = None,
113
+ connection_instance: "SqliteConnectionPool | None" = None,
114
+ migration_config: "dict[str, Any] | None" = None,
115
+ statement_config: "StatementConfig | None" = None,
116
+ driver_features: "SqliteDriverFeatures | dict[str, Any] | None" = None,
117
+ bind_key: "str | None" = None,
118
+ extension_config: "ExtensionConfigs | None" = None,
119
+ observability_config: "ObservabilityConfig | None" = None,
120
+ **kwargs: Any,
121
+ ) -> None:
122
+ """Initialize SQLite configuration.
123
+
124
+ Args:
125
+ connection_config: Configuration parameters including connection settings
126
+ connection_instance: Pre-created pool instance
127
+ migration_config: Migration configuration
128
+ statement_config: Default SQL statement configuration
129
+ driver_features: Optional driver feature configuration
130
+ bind_key: Optional bind key for the configuration
131
+ extension_config: Extension-specific configuration (e.g., Litestar plugin settings)
132
+ observability_config: Adapter-level observability overrides for lifecycle hooks and observers
133
+ **kwargs: Additional keyword arguments passed to the base configuration.
134
+ """
135
+ config_dict: dict[str, Any] = dict(connection_config) if connection_config else {}
136
+ if "database" not in config_dict or config_dict["database"] == ":memory:":
137
+ config_dict["database"] = f"file:memory_{uuid.uuid4().hex}?mode=memory&cache=private"
138
+ config_dict["uri"] = True
139
+ elif "database" in config_dict:
140
+ database_path = str(config_dict["database"])
141
+ if database_path.startswith("file:") and not config_dict.get("uri"):
142
+ logger.debug(
143
+ "Database URI detected (%s) but uri=True not set. "
144
+ "Auto-enabling URI mode to prevent physical file creation.",
145
+ database_path,
146
+ )
147
+ config_dict["uri"] = True
148
+
149
+ statement_config = statement_config or default_statement_config
150
+ statement_config, driver_features = apply_driver_features(statement_config, driver_features)
151
+
152
+ # Extract user connection hook before storing driver_features
153
+ features_dict = dict(driver_features) if driver_features else {}
154
+ self._user_connection_hook: Callable[[SqliteConnection], None] | None = features_dict.pop(
155
+ "on_connection_create", None
156
+ )
157
+
158
+ super().__init__(
159
+ bind_key=bind_key,
160
+ connection_instance=connection_instance,
161
+ connection_config=config_dict,
162
+ migration_config=migration_config,
163
+ statement_config=statement_config,
164
+ driver_features=features_dict,
165
+ extension_config=extension_config,
166
+ observability_config=observability_config,
167
+ **kwargs,
168
+ )
169
+
170
+ def _create_pool(self) -> SqliteConnectionPool:
171
+ """Create connection pool from configuration."""
172
+ config_dict = build_connection_config(self.connection_config)
173
+
174
+ pool_kwargs: dict[str, Any] = {}
175
+ recycle_seconds = self.connection_config.get("pool_recycle_seconds")
176
+ if recycle_seconds is not None:
177
+ pool_kwargs["recycle_seconds"] = recycle_seconds
178
+
179
+ health_check_interval = self.connection_config.get("health_check_interval")
180
+ if health_check_interval is not None:
181
+ pool_kwargs["health_check_interval"] = health_check_interval
182
+
183
+ enable_optimizations = self.connection_config.get("enable_optimizations")
184
+ if enable_optimizations is not None:
185
+ pool_kwargs["enable_optimizations"] = enable_optimizations
186
+
187
+ pool = SqliteConnectionPool(
188
+ connection_parameters=config_dict, on_connection_create=self._user_connection_hook, **pool_kwargs
189
+ )
190
+
191
+ if self.driver_features.get("enable_custom_adapters", False):
192
+ self._register_type_adapters()
193
+
194
+ return pool
195
+
196
+ def _register_type_adapters(self) -> None:
197
+ """Register custom type adapters and converters for SQLite.
198
+
199
+ Called once during pool creation if enable_custom_adapters is True.
200
+ Registers JSON serialization handlers if configured.
201
+ """
202
+ if self.driver_features.get("enable_custom_adapters", False):
203
+ register_type_handlers(
204
+ json_serializer=self.driver_features.get("json_serializer"),
205
+ json_deserializer=self.driver_features.get("json_deserializer"),
206
+ )
207
+
208
+ def _close_pool(self) -> None:
209
+ """Close the connection pool."""
210
+ if self.connection_instance:
211
+ self.connection_instance.close()
212
+
213
+ def create_connection(self) -> SqliteConnection:
214
+ """Get a SQLite connection from the pool.
215
+
216
+ Returns:
217
+ SqliteConnection: A connection from the pool
218
+ """
219
+ pool = self.provide_pool()
220
+ return pool.acquire()
221
+
222
+ def get_signature_namespace(self) -> "dict[str, Any]":
223
+ """Get the signature namespace for SQLite types.
224
+
225
+ Returns:
226
+ Dictionary mapping type names to types.
227
+ """
228
+ namespace = super().get_signature_namespace()
229
+ namespace.update({
230
+ "SqliteConnectionContext": SqliteConnectionContext,
231
+ "SqliteConnection": SqliteConnection,
232
+ "SqliteConnectionParams": SqliteConnectionParams,
233
+ "SqliteConnectionPool": SqliteConnectionPool,
234
+ "SqliteCursor": SqliteCursor,
235
+ "SqliteDriver": SqliteDriver,
236
+ "SqliteDriverFeatures": SqliteDriverFeatures,
237
+ "SqliteExceptionHandler": SqliteExceptionHandler,
238
+ "SqliteSessionContext": SqliteSessionContext,
239
+ })
240
+ return namespace
@@ -0,0 +1,357 @@
1
+ """SQLite adapter compiled helpers."""
2
+
3
+ from datetime import date, datetime
4
+ from decimal import Decimal
5
+ from typing import TYPE_CHECKING, Any, cast
6
+
7
+ from sqlspec.core import DriverParameterProfile, ParameterStyle, StatementConfig, build_statement_config_from_profile
8
+ from sqlspec.exceptions import (
9
+ CheckViolationError,
10
+ DatabaseConnectionError,
11
+ DataError,
12
+ DeadlockError,
13
+ ForeignKeyViolationError,
14
+ IntegrityError,
15
+ NotNullViolationError,
16
+ OperationalError,
17
+ PermissionDeniedError,
18
+ QueryTimeoutError,
19
+ SQLParsingError,
20
+ SQLSpecError,
21
+ UniqueViolationError,
22
+ )
23
+ from sqlspec.utils.serializers import from_json, to_json
24
+ from sqlspec.utils.type_converters import build_decimal_converter, build_time_iso_converter, build_uuid_coercions
25
+ from sqlspec.utils.type_guards import has_sqlite_error
26
+
27
+ if TYPE_CHECKING:
28
+ from collections.abc import Callable, Mapping, Sequence
29
+
30
+ __all__ = (
31
+ "apply_driver_features",
32
+ "build_connection_config",
33
+ "build_insert_statement",
34
+ "build_profile",
35
+ "build_statement_config",
36
+ "collect_rows",
37
+ "create_mapped_exception",
38
+ "default_statement_config",
39
+ "driver_profile",
40
+ "format_identifier",
41
+ "normalize_execute_many_parameters",
42
+ "normalize_execute_parameters",
43
+ "resolve_rowcount",
44
+ )
45
+
46
+ SQLITE_CONSTRAINT_UNIQUE_CODE = 2067
47
+ SQLITE_CONSTRAINT_FOREIGNKEY_CODE = 787
48
+ SQLITE_CONSTRAINT_NOTNULL_CODE = 1811
49
+ SQLITE_CONSTRAINT_CHECK_CODE = 531
50
+ SQLITE_CONSTRAINT_CODE = 19
51
+ SQLITE_CANTOPEN_CODE = 14
52
+ SQLITE_IOERR_CODE = 10
53
+ SQLITE_MISMATCH_CODE = 20
54
+ SQLITE_BUSY_CODE = 5
55
+ SQLITE_LOCKED_CODE = 6
56
+ SQLITE_INTERRUPT_CODE = 9
57
+ SQLITE_PERM_CODE = 3
58
+ SQLITE_READONLY_CODE = 8
59
+
60
+
61
+ _TIME_TO_ISO = build_time_iso_converter()
62
+ _DECIMAL_TO_STRING = build_decimal_converter(mode="string")
63
+
64
+
65
+ def _bool_to_int(value: bool) -> int:
66
+ return int(value)
67
+
68
+
69
+ def _quote_sqlite_identifier(identifier: str) -> str:
70
+ normalized = identifier.replace('"', '""')
71
+ return f'"{normalized}"'
72
+
73
+
74
+ def format_identifier(identifier: str) -> str:
75
+ cleaned = identifier.strip()
76
+ if not cleaned:
77
+ msg = "Table name must not be empty"
78
+ raise SQLSpecError(msg)
79
+
80
+ if "." not in cleaned:
81
+ return _quote_sqlite_identifier(cleaned)
82
+
83
+ return ".".join(_quote_sqlite_identifier(part) for part in cleaned.split(".") if part)
84
+
85
+
86
+ def build_insert_statement(table: str, columns: "list[str]") -> str:
87
+ column_clause = ", ".join(_quote_sqlite_identifier(column) for column in columns)
88
+ placeholders = ", ".join("?" for _ in columns)
89
+ return f"INSERT INTO {format_identifier(table)} ({column_clause}) VALUES ({placeholders})"
90
+
91
+
92
+ def collect_rows(fetched_data: "list[Any]", description: "Sequence[Any] | None") -> "tuple[list[Any], list[str], int]":
93
+ """Collect SQLite result rows as raw tuples.
94
+
95
+ Returns raw driver-native rows without dict conversion for lazy materialization.
96
+
97
+ Args:
98
+ fetched_data: Raw rows from cursor.fetchall()
99
+ description: Cursor description (tuple of tuples)
100
+
101
+ Returns:
102
+ Tuple of (data, column_names, row_count)
103
+ """
104
+ if not description:
105
+ return [], [], 0
106
+
107
+ column_names = [col[0] for col in description]
108
+ return fetched_data, column_names, len(fetched_data)
109
+
110
+
111
+ def resolve_rowcount(cursor: Any) -> int:
112
+ """Resolve rowcount from a SQLite cursor.
113
+
114
+ Args:
115
+ cursor: SQLite cursor with optional rowcount metadata.
116
+
117
+ Returns:
118
+ Positive rowcount value or 0 when unknown.
119
+ """
120
+ try:
121
+ rowcount = cursor.rowcount
122
+ except AttributeError:
123
+ return 0
124
+
125
+ if isinstance(rowcount, int) and rowcount > 0:
126
+ return rowcount
127
+ return 0
128
+
129
+
130
+ def normalize_execute_parameters(parameters: Any) -> Any:
131
+ """Normalize parameters for SQLite execute calls.
132
+
133
+ Args:
134
+ parameters: Prepared parameters payload.
135
+
136
+ Returns:
137
+ Normalized parameters payload.
138
+ """
139
+ return parameters or ()
140
+
141
+
142
+ def normalize_execute_many_parameters(parameters: Any) -> Any:
143
+ """Normalize parameters for SQLite executemany calls.
144
+
145
+ Args:
146
+ parameters: Prepared parameters payload.
147
+
148
+ Returns:
149
+ Normalized parameters payload.
150
+
151
+ Raises:
152
+ ValueError: When parameters are missing for executemany.
153
+ """
154
+ if not parameters:
155
+ msg = "execute_many requires parameters"
156
+ raise ValueError(msg)
157
+ return parameters
158
+
159
+
160
+ def build_connection_config(connection_config: "Mapping[str, Any]") -> "dict[str, Any]":
161
+ """Build connection configuration for pool creation.
162
+
163
+ Args:
164
+ connection_config: Raw connection configuration mapping.
165
+
166
+ Returns:
167
+ Dictionary with connection parameters.
168
+ """
169
+ excluded_keys = {
170
+ "enable_optimizations",
171
+ "health_check_interval",
172
+ "pool_min_size",
173
+ "pool_max_size",
174
+ "pool_timeout",
175
+ "pool_recycle_seconds",
176
+ "extra",
177
+ }
178
+ return {key: value for key, value in connection_config.items() if value is not None and key not in excluded_keys}
179
+
180
+
181
+ def _create_sqlite_error(
182
+ error: Any, code: "int | None", error_class: type[SQLSpecError], description: str
183
+ ) -> SQLSpecError:
184
+ """Create a SQLSpec exception from a SQLite error.
185
+
186
+ Args:
187
+ error: The original SQLite exception
188
+ code: SQLite extended error code
189
+ error_class: The SQLSpec exception class to instantiate
190
+ description: Human-readable description of the error type
191
+
192
+ Returns:
193
+ A new SQLSpec exception instance with the original as its cause
194
+ """
195
+ code_str = f"[code {code}]" if code else ""
196
+ msg = f"SQLite {description} {code_str}: {error}" if code_str else f"SQLite {description}: {error}"
197
+ exc = error_class(msg)
198
+ exc.__cause__ = cast("BaseException", error)
199
+ return exc
200
+
201
+
202
+ def create_mapped_exception(error: BaseException) -> SQLSpecError:
203
+ """Map SQLite exceptions to SQLSpec exceptions.
204
+
205
+ This is a factory function that returns an exception instance rather than
206
+ raising. This pattern is more robust for use in __exit__ handlers and
207
+ avoids issues with exception control flow in different Python versions.
208
+
209
+ Mapping priority:
210
+ 1. SQLite extended error codes (most reliable)
211
+ 2. SQLite error names
212
+ 3. Error message patterns
213
+ 4. Default SQLSpecError fallback
214
+
215
+ Args:
216
+ error: The SQLite exception to map
217
+
218
+ Returns:
219
+ A SQLSpec exception that wraps the original error
220
+ """
221
+ if has_sqlite_error(error):
222
+ error_code = error.sqlite_errorcode
223
+ error_name = error.sqlite_errorname
224
+ else:
225
+ error_code = None
226
+ error_name = None
227
+ error_msg = str(error).lower()
228
+
229
+ # Check for busy/locked conditions first (deadlock-like scenarios in SQLite)
230
+ # SQLITE_BUSY means another process has the database locked
231
+ # SQLITE_LOCKED means another connection has the table/rows locked
232
+ if error_code == SQLITE_BUSY_CODE or error_name == "SQLITE_BUSY":
233
+ return _create_sqlite_error(error, error_code, DeadlockError, "database busy")
234
+ if error_code == SQLITE_LOCKED_CODE or error_name == "SQLITE_LOCKED":
235
+ return _create_sqlite_error(error, error_code, DeadlockError, "database locked")
236
+ if "locked" in error_msg or "busy" in error_msg:
237
+ return _create_sqlite_error(error, error_code or 0, DeadlockError, "database locked")
238
+
239
+ # Query interruption (timeout-like behavior)
240
+ if error_code == SQLITE_INTERRUPT_CODE or error_name == "SQLITE_INTERRUPT":
241
+ return _create_sqlite_error(error, error_code, QueryTimeoutError, "query interrupted")
242
+ if "interrupt" in error_msg:
243
+ return _create_sqlite_error(error, error_code or 0, QueryTimeoutError, "query interrupted")
244
+
245
+ # Permission errors
246
+ if error_code == SQLITE_PERM_CODE or error_name == "SQLITE_PERM":
247
+ return _create_sqlite_error(error, error_code, PermissionDeniedError, "permission denied")
248
+ if error_code == SQLITE_READONLY_CODE or error_name == "SQLITE_READONLY":
249
+ return _create_sqlite_error(error, error_code, PermissionDeniedError, "database is read-only")
250
+ if "permission denied" in error_msg or "readonly" in error_msg:
251
+ return _create_sqlite_error(error, error_code or 0, PermissionDeniedError, "permission denied")
252
+
253
+ if not error_code:
254
+ if "unique constraint" in error_msg:
255
+ return _create_sqlite_error(error, 0, UniqueViolationError, "unique constraint violation")
256
+ if "foreign key constraint" in error_msg:
257
+ return _create_sqlite_error(error, 0, ForeignKeyViolationError, "foreign key constraint violation")
258
+ if "not null constraint" in error_msg:
259
+ return _create_sqlite_error(error, 0, NotNullViolationError, "not-null constraint violation")
260
+ if "check constraint" in error_msg:
261
+ return _create_sqlite_error(error, 0, CheckViolationError, "check constraint violation")
262
+ if "syntax" in error_msg:
263
+ return _create_sqlite_error(error, None, SQLParsingError, "SQL syntax error")
264
+ return _create_sqlite_error(error, None, SQLSpecError, "database error")
265
+
266
+ # Constraint violations (check extended error codes first)
267
+ if error_code == SQLITE_CONSTRAINT_UNIQUE_CODE or error_name == "SQLITE_CONSTRAINT_UNIQUE":
268
+ return _create_sqlite_error(error, error_code, UniqueViolationError, "unique constraint violation")
269
+ if error_code == SQLITE_CONSTRAINT_FOREIGNKEY_CODE or error_name == "SQLITE_CONSTRAINT_FOREIGNKEY":
270
+ return _create_sqlite_error(error, error_code, ForeignKeyViolationError, "foreign key constraint violation")
271
+ if error_code == SQLITE_CONSTRAINT_NOTNULL_CODE or error_name == "SQLITE_CONSTRAINT_NOTNULL":
272
+ return _create_sqlite_error(error, error_code, NotNullViolationError, "not-null constraint violation")
273
+ if error_code == SQLITE_CONSTRAINT_CHECK_CODE or error_name == "SQLITE_CONSTRAINT_CHECK":
274
+ return _create_sqlite_error(error, error_code, CheckViolationError, "check constraint violation")
275
+ if error_code == SQLITE_CONSTRAINT_CODE or error_name == "SQLITE_CONSTRAINT":
276
+ return _create_sqlite_error(error, error_code, IntegrityError, "integrity constraint violation")
277
+
278
+ # Connection/file errors
279
+ if error_code == SQLITE_CANTOPEN_CODE or error_name == "SQLITE_CANTOPEN":
280
+ return _create_sqlite_error(error, error_code, DatabaseConnectionError, "connection error")
281
+ if error_code == SQLITE_IOERR_CODE or error_name == "SQLITE_IOERR":
282
+ return _create_sqlite_error(error, error_code, OperationalError, "operational error")
283
+
284
+ # Data type errors
285
+ if error_code == SQLITE_MISMATCH_CODE or error_name == "SQLITE_MISMATCH":
286
+ return _create_sqlite_error(error, error_code, DataError, "data error")
287
+
288
+ # SQL syntax errors
289
+ if error_code == 1 or "syntax" in error_msg:
290
+ return _create_sqlite_error(error, error_code, SQLParsingError, "SQL syntax error")
291
+
292
+ return _create_sqlite_error(error, error_code, SQLSpecError, "database error")
293
+
294
+
295
+ def build_profile() -> "DriverParameterProfile":
296
+ """Create the SQLite driver parameter profile."""
297
+
298
+ return DriverParameterProfile(
299
+ name="SQLite",
300
+ default_style=ParameterStyle.QMARK,
301
+ supported_styles={ParameterStyle.QMARK, ParameterStyle.NAMED_COLON},
302
+ default_execution_style=ParameterStyle.QMARK,
303
+ supported_execution_styles={ParameterStyle.QMARK, ParameterStyle.NAMED_COLON},
304
+ has_native_list_expansion=False,
305
+ preserve_parameter_format=True,
306
+ needs_static_script_compilation=False,
307
+ allow_mixed_parameter_styles=False,
308
+ preserve_original_params_for_many=False,
309
+ json_serializer_strategy="helper",
310
+ custom_type_coercions={
311
+ bool: _bool_to_int,
312
+ datetime: _TIME_TO_ISO,
313
+ date: _TIME_TO_ISO,
314
+ Decimal: _DECIMAL_TO_STRING,
315
+ **build_uuid_coercions(),
316
+ },
317
+ default_dialect="sqlite",
318
+ )
319
+
320
+
321
+ driver_profile = build_profile()
322
+
323
+
324
+ def build_statement_config(
325
+ *, json_serializer: "Callable[[Any], str] | None" = None, json_deserializer: "Callable[[str], Any] | None" = None
326
+ ) -> "StatementConfig":
327
+ """Construct the SQLite statement configuration with optional JSON codecs."""
328
+ serializer = json_serializer or to_json
329
+ deserializer = json_deserializer or from_json
330
+ profile = driver_profile
331
+ return build_statement_config_from_profile(
332
+ profile,
333
+ statement_overrides={"dialect": "sqlite", "enable_parameter_type_wrapping": False},
334
+ json_serializer=serializer,
335
+ json_deserializer=deserializer,
336
+ )
337
+
338
+
339
+ default_statement_config = build_statement_config()
340
+
341
+
342
+ def apply_driver_features(
343
+ statement_config: "StatementConfig", driver_features: "Mapping[str, Any] | None"
344
+ ) -> "tuple[StatementConfig, dict[str, Any]]":
345
+ """Apply SQLite driver feature defaults to statement config."""
346
+ features: dict[str, Any] = dict(driver_features) if driver_features else {}
347
+ features.setdefault("enable_custom_adapters", True)
348
+ json_serializer = features.setdefault("json_serializer", to_json)
349
+ json_deserializer = features.setdefault("json_deserializer", from_json)
350
+
351
+ if json_serializer is not None:
352
+ parameter_config = statement_config.parameter_config.with_json_serializers(
353
+ json_serializer, deserializer=json_deserializer
354
+ )
355
+ statement_config = statement_config.replace(parameter_config=parameter_config)
356
+
357
+ return statement_config, features