sqlspec 0.36.0__cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. ac8f31065839703b4e70__mypyc.cpython-310-aarch64-linux-gnu.so +0 -0
  2. sqlspec/__init__.py +140 -0
  3. sqlspec/__main__.py +12 -0
  4. sqlspec/__metadata__.py +14 -0
  5. sqlspec/_serialization.py +315 -0
  6. sqlspec/_typing.py +700 -0
  7. sqlspec/adapters/__init__.py +0 -0
  8. sqlspec/adapters/adbc/__init__.py +5 -0
  9. sqlspec/adapters/adbc/_typing.py +82 -0
  10. sqlspec/adapters/adbc/adk/__init__.py +5 -0
  11. sqlspec/adapters/adbc/adk/store.py +1273 -0
  12. sqlspec/adapters/adbc/config.py +295 -0
  13. sqlspec/adapters/adbc/core.cpython-310-aarch64-linux-gnu.so +0 -0
  14. sqlspec/adapters/adbc/core.py +735 -0
  15. sqlspec/adapters/adbc/data_dictionary.py +334 -0
  16. sqlspec/adapters/adbc/driver.py +529 -0
  17. sqlspec/adapters/adbc/events/__init__.py +5 -0
  18. sqlspec/adapters/adbc/events/store.py +285 -0
  19. sqlspec/adapters/adbc/litestar/__init__.py +5 -0
  20. sqlspec/adapters/adbc/litestar/store.py +502 -0
  21. sqlspec/adapters/adbc/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  22. sqlspec/adapters/adbc/type_converter.py +140 -0
  23. sqlspec/adapters/aiosqlite/__init__.py +25 -0
  24. sqlspec/adapters/aiosqlite/_typing.py +82 -0
  25. sqlspec/adapters/aiosqlite/adk/__init__.py +5 -0
  26. sqlspec/adapters/aiosqlite/adk/store.py +818 -0
  27. sqlspec/adapters/aiosqlite/config.py +334 -0
  28. sqlspec/adapters/aiosqlite/core.cpython-310-aarch64-linux-gnu.so +0 -0
  29. sqlspec/adapters/aiosqlite/core.py +315 -0
  30. sqlspec/adapters/aiosqlite/data_dictionary.py +208 -0
  31. sqlspec/adapters/aiosqlite/driver.py +313 -0
  32. sqlspec/adapters/aiosqlite/events/__init__.py +5 -0
  33. sqlspec/adapters/aiosqlite/events/store.py +20 -0
  34. sqlspec/adapters/aiosqlite/litestar/__init__.py +5 -0
  35. sqlspec/adapters/aiosqlite/litestar/store.py +279 -0
  36. sqlspec/adapters/aiosqlite/pool.py +533 -0
  37. sqlspec/adapters/asyncmy/__init__.py +21 -0
  38. sqlspec/adapters/asyncmy/_typing.py +87 -0
  39. sqlspec/adapters/asyncmy/adk/__init__.py +5 -0
  40. sqlspec/adapters/asyncmy/adk/store.py +703 -0
  41. sqlspec/adapters/asyncmy/config.py +302 -0
  42. sqlspec/adapters/asyncmy/core.cpython-310-aarch64-linux-gnu.so +0 -0
  43. sqlspec/adapters/asyncmy/core.py +360 -0
  44. sqlspec/adapters/asyncmy/data_dictionary.py +124 -0
  45. sqlspec/adapters/asyncmy/driver.py +383 -0
  46. sqlspec/adapters/asyncmy/events/__init__.py +5 -0
  47. sqlspec/adapters/asyncmy/events/store.py +104 -0
  48. sqlspec/adapters/asyncmy/litestar/__init__.py +5 -0
  49. sqlspec/adapters/asyncmy/litestar/store.py +296 -0
  50. sqlspec/adapters/asyncpg/__init__.py +19 -0
  51. sqlspec/adapters/asyncpg/_typing.py +88 -0
  52. sqlspec/adapters/asyncpg/adk/__init__.py +5 -0
  53. sqlspec/adapters/asyncpg/adk/store.py +748 -0
  54. sqlspec/adapters/asyncpg/config.py +569 -0
  55. sqlspec/adapters/asyncpg/core.cpython-310-aarch64-linux-gnu.so +0 -0
  56. sqlspec/adapters/asyncpg/core.py +367 -0
  57. sqlspec/adapters/asyncpg/data_dictionary.py +162 -0
  58. sqlspec/adapters/asyncpg/driver.py +487 -0
  59. sqlspec/adapters/asyncpg/events/__init__.py +6 -0
  60. sqlspec/adapters/asyncpg/events/backend.py +286 -0
  61. sqlspec/adapters/asyncpg/events/store.py +40 -0
  62. sqlspec/adapters/asyncpg/litestar/__init__.py +5 -0
  63. sqlspec/adapters/asyncpg/litestar/store.py +251 -0
  64. sqlspec/adapters/bigquery/__init__.py +14 -0
  65. sqlspec/adapters/bigquery/_typing.py +86 -0
  66. sqlspec/adapters/bigquery/adk/__init__.py +5 -0
  67. sqlspec/adapters/bigquery/adk/store.py +827 -0
  68. sqlspec/adapters/bigquery/config.py +353 -0
  69. sqlspec/adapters/bigquery/core.cpython-310-aarch64-linux-gnu.so +0 -0
  70. sqlspec/adapters/bigquery/core.py +715 -0
  71. sqlspec/adapters/bigquery/data_dictionary.py +128 -0
  72. sqlspec/adapters/bigquery/driver.py +548 -0
  73. sqlspec/adapters/bigquery/events/__init__.py +5 -0
  74. sqlspec/adapters/bigquery/events/store.py +139 -0
  75. sqlspec/adapters/bigquery/litestar/__init__.py +5 -0
  76. sqlspec/adapters/bigquery/litestar/store.py +325 -0
  77. sqlspec/adapters/bigquery/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  78. sqlspec/adapters/bigquery/type_converter.py +107 -0
  79. sqlspec/adapters/cockroach_asyncpg/__init__.py +24 -0
  80. sqlspec/adapters/cockroach_asyncpg/_typing.py +72 -0
  81. sqlspec/adapters/cockroach_asyncpg/adk/__init__.py +3 -0
  82. sqlspec/adapters/cockroach_asyncpg/adk/store.py +410 -0
  83. sqlspec/adapters/cockroach_asyncpg/config.py +238 -0
  84. sqlspec/adapters/cockroach_asyncpg/core.cpython-310-aarch64-linux-gnu.so +0 -0
  85. sqlspec/adapters/cockroach_asyncpg/core.py +55 -0
  86. sqlspec/adapters/cockroach_asyncpg/data_dictionary.py +107 -0
  87. sqlspec/adapters/cockroach_asyncpg/driver.py +144 -0
  88. sqlspec/adapters/cockroach_asyncpg/events/__init__.py +3 -0
  89. sqlspec/adapters/cockroach_asyncpg/events/store.py +20 -0
  90. sqlspec/adapters/cockroach_asyncpg/litestar/__init__.py +3 -0
  91. sqlspec/adapters/cockroach_asyncpg/litestar/store.py +142 -0
  92. sqlspec/adapters/cockroach_psycopg/__init__.py +38 -0
  93. sqlspec/adapters/cockroach_psycopg/_typing.py +129 -0
  94. sqlspec/adapters/cockroach_psycopg/adk/__init__.py +13 -0
  95. sqlspec/adapters/cockroach_psycopg/adk/store.py +868 -0
  96. sqlspec/adapters/cockroach_psycopg/config.py +484 -0
  97. sqlspec/adapters/cockroach_psycopg/core.cpython-310-aarch64-linux-gnu.so +0 -0
  98. sqlspec/adapters/cockroach_psycopg/core.py +63 -0
  99. sqlspec/adapters/cockroach_psycopg/data_dictionary.py +215 -0
  100. sqlspec/adapters/cockroach_psycopg/driver.py +284 -0
  101. sqlspec/adapters/cockroach_psycopg/events/__init__.py +6 -0
  102. sqlspec/adapters/cockroach_psycopg/events/store.py +34 -0
  103. sqlspec/adapters/cockroach_psycopg/litestar/__init__.py +3 -0
  104. sqlspec/adapters/cockroach_psycopg/litestar/store.py +325 -0
  105. sqlspec/adapters/duckdb/__init__.py +25 -0
  106. sqlspec/adapters/duckdb/_typing.py +81 -0
  107. sqlspec/adapters/duckdb/adk/__init__.py +14 -0
  108. sqlspec/adapters/duckdb/adk/store.py +850 -0
  109. sqlspec/adapters/duckdb/config.py +463 -0
  110. sqlspec/adapters/duckdb/core.cpython-310-aarch64-linux-gnu.so +0 -0
  111. sqlspec/adapters/duckdb/core.py +257 -0
  112. sqlspec/adapters/duckdb/data_dictionary.py +140 -0
  113. sqlspec/adapters/duckdb/driver.py +430 -0
  114. sqlspec/adapters/duckdb/events/__init__.py +5 -0
  115. sqlspec/adapters/duckdb/events/store.py +57 -0
  116. sqlspec/adapters/duckdb/litestar/__init__.py +5 -0
  117. sqlspec/adapters/duckdb/litestar/store.py +330 -0
  118. sqlspec/adapters/duckdb/pool.py +293 -0
  119. sqlspec/adapters/duckdb/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  120. sqlspec/adapters/duckdb/type_converter.py +118 -0
  121. sqlspec/adapters/mock/__init__.py +72 -0
  122. sqlspec/adapters/mock/_typing.py +147 -0
  123. sqlspec/adapters/mock/config.py +483 -0
  124. sqlspec/adapters/mock/core.py +319 -0
  125. sqlspec/adapters/mock/data_dictionary.py +366 -0
  126. sqlspec/adapters/mock/driver.py +721 -0
  127. sqlspec/adapters/mysqlconnector/__init__.py +36 -0
  128. sqlspec/adapters/mysqlconnector/_typing.py +141 -0
  129. sqlspec/adapters/mysqlconnector/adk/__init__.py +15 -0
  130. sqlspec/adapters/mysqlconnector/adk/store.py +1060 -0
  131. sqlspec/adapters/mysqlconnector/config.py +394 -0
  132. sqlspec/adapters/mysqlconnector/core.cpython-310-aarch64-linux-gnu.so +0 -0
  133. sqlspec/adapters/mysqlconnector/core.py +303 -0
  134. sqlspec/adapters/mysqlconnector/data_dictionary.py +235 -0
  135. sqlspec/adapters/mysqlconnector/driver.py +483 -0
  136. sqlspec/adapters/mysqlconnector/events/__init__.py +8 -0
  137. sqlspec/adapters/mysqlconnector/events/store.py +98 -0
  138. sqlspec/adapters/mysqlconnector/litestar/__init__.py +5 -0
  139. sqlspec/adapters/mysqlconnector/litestar/store.py +426 -0
  140. sqlspec/adapters/oracledb/__init__.py +60 -0
  141. sqlspec/adapters/oracledb/_numpy_handlers.py +141 -0
  142. sqlspec/adapters/oracledb/_typing.py +182 -0
  143. sqlspec/adapters/oracledb/_uuid_handlers.py +166 -0
  144. sqlspec/adapters/oracledb/adk/__init__.py +10 -0
  145. sqlspec/adapters/oracledb/adk/store.py +2369 -0
  146. sqlspec/adapters/oracledb/config.py +550 -0
  147. sqlspec/adapters/oracledb/core.cpython-310-aarch64-linux-gnu.so +0 -0
  148. sqlspec/adapters/oracledb/core.py +543 -0
  149. sqlspec/adapters/oracledb/data_dictionary.py +536 -0
  150. sqlspec/adapters/oracledb/driver.py +1229 -0
  151. sqlspec/adapters/oracledb/events/__init__.py +16 -0
  152. sqlspec/adapters/oracledb/events/backend.py +347 -0
  153. sqlspec/adapters/oracledb/events/store.py +420 -0
  154. sqlspec/adapters/oracledb/litestar/__init__.py +5 -0
  155. sqlspec/adapters/oracledb/litestar/store.py +781 -0
  156. sqlspec/adapters/oracledb/migrations.py +535 -0
  157. sqlspec/adapters/oracledb/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  158. sqlspec/adapters/oracledb/type_converter.py +211 -0
  159. sqlspec/adapters/psqlpy/__init__.py +17 -0
  160. sqlspec/adapters/psqlpy/_typing.py +79 -0
  161. sqlspec/adapters/psqlpy/adk/__init__.py +5 -0
  162. sqlspec/adapters/psqlpy/adk/store.py +766 -0
  163. sqlspec/adapters/psqlpy/config.py +304 -0
  164. sqlspec/adapters/psqlpy/core.cpython-310-aarch64-linux-gnu.so +0 -0
  165. sqlspec/adapters/psqlpy/core.py +480 -0
  166. sqlspec/adapters/psqlpy/data_dictionary.py +126 -0
  167. sqlspec/adapters/psqlpy/driver.py +438 -0
  168. sqlspec/adapters/psqlpy/events/__init__.py +6 -0
  169. sqlspec/adapters/psqlpy/events/backend.py +310 -0
  170. sqlspec/adapters/psqlpy/events/store.py +20 -0
  171. sqlspec/adapters/psqlpy/litestar/__init__.py +5 -0
  172. sqlspec/adapters/psqlpy/litestar/store.py +270 -0
  173. sqlspec/adapters/psqlpy/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  174. sqlspec/adapters/psqlpy/type_converter.py +113 -0
  175. sqlspec/adapters/psycopg/__init__.py +32 -0
  176. sqlspec/adapters/psycopg/_typing.py +164 -0
  177. sqlspec/adapters/psycopg/adk/__init__.py +10 -0
  178. sqlspec/adapters/psycopg/adk/store.py +1387 -0
  179. sqlspec/adapters/psycopg/config.py +576 -0
  180. sqlspec/adapters/psycopg/core.cpython-310-aarch64-linux-gnu.so +0 -0
  181. sqlspec/adapters/psycopg/core.py +450 -0
  182. sqlspec/adapters/psycopg/data_dictionary.py +289 -0
  183. sqlspec/adapters/psycopg/driver.py +975 -0
  184. sqlspec/adapters/psycopg/events/__init__.py +20 -0
  185. sqlspec/adapters/psycopg/events/backend.py +458 -0
  186. sqlspec/adapters/psycopg/events/store.py +42 -0
  187. sqlspec/adapters/psycopg/litestar/__init__.py +5 -0
  188. sqlspec/adapters/psycopg/litestar/store.py +552 -0
  189. sqlspec/adapters/psycopg/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  190. sqlspec/adapters/psycopg/type_converter.py +93 -0
  191. sqlspec/adapters/pymysql/__init__.py +21 -0
  192. sqlspec/adapters/pymysql/_typing.py +71 -0
  193. sqlspec/adapters/pymysql/adk/__init__.py +5 -0
  194. sqlspec/adapters/pymysql/adk/store.py +540 -0
  195. sqlspec/adapters/pymysql/config.py +195 -0
  196. sqlspec/adapters/pymysql/core.cpython-310-aarch64-linux-gnu.so +0 -0
  197. sqlspec/adapters/pymysql/core.py +299 -0
  198. sqlspec/adapters/pymysql/data_dictionary.py +122 -0
  199. sqlspec/adapters/pymysql/driver.py +259 -0
  200. sqlspec/adapters/pymysql/events/__init__.py +5 -0
  201. sqlspec/adapters/pymysql/events/store.py +50 -0
  202. sqlspec/adapters/pymysql/litestar/__init__.py +5 -0
  203. sqlspec/adapters/pymysql/litestar/store.py +232 -0
  204. sqlspec/adapters/pymysql/pool.py +137 -0
  205. sqlspec/adapters/spanner/__init__.py +40 -0
  206. sqlspec/adapters/spanner/_typing.py +86 -0
  207. sqlspec/adapters/spanner/adk/__init__.py +5 -0
  208. sqlspec/adapters/spanner/adk/store.py +732 -0
  209. sqlspec/adapters/spanner/config.py +352 -0
  210. sqlspec/adapters/spanner/core.cpython-310-aarch64-linux-gnu.so +0 -0
  211. sqlspec/adapters/spanner/core.py +188 -0
  212. sqlspec/adapters/spanner/data_dictionary.py +120 -0
  213. sqlspec/adapters/spanner/dialect/__init__.py +6 -0
  214. sqlspec/adapters/spanner/dialect/_spangres.py +57 -0
  215. sqlspec/adapters/spanner/dialect/_spanner.py +130 -0
  216. sqlspec/adapters/spanner/driver.py +373 -0
  217. sqlspec/adapters/spanner/events/__init__.py +5 -0
  218. sqlspec/adapters/spanner/events/store.py +187 -0
  219. sqlspec/adapters/spanner/litestar/__init__.py +5 -0
  220. sqlspec/adapters/spanner/litestar/store.py +291 -0
  221. sqlspec/adapters/spanner/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  222. sqlspec/adapters/spanner/type_converter.py +331 -0
  223. sqlspec/adapters/sqlite/__init__.py +19 -0
  224. sqlspec/adapters/sqlite/_typing.py +80 -0
  225. sqlspec/adapters/sqlite/adk/__init__.py +5 -0
  226. sqlspec/adapters/sqlite/adk/store.py +958 -0
  227. sqlspec/adapters/sqlite/config.py +280 -0
  228. sqlspec/adapters/sqlite/core.cpython-310-aarch64-linux-gnu.so +0 -0
  229. sqlspec/adapters/sqlite/core.py +312 -0
  230. sqlspec/adapters/sqlite/data_dictionary.py +202 -0
  231. sqlspec/adapters/sqlite/driver.py +359 -0
  232. sqlspec/adapters/sqlite/events/__init__.py +5 -0
  233. sqlspec/adapters/sqlite/events/store.py +20 -0
  234. sqlspec/adapters/sqlite/litestar/__init__.py +5 -0
  235. sqlspec/adapters/sqlite/litestar/store.py +316 -0
  236. sqlspec/adapters/sqlite/pool.py +198 -0
  237. sqlspec/adapters/sqlite/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  238. sqlspec/adapters/sqlite/type_converter.py +114 -0
  239. sqlspec/base.py +747 -0
  240. sqlspec/builder/__init__.py +179 -0
  241. sqlspec/builder/_base.cpython-310-aarch64-linux-gnu.so +0 -0
  242. sqlspec/builder/_base.py +1022 -0
  243. sqlspec/builder/_column.cpython-310-aarch64-linux-gnu.so +0 -0
  244. sqlspec/builder/_column.py +521 -0
  245. sqlspec/builder/_ddl.cpython-310-aarch64-linux-gnu.so +0 -0
  246. sqlspec/builder/_ddl.py +1642 -0
  247. sqlspec/builder/_delete.cpython-310-aarch64-linux-gnu.so +0 -0
  248. sqlspec/builder/_delete.py +95 -0
  249. sqlspec/builder/_dml.cpython-310-aarch64-linux-gnu.so +0 -0
  250. sqlspec/builder/_dml.py +365 -0
  251. sqlspec/builder/_explain.cpython-310-aarch64-linux-gnu.so +0 -0
  252. sqlspec/builder/_explain.py +579 -0
  253. sqlspec/builder/_expression_wrappers.cpython-310-aarch64-linux-gnu.so +0 -0
  254. sqlspec/builder/_expression_wrappers.py +46 -0
  255. sqlspec/builder/_factory.cpython-310-aarch64-linux-gnu.so +0 -0
  256. sqlspec/builder/_factory.py +1697 -0
  257. sqlspec/builder/_insert.cpython-310-aarch64-linux-gnu.so +0 -0
  258. sqlspec/builder/_insert.py +328 -0
  259. sqlspec/builder/_join.cpython-310-aarch64-linux-gnu.so +0 -0
  260. sqlspec/builder/_join.py +499 -0
  261. sqlspec/builder/_merge.cpython-310-aarch64-linux-gnu.so +0 -0
  262. sqlspec/builder/_merge.py +821 -0
  263. sqlspec/builder/_parsing_utils.cpython-310-aarch64-linux-gnu.so +0 -0
  264. sqlspec/builder/_parsing_utils.py +297 -0
  265. sqlspec/builder/_select.cpython-310-aarch64-linux-gnu.so +0 -0
  266. sqlspec/builder/_select.py +1660 -0
  267. sqlspec/builder/_temporal.cpython-310-aarch64-linux-gnu.so +0 -0
  268. sqlspec/builder/_temporal.py +139 -0
  269. sqlspec/builder/_update.cpython-310-aarch64-linux-gnu.so +0 -0
  270. sqlspec/builder/_update.py +173 -0
  271. sqlspec/builder/_vector_expressions.py +267 -0
  272. sqlspec/cli.py +911 -0
  273. sqlspec/config.py +1755 -0
  274. sqlspec/core/__init__.py +374 -0
  275. sqlspec/core/_correlation.cpython-310-aarch64-linux-gnu.so +0 -0
  276. sqlspec/core/_correlation.py +176 -0
  277. sqlspec/core/cache.cpython-310-aarch64-linux-gnu.so +0 -0
  278. sqlspec/core/cache.py +1069 -0
  279. sqlspec/core/compiler.cpython-310-aarch64-linux-gnu.so +0 -0
  280. sqlspec/core/compiler.py +954 -0
  281. sqlspec/core/explain.cpython-310-aarch64-linux-gnu.so +0 -0
  282. sqlspec/core/explain.py +275 -0
  283. sqlspec/core/filters.cpython-310-aarch64-linux-gnu.so +0 -0
  284. sqlspec/core/filters.py +952 -0
  285. sqlspec/core/hashing.cpython-310-aarch64-linux-gnu.so +0 -0
  286. sqlspec/core/hashing.py +262 -0
  287. sqlspec/core/metrics.cpython-310-aarch64-linux-gnu.so +0 -0
  288. sqlspec/core/metrics.py +83 -0
  289. sqlspec/core/parameters/__init__.py +71 -0
  290. sqlspec/core/parameters/_alignment.cpython-310-aarch64-linux-gnu.so +0 -0
  291. sqlspec/core/parameters/_alignment.py +270 -0
  292. sqlspec/core/parameters/_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  293. sqlspec/core/parameters/_converter.py +543 -0
  294. sqlspec/core/parameters/_processor.cpython-310-aarch64-linux-gnu.so +0 -0
  295. sqlspec/core/parameters/_processor.py +505 -0
  296. sqlspec/core/parameters/_registry.cpython-310-aarch64-linux-gnu.so +0 -0
  297. sqlspec/core/parameters/_registry.py +206 -0
  298. sqlspec/core/parameters/_transformers.cpython-310-aarch64-linux-gnu.so +0 -0
  299. sqlspec/core/parameters/_transformers.py +292 -0
  300. sqlspec/core/parameters/_types.cpython-310-aarch64-linux-gnu.so +0 -0
  301. sqlspec/core/parameters/_types.py +499 -0
  302. sqlspec/core/parameters/_validator.cpython-310-aarch64-linux-gnu.so +0 -0
  303. sqlspec/core/parameters/_validator.py +180 -0
  304. sqlspec/core/pipeline.cpython-310-aarch64-linux-gnu.so +0 -0
  305. sqlspec/core/pipeline.py +319 -0
  306. sqlspec/core/query_modifiers.cpython-310-aarch64-linux-gnu.so +0 -0
  307. sqlspec/core/query_modifiers.py +437 -0
  308. sqlspec/core/result/__init__.py +23 -0
  309. sqlspec/core/result/_base.cpython-310-aarch64-linux-gnu.so +0 -0
  310. sqlspec/core/result/_base.py +1121 -0
  311. sqlspec/core/result/_io.cpython-310-aarch64-linux-gnu.so +0 -0
  312. sqlspec/core/result/_io.py +28 -0
  313. sqlspec/core/splitter.cpython-310-aarch64-linux-gnu.so +0 -0
  314. sqlspec/core/splitter.py +966 -0
  315. sqlspec/core/stack.cpython-310-aarch64-linux-gnu.so +0 -0
  316. sqlspec/core/stack.py +163 -0
  317. sqlspec/core/statement.cpython-310-aarch64-linux-gnu.so +0 -0
  318. sqlspec/core/statement.py +1503 -0
  319. sqlspec/core/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  320. sqlspec/core/type_converter.py +339 -0
  321. sqlspec/data_dictionary/__init__.py +22 -0
  322. sqlspec/data_dictionary/_loader.py +123 -0
  323. sqlspec/data_dictionary/_registry.cpython-310-aarch64-linux-gnu.so +0 -0
  324. sqlspec/data_dictionary/_registry.py +74 -0
  325. sqlspec/data_dictionary/_types.cpython-310-aarch64-linux-gnu.so +0 -0
  326. sqlspec/data_dictionary/_types.py +121 -0
  327. sqlspec/data_dictionary/dialects/__init__.py +21 -0
  328. sqlspec/data_dictionary/dialects/bigquery.cpython-310-aarch64-linux-gnu.so +0 -0
  329. sqlspec/data_dictionary/dialects/bigquery.py +49 -0
  330. sqlspec/data_dictionary/dialects/cockroachdb.cpython-310-aarch64-linux-gnu.so +0 -0
  331. sqlspec/data_dictionary/dialects/cockroachdb.py +43 -0
  332. sqlspec/data_dictionary/dialects/duckdb.cpython-310-aarch64-linux-gnu.so +0 -0
  333. sqlspec/data_dictionary/dialects/duckdb.py +47 -0
  334. sqlspec/data_dictionary/dialects/mysql.cpython-310-aarch64-linux-gnu.so +0 -0
  335. sqlspec/data_dictionary/dialects/mysql.py +42 -0
  336. sqlspec/data_dictionary/dialects/oracle.cpython-310-aarch64-linux-gnu.so +0 -0
  337. sqlspec/data_dictionary/dialects/oracle.py +34 -0
  338. sqlspec/data_dictionary/dialects/postgres.cpython-310-aarch64-linux-gnu.so +0 -0
  339. sqlspec/data_dictionary/dialects/postgres.py +46 -0
  340. sqlspec/data_dictionary/dialects/spanner.cpython-310-aarch64-linux-gnu.so +0 -0
  341. sqlspec/data_dictionary/dialects/spanner.py +37 -0
  342. sqlspec/data_dictionary/dialects/sqlite.cpython-310-aarch64-linux-gnu.so +0 -0
  343. sqlspec/data_dictionary/dialects/sqlite.py +42 -0
  344. sqlspec/data_dictionary/sql/.gitkeep +0 -0
  345. sqlspec/data_dictionary/sql/bigquery/columns.sql +23 -0
  346. sqlspec/data_dictionary/sql/bigquery/foreign_keys.sql +34 -0
  347. sqlspec/data_dictionary/sql/bigquery/indexes.sql +19 -0
  348. sqlspec/data_dictionary/sql/bigquery/tables.sql +33 -0
  349. sqlspec/data_dictionary/sql/bigquery/version.sql +3 -0
  350. sqlspec/data_dictionary/sql/cockroachdb/columns.sql +34 -0
  351. sqlspec/data_dictionary/sql/cockroachdb/foreign_keys.sql +40 -0
  352. sqlspec/data_dictionary/sql/cockroachdb/indexes.sql +32 -0
  353. sqlspec/data_dictionary/sql/cockroachdb/tables.sql +44 -0
  354. sqlspec/data_dictionary/sql/cockroachdb/version.sql +3 -0
  355. sqlspec/data_dictionary/sql/duckdb/columns.sql +23 -0
  356. sqlspec/data_dictionary/sql/duckdb/foreign_keys.sql +36 -0
  357. sqlspec/data_dictionary/sql/duckdb/indexes.sql +19 -0
  358. sqlspec/data_dictionary/sql/duckdb/tables.sql +38 -0
  359. sqlspec/data_dictionary/sql/duckdb/version.sql +3 -0
  360. sqlspec/data_dictionary/sql/mysql/columns.sql +23 -0
  361. sqlspec/data_dictionary/sql/mysql/foreign_keys.sql +28 -0
  362. sqlspec/data_dictionary/sql/mysql/indexes.sql +26 -0
  363. sqlspec/data_dictionary/sql/mysql/tables.sql +33 -0
  364. sqlspec/data_dictionary/sql/mysql/version.sql +3 -0
  365. sqlspec/data_dictionary/sql/oracle/columns.sql +23 -0
  366. sqlspec/data_dictionary/sql/oracle/foreign_keys.sql +48 -0
  367. sqlspec/data_dictionary/sql/oracle/indexes.sql +44 -0
  368. sqlspec/data_dictionary/sql/oracle/tables.sql +25 -0
  369. sqlspec/data_dictionary/sql/oracle/version.sql +20 -0
  370. sqlspec/data_dictionary/sql/postgres/columns.sql +34 -0
  371. sqlspec/data_dictionary/sql/postgres/foreign_keys.sql +40 -0
  372. sqlspec/data_dictionary/sql/postgres/indexes.sql +56 -0
  373. sqlspec/data_dictionary/sql/postgres/tables.sql +44 -0
  374. sqlspec/data_dictionary/sql/postgres/version.sql +3 -0
  375. sqlspec/data_dictionary/sql/spanner/columns.sql +23 -0
  376. sqlspec/data_dictionary/sql/spanner/foreign_keys.sql +70 -0
  377. sqlspec/data_dictionary/sql/spanner/indexes.sql +30 -0
  378. sqlspec/data_dictionary/sql/spanner/tables.sql +9 -0
  379. sqlspec/data_dictionary/sql/spanner/version.sql +3 -0
  380. sqlspec/data_dictionary/sql/sqlite/columns.sql +23 -0
  381. sqlspec/data_dictionary/sql/sqlite/foreign_keys.sql +22 -0
  382. sqlspec/data_dictionary/sql/sqlite/indexes.sql +7 -0
  383. sqlspec/data_dictionary/sql/sqlite/tables.sql +28 -0
  384. sqlspec/data_dictionary/sql/sqlite/version.sql +3 -0
  385. sqlspec/driver/__init__.py +32 -0
  386. sqlspec/driver/_async.cpython-310-aarch64-linux-gnu.so +0 -0
  387. sqlspec/driver/_async.py +1737 -0
  388. sqlspec/driver/_common.cpython-310-aarch64-linux-gnu.so +0 -0
  389. sqlspec/driver/_common.py +1478 -0
  390. sqlspec/driver/_sql_helpers.cpython-310-aarch64-linux-gnu.so +0 -0
  391. sqlspec/driver/_sql_helpers.py +148 -0
  392. sqlspec/driver/_storage_helpers.cpython-310-aarch64-linux-gnu.so +0 -0
  393. sqlspec/driver/_storage_helpers.py +144 -0
  394. sqlspec/driver/_sync.cpython-310-aarch64-linux-gnu.so +0 -0
  395. sqlspec/driver/_sync.py +1710 -0
  396. sqlspec/exceptions.py +338 -0
  397. sqlspec/extensions/__init__.py +0 -0
  398. sqlspec/extensions/adk/__init__.py +70 -0
  399. sqlspec/extensions/adk/_types.py +51 -0
  400. sqlspec/extensions/adk/converters.py +172 -0
  401. sqlspec/extensions/adk/memory/__init__.py +69 -0
  402. sqlspec/extensions/adk/memory/_types.py +30 -0
  403. sqlspec/extensions/adk/memory/converters.py +149 -0
  404. sqlspec/extensions/adk/memory/service.py +217 -0
  405. sqlspec/extensions/adk/memory/store.py +569 -0
  406. sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +246 -0
  407. sqlspec/extensions/adk/migrations/__init__.py +0 -0
  408. sqlspec/extensions/adk/service.py +225 -0
  409. sqlspec/extensions/adk/store.py +567 -0
  410. sqlspec/extensions/events/__init__.py +51 -0
  411. sqlspec/extensions/events/_channel.py +703 -0
  412. sqlspec/extensions/events/_hints.py +45 -0
  413. sqlspec/extensions/events/_models.py +23 -0
  414. sqlspec/extensions/events/_payload.py +69 -0
  415. sqlspec/extensions/events/_protocols.py +134 -0
  416. sqlspec/extensions/events/_queue.py +461 -0
  417. sqlspec/extensions/events/_store.py +209 -0
  418. sqlspec/extensions/events/migrations/0001_create_event_queue.py +59 -0
  419. sqlspec/extensions/events/migrations/__init__.py +3 -0
  420. sqlspec/extensions/fastapi/__init__.py +19 -0
  421. sqlspec/extensions/fastapi/extension.py +351 -0
  422. sqlspec/extensions/fastapi/providers.py +607 -0
  423. sqlspec/extensions/flask/__init__.py +37 -0
  424. sqlspec/extensions/flask/_state.py +76 -0
  425. sqlspec/extensions/flask/_utils.py +71 -0
  426. sqlspec/extensions/flask/extension.py +519 -0
  427. sqlspec/extensions/litestar/__init__.py +28 -0
  428. sqlspec/extensions/litestar/_utils.py +52 -0
  429. sqlspec/extensions/litestar/channels.py +165 -0
  430. sqlspec/extensions/litestar/cli.py +102 -0
  431. sqlspec/extensions/litestar/config.py +90 -0
  432. sqlspec/extensions/litestar/handlers.py +316 -0
  433. sqlspec/extensions/litestar/migrations/0001_create_session_table.py +137 -0
  434. sqlspec/extensions/litestar/migrations/__init__.py +3 -0
  435. sqlspec/extensions/litestar/plugin.py +671 -0
  436. sqlspec/extensions/litestar/providers.py +526 -0
  437. sqlspec/extensions/litestar/store.py +296 -0
  438. sqlspec/extensions/otel/__init__.py +58 -0
  439. sqlspec/extensions/prometheus/__init__.py +113 -0
  440. sqlspec/extensions/starlette/__init__.py +19 -0
  441. sqlspec/extensions/starlette/_state.py +30 -0
  442. sqlspec/extensions/starlette/_utils.py +96 -0
  443. sqlspec/extensions/starlette/extension.py +346 -0
  444. sqlspec/extensions/starlette/middleware.py +235 -0
  445. sqlspec/loader.cpython-310-aarch64-linux-gnu.so +0 -0
  446. sqlspec/loader.py +702 -0
  447. sqlspec/migrations/__init__.py +36 -0
  448. sqlspec/migrations/base.py +731 -0
  449. sqlspec/migrations/commands.py +1232 -0
  450. sqlspec/migrations/context.py +157 -0
  451. sqlspec/migrations/fix.py +204 -0
  452. sqlspec/migrations/loaders.py +443 -0
  453. sqlspec/migrations/runner.py +1172 -0
  454. sqlspec/migrations/templates.py +234 -0
  455. sqlspec/migrations/tracker.py +611 -0
  456. sqlspec/migrations/utils.py +256 -0
  457. sqlspec/migrations/validation.py +207 -0
  458. sqlspec/migrations/version.py +446 -0
  459. sqlspec/observability/__init__.py +55 -0
  460. sqlspec/observability/_common.cpython-310-aarch64-linux-gnu.so +0 -0
  461. sqlspec/observability/_common.py +77 -0
  462. sqlspec/observability/_config.cpython-310-aarch64-linux-gnu.so +0 -0
  463. sqlspec/observability/_config.py +348 -0
  464. sqlspec/observability/_diagnostics.cpython-310-aarch64-linux-gnu.so +0 -0
  465. sqlspec/observability/_diagnostics.py +74 -0
  466. sqlspec/observability/_dispatcher.cpython-310-aarch64-linux-gnu.so +0 -0
  467. sqlspec/observability/_dispatcher.py +152 -0
  468. sqlspec/observability/_formatters/__init__.py +13 -0
  469. sqlspec/observability/_formatters/_aws.cpython-310-aarch64-linux-gnu.so +0 -0
  470. sqlspec/observability/_formatters/_aws.py +102 -0
  471. sqlspec/observability/_formatters/_azure.cpython-310-aarch64-linux-gnu.so +0 -0
  472. sqlspec/observability/_formatters/_azure.py +96 -0
  473. sqlspec/observability/_formatters/_base.cpython-310-aarch64-linux-gnu.so +0 -0
  474. sqlspec/observability/_formatters/_base.py +57 -0
  475. sqlspec/observability/_formatters/_gcp.cpython-310-aarch64-linux-gnu.so +0 -0
  476. sqlspec/observability/_formatters/_gcp.py +131 -0
  477. sqlspec/observability/_formatting.py +58 -0
  478. sqlspec/observability/_observer.cpython-310-aarch64-linux-gnu.so +0 -0
  479. sqlspec/observability/_observer.py +357 -0
  480. sqlspec/observability/_runtime.cpython-310-aarch64-linux-gnu.so +0 -0
  481. sqlspec/observability/_runtime.py +420 -0
  482. sqlspec/observability/_sampling.cpython-310-aarch64-linux-gnu.so +0 -0
  483. sqlspec/observability/_sampling.py +188 -0
  484. sqlspec/observability/_spans.cpython-310-aarch64-linux-gnu.so +0 -0
  485. sqlspec/observability/_spans.py +161 -0
  486. sqlspec/protocols.py +916 -0
  487. sqlspec/py.typed +0 -0
  488. sqlspec/storage/__init__.py +48 -0
  489. sqlspec/storage/_utils.py +104 -0
  490. sqlspec/storage/backends/__init__.py +1 -0
  491. sqlspec/storage/backends/base.py +253 -0
  492. sqlspec/storage/backends/fsspec.py +529 -0
  493. sqlspec/storage/backends/local.py +441 -0
  494. sqlspec/storage/backends/obstore.py +916 -0
  495. sqlspec/storage/errors.py +104 -0
  496. sqlspec/storage/pipeline.py +582 -0
  497. sqlspec/storage/registry.py +301 -0
  498. sqlspec/typing.py +395 -0
  499. sqlspec/utils/__init__.py +7 -0
  500. sqlspec/utils/arrow_helpers.py +318 -0
  501. sqlspec/utils/config_tools.py +332 -0
  502. sqlspec/utils/correlation.cpython-310-aarch64-linux-gnu.so +0 -0
  503. sqlspec/utils/correlation.py +134 -0
  504. sqlspec/utils/deprecation.py +190 -0
  505. sqlspec/utils/fixtures.cpython-310-aarch64-linux-gnu.so +0 -0
  506. sqlspec/utils/fixtures.py +258 -0
  507. sqlspec/utils/logging.py +222 -0
  508. sqlspec/utils/module_loader.py +306 -0
  509. sqlspec/utils/portal.cpython-310-aarch64-linux-gnu.so +0 -0
  510. sqlspec/utils/portal.py +375 -0
  511. sqlspec/utils/schema.cpython-310-aarch64-linux-gnu.so +0 -0
  512. sqlspec/utils/schema.py +485 -0
  513. sqlspec/utils/serializers.cpython-310-aarch64-linux-gnu.so +0 -0
  514. sqlspec/utils/serializers.py +408 -0
  515. sqlspec/utils/singleton.cpython-310-aarch64-linux-gnu.so +0 -0
  516. sqlspec/utils/singleton.py +41 -0
  517. sqlspec/utils/sync_tools.cpython-310-aarch64-linux-gnu.so +0 -0
  518. sqlspec/utils/sync_tools.py +311 -0
  519. sqlspec/utils/text.cpython-310-aarch64-linux-gnu.so +0 -0
  520. sqlspec/utils/text.py +108 -0
  521. sqlspec/utils/type_converters.cpython-310-aarch64-linux-gnu.so +0 -0
  522. sqlspec/utils/type_converters.py +128 -0
  523. sqlspec/utils/type_guards.cpython-310-aarch64-linux-gnu.so +0 -0
  524. sqlspec/utils/type_guards.py +1360 -0
  525. sqlspec/utils/uuids.cpython-310-aarch64-linux-gnu.so +0 -0
  526. sqlspec/utils/uuids.py +225 -0
  527. sqlspec-0.36.0.dist-info/METADATA +205 -0
  528. sqlspec-0.36.0.dist-info/RECORD +531 -0
  529. sqlspec-0.36.0.dist-info/WHEEL +7 -0
  530. sqlspec-0.36.0.dist-info/entry_points.txt +2 -0
  531. sqlspec-0.36.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,576 @@
1
+ """Psycopg database configuration with direct field-based configuration."""
2
+
3
+ from typing import TYPE_CHECKING, Any, ClassVar, TypedDict, cast
4
+
5
+ from mypy_extensions import mypyc_attr
6
+ from psycopg.rows import dict_row
7
+ from psycopg_pool import AsyncConnectionPool, ConnectionPool
8
+ from typing_extensions import NotRequired
9
+
10
+ from sqlspec.adapters.psycopg._typing import PsycopgAsyncConnection, PsycopgSyncConnection
11
+ from sqlspec.adapters.psycopg.core import apply_driver_features, default_statement_config
12
+ from sqlspec.adapters.psycopg.driver import (
13
+ PsycopgAsyncCursor,
14
+ PsycopgAsyncDriver,
15
+ PsycopgAsyncExceptionHandler,
16
+ PsycopgAsyncSessionContext,
17
+ PsycopgSyncCursor,
18
+ PsycopgSyncDriver,
19
+ PsycopgSyncExceptionHandler,
20
+ PsycopgSyncSessionContext,
21
+ )
22
+ from sqlspec.adapters.psycopg.type_converter import register_pgvector_async, register_pgvector_sync
23
+ from sqlspec.config import AsyncDatabaseConfig, ExtensionConfigs, SyncDatabaseConfig
24
+ from sqlspec.exceptions import ImproperConfigurationError
25
+ from sqlspec.extensions.events import EventRuntimeHints
26
+ from sqlspec.utils.config_tools import normalize_connection_config, reject_pool_aliases
27
+
28
+ if TYPE_CHECKING:
29
+ from collections.abc import Callable
30
+
31
+ from sqlspec.core import StatementConfig
32
+
33
+
34
+ class PsycopgConnectionParams(TypedDict):
35
+ """Psycopg connection parameters."""
36
+
37
+ conninfo: NotRequired[str]
38
+ host: NotRequired[str]
39
+ port: NotRequired[int]
40
+ user: NotRequired[str]
41
+ password: NotRequired[str]
42
+ dbname: NotRequired[str]
43
+ connect_timeout: NotRequired[int]
44
+ options: NotRequired[str]
45
+ application_name: NotRequired[str]
46
+ sslmode: NotRequired[str]
47
+ sslcert: NotRequired[str]
48
+ sslkey: NotRequired[str]
49
+ sslrootcert: NotRequired[str]
50
+ autocommit: NotRequired[bool]
51
+ extra: NotRequired["dict[str, Any]"]
52
+
53
+
54
+ class PsycopgPoolParams(PsycopgConnectionParams):
55
+ """Psycopg pool parameters."""
56
+
57
+ min_size: NotRequired[int]
58
+ max_size: NotRequired[int]
59
+ name: NotRequired[str]
60
+ timeout: NotRequired[float]
61
+ max_waiting: NotRequired[int]
62
+ max_lifetime: NotRequired[float]
63
+ max_idle: NotRequired[float]
64
+ reconnect_timeout: NotRequired[float]
65
+ num_workers: NotRequired[int]
66
+ configure: NotRequired["Callable[..., Any]"]
67
+ kwargs: NotRequired["dict[str, Any]"]
68
+
69
+
70
+ class PsycopgDriverFeatures(TypedDict):
71
+ """Psycopg driver feature flags.
72
+
73
+ enable_pgvector: Enable automatic pgvector extension support for vector similarity search.
74
+ Requires pgvector-python package (pip install pgvector) and PostgreSQL with pgvector extension.
75
+ Defaults to True when pgvector-python is installed.
76
+ Provides automatic conversion between Python objects and PostgreSQL vector types.
77
+ Enables vector similarity operations and index support.
78
+ Set to False to disable pgvector support even when package is available.
79
+ json_serializer: Custom JSON serializer for StatementConfig parameter handling.
80
+ json_deserializer: Custom JSON deserializer reference stored alongside the serializer for parity with asyncpg.
81
+ enable_events: Enable database event channel support.
82
+ Defaults to True when extension_config["events"] is configured.
83
+ Provides pub/sub capabilities via LISTEN/NOTIFY or table-backed fallback.
84
+ Requires extension_config["events"] for migration setup when using table_queue backend.
85
+ events_backend: Event channel backend selection.
86
+ Options: "listen_notify", "table_queue", "listen_notify_durable"
87
+ - "listen_notify": Zero-copy PostgreSQL LISTEN/NOTIFY (ephemeral, real-time) - coming soon
88
+ - "table_queue": Durable table-backed queue with retries and exactly-once delivery (current default)
89
+ - "listen_notify_durable": Hybrid - real-time + durable (available when native support lands)
90
+ Defaults to "table_queue" until native LISTEN/NOTIFY support is implemented.
91
+ """
92
+
93
+ enable_pgvector: NotRequired[bool]
94
+ json_serializer: NotRequired["Callable[[Any], str]"]
95
+ json_deserializer: NotRequired["Callable[[str], Any]"]
96
+ enable_events: NotRequired[bool]
97
+ events_backend: NotRequired[str]
98
+
99
+
100
+ __all__ = (
101
+ "PsycopgAsyncConfig",
102
+ "PsycopgAsyncCursor",
103
+ "PsycopgConnectionParams",
104
+ "PsycopgDriverFeatures",
105
+ "PsycopgPoolParams",
106
+ "PsycopgSyncConfig",
107
+ "PsycopgSyncCursor",
108
+ )
109
+
110
+
111
+ class PsycopgSyncConnectionContext:
112
+ """Context manager for Psycopg connections."""
113
+
114
+ __slots__ = ("_config", "_ctx")
115
+
116
+ def __init__(self, config: "PsycopgSyncConfig") -> None:
117
+ self._config = config
118
+ self._ctx: Any = None
119
+
120
+ def __enter__(self) -> "PsycopgSyncConnection":
121
+ if self._config.connection_instance:
122
+ self._ctx = self._config.connection_instance.connection()
123
+ return cast("PsycopgSyncConnection", self._ctx.__enter__())
124
+ # Fallback for no pool
125
+ self._ctx = self._config.create_connection()
126
+ return cast("PsycopgSyncConnection", self._ctx)
127
+
128
+ def __exit__(
129
+ self, exc_type: "type[BaseException] | None", exc_val: "BaseException | None", exc_tb: Any
130
+ ) -> bool | None:
131
+ if self._config.connection_instance and self._ctx:
132
+ return cast("bool | None", self._ctx.__exit__(exc_type, exc_val, exc_tb))
133
+ if self._ctx:
134
+ self._ctx.close()
135
+ return None
136
+
137
+
138
+ class _PsycopgSyncSessionConnectionHandler:
139
+ __slots__ = ("_config", "_conn", "_ctx")
140
+
141
+ def __init__(self, config: "PsycopgSyncConfig") -> None:
142
+ self._config = config
143
+ self._ctx: Any = None
144
+ self._conn: PsycopgSyncConnection | None = None
145
+
146
+ def acquire_connection(self) -> "PsycopgSyncConnection":
147
+ if self._config.connection_instance:
148
+ self._ctx = self._config.connection_instance.connection()
149
+ return cast("PsycopgSyncConnection", self._ctx.__enter__())
150
+ self._conn = self._config.create_connection()
151
+ return self._conn
152
+
153
+ def release_connection(self, _conn: "PsycopgSyncConnection") -> None:
154
+ if self._ctx is not None:
155
+ self._ctx.__exit__(None, None, None)
156
+ self._ctx = None
157
+ return
158
+ if self._conn is not None:
159
+ self._conn.close()
160
+ self._conn = None
161
+
162
+
163
+ class PsycopgSyncConfig(SyncDatabaseConfig[PsycopgSyncConnection, ConnectionPool, PsycopgSyncDriver]):
164
+ """Configuration for Psycopg synchronous database connections with direct field-based configuration."""
165
+
166
+ driver_type: "ClassVar[type[PsycopgSyncDriver]]" = PsycopgSyncDriver
167
+ connection_type: "ClassVar[type[PsycopgSyncConnection]]" = PsycopgSyncConnection
168
+ supports_transactional_ddl: "ClassVar[bool]" = True
169
+ supports_native_arrow_export: "ClassVar[bool]" = True
170
+ supports_native_arrow_import: "ClassVar[bool]" = True
171
+ supports_native_parquet_export: "ClassVar[bool]" = True
172
+ supports_native_parquet_import: "ClassVar[bool]" = True
173
+
174
+ def __init__(
175
+ self,
176
+ *,
177
+ connection_config: "PsycopgPoolParams | dict[str, Any] | None" = None,
178
+ connection_instance: "ConnectionPool | None" = None,
179
+ migration_config: "dict[str, Any] | None" = None,
180
+ statement_config: "StatementConfig | None" = None,
181
+ driver_features: "PsycopgDriverFeatures | dict[str, Any] | None" = None,
182
+ bind_key: "str | None" = None,
183
+ extension_config: "ExtensionConfigs | None" = None,
184
+ **kwargs: Any,
185
+ ) -> None:
186
+ """Initialize Psycopg synchronous configuration.
187
+
188
+ Args:
189
+ connection_config: Connection and pool configuration parameters (TypedDict or dict)
190
+ connection_instance: Existing pool instance to use
191
+ migration_config: Migration configuration
192
+ statement_config: Default SQL statement configuration
193
+ driver_features: Optional driver feature configuration
194
+ bind_key: Optional unique identifier for this configuration
195
+ extension_config: Extension-specific configuration (e.g., Litestar plugin settings)
196
+ **kwargs: Additional keyword arguments
197
+ """
198
+ reject_pool_aliases(kwargs)
199
+
200
+ connection_config = normalize_connection_config(connection_config)
201
+
202
+ statement_config = statement_config or default_statement_config
203
+ statement_config, driver_features = apply_driver_features(statement_config, driver_features)
204
+
205
+ super().__init__(
206
+ connection_config=connection_config,
207
+ connection_instance=connection_instance,
208
+ migration_config=migration_config,
209
+ statement_config=statement_config,
210
+ driver_features=driver_features,
211
+ bind_key=bind_key,
212
+ extension_config=extension_config,
213
+ **kwargs,
214
+ )
215
+
216
+ def _create_pool(self) -> "ConnectionPool":
217
+ """Create the actual connection pool."""
218
+ all_config = dict(self.connection_config)
219
+
220
+ pool_parameters = {
221
+ "min_size": all_config.pop("min_size", 4),
222
+ "max_size": all_config.pop("max_size", None),
223
+ "name": all_config.pop("name", None),
224
+ "timeout": all_config.pop("timeout", 30.0),
225
+ "max_waiting": all_config.pop("max_waiting", 0),
226
+ "max_lifetime": all_config.pop("max_lifetime", 3600.0),
227
+ "max_idle": all_config.pop("max_idle", 600.0),
228
+ "reconnect_timeout": all_config.pop("reconnect_timeout", 300.0),
229
+ "num_workers": all_config.pop("num_workers", 3),
230
+ }
231
+
232
+ pool_parameters["configure"] = all_config.pop("configure", self._configure_connection)
233
+
234
+ pool_parameters = {k: v for k, v in pool_parameters.items() if v is not None}
235
+
236
+ conninfo = all_config.pop("conninfo", None)
237
+ if conninfo:
238
+ return ConnectionPool(conninfo, open=True, **pool_parameters)
239
+
240
+ kwargs = all_config.pop("kwargs", {})
241
+ all_config.update(kwargs)
242
+ return ConnectionPool("", kwargs=all_config, open=True, **pool_parameters)
243
+
244
+ def _configure_connection(self, conn: "PsycopgSyncConnection") -> None:
245
+ conn.row_factory = dict_row
246
+ autocommit_setting = self.connection_config.get("autocommit")
247
+ if autocommit_setting is not None:
248
+ conn.autocommit = autocommit_setting
249
+
250
+ if self.driver_features.get("enable_pgvector", False):
251
+ register_pgvector_sync(conn)
252
+
253
+ def _close_pool(self) -> None:
254
+ """Close the actual connection pool."""
255
+ if not self.connection_instance:
256
+ return
257
+
258
+ try:
259
+ self.connection_instance.close()
260
+ finally:
261
+ self.connection_instance = None
262
+
263
+ def create_connection(self) -> "PsycopgSyncConnection":
264
+ """Create a single connection (not from pool).
265
+
266
+ Returns:
267
+ A psycopg Connection instance configured with DictRow.
268
+ """
269
+ if self.connection_instance is None:
270
+ self.connection_instance = self.create_pool()
271
+ return cast("PsycopgSyncConnection", self.connection_instance.getconn()) # pyright: ignore
272
+
273
+ def provide_connection(self, *args: Any, **kwargs: Any) -> "PsycopgSyncConnectionContext":
274
+ """Provide a connection context manager.
275
+
276
+ Args:
277
+ *args: Additional arguments.
278
+ **kwargs: Additional keyword arguments.
279
+
280
+ Returns:
281
+ A psycopg Connection context manager.
282
+ """
283
+ return PsycopgSyncConnectionContext(self)
284
+
285
+ def provide_session(
286
+ self, *_args: Any, statement_config: "StatementConfig | None" = None, **_kwargs: Any
287
+ ) -> "PsycopgSyncSessionContext":
288
+ """Provide a driver session context manager.
289
+
290
+ Args:
291
+ *_args: Additional arguments.
292
+ statement_config: Optional statement configuration override.
293
+ **_kwargs: Additional keyword arguments.
294
+
295
+ Returns:
296
+ A PsycopgSyncDriver session context manager.
297
+ """
298
+ handler = _PsycopgSyncSessionConnectionHandler(self)
299
+
300
+ return PsycopgSyncSessionContext(
301
+ acquire_connection=handler.acquire_connection,
302
+ release_connection=handler.release_connection,
303
+ statement_config=statement_config or self.statement_config or default_statement_config,
304
+ driver_features=self.driver_features,
305
+ prepare_driver=self._prepare_driver,
306
+ )
307
+
308
+ def provide_pool(self, *args: Any, **kwargs: Any) -> "ConnectionPool":
309
+ """Provide pool instance.
310
+
311
+ Returns:
312
+ The connection pool.
313
+ """
314
+ if not self.connection_instance:
315
+ self.connection_instance = self.create_pool()
316
+ return self.connection_instance
317
+
318
+ def get_signature_namespace(self) -> "dict[str, Any]":
319
+ """Get the signature namespace for Psycopg types.
320
+
321
+ This provides all Psycopg-specific types that Litestar needs to recognize
322
+ to avoid serialization attempts.
323
+
324
+ Returns:
325
+ Dictionary mapping type names to types.
326
+ """
327
+ namespace = super().get_signature_namespace()
328
+ namespace.update({
329
+ "PsycopgConnectionParams": PsycopgConnectionParams,
330
+ "PsycopgPoolParams": PsycopgPoolParams,
331
+ "PsycopgSyncConnectionContext": PsycopgSyncConnectionContext,
332
+ "PsycopgSyncConnection": PsycopgSyncConnection,
333
+ "PsycopgSyncCursor": PsycopgSyncCursor,
334
+ "PsycopgSyncDriver": PsycopgSyncDriver,
335
+ "PsycopgSyncExceptionHandler": PsycopgSyncExceptionHandler,
336
+ "PsycopgSyncSessionContext": PsycopgSyncSessionContext,
337
+ })
338
+ return namespace
339
+
340
+ def get_event_runtime_hints(self) -> "EventRuntimeHints":
341
+ """Return polling defaults for PostgreSQL queue fallback."""
342
+
343
+ return EventRuntimeHints(poll_interval=0.5, select_for_update=True, skip_locked=True)
344
+
345
+
346
+ class PsycopgAsyncConnectionContext:
347
+ """Async context manager for Psycopg connections."""
348
+
349
+ __slots__ = ("_config", "_ctx")
350
+
351
+ def __init__(self, config: "PsycopgAsyncConfig") -> None:
352
+ self._config = config
353
+ self._ctx: Any = None
354
+
355
+ async def __aenter__(self) -> "PsycopgAsyncConnection":
356
+ if self._config.connection_instance is None:
357
+ self._config.connection_instance = await self._config.create_pool()
358
+ # pool.connection() returns an async context manager
359
+ if self._config.connection_instance:
360
+ self._ctx = self._config.connection_instance.connection()
361
+ return cast("PsycopgAsyncConnection", await self._ctx.__aenter__())
362
+ msg = "Connection pool not initialized"
363
+ raise ImproperConfigurationError(msg)
364
+
365
+ async def __aexit__(
366
+ self, exc_type: "type[BaseException] | None", exc_val: "BaseException | None", exc_tb: Any
367
+ ) -> bool | None:
368
+ if self._ctx:
369
+ return cast("bool | None", await self._ctx.__aexit__(exc_type, exc_val, exc_tb))
370
+ return None
371
+
372
+
373
+ class _PsycopgAsyncSessionConnectionHandler:
374
+ __slots__ = ("_config", "_ctx")
375
+
376
+ def __init__(self, config: "PsycopgAsyncConfig") -> None:
377
+ self._config = config
378
+ self._ctx: Any = None
379
+
380
+ async def acquire_connection(self) -> "PsycopgAsyncConnection":
381
+ if self._config.connection_instance is None:
382
+ self._config.connection_instance = await self._config.create_pool()
383
+ self._ctx = self._config.connection_instance.connection()
384
+ return cast("PsycopgAsyncConnection", await self._ctx.__aenter__())
385
+
386
+ async def release_connection(self, _conn: "PsycopgAsyncConnection") -> None:
387
+ if self._ctx is None:
388
+ return
389
+ await self._ctx.__aexit__(None, None, None)
390
+ self._ctx = None
391
+
392
+
393
+ @mypyc_attr(native_class=False)
394
+ class PsycopgAsyncConfig(AsyncDatabaseConfig[PsycopgAsyncConnection, AsyncConnectionPool, PsycopgAsyncDriver]):
395
+ """Configuration for Psycopg asynchronous database connections with direct field-based configuration."""
396
+
397
+ driver_type: ClassVar[type[PsycopgAsyncDriver]] = PsycopgAsyncDriver
398
+ connection_type: "ClassVar[type[PsycopgAsyncConnection]]" = PsycopgAsyncConnection
399
+ supports_transactional_ddl: "ClassVar[bool]" = True
400
+ supports_native_arrow_export: ClassVar[bool] = True
401
+ supports_native_arrow_import: ClassVar[bool] = True
402
+ supports_native_parquet_export: ClassVar[bool] = True
403
+ supports_native_parquet_import: ClassVar[bool] = True
404
+
405
+ def __init__(
406
+ self,
407
+ *,
408
+ connection_config: "PsycopgPoolParams | dict[str, Any] | None" = None,
409
+ connection_instance: "AsyncConnectionPool | None" = None,
410
+ migration_config: "dict[str, Any] | None" = None,
411
+ statement_config: "StatementConfig | None" = None,
412
+ driver_features: "PsycopgDriverFeatures | dict[str, Any] | None" = None,
413
+ bind_key: "str | None" = None,
414
+ extension_config: "ExtensionConfigs | None" = None,
415
+ **kwargs: Any,
416
+ ) -> None:
417
+ """Initialize Psycopg asynchronous configuration.
418
+
419
+ Args:
420
+ connection_config: Connection and pool configuration parameters (TypedDict or dict)
421
+ connection_instance: Existing pool instance to use
422
+ migration_config: Migration configuration
423
+ statement_config: Default SQL statement configuration
424
+ driver_features: Optional driver feature configuration
425
+ bind_key: Optional unique identifier for this configuration
426
+ extension_config: Extension-specific configuration (e.g., Litestar plugin settings)
427
+ **kwargs: Additional keyword arguments
428
+ """
429
+ reject_pool_aliases(kwargs)
430
+
431
+ connection_config = normalize_connection_config(connection_config)
432
+
433
+ statement_config = statement_config or default_statement_config
434
+ statement_config, driver_features = apply_driver_features(statement_config, driver_features)
435
+
436
+ super().__init__(
437
+ connection_config=connection_config,
438
+ connection_instance=connection_instance,
439
+ migration_config=migration_config,
440
+ statement_config=statement_config,
441
+ driver_features=driver_features,
442
+ bind_key=bind_key,
443
+ extension_config=extension_config,
444
+ **kwargs,
445
+ )
446
+
447
+ async def _create_pool(self) -> "AsyncConnectionPool":
448
+ """Create the actual async connection pool."""
449
+
450
+ all_config = dict(self.connection_config)
451
+
452
+ pool_parameters = {
453
+ "min_size": all_config.pop("min_size", 4),
454
+ "max_size": all_config.pop("max_size", None),
455
+ "name": all_config.pop("name", None),
456
+ "timeout": all_config.pop("timeout", 30.0),
457
+ "max_waiting": all_config.pop("max_waiting", 0),
458
+ "max_lifetime": all_config.pop("max_lifetime", 3600.0),
459
+ "max_idle": all_config.pop("max_idle", 600.0),
460
+ "reconnect_timeout": all_config.pop("reconnect_timeout", 300.0),
461
+ "num_workers": all_config.pop("num_workers", 3),
462
+ }
463
+
464
+ pool_parameters["configure"] = all_config.pop("configure", self._configure_async_connection)
465
+
466
+ pool_parameters = {k: v for k, v in pool_parameters.items() if v is not None}
467
+
468
+ conninfo = all_config.pop("conninfo", None)
469
+ if conninfo:
470
+ pool = AsyncConnectionPool(conninfo, open=False, **pool_parameters)
471
+ else:
472
+ kwargs = all_config.pop("kwargs", {})
473
+ all_config.update(kwargs)
474
+ pool = AsyncConnectionPool("", kwargs=all_config, open=False, **pool_parameters)
475
+
476
+ await pool.open()
477
+
478
+ return pool
479
+
480
+ async def _configure_async_connection(self, conn: "PsycopgAsyncConnection") -> None:
481
+ conn.row_factory = dict_row
482
+ autocommit_setting = self.connection_config.get("autocommit")
483
+ if autocommit_setting is not None:
484
+ await conn.set_autocommit(autocommit_setting)
485
+
486
+ if self.driver_features.get("enable_pgvector", False):
487
+ await register_pgvector_async(conn)
488
+
489
+ async def _close_pool(self) -> None:
490
+ """Close the actual async connection pool."""
491
+ if not self.connection_instance:
492
+ return
493
+
494
+ try:
495
+ await self.connection_instance.close()
496
+ finally:
497
+ self.connection_instance = None
498
+
499
+ async def create_connection(self) -> "PsycopgAsyncConnection": # pyright: ignore
500
+ """Create a single async connection (not from pool).
501
+
502
+ Returns:
503
+ A psycopg AsyncConnection instance configured with DictRow.
504
+ """
505
+ if self.connection_instance is None:
506
+ self.connection_instance = await self.create_pool()
507
+ return cast("PsycopgAsyncConnection", await self.connection_instance.getconn()) # pyright: ignore
508
+
509
+ def provide_connection(self, *args: Any, **kwargs: Any) -> "PsycopgAsyncConnectionContext": # pyright: ignore
510
+ """Provide an async connection context manager.
511
+
512
+ Args:
513
+ *args: Additional arguments.
514
+ **kwargs: Additional keyword arguments.
515
+
516
+ Returns:
517
+ A psycopg AsyncConnection context manager.
518
+ """
519
+ return PsycopgAsyncConnectionContext(self)
520
+
521
+ def get_signature_namespace(self) -> "dict[str, Any]":
522
+ """Get the signature namespace for PsycopgAsyncConfig types.
523
+
524
+ Returns:
525
+ Dictionary mapping type names to types.
526
+ """
527
+ namespace = super().get_signature_namespace()
528
+ namespace.update({
529
+ "PsycopgAsyncConnectionContext": PsycopgAsyncConnectionContext,
530
+ "PsycopgAsyncConnection": PsycopgAsyncConnection,
531
+ "PsycopgAsyncCursor": PsycopgAsyncCursor,
532
+ "PsycopgAsyncDriver": PsycopgAsyncDriver,
533
+ "PsycopgAsyncExceptionHandler": PsycopgAsyncExceptionHandler,
534
+ "PsycopgAsyncSessionContext": PsycopgAsyncSessionContext,
535
+ "PsycopgConnectionParams": PsycopgConnectionParams,
536
+ "PsycopgPoolParams": PsycopgPoolParams,
537
+ })
538
+ return namespace
539
+
540
+ def provide_session(
541
+ self, *_args: Any, statement_config: "StatementConfig | None" = None, **_kwargs: Any
542
+ ) -> "PsycopgAsyncSessionContext":
543
+ """Provide an async driver session context manager.
544
+
545
+ Args:
546
+ *_args: Additional arguments.
547
+ statement_config: Optional statement configuration override.
548
+ **_kwargs: Additional keyword arguments.
549
+
550
+ Returns:
551
+ A PsycopgAsyncDriver session context manager.
552
+ """
553
+ handler = _PsycopgAsyncSessionConnectionHandler(self)
554
+
555
+ return PsycopgAsyncSessionContext(
556
+ acquire_connection=handler.acquire_connection,
557
+ release_connection=handler.release_connection,
558
+ statement_config=statement_config or self.statement_config or default_statement_config,
559
+ driver_features=self.driver_features,
560
+ prepare_driver=self._prepare_driver,
561
+ )
562
+
563
+ async def provide_pool(self, *args: Any, **kwargs: Any) -> "AsyncConnectionPool":
564
+ """Provide async pool instance.
565
+
566
+ Returns:
567
+ The async connection pool.
568
+ """
569
+ if not self.connection_instance:
570
+ self.connection_instance = await self.create_pool()
571
+ return self.connection_instance
572
+
573
+ def get_event_runtime_hints(self) -> "EventRuntimeHints":
574
+ """Return polling defaults for PostgreSQL queue fallback."""
575
+
576
+ return EventRuntimeHints(poll_interval=0.5, select_for_update=True, skip_locked=True)