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,480 @@
1
+ """AsyncPG adapter compiled helpers."""
2
+
3
+ import datetime
4
+ import importlib
5
+ import re
6
+ from collections.abc import Sized
7
+ from typing import TYPE_CHECKING, Any, Final, NamedTuple
8
+
9
+ import asyncpg
10
+
11
+ from sqlspec.core import DriverParameterProfile, ParameterStyle, StatementConfig, build_statement_config_from_profile
12
+ from sqlspec.core.config_runtime import (
13
+ build_postgres_extension_probe_names,
14
+ resolve_postgres_extension_state,
15
+ resolve_runtime_statement_config,
16
+ )
17
+ from sqlspec.exceptions import (
18
+ CheckViolationError,
19
+ ConnectionTimeoutError,
20
+ DeadlockError,
21
+ ForeignKeyViolationError,
22
+ IntegrityError,
23
+ NotNullViolationError,
24
+ PermissionDeniedError,
25
+ QueryTimeoutError,
26
+ SerializationConflictError,
27
+ SQLParsingError,
28
+ SQLSpecError,
29
+ UniqueViolationError,
30
+ map_sqlstate_to_exception,
31
+ )
32
+ from sqlspec.typing import PGVECTOR_INSTALLED
33
+ from sqlspec.utils.dispatch import TypeDispatcher
34
+ from sqlspec.utils.logging import get_logger
35
+ from sqlspec.utils.serializers import from_json, to_json
36
+ from sqlspec.utils.type_converters import build_uuid_coercions
37
+ from sqlspec.utils.type_guards import has_sqlstate
38
+
39
+ if TYPE_CHECKING:
40
+ from collections.abc import Callable, Mapping
41
+
42
+ from sqlspec.core import SQL, ParameterStyleConfig, StackOperation
43
+
44
+ __all__ = (
45
+ "NormalizedStackOperation",
46
+ "apply_driver_features",
47
+ "build_connection_config",
48
+ "build_postgres_extension_probe_names",
49
+ "build_profile",
50
+ "build_statement_config",
51
+ "collect_rows",
52
+ "configure_parameter_serializers",
53
+ "create_mapped_exception",
54
+ "default_statement_config",
55
+ "driver_profile",
56
+ "invoke_prepared_statement",
57
+ "parse_status",
58
+ "register_json_codecs",
59
+ "register_pgvector_support",
60
+ "resolve_many_rowcount",
61
+ "resolve_postgres_extension_state",
62
+ "resolve_runtime_statement_config",
63
+ )
64
+
65
+ ASYNC_PG_STATUS_REGEX: "re.Pattern[str]" = re.compile(r"^([A-Z]+)(?:\s+(\d+))?\s+(\d+)$", re.IGNORECASE)
66
+ EXPECTED_REGEX_GROUPS = 3
67
+
68
+ logger = get_logger("sqlspec.adapters.asyncpg.core")
69
+ _PGVECTOR_MISSING_LOGGED = False
70
+ _JSONB_BINARY_VERSION = b"\x01"
71
+
72
+
73
+ class NormalizedStackOperation(NamedTuple):
74
+ """Normalized execution metadata used for prepared stack operations."""
75
+
76
+ operation: "StackOperation"
77
+ statement: "SQL"
78
+ sql: str
79
+ parameters: "tuple[Any, ...] | dict[str, Any] | None"
80
+
81
+
82
+ PREPARED_STATEMENT_CACHE_SIZE: Final[int] = 32
83
+ _EXCEPTION_MAPPING_DISPATCHER = TypeDispatcher["tuple[str, type[SQLSpecError], str]"]()
84
+
85
+
86
+ def _convert_datetime_param(value: Any) -> Any:
87
+ """Convert datetime parameter, handling ISO strings."""
88
+
89
+ if isinstance(value, str):
90
+ return datetime.datetime.fromisoformat(value)
91
+ return value
92
+
93
+
94
+ def _convert_date_param(value: Any) -> Any:
95
+ """Convert date parameter, handling ISO strings."""
96
+
97
+ if isinstance(value, str):
98
+ return datetime.date.fromisoformat(value)
99
+ return value
100
+
101
+
102
+ def _convert_time_param(value: Any) -> Any:
103
+ """Convert time parameter, handling ISO strings."""
104
+
105
+ if isinstance(value, str):
106
+ return datetime.time.fromisoformat(value)
107
+ return value
108
+
109
+
110
+ def _build_asyncpg_custom_type_coercions() -> "dict[type, Callable[[Any], Any]]":
111
+ """Return custom type coercions for AsyncPG."""
112
+
113
+ return {
114
+ datetime.datetime: _convert_datetime_param,
115
+ datetime.date: _convert_date_param,
116
+ datetime.time: _convert_time_param,
117
+ **build_uuid_coercions(native=True),
118
+ }
119
+
120
+
121
+ def build_connection_config(connection_config: "Mapping[str, Any]") -> "dict[str, Any]":
122
+ """Build connection configuration with non-null values only.
123
+
124
+ Args:
125
+ connection_config: Raw connection configuration mapping.
126
+
127
+ Returns:
128
+ Dictionary with connection parameters.
129
+ """
130
+ return {key: value for key, value in connection_config.items() if value is not None}
131
+
132
+
133
+ def build_profile() -> "DriverParameterProfile":
134
+ """Create the AsyncPG driver parameter profile."""
135
+
136
+ return DriverParameterProfile(
137
+ name="AsyncPG",
138
+ default_style=ParameterStyle.NUMERIC,
139
+ supported_styles={ParameterStyle.NUMERIC, ParameterStyle.NAMED_COLON},
140
+ default_execution_style=ParameterStyle.NUMERIC,
141
+ supported_execution_styles={ParameterStyle.NUMERIC},
142
+ has_native_list_expansion=True,
143
+ preserve_parameter_format=True,
144
+ needs_static_script_compilation=False,
145
+ allow_mixed_parameter_styles=False,
146
+ preserve_original_params_for_many=False,
147
+ json_serializer_strategy="driver",
148
+ custom_type_coercions=_build_asyncpg_custom_type_coercions(),
149
+ default_dialect="postgres",
150
+ )
151
+
152
+
153
+ driver_profile = build_profile()
154
+
155
+
156
+ def configure_parameter_serializers(
157
+ parameter_config: "ParameterStyleConfig",
158
+ serializer: "Callable[[Any], str]",
159
+ *,
160
+ deserializer: "Callable[[str], Any] | None" = None,
161
+ ) -> "ParameterStyleConfig":
162
+ """Return a parameter configuration updated with AsyncPG JSON codecs."""
163
+
164
+ effective_deserializer = deserializer or parameter_config.json_deserializer or from_json
165
+ return parameter_config.replace(json_serializer=serializer, json_deserializer=effective_deserializer)
166
+
167
+
168
+ async def invoke_prepared_statement(
169
+ prepared: Any, parameters: "tuple[Any, ...] | dict[str, Any] | list[Any] | None", *, fetch: bool
170
+ ) -> Any:
171
+ """Invoke an AsyncPG prepared statement with optional parameters.
172
+
173
+ Args:
174
+ prepared: AsyncPG prepared statement object.
175
+ parameters: Prepared parameters payload.
176
+ fetch: Whether to fetch rows.
177
+
178
+ Returns:
179
+ Query result or status message.
180
+ """
181
+ if parameters is None:
182
+ if fetch:
183
+ return await prepared.fetch()
184
+ await prepared.fetch()
185
+ return prepared.get_statusmsg()
186
+
187
+ if isinstance(parameters, dict):
188
+ if fetch:
189
+ return await prepared.fetch(**parameters)
190
+ await prepared.fetch(**parameters)
191
+ return prepared.get_statusmsg()
192
+
193
+ if fetch:
194
+ return await prepared.fetch(*parameters)
195
+ await prepared.fetch(*parameters)
196
+ return prepared.get_statusmsg()
197
+
198
+
199
+ def build_statement_config(
200
+ *, json_serializer: "Callable[[Any], str] | None" = None, json_deserializer: "Callable[[str], Any] | None" = None
201
+ ) -> "StatementConfig":
202
+ """Construct the AsyncPG statement configuration with optional JSON codecs."""
203
+
204
+ effective_serializer = json_serializer or to_json
205
+ effective_deserializer = json_deserializer or from_json
206
+
207
+ profile = driver_profile
208
+ base_config = build_statement_config_from_profile(
209
+ profile,
210
+ statement_overrides={"dialect": "postgres"},
211
+ json_serializer=effective_serializer,
212
+ json_deserializer=effective_deserializer,
213
+ )
214
+
215
+ parameter_config = configure_parameter_serializers(
216
+ base_config.parameter_config, effective_serializer, deserializer=effective_deserializer
217
+ )
218
+
219
+ return base_config.replace(parameter_config=parameter_config)
220
+
221
+
222
+ default_statement_config = build_statement_config()
223
+
224
+
225
+ def _encode_json_payload(value: Any, encoder: "Callable[[Any], str]") -> bytes:
226
+ if isinstance(value, bytes):
227
+ return value
228
+ if isinstance(value, bytearray):
229
+ return bytes(value)
230
+ if isinstance(value, memoryview):
231
+ return value.tobytes()
232
+ if isinstance(value, str):
233
+ return value.encode("utf-8")
234
+
235
+ encoded = encoder(value)
236
+ if isinstance(encoded, bytes):
237
+ return encoded
238
+ if isinstance(encoded, bytearray):
239
+ return bytes(encoded)
240
+ if isinstance(encoded, memoryview):
241
+ return encoded.tobytes()
242
+ return str(encoded).encode("utf-8")
243
+
244
+
245
+ def _decode_json_payload(value: Any, decoder: "Callable[[str], Any]") -> Any:
246
+ if isinstance(value, str):
247
+ return decoder(value)
248
+ if isinstance(value, memoryview):
249
+ value = value.tobytes()
250
+ return decoder(bytes(value).decode("utf-8"))
251
+
252
+
253
+ def _encode_jsonb_payload(value: Any, encoder: "Callable[[Any], str]") -> bytes:
254
+ payload = _encode_json_payload(value, encoder)
255
+ if payload.startswith(_JSONB_BINARY_VERSION):
256
+ return payload
257
+ return _JSONB_BINARY_VERSION + payload
258
+
259
+
260
+ def _decode_jsonb_payload(value: Any, decoder: "Callable[[str], Any]") -> Any:
261
+ if isinstance(value, str):
262
+ return decoder(value)
263
+ if isinstance(value, memoryview):
264
+ value = value.tobytes()
265
+ payload = bytes(value)
266
+ if payload.startswith(_JSONB_BINARY_VERSION):
267
+ payload = payload[1:]
268
+ return decoder(payload.decode("utf-8"))
269
+
270
+
271
+ async def register_json_codecs(connection: Any, encoder: Any, decoder: Any) -> None:
272
+ """Register JSON type codecs on asyncpg connection."""
273
+ try:
274
+ await connection.set_type_codec(
275
+ "json",
276
+ encoder=lambda value: _encode_json_payload(value, encoder),
277
+ decoder=lambda value: _decode_json_payload(value, decoder),
278
+ schema="pg_catalog",
279
+ format="binary",
280
+ )
281
+ await connection.set_type_codec(
282
+ "jsonb",
283
+ encoder=lambda value: _encode_jsonb_payload(value, encoder),
284
+ decoder=lambda value: _decode_jsonb_payload(value, decoder),
285
+ schema="pg_catalog",
286
+ format="binary",
287
+ )
288
+ except Exception:
289
+ logger.exception("Failed to register JSON type codecs")
290
+
291
+
292
+ async def register_pgvector_support(connection: Any) -> None:
293
+ """Register pgvector extension support on asyncpg connection."""
294
+ if not PGVECTOR_INSTALLED:
295
+ global _PGVECTOR_MISSING_LOGGED
296
+ if not _PGVECTOR_MISSING_LOGGED:
297
+ logger.debug("pgvector not installed - skipping vector type support")
298
+ _PGVECTOR_MISSING_LOGGED = True
299
+ return
300
+
301
+ try:
302
+ pgvector_asyncpg = importlib.import_module("pgvector.asyncpg")
303
+ await pgvector_asyncpg.register_vector(connection)
304
+ except Exception:
305
+ logger.exception("Failed to register pgvector support")
306
+
307
+
308
+ def apply_driver_features(
309
+ statement_config: "StatementConfig", driver_features: "Mapping[str, Any] | None"
310
+ ) -> "tuple[StatementConfig, dict[str, Any]]":
311
+ """Apply AsyncPG driver feature defaults to statement config."""
312
+ processed_features: dict[str, Any] = dict(driver_features) if driver_features else {}
313
+
314
+ serializer = processed_features.setdefault("json_serializer", to_json)
315
+ deserializer = processed_features.setdefault("json_deserializer", from_json)
316
+ processed_features.setdefault("enable_json_codecs", True)
317
+ processed_features.setdefault("enable_pgvector", PGVECTOR_INSTALLED)
318
+ processed_features.setdefault("enable_paradedb", True)
319
+ processed_features.setdefault("enable_cloud_sql", False)
320
+ processed_features.setdefault("enable_alloydb", False)
321
+
322
+ parameter_config = configure_parameter_serializers(
323
+ statement_config.parameter_config, serializer, deserializer=deserializer
324
+ )
325
+ statement_config = statement_config.replace(parameter_config=parameter_config)
326
+
327
+ return statement_config, processed_features
328
+
329
+
330
+ def parse_status(status: Any) -> int:
331
+ """Parse AsyncPG status string to extract row count.
332
+
333
+ AsyncPG returns status strings like "INSERT 0 1", "UPDATE 3", "DELETE 2"
334
+ for non-SELECT operations. This method extracts the affected row count.
335
+
336
+ Args:
337
+ status: Status string from AsyncPG operation.
338
+
339
+ Returns:
340
+ Number of affected rows, or 0 if cannot parse.
341
+ """
342
+ if not status or not isinstance(status, str):
343
+ return 0
344
+
345
+ match = ASYNC_PG_STATUS_REGEX.match(status.strip())
346
+ if match:
347
+ groups = match.groups()
348
+ if len(groups) >= EXPECTED_REGEX_GROUPS:
349
+ try:
350
+ return int(groups[-1])
351
+ except (ValueError, IndexError):
352
+ pass
353
+
354
+ return 0
355
+
356
+
357
+ def resolve_many_rowcount(parameter_sets: Any, *, fallback_count: "int | None" = None) -> int:
358
+ """Resolve execute_many rowcount using the parameter payload size."""
359
+ if fallback_count is not None:
360
+ return fallback_count
361
+ if isinstance(parameter_sets, Sized):
362
+ return len(parameter_sets)
363
+ return 0
364
+
365
+
366
+ def _create_postgres_error(
367
+ error: Any, code: "str | None", error_class: type[SQLSpecError], description: str
368
+ ) -> SQLSpecError:
369
+ """Create a SQLSpec exception from an asyncpg error.
370
+
371
+ Args:
372
+ error: The original asyncpg exception
373
+ code: PostgreSQL SQLSTATE error code
374
+ error_class: The SQLSpec exception class to instantiate
375
+ description: Human-readable description of the error type
376
+
377
+ Returns:
378
+ A new SQLSpec exception instance with the original as its cause
379
+ """
380
+ msg = f"PostgreSQL {description} [{code}]: {error}" if code else f"PostgreSQL {description}: {error}"
381
+ exc = error_class(msg)
382
+ exc.__cause__ = error
383
+ return exc
384
+
385
+
386
+ _EXCEPTION_MAPPING_DISPATCHER.register(
387
+ asyncpg.exceptions.UniqueViolationError, ("23505", UniqueViolationError, "unique constraint violation")
388
+ )
389
+ _EXCEPTION_MAPPING_DISPATCHER.register(
390
+ asyncpg.exceptions.ForeignKeyViolationError, ("23503", ForeignKeyViolationError, "foreign key constraint violation")
391
+ )
392
+ _EXCEPTION_MAPPING_DISPATCHER.register(
393
+ asyncpg.exceptions.NotNullViolationError, ("23502", NotNullViolationError, "not-null constraint violation")
394
+ )
395
+ _EXCEPTION_MAPPING_DISPATCHER.register(
396
+ asyncpg.exceptions.CheckViolationError, ("23514", CheckViolationError, "check constraint violation")
397
+ )
398
+ _EXCEPTION_MAPPING_DISPATCHER.register(
399
+ asyncpg.exceptions.IntegrityConstraintViolationError, ("23000", IntegrityError, "integrity constraint violation")
400
+ )
401
+ _EXCEPTION_MAPPING_DISPATCHER.register(
402
+ asyncpg.exceptions.DeadlockDetectedError, ("40P01", DeadlockError, "deadlock detected")
403
+ )
404
+ _EXCEPTION_MAPPING_DISPATCHER.register(
405
+ asyncpg.exceptions.SerializationError, ("40001", SerializationConflictError, "serialization failure")
406
+ )
407
+ _EXCEPTION_MAPPING_DISPATCHER.register(
408
+ asyncpg.exceptions.QueryCanceledError, ("57014", QueryTimeoutError, "query canceled")
409
+ )
410
+ _EXCEPTION_MAPPING_DISPATCHER.register(
411
+ asyncpg.exceptions.InsufficientPrivilegeError, ("42501", PermissionDeniedError, "insufficient privilege")
412
+ )
413
+ _EXCEPTION_MAPPING_DISPATCHER.register(
414
+ asyncpg.exceptions.InvalidPasswordError, ("28P01", PermissionDeniedError, "invalid password")
415
+ )
416
+ _EXCEPTION_MAPPING_DISPATCHER.register(
417
+ asyncpg.exceptions.InvalidAuthorizationSpecificationError, ("28000", PermissionDeniedError, "authorization error")
418
+ )
419
+ _EXCEPTION_MAPPING_DISPATCHER.register(
420
+ asyncpg.exceptions.ConnectionDoesNotExistError, ("08003", ConnectionTimeoutError, "connection does not exist")
421
+ )
422
+ _EXCEPTION_MAPPING_DISPATCHER.register(
423
+ asyncpg.exceptions.CannotConnectNowError, ("57P03", ConnectionTimeoutError, "cannot connect now")
424
+ )
425
+ _EXCEPTION_MAPPING_DISPATCHER.register(
426
+ asyncpg.exceptions.PostgresSyntaxError, ("42601", SQLParsingError, "SQL syntax error")
427
+ )
428
+
429
+
430
+ def create_mapped_exception(error: Any) -> SQLSpecError:
431
+ """Map asyncpg exceptions to SQLSpec exceptions.
432
+
433
+ This is a factory function that returns an exception instance rather than
434
+ raising. This pattern is more robust for use in __aexit__ handlers and
435
+ avoids issues with exception control flow in different Python versions.
436
+
437
+ Mapping priority:
438
+ 1. Native asyncpg exception types (isinstance checks - most reliable)
439
+ 2. SQLSTATE code via centralized utility
440
+ 3. Generic SQLSpecError fallback
441
+
442
+ Args:
443
+ error: The asyncpg exception to map
444
+
445
+ Returns:
446
+ A SQLSpec exception that wraps the original error
447
+ """
448
+ mapped_error = _EXCEPTION_MAPPING_DISPATCHER.get(error)
449
+ if mapped_error is not None:
450
+ error_code, error_class, description = mapped_error
451
+ return _create_postgres_error(error, error_code, error_class, description)
452
+
453
+ # Priority 2: Fall back to SQLSTATE code mapping using centralized utility
454
+ sqlstate_attr = error.sqlstate if has_sqlstate(error) else None
455
+ sqlstate_code: str | None = sqlstate_attr if sqlstate_attr is not None else None
456
+ if sqlstate_code:
457
+ exc_class = map_sqlstate_to_exception(sqlstate_code)
458
+ if exc_class:
459
+ return _create_postgres_error(error, sqlstate_code, exc_class, "database error")
460
+
461
+ # Priority 3: Default fallback
462
+ return _create_postgres_error(error, sqlstate_code, SQLSpecError, "database error")
463
+
464
+
465
+ def collect_rows(records: "list[Any] | None") -> "tuple[list[Any], list[str]]":
466
+ """Collect AsyncPG records and column names.
467
+
468
+ Returns raw asyncpg.Record objects without copying to dicts.
469
+ Lazy dict materialization is handled by SQLResult when needed.
470
+
471
+ Args:
472
+ records: Records returned from asyncpg fetch.
473
+
474
+ Returns:
475
+ Tuple of (rows, column_names).
476
+ """
477
+ if not records:
478
+ return [], []
479
+ column_names = list(records[0].keys())
480
+ return records, column_names
@@ -0,0 +1,157 @@
1
+ """PostgreSQL-specific data dictionary for metadata queries via asyncpg."""
2
+
3
+ from typing import TYPE_CHECKING, ClassVar
4
+
5
+ from sqlspec.data_dictionary.dialects.postgres import resolve_postgres_json_type
6
+ from sqlspec.driver import AsyncDataDictionaryBase
7
+ from sqlspec.typing import ColumnMetadata, ForeignKeyMetadata, IndexMetadata, TableMetadata, VersionInfo
8
+
9
+ if TYPE_CHECKING:
10
+ from sqlspec.adapters.asyncpg.driver import AsyncpgDriver
11
+
12
+ __all__ = ("AsyncpgDataDictionary",)
13
+
14
+
15
+ class AsyncpgDataDictionary(AsyncDataDictionaryBase):
16
+ """PostgreSQL-specific async data dictionary."""
17
+
18
+ dialect: ClassVar[str] = "postgres"
19
+
20
+ def __init__(self) -> None:
21
+ super().__init__()
22
+
23
+ def resolve_schema(self, schema: "str | None") -> "str | None":
24
+ """Return a schema name using dialect defaults when missing."""
25
+ if schema is not None:
26
+ return schema
27
+ return self.get_dialect_config().default_schema
28
+
29
+ async def get_version(self, driver: "AsyncpgDriver") -> "VersionInfo | None":
30
+ """Get PostgreSQL database version information.
31
+
32
+ Args:
33
+ driver: Async database driver instance.
34
+
35
+ Returns:
36
+ PostgreSQL version information or None if detection fails.
37
+
38
+ """
39
+ driver_id = id(driver)
40
+ # Inline cache check to avoid cross-module method call that causes mypyc segfault
41
+ if driver_id in self._version_fetch_attempted:
42
+ return self._version_cache.get(driver_id)
43
+ # Not cached, fetch from database
44
+
45
+ version_value = await driver.select_value_or_none(self.get_query("version"))
46
+ if not version_value:
47
+ self._log_version_unavailable(type(self).dialect, "missing")
48
+ self.cache_version(driver_id, None)
49
+ return None
50
+
51
+ config = self.get_dialect_config()
52
+ version_info = self.parse_version_with_pattern(config.version_pattern, str(version_value))
53
+ if version_info is None:
54
+ self._log_version_unavailable(type(self).dialect, "parse_failed")
55
+ self.cache_version(driver_id, None)
56
+ return None
57
+
58
+ self._log_version_detected(type(self).dialect, version_info)
59
+ self.cache_version(id(driver), version_info)
60
+ return version_info
61
+
62
+ async def get_feature_flag(self, driver: "AsyncpgDriver", feature: str) -> bool:
63
+ """Check if PostgreSQL database supports a specific feature.
64
+
65
+ Args:
66
+ driver: Async database driver instance.
67
+ feature: Feature name to check.
68
+
69
+ Returns:
70
+ True if feature is supported, False otherwise.
71
+
72
+ """
73
+ version_info = await self.get_version(driver)
74
+ return self.resolve_feature_flag(feature, version_info)
75
+
76
+ async def get_optimal_type(self, driver: "AsyncpgDriver", type_category: str) -> str:
77
+ """Get optimal PostgreSQL type for a category.
78
+
79
+ Args:
80
+ driver: Async database driver instance.
81
+ type_category: Type category.
82
+
83
+ Returns:
84
+ PostgreSQL-specific type name.
85
+
86
+ """
87
+ config = self.get_dialect_config()
88
+ version_info = await self.get_version(driver)
89
+
90
+ if type_category == "json":
91
+ return resolve_postgres_json_type(version_info)
92
+
93
+ return config.get_optimal_type(type_category)
94
+
95
+ def list_available_features(self) -> "list[str]":
96
+ """List available feature flags for this dialect."""
97
+ config = self.get_dialect_config()
98
+ features = set(config.feature_flags.keys()) | set(config.feature_versions.keys())
99
+ return sorted(features)
100
+
101
+ async def get_tables(self, driver: "AsyncpgDriver", schema: "str | None" = None) -> "list[TableMetadata]":
102
+ """Get tables sorted by topological dependency order using Recursive CTE."""
103
+ schema_name = self.resolve_schema(schema)
104
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="tables")
105
+ return await driver.select(
106
+ self.get_query("tables_by_schema"), schema_name=schema_name, schema_type=TableMetadata
107
+ )
108
+
109
+ async def get_columns(
110
+ self, driver: "AsyncpgDriver", table: "str | None" = None, schema: "str | None" = None
111
+ ) -> "list[ColumnMetadata]":
112
+ """Get column information for a table or schema."""
113
+ schema_name = self.resolve_schema(schema)
114
+ if table is None:
115
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="columns")
116
+ return await driver.select(
117
+ self.get_query("columns_by_schema"), schema_name=schema_name, schema_type=ColumnMetadata
118
+ )
119
+
120
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="columns")
121
+ return await driver.select(
122
+ self.get_query("columns_by_table"), schema_name=schema_name, table_name=table, schema_type=ColumnMetadata
123
+ )
124
+
125
+ async def get_indexes(
126
+ self, driver: "AsyncpgDriver", table: "str | None" = None, schema: "str | None" = None
127
+ ) -> "list[IndexMetadata]":
128
+ """Get index metadata for a table or schema."""
129
+ schema_name = self.resolve_schema(schema)
130
+ if table is None:
131
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="indexes")
132
+ return await driver.select(
133
+ self.get_query("indexes_by_schema"), schema_name=schema_name, schema_type=IndexMetadata
134
+ )
135
+
136
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="indexes")
137
+ return await driver.select(
138
+ self.get_query("indexes_by_table"), schema_name=schema_name, table_name=table, schema_type=IndexMetadata
139
+ )
140
+
141
+ async def get_foreign_keys(
142
+ self, driver: "AsyncpgDriver", table: "str | None" = None, schema: "str | None" = None
143
+ ) -> "list[ForeignKeyMetadata]":
144
+ """Get foreign key metadata."""
145
+ schema_name = self.resolve_schema(schema)
146
+ if table is None:
147
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="foreign_keys")
148
+ return await driver.select(
149
+ self.get_query("foreign_keys_by_schema"), schema_name=schema_name, schema_type=ForeignKeyMetadata
150
+ )
151
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="foreign_keys")
152
+ return await driver.select(
153
+ self.get_query("foreign_keys_by_table"),
154
+ schema_name=schema_name,
155
+ table_name=table,
156
+ schema_type=ForeignKeyMetadata,
157
+ )