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,220 @@
1
+ """CockroachDB-specific data dictionary for metadata queries."""
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, SyncDataDictionaryBase
9
+ from sqlspec.typing import ColumnMetadata, ForeignKeyMetadata, IndexMetadata, TableMetadata, VersionInfo
10
+
11
+ if TYPE_CHECKING:
12
+ from sqlspec.adapters.cockroach_psycopg.driver import CockroachPsycopgAsyncDriver, CockroachPsycopgSyncDriver
13
+
14
+ __all__ = ("CockroachPsycopgAsyncDataDictionary", "CockroachPsycopgSyncDataDictionary")
15
+
16
+
17
+ @mypyc_attr(allow_interpreted_subclasses=True, native_class=False)
18
+ class CockroachPsycopgSyncDataDictionary(SyncDataDictionaryBase):
19
+ """CockroachDB sync data dictionary."""
20
+
21
+ dialect: ClassVar[str] = "cockroachdb"
22
+
23
+ def __init__(self) -> None:
24
+ super().__init__()
25
+
26
+ def get_version(self, driver: "CockroachPsycopgSyncDriver") -> "VersionInfo | None":
27
+ """Get CockroachDB version information."""
28
+ driver_id = id(driver)
29
+ if driver_id in self._version_fetch_attempted:
30
+ return self._version_cache.get(driver_id)
31
+
32
+ version_value = driver.select_value_or_none(self.get_query("version"))
33
+ if not version_value:
34
+ self._log_version_unavailable(type(self).dialect, "missing")
35
+ self.cache_version(driver_id, None)
36
+ return None
37
+
38
+ version_info = self.parse_version_with_pattern(self.get_dialect_config().version_pattern, str(version_value))
39
+ if version_info is None:
40
+ self._log_version_unavailable(type(self).dialect, "parse_failed")
41
+ self.cache_version(driver_id, None)
42
+ return None
43
+
44
+ self._log_version_detected(type(self).dialect, version_info)
45
+ self.cache_version(driver_id, version_info)
46
+ return version_info
47
+
48
+ def get_feature_flag(self, driver: "CockroachPsycopgSyncDriver", feature: str) -> bool:
49
+ """Check if CockroachDB supports a specific feature."""
50
+ version_info = self.get_version(driver)
51
+ return self.resolve_feature_flag(feature, version_info)
52
+
53
+ def get_optimal_type(self, driver: "CockroachPsycopgSyncDriver", type_category: str) -> str:
54
+ """Get optimal CockroachDB type for a category."""
55
+ config = self.get_dialect_config()
56
+ if type_category == "json":
57
+ return resolve_cockroachdb_json_type(self.get_version(driver))
58
+ return config.get_optimal_type(type_category)
59
+
60
+ def get_tables(self, driver: "CockroachPsycopgSyncDriver", schema: "str | None" = None) -> "list[TableMetadata]":
61
+ """Get tables sorted by dependency order."""
62
+ schema_name = self.resolve_schema(schema)
63
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="tables")
64
+ return driver.select(self.get_query("tables_by_schema"), schema_name=schema_name, schema_type=TableMetadata)
65
+
66
+ def get_columns(
67
+ self, driver: "CockroachPsycopgSyncDriver", table: "str | None" = None, schema: "str | None" = None
68
+ ) -> "list[ColumnMetadata]":
69
+ """Get column information for a table or schema."""
70
+ schema_name = self.resolve_schema(schema)
71
+ if table is None:
72
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="columns")
73
+ return driver.select(
74
+ self.get_query("columns_by_schema"), schema_name=schema_name, schema_type=ColumnMetadata
75
+ )
76
+
77
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="columns")
78
+ return driver.select(
79
+ self.get_query("columns_by_table"), schema_name=schema_name, table_name=table, schema_type=ColumnMetadata
80
+ )
81
+
82
+ def get_indexes(
83
+ self, driver: "CockroachPsycopgSyncDriver", table: "str | None" = None, schema: "str | None" = None
84
+ ) -> "list[IndexMetadata]":
85
+ """Get index metadata for a table or schema."""
86
+ schema_name = self.resolve_schema(schema)
87
+ if table is None:
88
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="indexes")
89
+ return driver.select(
90
+ self.get_query("indexes_by_schema"), schema_name=schema_name, schema_type=IndexMetadata
91
+ )
92
+
93
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="indexes")
94
+ return driver.select(
95
+ self.get_query("indexes_by_table"), schema_name=schema_name, table_name=table, schema_type=IndexMetadata
96
+ )
97
+
98
+ def get_foreign_keys(
99
+ self, driver: "CockroachPsycopgSyncDriver", table: "str | None" = None, schema: "str | None" = None
100
+ ) -> "list[ForeignKeyMetadata]":
101
+ """Get foreign key metadata."""
102
+ schema_name = self.resolve_schema(schema)
103
+ if table is None:
104
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="foreign_keys")
105
+ return driver.select(
106
+ self.get_query("foreign_keys_by_schema"), schema_name=schema_name, schema_type=ForeignKeyMetadata
107
+ )
108
+
109
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="foreign_keys")
110
+ return driver.select(
111
+ self.get_query("foreign_keys_by_table"),
112
+ table_name=table,
113
+ schema_name=schema_name,
114
+ schema_type=ForeignKeyMetadata,
115
+ )
116
+
117
+
118
+ @mypyc_attr(allow_interpreted_subclasses=True, native_class=False)
119
+ class CockroachPsycopgAsyncDataDictionary(AsyncDataDictionaryBase):
120
+ """CockroachDB async data dictionary."""
121
+
122
+ dialect: ClassVar[str] = "cockroachdb"
123
+
124
+ def __init__(self) -> None:
125
+ super().__init__()
126
+
127
+ async def get_version(self, driver: "CockroachPsycopgAsyncDriver") -> "VersionInfo | None":
128
+ """Get CockroachDB version information."""
129
+ driver_id = id(driver)
130
+ if driver_id in self._version_fetch_attempted:
131
+ return self._version_cache.get(driver_id)
132
+
133
+ version_value = await driver.select_value_or_none(self.get_query("version"))
134
+ if not version_value:
135
+ self._log_version_unavailable(type(self).dialect, "missing")
136
+ self.cache_version(driver_id, None)
137
+ return None
138
+
139
+ version_info = self.parse_version_with_pattern(self.get_dialect_config().version_pattern, str(version_value))
140
+ if version_info is None:
141
+ self._log_version_unavailable(type(self).dialect, "parse_failed")
142
+ self.cache_version(driver_id, None)
143
+ return None
144
+
145
+ self._log_version_detected(type(self).dialect, version_info)
146
+ self.cache_version(driver_id, version_info)
147
+ return version_info
148
+
149
+ async def get_feature_flag(self, driver: "CockroachPsycopgAsyncDriver", feature: str) -> bool:
150
+ """Check if CockroachDB supports a specific feature."""
151
+ version_info = await self.get_version(driver)
152
+ return self.resolve_feature_flag(feature, version_info)
153
+
154
+ async def get_optimal_type(self, driver: "CockroachPsycopgAsyncDriver", type_category: str) -> str:
155
+ """Get optimal CockroachDB type for a category."""
156
+ config = self.get_dialect_config()
157
+ if type_category == "json":
158
+ return resolve_cockroachdb_json_type(await self.get_version(driver))
159
+ return config.get_optimal_type(type_category)
160
+
161
+ async def get_tables(
162
+ self, driver: "CockroachPsycopgAsyncDriver", schema: "str | None" = None
163
+ ) -> "list[TableMetadata]":
164
+ """Get tables sorted by dependency order."""
165
+ schema_name = self.resolve_schema(schema)
166
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="tables")
167
+ return await driver.select(
168
+ self.get_query("tables_by_schema"), schema_name=schema_name, schema_type=TableMetadata
169
+ )
170
+
171
+ async def get_columns(
172
+ self, driver: "CockroachPsycopgAsyncDriver", table: "str | None" = None, schema: "str | None" = None
173
+ ) -> "list[ColumnMetadata]":
174
+ """Get column information for a table or schema."""
175
+ schema_name = self.resolve_schema(schema)
176
+ if table is None:
177
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="columns")
178
+ return await driver.select(
179
+ self.get_query("columns_by_schema"), schema_name=schema_name, schema_type=ColumnMetadata
180
+ )
181
+
182
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="columns")
183
+ return await driver.select(
184
+ self.get_query("columns_by_table"), schema_name=schema_name, table_name=table, schema_type=ColumnMetadata
185
+ )
186
+
187
+ async def get_indexes(
188
+ self, driver: "CockroachPsycopgAsyncDriver", table: "str | None" = None, schema: "str | None" = None
189
+ ) -> "list[IndexMetadata]":
190
+ """Get index metadata for a table or schema."""
191
+ schema_name = self.resolve_schema(schema)
192
+ if table is None:
193
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="indexes")
194
+ return await driver.select(
195
+ self.get_query("indexes_by_schema"), schema_name=schema_name, schema_type=IndexMetadata
196
+ )
197
+
198
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="indexes")
199
+ return await driver.select(
200
+ self.get_query("indexes_by_table"), schema_name=schema_name, table_name=table, schema_type=IndexMetadata
201
+ )
202
+
203
+ async def get_foreign_keys(
204
+ self, driver: "CockroachPsycopgAsyncDriver", table: "str | None" = None, schema: "str | None" = None
205
+ ) -> "list[ForeignKeyMetadata]":
206
+ """Get foreign key metadata."""
207
+ schema_name = self.resolve_schema(schema)
208
+ if table is None:
209
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="foreign_keys")
210
+ return await driver.select(
211
+ self.get_query("foreign_keys_by_schema"), schema_name=schema_name, schema_type=ForeignKeyMetadata
212
+ )
213
+
214
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="foreign_keys")
215
+ return await driver.select(
216
+ self.get_query("foreign_keys_by_table"),
217
+ table_name=table,
218
+ schema_name=schema_name,
219
+ schema_type=ForeignKeyMetadata,
220
+ )
@@ -0,0 +1,273 @@
1
+ """CockroachDB psycopg driver implementation."""
2
+
3
+ import asyncio
4
+ import contextlib
5
+ import time
6
+ from typing import TYPE_CHECKING, Any, cast
7
+
8
+ import psycopg
9
+
10
+ from sqlspec.adapters.cockroach_psycopg._typing import (
11
+ CockroachAsyncConnection,
12
+ CockroachPsycopgAsyncSessionContext,
13
+ CockroachPsycopgSyncSessionContext,
14
+ CockroachSyncConnection,
15
+ )
16
+ from sqlspec.adapters.cockroach_psycopg.core import (
17
+ CockroachPsycopgRetryConfig,
18
+ apply_driver_features,
19
+ build_statement_config,
20
+ calculate_backoff_seconds,
21
+ driver_profile,
22
+ is_retryable_error,
23
+ )
24
+ from sqlspec.adapters.cockroach_psycopg.data_dictionary import (
25
+ CockroachPsycopgAsyncDataDictionary,
26
+ CockroachPsycopgSyncDataDictionary,
27
+ )
28
+ from sqlspec.adapters.psycopg.core import create_mapped_exception
29
+ from sqlspec.adapters.psycopg.driver import PsycopgAsyncDriver, PsycopgSyncDriver
30
+ from sqlspec.core import SQL, StatementConfig, get_cache_config, register_driver_profile
31
+ from sqlspec.driver import BaseAsyncExceptionHandler, BaseSyncExceptionHandler
32
+ from sqlspec.exceptions import SerializationConflictError, TransactionRetryError
33
+ from sqlspec.utils.logging import get_logger
34
+ from sqlspec.utils.type_guards import has_sqlstate
35
+
36
+ if TYPE_CHECKING:
37
+ from collections.abc import Callable
38
+
39
+ from sqlspec.driver import ExecutionResult
40
+
41
+ __all__ = (
42
+ "CockroachPsycopgAsyncDriver",
43
+ "CockroachPsycopgAsyncExceptionHandler",
44
+ "CockroachPsycopgAsyncSessionContext",
45
+ "CockroachPsycopgSyncDriver",
46
+ "CockroachPsycopgSyncExceptionHandler",
47
+ "CockroachPsycopgSyncSessionContext",
48
+ )
49
+
50
+ logger = get_logger("sqlspec.adapters.cockroach_psycopg")
51
+
52
+
53
+ class CockroachPsycopgSyncExceptionHandler(BaseSyncExceptionHandler):
54
+ """Context manager for handling CockroachDB psycopg exceptions."""
55
+
56
+ __slots__ = ()
57
+
58
+ def _handle_exception(self, exc_type: "type[BaseException] | None", exc_val: "BaseException") -> bool:
59
+ if exc_type is None:
60
+ return False
61
+ if issubclass(exc_type, psycopg.Error):
62
+ if has_sqlstate(exc_val) and str(exc_val.sqlstate) == "40001":
63
+ self.pending_exception = SerializationConflictError(str(exc_val))
64
+ return True
65
+ self.pending_exception = create_mapped_exception(exc_val)
66
+ return True
67
+ return False
68
+
69
+
70
+ class CockroachPsycopgAsyncExceptionHandler(BaseAsyncExceptionHandler):
71
+ """Async context manager for handling CockroachDB psycopg exceptions."""
72
+
73
+ __slots__ = ()
74
+
75
+ def _handle_exception(self, exc_type: "type[BaseException] | None", exc_val: "BaseException") -> bool:
76
+ if exc_type is None:
77
+ return False
78
+ if issubclass(exc_type, psycopg.Error):
79
+ if has_sqlstate(exc_val) and str(exc_val.sqlstate) == "40001":
80
+ self.pending_exception = SerializationConflictError(str(exc_val))
81
+ return True
82
+ self.pending_exception = create_mapped_exception(exc_val)
83
+ return True
84
+ return False
85
+
86
+
87
+ class CockroachPsycopgSyncDriver(PsycopgSyncDriver):
88
+ """CockroachDB sync driver using psycopg.crdb."""
89
+
90
+ __slots__ = ("_enable_retry", "_follower_staleness", "_retry_config")
91
+ dialect = "postgres"
92
+
93
+ def __init__(
94
+ self,
95
+ connection: CockroachSyncConnection,
96
+ statement_config: "StatementConfig | None" = None,
97
+ driver_features: "dict[str, Any] | None" = None,
98
+ ) -> None:
99
+ if statement_config is None:
100
+ statement_config = build_statement_config().replace(
101
+ enable_caching=get_cache_config().compiled_cache_enabled
102
+ )
103
+
104
+ statement_config, normalized_features = apply_driver_features(statement_config, driver_features)
105
+ super().__init__(connection=connection, statement_config=statement_config, driver_features=normalized_features)
106
+
107
+ self._retry_config = CockroachPsycopgRetryConfig.from_features(self.driver_features)
108
+ self._enable_retry = bool(self.driver_features.get("enable_auto_retry", True))
109
+ self._follower_staleness = cast("str | None", self.driver_features.get("default_staleness"))
110
+ # Data dictionary is lazily initialized in property; use parent slot
111
+ self._data_dictionary = None
112
+
113
+ def _execute_with_retry(self, operation: "Callable[..., ExecutionResult]", *args: Any) -> "ExecutionResult":
114
+ if not self._enable_retry:
115
+ return operation(*args)
116
+
117
+ last_error: Exception | None = None
118
+
119
+ for attempt in range(self._retry_config.max_retries + 1):
120
+ try:
121
+ return operation(*args)
122
+ except Exception as exc:
123
+ last_error = exc
124
+ if not is_retryable_error(exc) or attempt >= self._retry_config.max_retries:
125
+ raise
126
+ with contextlib.suppress(Exception):
127
+ self.connection.rollback()
128
+ delay = calculate_backoff_seconds(attempt, self._retry_config)
129
+ if self._retry_config.enable_logging:
130
+ logger.debug("CockroachDB retry %s/%s after %.3fs", attempt + 1, self._retry_config.max_retries, delay)
131
+ time.sleep(delay)
132
+
133
+ msg = "CockroachDB transaction retry limit exceeded"
134
+ raise TransactionRetryError(msg) from last_error
135
+
136
+ def _apply_follower_reads(self, cursor: Any) -> None:
137
+ if not self.driver_features.get("enable_follower_reads", False):
138
+ return
139
+ if not self._follower_staleness:
140
+ return
141
+ cursor.execute(f"SET TRANSACTION AS OF SYSTEM TIME {self._follower_staleness}")
142
+
143
+ def _dispatch_execute_impl(self, cursor: Any, statement: SQL) -> "ExecutionResult":
144
+ if statement.returns_rows():
145
+ self._apply_follower_reads(cursor)
146
+ return super().dispatch_execute(cursor, statement)
147
+
148
+ def _dispatch_execute_many_impl(self, cursor: Any, statement: SQL) -> "ExecutionResult":
149
+ return super().dispatch_execute_many(cursor, statement)
150
+
151
+ def _dispatch_execute_script_impl(self, cursor: Any, statement: SQL) -> "ExecutionResult":
152
+ return super().dispatch_execute_script(cursor, statement)
153
+
154
+ def dispatch_execute(self, cursor: Any, statement: SQL) -> "ExecutionResult":
155
+ if not self._enable_retry:
156
+ return self._dispatch_execute_impl(cursor, statement)
157
+ return self._execute_with_retry(self._dispatch_execute_impl, cursor, statement)
158
+
159
+ def dispatch_execute_many(self, cursor: Any, statement: SQL) -> "ExecutionResult":
160
+ if not self._enable_retry:
161
+ return super().dispatch_execute_many(cursor, statement)
162
+ return self._execute_with_retry(self._dispatch_execute_many_impl, cursor, statement)
163
+
164
+ def dispatch_execute_script(self, cursor: Any, statement: SQL) -> "ExecutionResult":
165
+ if not self._enable_retry:
166
+ return super().dispatch_execute_script(cursor, statement)
167
+ return self._execute_with_retry(self._dispatch_execute_script_impl, cursor, statement)
168
+
169
+ def handle_database_exceptions(self) -> "CockroachPsycopgSyncExceptionHandler": # type: ignore[override]
170
+ return CockroachPsycopgSyncExceptionHandler()
171
+
172
+ @property
173
+ def data_dictionary(self) -> "CockroachPsycopgSyncDataDictionary": # type: ignore[override]
174
+ if self._data_dictionary is None:
175
+ # Intentionally assign CockroachDB-specific data dictionary to parent slot
176
+ object.__setattr__(self, "_data_dictionary", CockroachPsycopgSyncDataDictionary())
177
+ return cast("CockroachPsycopgSyncDataDictionary", self._data_dictionary)
178
+
179
+
180
+ class CockroachPsycopgAsyncDriver(PsycopgAsyncDriver):
181
+ """CockroachDB async driver using psycopg.crdb."""
182
+
183
+ __slots__ = ("_enable_retry", "_follower_staleness", "_retry_config")
184
+ dialect = "postgres"
185
+
186
+ def __init__(
187
+ self,
188
+ connection: CockroachAsyncConnection,
189
+ statement_config: "StatementConfig | None" = None,
190
+ driver_features: "dict[str, Any] | None" = None,
191
+ ) -> None:
192
+ if statement_config is None:
193
+ statement_config = build_statement_config().replace(
194
+ enable_caching=get_cache_config().compiled_cache_enabled
195
+ )
196
+
197
+ statement_config, normalized_features = apply_driver_features(statement_config, driver_features)
198
+ super().__init__(connection=connection, statement_config=statement_config, driver_features=normalized_features)
199
+
200
+ self._retry_config = CockroachPsycopgRetryConfig.from_features(self.driver_features)
201
+ self._enable_retry = bool(self.driver_features.get("enable_auto_retry", True))
202
+ self._follower_staleness = cast("str | None", self.driver_features.get("default_staleness"))
203
+ # Data dictionary is lazily initialized in property; use parent slot
204
+ self._data_dictionary = None
205
+
206
+ async def _execute_with_retry(self, operation: "Callable[..., Any]", *args: Any) -> "ExecutionResult":
207
+ if not self._enable_retry:
208
+ return cast("ExecutionResult", await operation(*args))
209
+
210
+ last_error: Exception | None = None
211
+
212
+ for attempt in range(self._retry_config.max_retries + 1):
213
+ try:
214
+ return cast("ExecutionResult", await operation(*args))
215
+ except Exception as exc:
216
+ last_error = exc
217
+ if not is_retryable_error(exc) or attempt >= self._retry_config.max_retries:
218
+ raise
219
+ with contextlib.suppress(Exception):
220
+ await self.connection.rollback()
221
+ delay = calculate_backoff_seconds(attempt, self._retry_config)
222
+ if self._retry_config.enable_logging:
223
+ logger.debug("CockroachDB retry %s/%s after %.3fs", attempt + 1, self._retry_config.max_retries, delay)
224
+ await asyncio.sleep(delay)
225
+
226
+ msg = "CockroachDB transaction retry limit exceeded"
227
+ raise TransactionRetryError(msg) from last_error
228
+
229
+ async def _apply_follower_reads(self, cursor: Any) -> None:
230
+ if not self.driver_features.get("enable_follower_reads", False):
231
+ return
232
+ if not self._follower_staleness:
233
+ return
234
+ await cursor.execute(f"SET TRANSACTION AS OF SYSTEM TIME {self._follower_staleness}")
235
+
236
+ async def _dispatch_execute_impl(self, cursor: Any, statement: SQL) -> "ExecutionResult":
237
+ if statement.returns_rows():
238
+ await self._apply_follower_reads(cursor)
239
+ return await super().dispatch_execute(cursor, statement)
240
+
241
+ async def _dispatch_execute_many_impl(self, cursor: Any, statement: SQL) -> "ExecutionResult":
242
+ return await super().dispatch_execute_many(cursor, statement)
243
+
244
+ async def _dispatch_execute_script_impl(self, cursor: Any, statement: SQL) -> "ExecutionResult":
245
+ return await super().dispatch_execute_script(cursor, statement)
246
+
247
+ async def dispatch_execute(self, cursor: Any, statement: SQL) -> "ExecutionResult":
248
+ if not self._enable_retry:
249
+ return await self._dispatch_execute_impl(cursor, statement)
250
+ return await self._execute_with_retry(self._dispatch_execute_impl, cursor, statement)
251
+
252
+ async def dispatch_execute_many(self, cursor: Any, statement: SQL) -> "ExecutionResult":
253
+ if not self._enable_retry:
254
+ return await super().dispatch_execute_many(cursor, statement)
255
+ return await self._execute_with_retry(self._dispatch_execute_many_impl, cursor, statement)
256
+
257
+ async def dispatch_execute_script(self, cursor: Any, statement: SQL) -> "ExecutionResult":
258
+ if not self._enable_retry:
259
+ return await super().dispatch_execute_script(cursor, statement)
260
+ return await self._execute_with_retry(self._dispatch_execute_script_impl, cursor, statement)
261
+
262
+ def handle_database_exceptions(self) -> "CockroachPsycopgAsyncExceptionHandler": # type: ignore[override]
263
+ return CockroachPsycopgAsyncExceptionHandler()
264
+
265
+ @property
266
+ def data_dictionary(self) -> "CockroachPsycopgAsyncDataDictionary": # type: ignore[override]
267
+ if self._data_dictionary is None:
268
+ # Intentionally assign CockroachDB-specific data dictionary to parent slot
269
+ object.__setattr__(self, "_data_dictionary", CockroachPsycopgAsyncDataDictionary())
270
+ return cast("CockroachPsycopgAsyncDataDictionary", self._data_dictionary)
271
+
272
+
273
+ register_driver_profile("cockroach_psycopg", driver_profile)
@@ -0,0 +1,6 @@
1
+ from sqlspec.adapters.cockroach_psycopg.events.store import (
2
+ CockroachPsycopgAsyncEventQueueStore,
3
+ CockroachPsycopgSyncEventQueueStore,
4
+ )
5
+
6
+ __all__ = ("CockroachPsycopgAsyncEventQueueStore", "CockroachPsycopgSyncEventQueueStore")
@@ -0,0 +1,34 @@
1
+ """CockroachDB event queue stores for psycopg sync/async drivers."""
2
+
3
+ from sqlspec.adapters.cockroach_psycopg.config import CockroachPsycopgAsyncConfig, CockroachPsycopgSyncConfig
4
+ from sqlspec.extensions.events import BaseEventQueueStore
5
+
6
+ __all__ = ("CockroachPsycopgAsyncEventQueueStore", "CockroachPsycopgSyncEventQueueStore")
7
+
8
+
9
+ class CockroachPsycopgSyncEventQueueStore(BaseEventQueueStore[CockroachPsycopgSyncConfig]):
10
+ """Queue DDL for CockroachDB psycopg synchronous 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"
21
+
22
+
23
+ class CockroachPsycopgAsyncEventQueueStore(BaseEventQueueStore[CockroachPsycopgAsyncConfig]):
24
+ """Queue DDL for CockroachDB psycopg async configs.
25
+
26
+ CockroachDB uses JSONB for efficient JSON storage and TIMESTAMPTZ for
27
+ timezone-aware timestamps.
28
+ """
29
+
30
+ __slots__ = ()
31
+
32
+ def _column_types(self) -> "tuple[str, str, str]":
33
+ """Return CockroachDB-optimized column types for the event queue."""
34
+ return "JSONB", "JSONB", "TIMESTAMPTZ"
@@ -0,0 +1,3 @@
1
+ from sqlspec.adapters.cockroach_psycopg.litestar.store import CockroachPsycopgAsyncStore, CockroachPsycopgSyncStore
2
+
3
+ __all__ = ("CockroachPsycopgAsyncStore", "CockroachPsycopgSyncStore")