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,315 @@
1
+ """Aiosqlite database configuration."""
2
+
3
+ import uuid
4
+ from typing import TYPE_CHECKING, Any, ClassVar, TypedDict, cast
5
+
6
+ from mypy_extensions import mypyc_attr
7
+ from typing_extensions import NotRequired
8
+
9
+ from sqlspec.adapters.aiosqlite._typing import AiosqliteConnection, AiosqliteCursor, AiosqliteSessionContext
10
+ from sqlspec.adapters.aiosqlite.core import apply_driver_features, build_connection_config, default_statement_config
11
+ from sqlspec.adapters.aiosqlite.driver import AiosqliteDriver, AiosqliteExceptionHandler
12
+ from sqlspec.adapters.aiosqlite.pool import (
13
+ AiosqliteConnectionPool,
14
+ AiosqlitePoolConnection,
15
+ AiosqlitePoolConnectionContext,
16
+ )
17
+ from sqlspec.adapters.sqlite.type_converter import register_type_handlers
18
+ from sqlspec.config import AsyncDatabaseConfig, ExtensionConfigs
19
+ from sqlspec.driver._async import AsyncPoolConnectionContext, AsyncPoolSessionFactory
20
+ from sqlspec.utils.config_tools import normalize_connection_config
21
+ from sqlspec.utils.logging import get_logger
22
+
23
+ if TYPE_CHECKING:
24
+ from collections.abc import Awaitable, Callable
25
+ from types import TracebackType
26
+
27
+ from sqlspec.core import StatementConfig
28
+ from sqlspec.observability import ObservabilityConfig
29
+
30
+ __all__ = ("AiosqliteConfig", "AiosqliteConnectionParams", "AiosqliteDriverFeatures", "AiosqlitePoolParams")
31
+
32
+ logger = get_logger("sqlspec.adapters.aiosqlite")
33
+
34
+
35
+ class AiosqliteConnectionParams(TypedDict):
36
+ """TypedDict for aiosqlite connection parameters."""
37
+
38
+ database: NotRequired[str]
39
+ timeout: NotRequired[float]
40
+ detect_types: NotRequired[int]
41
+ isolation_level: NotRequired[str | None]
42
+ check_same_thread: NotRequired[bool]
43
+ cached_statements: NotRequired[int]
44
+ uri: NotRequired[bool]
45
+
46
+
47
+ class AiosqlitePoolParams(AiosqliteConnectionParams):
48
+ """TypedDict for aiosqlite pool parameters, inheriting connection parameters."""
49
+
50
+ pool_size: NotRequired[int]
51
+ connect_timeout: NotRequired[float]
52
+ idle_timeout: NotRequired[float]
53
+ operation_timeout: NotRequired[float]
54
+ extra: NotRequired["dict[str, Any]"]
55
+
56
+
57
+ class AiosqliteDriverFeatures(TypedDict):
58
+ """Aiosqlite driver feature configuration.
59
+
60
+ Controls optional type handling and serialization features for SQLite connections.
61
+
62
+ enable_custom_adapters: Enable custom type adapters for JSON/UUID/datetime conversion.
63
+ Defaults to True for enhanced Python type support.
64
+ Set to False only if you need pure SQLite behavior without type conversions.
65
+ json_serializer: Custom JSON serializer function.
66
+ Defaults to sqlspec.utils.serializers.to_json.
67
+ json_deserializer: Custom JSON deserializer function.
68
+ Defaults to sqlspec.utils.serializers.from_json.
69
+ on_connection_create: Async callback executed when a connection is created.
70
+ Receives the raw aiosqlite connection for low-level driver configuration.
71
+ Runs after internal setup (PRAGMA optimizations).
72
+ enable_events: Enable database event channel support.
73
+ Defaults to True when extension_config["events"] is configured.
74
+ Provides pub/sub capabilities via table-backed queue (SQLite has no native pub/sub).
75
+ Requires extension_config["events"] for migration setup.
76
+ events_backend: Event channel backend selection.
77
+ Only option: "table_queue" (durable table-backed queue with retries and exactly-once delivery).
78
+ SQLite does not have native pub/sub, so table_queue is the only backend.
79
+ Defaults to "table_queue".
80
+ """
81
+
82
+ enable_custom_adapters: NotRequired[bool]
83
+ json_serializer: "NotRequired[Callable[[Any], str]]"
84
+ json_deserializer: "NotRequired[Callable[[str], Any]]"
85
+ on_connection_create: "NotRequired[Callable[[AiosqliteConnection], Awaitable[None]]]"
86
+ enable_events: NotRequired[bool]
87
+ events_backend: NotRequired[str]
88
+
89
+
90
+ class _AiosqliteSessionFactory(AsyncPoolSessionFactory):
91
+ __slots__ = ("_pool_conn",)
92
+
93
+ def __init__(self, config: "AiosqliteConfig") -> None:
94
+ super().__init__(config)
95
+ self._pool_conn: AiosqlitePoolConnection | None = None
96
+
97
+ async def acquire_connection(self) -> "AiosqliteConnection":
98
+ pool = self._config.connection_instance
99
+ if pool is None:
100
+ pool = await self._config.create_pool()
101
+ self._config.connection_instance = pool
102
+ pool_conn = await pool.acquire()
103
+ self._pool_conn = pool_conn
104
+ return cast("AiosqliteConnection", pool_conn.connection)
105
+
106
+ async def release_connection(self, _conn: "AiosqliteConnection", **kwargs: Any) -> None:
107
+ if self._pool_conn is not None and self._config.connection_instance is not None:
108
+ await self._config.connection_instance.release(self._pool_conn)
109
+ self._pool_conn = None
110
+
111
+
112
+ class AiosqliteConnectionContext(AsyncPoolConnectionContext):
113
+ """Async context manager for AioSQLite connections."""
114
+
115
+ __slots__ = ("_ctx",)
116
+
117
+ def __init__(self, config: "AiosqliteConfig") -> None:
118
+ super().__init__(config)
119
+ self._ctx: AiosqlitePoolConnectionContext | None = None
120
+
121
+ async def __aenter__(self) -> AiosqliteConnection:
122
+ pool = self._config.connection_instance
123
+ if pool is None:
124
+ pool = await self._config.create_pool()
125
+ self._config.connection_instance = pool
126
+ self._ctx = pool.get_connection()
127
+ assert self._ctx is not None
128
+ return cast("AiosqliteConnection", await self._ctx.__aenter__())
129
+
130
+ async def __aexit__(
131
+ self, exc_type: "type[BaseException] | None", exc_val: "BaseException | None", exc_tb: "TracebackType | None"
132
+ ) -> bool | None:
133
+ if self._ctx:
134
+ return await self._ctx.__aexit__(exc_type, exc_val, exc_tb)
135
+ return None
136
+
137
+
138
+ @mypyc_attr(native_class=False)
139
+ class AiosqliteConfig(AsyncDatabaseConfig["AiosqliteConnection", AiosqliteConnectionPool, AiosqliteDriver]):
140
+ """Database configuration for AioSQLite engine.
141
+
142
+ Example::
143
+
144
+ config = AiosqliteConfig(
145
+ connection_config=AiosqlitePoolParams(database="app.db")
146
+ )
147
+ """
148
+
149
+ driver_type: "ClassVar[type[AiosqliteDriver]]" = AiosqliteDriver
150
+ connection_type: "ClassVar[type[AiosqliteConnection]]" = AiosqliteConnection
151
+ supports_transactional_ddl: "ClassVar[bool]" = True
152
+ supports_native_arrow_export: "ClassVar[bool]" = True
153
+ supports_native_arrow_import: "ClassVar[bool]" = True
154
+ supports_native_parquet_export: "ClassVar[bool]" = True
155
+ supports_native_parquet_import: "ClassVar[bool]" = True
156
+ _connection_context_class: "ClassVar[type[AiosqliteConnectionContext]]" = AiosqliteConnectionContext
157
+ _session_factory_class: "ClassVar[type[_AiosqliteSessionFactory]]" = _AiosqliteSessionFactory
158
+ _session_context_class: "ClassVar[type[AiosqliteSessionContext]]" = AiosqliteSessionContext
159
+ _default_statement_config = default_statement_config
160
+
161
+ def __init__(
162
+ self,
163
+ *,
164
+ connection_config: "AiosqlitePoolParams | dict[str, Any] | None" = None,
165
+ connection_instance: "AiosqliteConnectionPool | None" = None,
166
+ migration_config: "dict[str, Any] | None" = None,
167
+ statement_config: "StatementConfig | None" = None,
168
+ driver_features: "AiosqliteDriverFeatures | dict[str, Any] | None" = None,
169
+ bind_key: "str | None" = None,
170
+ extension_config: "ExtensionConfigs | None" = None,
171
+ observability_config: "ObservabilityConfig | None" = None,
172
+ **kwargs: Any,
173
+ ) -> None:
174
+ """Initialize AioSQLite configuration.
175
+
176
+ Args:
177
+ connection_config: Connection and pool configuration parameters (TypedDict or dict)
178
+ connection_instance: Optional pre-configured connection pool instance.
179
+ migration_config: Optional migration configuration.
180
+ statement_config: Optional statement configuration.
181
+ driver_features: Optional driver feature configuration.
182
+ bind_key: Optional unique identifier for this configuration.
183
+ extension_config: Extension-specific configuration (e.g., Litestar plugin settings)
184
+ observability_config: Adapter-level observability overrides for lifecycle hooks and observers
185
+ **kwargs: Additional keyword arguments passed to the base configuration.
186
+
187
+ """
188
+ config_dict: dict[str, Any] = dict(connection_config) if connection_config else {}
189
+
190
+ if "database" not in config_dict or config_dict["database"] == ":memory:":
191
+ config_dict["database"] = f"file:memory_{uuid.uuid4().hex}?mode=memory&cache=shared"
192
+ config_dict["uri"] = True
193
+ elif "database" in config_dict:
194
+ database_path = str(config_dict["database"])
195
+ if database_path.startswith("file:") and not config_dict.get("uri"):
196
+ logger.debug(
197
+ "Database URI detected (%s) but uri=True not set. "
198
+ "Auto-enabling URI mode to prevent physical file creation.",
199
+ database_path,
200
+ )
201
+ config_dict["uri"] = True
202
+
203
+ config_dict = normalize_connection_config(config_dict)
204
+
205
+ statement_config = statement_config or default_statement_config
206
+ statement_config, driver_features = apply_driver_features(statement_config, driver_features)
207
+
208
+ # Extract user connection hook before storing driver_features
209
+ features_dict = dict(driver_features) if driver_features else {}
210
+ self._user_connection_hook: Callable[[AiosqliteConnection], Awaitable[None]] | None = features_dict.pop(
211
+ "on_connection_create", None
212
+ )
213
+
214
+ super().__init__(
215
+ connection_config=config_dict,
216
+ connection_instance=connection_instance,
217
+ migration_config=migration_config,
218
+ statement_config=statement_config,
219
+ driver_features=features_dict,
220
+ bind_key=bind_key,
221
+ extension_config=extension_config,
222
+ observability_config=observability_config,
223
+ **kwargs,
224
+ )
225
+
226
+ async def _create_pool(self) -> AiosqliteConnectionPool:
227
+ """Create the connection pool instance.
228
+
229
+ Returns:
230
+ AiosqliteConnectionPool: The connection pool instance.
231
+
232
+ """
233
+ config = {k: v for k, v in self.connection_config.items() if v is not None}
234
+ pool_size = config.pop("pool_size", 5)
235
+ connect_timeout = config.pop("connect_timeout", 30.0)
236
+ idle_timeout = config.pop("idle_timeout", 24 * 60 * 60)
237
+ operation_timeout = config.pop("operation_timeout", 10.0)
238
+
239
+ pool = AiosqliteConnectionPool(
240
+ connection_parameters=build_connection_config(self.connection_config),
241
+ pool_size=pool_size,
242
+ connect_timeout=connect_timeout,
243
+ idle_timeout=idle_timeout,
244
+ operation_timeout=operation_timeout,
245
+ on_connection_create=self._user_connection_hook,
246
+ )
247
+
248
+ if self.driver_features.get("enable_custom_adapters", False):
249
+ self._register_type_adapters()
250
+
251
+ return pool
252
+
253
+ def _register_type_adapters(self) -> None:
254
+ """Register custom type adapters and converters for SQLite.
255
+
256
+ Called once during pool creation if enable_custom_adapters is True.
257
+ Registers JSON serialization handlers if configured.
258
+ """
259
+ if self.driver_features.get("enable_custom_adapters", False):
260
+ register_type_handlers(
261
+ json_serializer=self.driver_features.get("json_serializer"),
262
+ json_deserializer=self.driver_features.get("json_deserializer"),
263
+ )
264
+
265
+ def get_signature_namespace(self) -> "dict[str, Any]":
266
+ """Get the signature namespace for AiosqliteConfig types.
267
+
268
+ Returns:
269
+ Dictionary mapping type names to types.
270
+ """
271
+ namespace = super().get_signature_namespace()
272
+ namespace.update({
273
+ "AiosqliteConnectionContext": AiosqliteConnectionContext,
274
+ "AiosqliteConnection": AiosqliteConnection,
275
+ "AiosqliteConnectionParams": AiosqliteConnectionParams,
276
+ "AiosqliteConnectionPool": AiosqliteConnectionPool,
277
+ "AiosqliteCursor": AiosqliteCursor,
278
+ "AiosqliteDriver": AiosqliteDriver,
279
+ "AiosqliteDriverFeatures": AiosqliteDriverFeatures,
280
+ "AiosqliteExceptionHandler": AiosqliteExceptionHandler,
281
+ "AiosqlitePoolParams": AiosqlitePoolParams,
282
+ "AiosqliteSessionContext": AiosqliteSessionContext,
283
+ })
284
+ return namespace
285
+
286
+ async def create_connection(self) -> "AiosqliteConnection":
287
+ """Create a single async connection from the pool.
288
+
289
+ Returns:
290
+ An aiosqlite connection instance.
291
+
292
+ """
293
+ pool = self.connection_instance
294
+ if pool is None:
295
+ pool = await self.create_pool()
296
+ self.connection_instance = pool
297
+ pool_connection = await pool.acquire()
298
+ return pool_connection.connection
299
+
300
+ async def provide_pool(self) -> AiosqliteConnectionPool:
301
+ """Provide async pool instance.
302
+
303
+ Returns:
304
+ The async connection pool.
305
+
306
+ """
307
+ if not self.connection_instance:
308
+ self.connection_instance = await self.create_pool()
309
+ return self.connection_instance
310
+
311
+ async def _close_pool(self) -> None:
312
+ """Close the connection pool."""
313
+ if self.connection_instance and not self.connection_instance.is_closed:
314
+ await self.connection_instance.close()
315
+ self.connection_instance = None
@@ -0,0 +1,315 @@
1
+ """AIOSQLite 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
+ ForeignKeyViolationError,
13
+ IntegrityError,
14
+ NotNullViolationError,
15
+ OperationalError,
16
+ SQLParsingError,
17
+ SQLSpecError,
18
+ UniqueViolationError,
19
+ )
20
+ from sqlspec.utils.serializers import from_json, to_json
21
+ from sqlspec.utils.type_converters import build_decimal_converter, build_time_iso_converter, build_uuid_coercions
22
+ from sqlspec.utils.type_guards import has_rowcount, has_sqlite_error
23
+
24
+ if TYPE_CHECKING:
25
+ from collections.abc import Callable, Iterable, Mapping, Sequence
26
+
27
+ __all__ = (
28
+ "apply_driver_features",
29
+ "build_connection_config",
30
+ "build_insert_statement",
31
+ "build_profile",
32
+ "build_statement_config",
33
+ "collect_rows",
34
+ "create_mapped_exception",
35
+ "default_statement_config",
36
+ "driver_profile",
37
+ "format_identifier",
38
+ "normalize_execute_many_parameters",
39
+ "normalize_execute_parameters",
40
+ "resolve_rowcount",
41
+ )
42
+
43
+
44
+ _TIME_TO_ISO = build_time_iso_converter()
45
+ _DECIMAL_TO_STRING = build_decimal_converter(mode="string")
46
+
47
+ SQLITE_CONSTRAINT_UNIQUE_CODE = 2067
48
+ SQLITE_CONSTRAINT_FOREIGNKEY_CODE = 787
49
+ SQLITE_CONSTRAINT_NOTNULL_CODE = 1811
50
+ SQLITE_CONSTRAINT_CHECK_CODE = 531
51
+ SQLITE_CONSTRAINT_CODE = 19
52
+ SQLITE_CANTOPEN_CODE = 14
53
+ SQLITE_IOERR_CODE = 10
54
+ SQLITE_MISMATCH_CODE = 20
55
+
56
+
57
+ def _bool_to_int(value: bool) -> int:
58
+ return int(value)
59
+
60
+
61
+ def _quote_sqlite_identifier(identifier: str) -> str:
62
+ normalized = identifier.replace('"', '""')
63
+ return f'"{normalized}"'
64
+
65
+
66
+ def format_identifier(identifier: str) -> str:
67
+ cleaned = identifier.strip()
68
+ if not cleaned:
69
+ msg = "Table name must not be empty"
70
+ raise SQLSpecError(msg)
71
+ parts = [part for part in cleaned.split(".") if part]
72
+ formatted = ".".join(_quote_sqlite_identifier(part) for part in parts)
73
+ return formatted or _quote_sqlite_identifier(cleaned)
74
+
75
+
76
+ def build_insert_statement(table: str, columns: "list[str]") -> str:
77
+ column_clause = ", ".join(_quote_sqlite_identifier(column) for column in columns)
78
+ placeholders = ", ".join("?" for _ in columns)
79
+ return f"INSERT INTO {format_identifier(table)} ({column_clause}) VALUES ({placeholders})"
80
+
81
+
82
+ def collect_rows(
83
+ fetched_data: "Iterable[Any]", description: "Sequence[Any] | None"
84
+ ) -> "tuple[list[Any], list[str], int]":
85
+ """Collect aiosqlite result rows as raw tuples.
86
+
87
+ Returns raw driver-native rows without dict conversion for lazy materialization.
88
+
89
+ Args:
90
+ fetched_data: Raw rows from cursor.fetchall()
91
+ description: Cursor description (tuple of tuples)
92
+
93
+ Returns:
94
+ Tuple of (data, column_names, row_count)
95
+ """
96
+ if not description:
97
+ return [], [], 0
98
+
99
+ column_names = [col[0] for col in description]
100
+ data = list(fetched_data)
101
+ return data, column_names, len(data)
102
+
103
+
104
+ def resolve_rowcount(cursor: Any) -> int:
105
+ """Resolve rowcount from an aiosqlite cursor.
106
+
107
+ Args:
108
+ cursor: Aiosqlite cursor with optional rowcount metadata.
109
+
110
+ Returns:
111
+ Positive rowcount value or 0 when unknown.
112
+ """
113
+ if not has_rowcount(cursor):
114
+ return 0
115
+ rowcount = cursor.rowcount
116
+ if isinstance(rowcount, int) and rowcount > 0:
117
+ return rowcount
118
+ return 0
119
+
120
+
121
+ def normalize_execute_parameters(parameters: Any) -> Any:
122
+ """Normalize parameters for SQLite execute calls.
123
+
124
+ Args:
125
+ parameters: Prepared parameters payload.
126
+
127
+ Returns:
128
+ Normalized parameters payload.
129
+ """
130
+ return parameters or ()
131
+
132
+
133
+ def normalize_execute_many_parameters(parameters: Any) -> Any:
134
+ """Normalize parameters for SQLite executemany calls.
135
+
136
+ Args:
137
+ parameters: Prepared parameters payload.
138
+
139
+ Returns:
140
+ Normalized parameters payload.
141
+
142
+ Raises:
143
+ ValueError: When parameters are missing for executemany.
144
+ """
145
+ if not parameters:
146
+ msg = "execute_many requires parameters"
147
+ raise ValueError(msg)
148
+ return parameters
149
+
150
+
151
+ def build_connection_config(connection_config: "Mapping[str, Any]") -> "dict[str, Any]":
152
+ """Build connection configuration for pool creation.
153
+
154
+ Args:
155
+ connection_config: Raw connection configuration mapping.
156
+
157
+ Returns:
158
+ Dictionary with connection parameters.
159
+ """
160
+ excluded_keys = {
161
+ "pool_size",
162
+ "connect_timeout",
163
+ "idle_timeout",
164
+ "operation_timeout",
165
+ "extra",
166
+ "pool_min_size",
167
+ "pool_max_size",
168
+ "pool_timeout",
169
+ "pool_recycle_seconds",
170
+ }
171
+ return {key: value for key, value in connection_config.items() if key not in excluded_keys}
172
+
173
+
174
+ def _create_aiosqlite_error(
175
+ error: Any, code: "int | None", error_class: type[SQLSpecError], description: str
176
+ ) -> SQLSpecError:
177
+ """Create a SQLSpec exception from an aiosqlite error.
178
+
179
+ Args:
180
+ error: The original aiosqlite exception
181
+ code: SQLite extended error code
182
+ error_class: The SQLSpec exception class to instantiate
183
+ description: Human-readable description of the error type
184
+
185
+ Returns:
186
+ A new SQLSpec exception instance with the original as its cause
187
+ """
188
+ code_str = f"[code {code}]" if code else ""
189
+ msg = f"AIOSQLite {description} {code_str}: {error}" if code_str else f"AIOSQLite {description}: {error}"
190
+ exc = error_class(msg)
191
+ exc.__cause__ = cast("BaseException", error)
192
+ return exc
193
+
194
+
195
+ def create_mapped_exception(error: BaseException) -> SQLSpecError:
196
+ """Map aiosqlite exceptions to SQLSpec exceptions.
197
+
198
+ This is a factory function that returns an exception instance rather than
199
+ raising. This pattern is more robust for use in __aexit__ handlers and
200
+ avoids issues with exception control flow in different Python versions.
201
+
202
+ Args:
203
+ error: The aiosqlite exception to map
204
+
205
+ Returns:
206
+ A SQLSpec exception that wraps the original error
207
+ """
208
+ if has_sqlite_error(error):
209
+ error_code = error.sqlite_errorcode
210
+ error_name = error.sqlite_errorname
211
+ else:
212
+ error_code = None
213
+ error_name = None
214
+ error_msg = str(error).lower()
215
+
216
+ if "locked" in error_msg:
217
+ msg = f"AIOSQLite database locked: {error}. Consider enabling WAL mode or reducing concurrency."
218
+ exc = SQLSpecError(msg)
219
+ exc.__cause__ = error # pyright: ignore[reportAttributeAccessIssue]
220
+ return exc
221
+
222
+ if not error_code:
223
+ if "unique constraint" in error_msg:
224
+ return _create_aiosqlite_error(error, 0, UniqueViolationError, "unique constraint violation")
225
+ if "foreign key constraint" in error_msg:
226
+ return _create_aiosqlite_error(error, 0, ForeignKeyViolationError, "foreign key constraint violation")
227
+ if "not null constraint" in error_msg:
228
+ return _create_aiosqlite_error(error, 0, NotNullViolationError, "not-null constraint violation")
229
+ if "check constraint" in error_msg:
230
+ return _create_aiosqlite_error(error, 0, CheckViolationError, "check constraint violation")
231
+ if "syntax" in error_msg:
232
+ return _create_aiosqlite_error(error, None, SQLParsingError, "SQL syntax error")
233
+ return _create_aiosqlite_error(error, None, SQLSpecError, "database error")
234
+
235
+ if error_code == SQLITE_CONSTRAINT_UNIQUE_CODE or error_name == "SQLITE_CONSTRAINT_UNIQUE":
236
+ return _create_aiosqlite_error(error, error_code, UniqueViolationError, "unique constraint violation")
237
+ if error_code == SQLITE_CONSTRAINT_FOREIGNKEY_CODE or error_name == "SQLITE_CONSTRAINT_FOREIGNKEY":
238
+ return _create_aiosqlite_error(error, error_code, ForeignKeyViolationError, "foreign key constraint violation")
239
+ if error_code == SQLITE_CONSTRAINT_NOTNULL_CODE or error_name == "SQLITE_CONSTRAINT_NOTNULL":
240
+ return _create_aiosqlite_error(error, error_code, NotNullViolationError, "not-null constraint violation")
241
+ if error_code == SQLITE_CONSTRAINT_CHECK_CODE or error_name == "SQLITE_CONSTRAINT_CHECK":
242
+ return _create_aiosqlite_error(error, error_code, CheckViolationError, "check constraint violation")
243
+ if error_code == SQLITE_CONSTRAINT_CODE or error_name == "SQLITE_CONSTRAINT":
244
+ return _create_aiosqlite_error(error, error_code, IntegrityError, "integrity constraint violation")
245
+ if error_code == SQLITE_CANTOPEN_CODE or error_name == "SQLITE_CANTOPEN":
246
+ return _create_aiosqlite_error(error, error_code, DatabaseConnectionError, "connection error")
247
+ if error_code == SQLITE_IOERR_CODE or error_name == "SQLITE_IOERR":
248
+ return _create_aiosqlite_error(error, error_code, OperationalError, "operational error")
249
+ if error_code == SQLITE_MISMATCH_CODE or error_name == "SQLITE_MISMATCH":
250
+ return _create_aiosqlite_error(error, error_code, DataError, "data error")
251
+ if error_code == 1 or "syntax" in error_msg:
252
+ return _create_aiosqlite_error(error, error_code, SQLParsingError, "SQL syntax error")
253
+ return _create_aiosqlite_error(error, error_code, SQLSpecError, "database error")
254
+
255
+
256
+ def build_profile() -> "DriverParameterProfile":
257
+ """Create the AIOSQLite driver parameter profile."""
258
+
259
+ return DriverParameterProfile(
260
+ name="AIOSQLite",
261
+ default_style=ParameterStyle.QMARK,
262
+ supported_styles={ParameterStyle.QMARK},
263
+ default_execution_style=ParameterStyle.QMARK,
264
+ supported_execution_styles={ParameterStyle.QMARK},
265
+ has_native_list_expansion=False,
266
+ preserve_parameter_format=True,
267
+ needs_static_script_compilation=False,
268
+ allow_mixed_parameter_styles=False,
269
+ preserve_original_params_for_many=False,
270
+ json_serializer_strategy="helper",
271
+ custom_type_coercions={
272
+ bool: _bool_to_int,
273
+ datetime: _TIME_TO_ISO,
274
+ date: _TIME_TO_ISO,
275
+ Decimal: _DECIMAL_TO_STRING,
276
+ **build_uuid_coercions(),
277
+ },
278
+ default_dialect="sqlite",
279
+ )
280
+
281
+
282
+ driver_profile = build_profile()
283
+
284
+
285
+ def build_statement_config(
286
+ *, json_serializer: "Callable[[Any], str] | None" = None, json_deserializer: "Callable[[str], Any] | None" = None
287
+ ) -> "StatementConfig":
288
+ """Construct the AIOSQLite statement configuration with optional JSON codecs."""
289
+ serializer = json_serializer or to_json
290
+ deserializer = json_deserializer or from_json
291
+ profile = driver_profile
292
+ return build_statement_config_from_profile(
293
+ profile, statement_overrides={"dialect": "sqlite"}, json_serializer=serializer, json_deserializer=deserializer
294
+ )
295
+
296
+
297
+ default_statement_config = build_statement_config()
298
+
299
+
300
+ def apply_driver_features(
301
+ statement_config: "StatementConfig", driver_features: "Mapping[str, Any] | None"
302
+ ) -> "tuple[StatementConfig, dict[str, Any]]":
303
+ """Apply AIOSQLite driver feature defaults to statement config."""
304
+ features: dict[str, Any] = dict(driver_features) if driver_features else {}
305
+ features.setdefault("enable_custom_adapters", True)
306
+ json_serializer = features.setdefault("json_serializer", to_json)
307
+ json_deserializer = features.setdefault("json_deserializer", from_json)
308
+
309
+ if json_serializer is not None:
310
+ parameter_config = statement_config.parameter_config.with_json_serializers(
311
+ json_serializer, deserializer=json_deserializer
312
+ )
313
+ statement_config = statement_config.replace(parameter_config=parameter_config)
314
+
315
+ return statement_config, features