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,248 @@
1
+ """CockroachDB AsyncPG configuration."""
2
+
3
+ from typing import TYPE_CHECKING, Any, ClassVar, TypedDict, cast
4
+
5
+ from asyncpg import create_pool as asyncpg_create_pool
6
+ from typing_extensions import NotRequired
7
+
8
+ from sqlspec.adapters.asyncpg.core import (
9
+ apply_driver_features,
10
+ build_connection_config,
11
+ default_statement_config,
12
+ register_json_codecs,
13
+ )
14
+ from sqlspec.adapters.cockroach_asyncpg._typing import (
15
+ CockroachAsyncpgConnection,
16
+ CockroachAsyncpgPool,
17
+ CockroachAsyncpgSessionContext,
18
+ )
19
+ from sqlspec.adapters.cockroach_asyncpg.driver import CockroachAsyncpgDriver, CockroachAsyncpgExceptionHandler
20
+ from sqlspec.config import AsyncDatabaseConfig, ExtensionConfigs
21
+ from sqlspec.driver._async import AsyncPoolConnectionContext, AsyncPoolSessionFactory
22
+ from sqlspec.extensions.events import EventRuntimeHints
23
+ from sqlspec.utils.config_tools import normalize_connection_config
24
+ from sqlspec.utils.serializers import from_json, to_json
25
+
26
+ if TYPE_CHECKING:
27
+ from collections.abc import Awaitable, Callable
28
+
29
+ from sqlspec.core import StatementConfig
30
+ from sqlspec.observability import ObservabilityConfig
31
+
32
+ __all__ = (
33
+ "CockroachAsyncpgConfig",
34
+ "CockroachAsyncpgConnectionConfig",
35
+ "CockroachAsyncpgDriverFeatures",
36
+ "CockroachAsyncpgPoolConfig",
37
+ )
38
+
39
+
40
+ class CockroachAsyncpgConnectionConfig(TypedDict):
41
+ """AsyncPG connection parameters for CockroachDB."""
42
+
43
+ dsn: NotRequired[str]
44
+ host: NotRequired[str]
45
+ port: NotRequired[int]
46
+ user: NotRequired[str]
47
+ password: NotRequired[str]
48
+ database: NotRequired[str]
49
+ ssl: NotRequired[Any]
50
+ passfile: NotRequired[str]
51
+ direct_tls: NotRequired[bool]
52
+ connect_timeout: NotRequired[float]
53
+ command_timeout: NotRequired[float]
54
+ statement_cache_size: NotRequired[int]
55
+ max_cached_statement_lifetime: NotRequired[int]
56
+ max_cacheable_statement_size: NotRequired[int]
57
+ server_settings: NotRequired["dict[str, str]"]
58
+
59
+
60
+ class CockroachAsyncpgPoolConfig(CockroachAsyncpgConnectionConfig):
61
+ """AsyncPG pool parameters for CockroachDB."""
62
+
63
+ min_size: NotRequired[int]
64
+ max_size: NotRequired[int]
65
+ max_queries: NotRequired[int]
66
+ max_inactive_connection_lifetime: NotRequired[float]
67
+ setup: NotRequired["Callable[[CockroachAsyncpgConnection], Awaitable[None]]"]
68
+ init: NotRequired["Callable[[CockroachAsyncpgConnection], Awaitable[None]]"]
69
+ extra: NotRequired["dict[str, Any]"]
70
+
71
+
72
+ class CockroachAsyncpgDriverFeatures(TypedDict):
73
+ """Driver feature flags for CockroachDB AsyncPG adapter.
74
+
75
+ on_connection_create: Async callback executed when a connection is acquired from pool.
76
+ Receives the raw asyncpg connection for low-level driver configuration.
77
+ Called after internal setup (JSON codecs, pgvector registration).
78
+ """
79
+
80
+ enable_auto_retry: NotRequired[bool]
81
+ max_retries: NotRequired[int]
82
+ retry_delay_base_ms: NotRequired[float]
83
+ retry_delay_max_ms: NotRequired[float]
84
+ enable_retry_logging: NotRequired[bool]
85
+ enable_follower_reads: NotRequired[bool]
86
+ default_staleness: NotRequired[str]
87
+ json_serializer: NotRequired["Callable[[Any], str]"]
88
+ json_deserializer: NotRequired["Callable[[str], Any]"]
89
+ enable_json_codecs: NotRequired[bool]
90
+ enable_pgvector: NotRequired[bool]
91
+ on_connection_create: "NotRequired[Callable[[CockroachAsyncpgConnection], Awaitable[None]]]"
92
+ enable_events: NotRequired[bool]
93
+ events_backend: NotRequired[str]
94
+
95
+
96
+ class _CockroachAsyncpgSessionFactory(AsyncPoolSessionFactory):
97
+ """Uses pool.acquire() context manager pattern instead of direct acquire/release."""
98
+
99
+ __slots__ = ("_ctx",)
100
+
101
+ def __init__(self, config: "CockroachAsyncpgConfig") -> None:
102
+ super().__init__(config)
103
+ self._ctx: Any | None = None
104
+
105
+ async def acquire_connection(self) -> "CockroachAsyncpgConnection":
106
+ pool = self._config.connection_instance
107
+ if pool is None:
108
+ pool = await self._config.create_pool()
109
+ self._config.connection_instance = pool
110
+ ctx = pool.acquire()
111
+ self._ctx = ctx
112
+ return cast("CockroachAsyncpgConnection", await ctx.__aenter__())
113
+
114
+ async def release_connection(self, _conn: "CockroachAsyncpgConnection", **kwargs: Any) -> None:
115
+ if self._ctx is not None:
116
+ await self._ctx.__aexit__(None, None, None)
117
+ self._ctx = None
118
+
119
+
120
+ class CockroachAsyncpgConnectionContext(AsyncPoolConnectionContext):
121
+ """Async context manager for CockroachDB AsyncPG connections."""
122
+
123
+ __slots__ = ()
124
+
125
+
126
+ class CockroachAsyncpgConfig(
127
+ AsyncDatabaseConfig[CockroachAsyncpgConnection, CockroachAsyncpgPool, CockroachAsyncpgDriver]
128
+ ):
129
+ """Configuration for CockroachDB using AsyncPG."""
130
+
131
+ driver_type: "ClassVar[type[CockroachAsyncpgDriver]]" = CockroachAsyncpgDriver
132
+ connection_type: "ClassVar[type[CockroachAsyncpgConnection]]" = CockroachAsyncpgConnection # type: ignore[assignment]
133
+ supports_transactional_ddl: "ClassVar[bool]" = True
134
+ supports_native_arrow_export: "ClassVar[bool]" = True
135
+ supports_native_arrow_import: "ClassVar[bool]" = True
136
+ supports_native_parquet_export: "ClassVar[bool]" = True
137
+ supports_native_parquet_import: "ClassVar[bool]" = True
138
+ _connection_context_class: "ClassVar[type[CockroachAsyncpgConnectionContext]]" = CockroachAsyncpgConnectionContext
139
+ _session_factory_class: "ClassVar[type[_CockroachAsyncpgSessionFactory]]" = _CockroachAsyncpgSessionFactory
140
+ _session_context_class: "ClassVar[type[CockroachAsyncpgSessionContext]]" = CockroachAsyncpgSessionContext
141
+ _default_statement_config = default_statement_config
142
+
143
+ def __init__(
144
+ self,
145
+ *,
146
+ connection_config: "CockroachAsyncpgPoolConfig | dict[str, Any] | None" = None,
147
+ connection_instance: "CockroachAsyncpgPool | None" = None,
148
+ migration_config: "dict[str, Any] | None" = None,
149
+ statement_config: "StatementConfig | None" = None,
150
+ driver_features: "CockroachAsyncpgDriverFeatures | dict[str, Any] | None" = None,
151
+ bind_key: "str | None" = None,
152
+ extension_config: "ExtensionConfigs | None" = None,
153
+ observability_config: "ObservabilityConfig | None" = None,
154
+ **kwargs: Any,
155
+ ) -> None:
156
+ connection_config = normalize_connection_config(connection_config)
157
+ statement_config = statement_config or default_statement_config
158
+ statement_config, driver_features = apply_driver_features(statement_config, driver_features)
159
+
160
+ driver_features.setdefault("enable_auto_retry", True)
161
+
162
+ # Extract user connection hook before storing driver_features
163
+ features_dict = dict(driver_features) if driver_features else {}
164
+ self._user_connection_hook: Callable[[CockroachAsyncpgConnection], Awaitable[None]] | None = features_dict.pop(
165
+ "on_connection_create", None
166
+ )
167
+
168
+ super().__init__(
169
+ connection_config=connection_config,
170
+ connection_instance=connection_instance,
171
+ migration_config=migration_config,
172
+ statement_config=statement_config,
173
+ driver_features=features_dict,
174
+ bind_key=bind_key,
175
+ extension_config=extension_config,
176
+ observability_config=observability_config,
177
+ **kwargs,
178
+ )
179
+
180
+ async def _create_pool(self) -> "CockroachAsyncpgPool":
181
+ config = build_connection_config(self.connection_config)
182
+ config.setdefault("init", self._init_connection)
183
+ return await asyncpg_create_pool(**config)
184
+
185
+ async def _init_connection(self, connection: "CockroachAsyncpgConnection") -> None:
186
+ """Initialize connection with JSON codecs and user callback."""
187
+ if self.driver_features.get("enable_json_codecs", True):
188
+ await register_json_codecs(
189
+ connection,
190
+ encoder=self.driver_features.get("json_serializer", to_json),
191
+ decoder=self.driver_features.get("json_deserializer", from_json),
192
+ )
193
+
194
+ if self._user_connection_hook is not None:
195
+ await self._user_connection_hook(connection)
196
+
197
+ async def _close_pool(self) -> None:
198
+ if not self.connection_instance:
199
+ return
200
+ await self.connection_instance.close()
201
+ self.connection_instance = None
202
+
203
+ async def create_connection(self) -> "CockroachAsyncpgConnection":
204
+ if self.connection_instance is None:
205
+ self.connection_instance = await self.create_pool()
206
+ return cast("CockroachAsyncpgConnection", await self.connection_instance.acquire())
207
+
208
+ def provide_session(
209
+ self,
210
+ *_args: Any,
211
+ statement_config: "StatementConfig | None" = None,
212
+ follower_reads: bool | None = None,
213
+ staleness: str | None = None,
214
+ **_kwargs: Any,
215
+ ) -> "CockroachAsyncpgSessionContext":
216
+ factory = _CockroachAsyncpgSessionFactory(self)
217
+ driver_features = dict(self.driver_features)
218
+ if follower_reads is not None:
219
+ driver_features["enable_follower_reads"] = follower_reads
220
+ if staleness is not None:
221
+ driver_features["default_staleness"] = staleness
222
+
223
+ return CockroachAsyncpgSessionContext(
224
+ acquire_connection=factory.acquire_connection,
225
+ release_connection=factory.release_connection,
226
+ statement_config=statement_config or self.statement_config or default_statement_config,
227
+ driver_features=driver_features,
228
+ prepare_driver=self._prepare_driver,
229
+ )
230
+
231
+ async def provide_pool(self, *args: Any, **kwargs: Any) -> "CockroachAsyncpgPool":
232
+ if not self.connection_instance:
233
+ self.connection_instance = await self.create_pool()
234
+ return self.connection_instance
235
+
236
+ def get_signature_namespace(self) -> "dict[str, Any]":
237
+ namespace = super().get_signature_namespace()
238
+ namespace.update({
239
+ "CockroachAsyncpgConnectionConfig": CockroachAsyncpgConnectionConfig,
240
+ "CockroachAsyncpgPoolConfig": CockroachAsyncpgPoolConfig,
241
+ "CockroachAsyncpgDriver": CockroachAsyncpgDriver,
242
+ "CockroachAsyncpgExceptionHandler": CockroachAsyncpgExceptionHandler,
243
+ "CockroachAsyncpgSessionContext": CockroachAsyncpgSessionContext,
244
+ })
245
+ return namespace
246
+
247
+ def get_event_runtime_hints(self) -> "EventRuntimeHints":
248
+ return EventRuntimeHints(poll_interval=0.5, select_for_update=True, skip_locked=True)
@@ -0,0 +1,55 @@
1
+ """CockroachDB AsyncPG adapter helpers."""
2
+
3
+ import secrets
4
+ from dataclasses import dataclass
5
+ from typing import TYPE_CHECKING, Any, Final
6
+
7
+ from sqlspec.utils.type_guards import has_sqlstate
8
+
9
+ if TYPE_CHECKING:
10
+ from collections.abc import Mapping
11
+
12
+ __all__ = ("CockroachAsyncpgRetryConfig", "calculate_backoff_seconds", "is_retryable_error")
13
+
14
+ # Retry configuration defaults (module-level for mypyc compatibility)
15
+ _DEFAULT_MAX_RETRIES: Final[int] = 10
16
+ _DEFAULT_BASE_DELAY_MS: Final[float] = 50.0
17
+ _DEFAULT_MAX_DELAY_MS: Final[float] = 5000.0
18
+ _DEFAULT_ENABLE_LOGGING: Final[bool] = True
19
+
20
+
21
+ @dataclass(frozen=True)
22
+ class CockroachAsyncpgRetryConfig:
23
+ """CockroachDB asyncpg transaction retry configuration."""
24
+
25
+ max_retries: int = _DEFAULT_MAX_RETRIES
26
+ base_delay_ms: float = _DEFAULT_BASE_DELAY_MS
27
+ max_delay_ms: float = _DEFAULT_MAX_DELAY_MS
28
+ enable_logging: bool = _DEFAULT_ENABLE_LOGGING
29
+
30
+ @classmethod
31
+ def from_features(cls, driver_features: "Mapping[str, Any]") -> "CockroachAsyncpgRetryConfig":
32
+ """Build retry config from driver feature mappings."""
33
+ return cls(
34
+ max_retries=int(driver_features.get("max_retries", _DEFAULT_MAX_RETRIES)),
35
+ base_delay_ms=float(driver_features.get("retry_delay_base_ms", _DEFAULT_BASE_DELAY_MS)),
36
+ max_delay_ms=float(driver_features.get("retry_delay_max_ms", _DEFAULT_MAX_DELAY_MS)),
37
+ enable_logging=bool(driver_features.get("enable_retry_logging", _DEFAULT_ENABLE_LOGGING)),
38
+ )
39
+
40
+
41
+ def is_retryable_error(error: BaseException) -> bool:
42
+ """Return True when the error should trigger a CockroachDB retry."""
43
+ if has_sqlstate(error):
44
+ return str(error.sqlstate) == "40001"
45
+ return False
46
+
47
+
48
+ def calculate_backoff_seconds(attempt: int, config: "CockroachAsyncpgRetryConfig") -> float:
49
+ """Calculate exponential backoff delay in seconds."""
50
+ base: float = config.base_delay_ms * (2**attempt)
51
+ scale: int = 1000
52
+ max_jitter: int = max(int(base * scale), 0)
53
+ jitter: float = secrets.randbelow(max_jitter + 1) / scale if max_jitter else 0.0
54
+ delay_ms: float = min(base + jitter, config.max_delay_ms)
55
+ return delay_ms / 1000.0
@@ -0,0 +1,110 @@
1
+ """CockroachDB AsyncPG data dictionary."""
2
+
3
+ from typing import TYPE_CHECKING, ClassVar
4
+
5
+ from mypy_extensions import mypyc_attr
6
+
7
+ from sqlspec.data_dictionary.dialects.cockroachdb import resolve_cockroachdb_json_type
8
+ from sqlspec.driver import AsyncDataDictionaryBase
9
+ from sqlspec.typing import ColumnMetadata, ForeignKeyMetadata, IndexMetadata, TableMetadata, VersionInfo
10
+
11
+ if TYPE_CHECKING:
12
+ from sqlspec.adapters.cockroach_asyncpg.driver import CockroachAsyncpgDriver
13
+
14
+ __all__ = ("CockroachAsyncpgDataDictionary",)
15
+
16
+
17
+ @mypyc_attr(allow_interpreted_subclasses=True, native_class=False)
18
+ class CockroachAsyncpgDataDictionary(AsyncDataDictionaryBase):
19
+ """CockroachDB async data dictionary (AsyncPG)."""
20
+
21
+ dialect: ClassVar[str] = "cockroachdb"
22
+
23
+ def __init__(self) -> None:
24
+ super().__init__()
25
+
26
+ async def get_version(self, driver: "CockroachAsyncpgDriver") -> "VersionInfo | None":
27
+ driver_id = id(driver)
28
+ if driver_id in self._version_fetch_attempted:
29
+ return self._version_cache.get(driver_id)
30
+
31
+ version_value = await driver.select_value_or_none(self.get_query("version"))
32
+ if not version_value:
33
+ self._log_version_unavailable(type(self).dialect, "missing")
34
+ self.cache_version(driver_id, None)
35
+ return None
36
+
37
+ version_info = self.parse_version_with_pattern(self.get_dialect_config().version_pattern, str(version_value))
38
+ if version_info is None:
39
+ self._log_version_unavailable(type(self).dialect, "parse_failed")
40
+ self.cache_version(driver_id, None)
41
+ return None
42
+
43
+ self._log_version_detected(type(self).dialect, version_info)
44
+ self.cache_version(driver_id, version_info)
45
+ return version_info
46
+
47
+ async def get_feature_flag(self, driver: "CockroachAsyncpgDriver", feature: str) -> bool:
48
+ version_info = await self.get_version(driver)
49
+ return self.resolve_feature_flag(feature, version_info)
50
+
51
+ async def get_optimal_type(self, driver: "CockroachAsyncpgDriver", type_category: str) -> str:
52
+ config = self.get_dialect_config()
53
+ if type_category == "json":
54
+ return resolve_cockroachdb_json_type(await self.get_version(driver))
55
+ return config.get_optimal_type(type_category)
56
+
57
+ async def get_tables(self, driver: "CockroachAsyncpgDriver", schema: "str | None" = None) -> "list[TableMetadata]":
58
+ schema_name = self.resolve_schema(schema)
59
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="tables")
60
+ return await driver.select(
61
+ self.get_query("tables_by_schema"), schema_name=schema_name, schema_type=TableMetadata
62
+ )
63
+
64
+ async def get_columns(
65
+ self, driver: "CockroachAsyncpgDriver", table: "str | None" = None, schema: "str | None" = None
66
+ ) -> "list[ColumnMetadata]":
67
+ schema_name = self.resolve_schema(schema)
68
+ if table is None:
69
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="columns")
70
+ return await driver.select(
71
+ self.get_query("columns_by_schema"), schema_name=schema_name, schema_type=ColumnMetadata
72
+ )
73
+
74
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="columns")
75
+ return await driver.select(
76
+ self.get_query("columns_by_table"), schema_name=schema_name, table_name=table, schema_type=ColumnMetadata
77
+ )
78
+
79
+ async def get_indexes(
80
+ self, driver: "CockroachAsyncpgDriver", table: "str | None" = None, schema: "str | None" = None
81
+ ) -> "list[IndexMetadata]":
82
+ schema_name = self.resolve_schema(schema)
83
+ if table is None:
84
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="indexes")
85
+ return await driver.select(
86
+ self.get_query("indexes_by_schema"), schema_name=schema_name, schema_type=IndexMetadata
87
+ )
88
+
89
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="indexes")
90
+ return await driver.select(
91
+ self.get_query("indexes_by_table"), schema_name=schema_name, table_name=table, schema_type=IndexMetadata
92
+ )
93
+
94
+ async def get_foreign_keys(
95
+ self, driver: "CockroachAsyncpgDriver", table: "str | None" = None, schema: "str | None" = None
96
+ ) -> "list[ForeignKeyMetadata]":
97
+ schema_name = self.resolve_schema(schema)
98
+ if table is None:
99
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="foreign_keys")
100
+ return await driver.select(
101
+ self.get_query("foreign_keys_by_schema"), schema_name=schema_name, schema_type=ForeignKeyMetadata
102
+ )
103
+
104
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="foreign_keys")
105
+ return await driver.select(
106
+ self.get_query("foreign_keys_by_table"),
107
+ table_name=table,
108
+ schema_name=schema_name,
109
+ schema_type=ForeignKeyMetadata,
110
+ )
@@ -0,0 +1,142 @@
1
+ """CockroachDB AsyncPG driver implementation."""
2
+
3
+ import asyncio
4
+ import contextlib
5
+ from typing import TYPE_CHECKING, Any, cast
6
+
7
+ import asyncpg
8
+
9
+ from sqlspec.adapters.asyncpg.core import create_mapped_exception, driver_profile
10
+ from sqlspec.adapters.asyncpg.driver import AsyncpgDriver
11
+ from sqlspec.adapters.cockroach_asyncpg._typing import CockroachAsyncpgSessionContext
12
+ from sqlspec.adapters.cockroach_asyncpg.core import (
13
+ CockroachAsyncpgRetryConfig,
14
+ calculate_backoff_seconds,
15
+ is_retryable_error,
16
+ )
17
+ from sqlspec.adapters.cockroach_asyncpg.data_dictionary import CockroachAsyncpgDataDictionary
18
+ from sqlspec.core import SQL, register_driver_profile
19
+ from sqlspec.driver import BaseAsyncExceptionHandler
20
+ from sqlspec.exceptions import SerializationConflictError, TransactionRetryError
21
+ from sqlspec.utils.logging import get_logger
22
+ from sqlspec.utils.type_guards import has_sqlstate
23
+
24
+ if TYPE_CHECKING:
25
+ from collections.abc import Callable
26
+
27
+ from sqlspec.adapters.cockroach_asyncpg._typing import CockroachAsyncpgConnection
28
+ from sqlspec.core import StatementConfig
29
+ from sqlspec.driver import ExecutionResult
30
+
31
+ __all__ = ("CockroachAsyncpgDriver", "CockroachAsyncpgExceptionHandler", "CockroachAsyncpgSessionContext")
32
+
33
+ logger = get_logger("sqlspec.adapters.cockroach_asyncpg")
34
+
35
+
36
+ class CockroachAsyncpgExceptionHandler(BaseAsyncExceptionHandler):
37
+ """Async context manager for CockroachDB AsyncPG exceptions."""
38
+
39
+ __slots__ = ()
40
+
41
+ def _handle_exception(self, exc_type: "type[BaseException] | None", exc_val: "BaseException") -> bool:
42
+ _ = exc_type
43
+ if isinstance(exc_val, asyncpg.PostgresError) or has_sqlstate(exc_val):
44
+ if has_sqlstate(exc_val) and str(exc_val.sqlstate) == "40001":
45
+ self.pending_exception = SerializationConflictError(str(exc_val))
46
+ return True
47
+ self.pending_exception = create_mapped_exception(exc_val)
48
+ return True
49
+ return False
50
+
51
+
52
+ class CockroachAsyncpgDriver(AsyncpgDriver):
53
+ """CockroachDB AsyncPG driver with retry support."""
54
+
55
+ __slots__ = ("_enable_retry", "_follower_staleness", "_retry_config")
56
+ dialect = "postgres"
57
+
58
+ def __init__(
59
+ self,
60
+ connection: "CockroachAsyncpgConnection",
61
+ statement_config: "StatementConfig | None" = None,
62
+ driver_features: "dict[str, Any] | None" = None,
63
+ ) -> None:
64
+ super().__init__(connection=connection, statement_config=statement_config, driver_features=driver_features)
65
+ self._retry_config = CockroachAsyncpgRetryConfig.from_features(self.driver_features)
66
+ self._enable_retry = bool(self.driver_features.get("enable_auto_retry", True))
67
+ self._follower_staleness = cast("str | None", self.driver_features.get("default_staleness"))
68
+ # Data dictionary is lazily initialized in property; use parent slot
69
+ self._data_dictionary = None
70
+
71
+ async def _execute_with_retry(self, operation: "Callable[..., Any]", *args: Any) -> "ExecutionResult":
72
+ if not self._enable_retry:
73
+ return cast("ExecutionResult", await operation(*args))
74
+
75
+ last_error: Exception | None = None
76
+
77
+ for attempt in range(self._retry_config.max_retries + 1):
78
+ try:
79
+ return cast("ExecutionResult", await operation(*args))
80
+ except Exception as exc:
81
+ last_error = exc
82
+ if not is_retryable_error(exc) or attempt >= self._retry_config.max_retries:
83
+ raise
84
+ with contextlib.suppress(Exception):
85
+ await self.connection.execute("ROLLBACK")
86
+ delay = calculate_backoff_seconds(attempt, self._retry_config)
87
+ if self._retry_config.enable_logging:
88
+ logger.debug("CockroachDB retry %s/%s after %.3fs", attempt + 1, self._retry_config.max_retries, delay)
89
+ await asyncio.sleep(delay)
90
+
91
+ msg = "CockroachDB transaction retry limit exceeded"
92
+ raise TransactionRetryError(msg) from last_error
93
+
94
+ async def _apply_follower_reads(self, cursor: "CockroachAsyncpgConnection") -> None:
95
+ if not self.driver_features.get("enable_follower_reads", False):
96
+ return
97
+ if not self._follower_staleness:
98
+ return
99
+ await cursor.execute(f"SET TRANSACTION AS OF SYSTEM TIME {self._follower_staleness}")
100
+
101
+ async def _dispatch_execute_impl(self, cursor: "CockroachAsyncpgConnection", statement: SQL) -> "ExecutionResult":
102
+ if statement.returns_rows():
103
+ await self._apply_follower_reads(cursor)
104
+ return await super().dispatch_execute(cursor, statement)
105
+
106
+ async def _dispatch_execute_many_impl(
107
+ self, cursor: "CockroachAsyncpgConnection", statement: SQL
108
+ ) -> "ExecutionResult":
109
+ return await super().dispatch_execute_many(cursor, statement)
110
+
111
+ async def _dispatch_execute_script_impl(
112
+ self, cursor: "CockroachAsyncpgConnection", statement: SQL
113
+ ) -> "ExecutionResult":
114
+ return await super().dispatch_execute_script(cursor, statement)
115
+
116
+ async def dispatch_execute(self, cursor: Any, statement: SQL) -> "ExecutionResult":
117
+ if not self._enable_retry:
118
+ return await self._dispatch_execute_impl(cursor, statement)
119
+ return await self._execute_with_retry(self._dispatch_execute_impl, cursor, statement)
120
+
121
+ async def dispatch_execute_many(self, cursor: Any, statement: SQL) -> "ExecutionResult":
122
+ if not self._enable_retry:
123
+ return await super().dispatch_execute_many(cursor, statement)
124
+ return await self._execute_with_retry(self._dispatch_execute_many_impl, cursor, statement)
125
+
126
+ async def dispatch_execute_script(self, cursor: Any, statement: SQL) -> "ExecutionResult":
127
+ if not self._enable_retry:
128
+ return await super().dispatch_execute_script(cursor, statement)
129
+ return await self._execute_with_retry(self._dispatch_execute_script_impl, cursor, statement)
130
+
131
+ def handle_database_exceptions(self) -> "CockroachAsyncpgExceptionHandler": # type: ignore[override]
132
+ return CockroachAsyncpgExceptionHandler()
133
+
134
+ @property
135
+ def data_dictionary(self) -> "CockroachAsyncpgDataDictionary": # type: ignore[override]
136
+ if self._data_dictionary is None:
137
+ # Intentionally assign CockroachDB-specific data dictionary to parent slot
138
+ object.__setattr__(self, "_data_dictionary", CockroachAsyncpgDataDictionary())
139
+ return cast("CockroachAsyncpgDataDictionary", self._data_dictionary)
140
+
141
+
142
+ register_driver_profile("cockroach_asyncpg", driver_profile)
@@ -0,0 +1,3 @@
1
+ from sqlspec.adapters.cockroach_asyncpg.events.store import CockroachAsyncpgEventQueueStore
2
+
3
+ __all__ = ("CockroachAsyncpgEventQueueStore",)
@@ -0,0 +1,20 @@
1
+ """CockroachDB event queue store for asyncpg driver."""
2
+
3
+ from sqlspec.adapters.cockroach_asyncpg.config import CockroachAsyncpgConfig
4
+ from sqlspec.extensions.events import BaseEventQueueStore
5
+
6
+ __all__ = ("CockroachAsyncpgEventQueueStore",)
7
+
8
+
9
+ class CockroachAsyncpgEventQueueStore(BaseEventQueueStore[CockroachAsyncpgConfig]):
10
+ """Queue DDL for CockroachDB asyncpg configs.
11
+
12
+ CockroachDB uses JSONB for efficient JSON storage and TIMESTAMPTZ for
13
+ timezone-aware timestamps.
14
+ """
15
+
16
+ __slots__ = ()
17
+
18
+ def _column_types(self) -> "tuple[str, str, str]":
19
+ """Return CockroachDB-optimized column types for the event queue."""
20
+ return "JSONB", "JSONB", "TIMESTAMPTZ"
@@ -0,0 +1,3 @@
1
+ from sqlspec.adapters.cockroach_asyncpg.litestar.store import CockroachAsyncpgStore
2
+
3
+ __all__ = ("CockroachAsyncpgStore",)