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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. ac8f31065839703b4e70__mypyc.cpython-310-aarch64-linux-gnu.so +0 -0
  2. sqlspec/__init__.py +140 -0
  3. sqlspec/__main__.py +12 -0
  4. sqlspec/__metadata__.py +14 -0
  5. sqlspec/_serialization.py +315 -0
  6. sqlspec/_typing.py +700 -0
  7. sqlspec/adapters/__init__.py +0 -0
  8. sqlspec/adapters/adbc/__init__.py +5 -0
  9. sqlspec/adapters/adbc/_typing.py +82 -0
  10. sqlspec/adapters/adbc/adk/__init__.py +5 -0
  11. sqlspec/adapters/adbc/adk/store.py +1273 -0
  12. sqlspec/adapters/adbc/config.py +295 -0
  13. sqlspec/adapters/adbc/core.cpython-310-aarch64-linux-gnu.so +0 -0
  14. sqlspec/adapters/adbc/core.py +735 -0
  15. sqlspec/adapters/adbc/data_dictionary.py +334 -0
  16. sqlspec/adapters/adbc/driver.py +529 -0
  17. sqlspec/adapters/adbc/events/__init__.py +5 -0
  18. sqlspec/adapters/adbc/events/store.py +285 -0
  19. sqlspec/adapters/adbc/litestar/__init__.py +5 -0
  20. sqlspec/adapters/adbc/litestar/store.py +502 -0
  21. sqlspec/adapters/adbc/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  22. sqlspec/adapters/adbc/type_converter.py +140 -0
  23. sqlspec/adapters/aiosqlite/__init__.py +25 -0
  24. sqlspec/adapters/aiosqlite/_typing.py +82 -0
  25. sqlspec/adapters/aiosqlite/adk/__init__.py +5 -0
  26. sqlspec/adapters/aiosqlite/adk/store.py +818 -0
  27. sqlspec/adapters/aiosqlite/config.py +334 -0
  28. sqlspec/adapters/aiosqlite/core.cpython-310-aarch64-linux-gnu.so +0 -0
  29. sqlspec/adapters/aiosqlite/core.py +315 -0
  30. sqlspec/adapters/aiosqlite/data_dictionary.py +208 -0
  31. sqlspec/adapters/aiosqlite/driver.py +313 -0
  32. sqlspec/adapters/aiosqlite/events/__init__.py +5 -0
  33. sqlspec/adapters/aiosqlite/events/store.py +20 -0
  34. sqlspec/adapters/aiosqlite/litestar/__init__.py +5 -0
  35. sqlspec/adapters/aiosqlite/litestar/store.py +279 -0
  36. sqlspec/adapters/aiosqlite/pool.py +533 -0
  37. sqlspec/adapters/asyncmy/__init__.py +21 -0
  38. sqlspec/adapters/asyncmy/_typing.py +87 -0
  39. sqlspec/adapters/asyncmy/adk/__init__.py +5 -0
  40. sqlspec/adapters/asyncmy/adk/store.py +703 -0
  41. sqlspec/adapters/asyncmy/config.py +302 -0
  42. sqlspec/adapters/asyncmy/core.cpython-310-aarch64-linux-gnu.so +0 -0
  43. sqlspec/adapters/asyncmy/core.py +360 -0
  44. sqlspec/adapters/asyncmy/data_dictionary.py +124 -0
  45. sqlspec/adapters/asyncmy/driver.py +383 -0
  46. sqlspec/adapters/asyncmy/events/__init__.py +5 -0
  47. sqlspec/adapters/asyncmy/events/store.py +104 -0
  48. sqlspec/adapters/asyncmy/litestar/__init__.py +5 -0
  49. sqlspec/adapters/asyncmy/litestar/store.py +296 -0
  50. sqlspec/adapters/asyncpg/__init__.py +19 -0
  51. sqlspec/adapters/asyncpg/_typing.py +88 -0
  52. sqlspec/adapters/asyncpg/adk/__init__.py +5 -0
  53. sqlspec/adapters/asyncpg/adk/store.py +748 -0
  54. sqlspec/adapters/asyncpg/config.py +569 -0
  55. sqlspec/adapters/asyncpg/core.cpython-310-aarch64-linux-gnu.so +0 -0
  56. sqlspec/adapters/asyncpg/core.py +367 -0
  57. sqlspec/adapters/asyncpg/data_dictionary.py +162 -0
  58. sqlspec/adapters/asyncpg/driver.py +487 -0
  59. sqlspec/adapters/asyncpg/events/__init__.py +6 -0
  60. sqlspec/adapters/asyncpg/events/backend.py +286 -0
  61. sqlspec/adapters/asyncpg/events/store.py +40 -0
  62. sqlspec/adapters/asyncpg/litestar/__init__.py +5 -0
  63. sqlspec/adapters/asyncpg/litestar/store.py +251 -0
  64. sqlspec/adapters/bigquery/__init__.py +14 -0
  65. sqlspec/adapters/bigquery/_typing.py +86 -0
  66. sqlspec/adapters/bigquery/adk/__init__.py +5 -0
  67. sqlspec/adapters/bigquery/adk/store.py +827 -0
  68. sqlspec/adapters/bigquery/config.py +353 -0
  69. sqlspec/adapters/bigquery/core.cpython-310-aarch64-linux-gnu.so +0 -0
  70. sqlspec/adapters/bigquery/core.py +715 -0
  71. sqlspec/adapters/bigquery/data_dictionary.py +128 -0
  72. sqlspec/adapters/bigquery/driver.py +548 -0
  73. sqlspec/adapters/bigquery/events/__init__.py +5 -0
  74. sqlspec/adapters/bigquery/events/store.py +139 -0
  75. sqlspec/adapters/bigquery/litestar/__init__.py +5 -0
  76. sqlspec/adapters/bigquery/litestar/store.py +325 -0
  77. sqlspec/adapters/bigquery/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  78. sqlspec/adapters/bigquery/type_converter.py +107 -0
  79. sqlspec/adapters/cockroach_asyncpg/__init__.py +24 -0
  80. sqlspec/adapters/cockroach_asyncpg/_typing.py +72 -0
  81. sqlspec/adapters/cockroach_asyncpg/adk/__init__.py +3 -0
  82. sqlspec/adapters/cockroach_asyncpg/adk/store.py +410 -0
  83. sqlspec/adapters/cockroach_asyncpg/config.py +238 -0
  84. sqlspec/adapters/cockroach_asyncpg/core.cpython-310-aarch64-linux-gnu.so +0 -0
  85. sqlspec/adapters/cockroach_asyncpg/core.py +55 -0
  86. sqlspec/adapters/cockroach_asyncpg/data_dictionary.py +107 -0
  87. sqlspec/adapters/cockroach_asyncpg/driver.py +144 -0
  88. sqlspec/adapters/cockroach_asyncpg/events/__init__.py +3 -0
  89. sqlspec/adapters/cockroach_asyncpg/events/store.py +20 -0
  90. sqlspec/adapters/cockroach_asyncpg/litestar/__init__.py +3 -0
  91. sqlspec/adapters/cockroach_asyncpg/litestar/store.py +142 -0
  92. sqlspec/adapters/cockroach_psycopg/__init__.py +38 -0
  93. sqlspec/adapters/cockroach_psycopg/_typing.py +129 -0
  94. sqlspec/adapters/cockroach_psycopg/adk/__init__.py +13 -0
  95. sqlspec/adapters/cockroach_psycopg/adk/store.py +868 -0
  96. sqlspec/adapters/cockroach_psycopg/config.py +484 -0
  97. sqlspec/adapters/cockroach_psycopg/core.cpython-310-aarch64-linux-gnu.so +0 -0
  98. sqlspec/adapters/cockroach_psycopg/core.py +63 -0
  99. sqlspec/adapters/cockroach_psycopg/data_dictionary.py +215 -0
  100. sqlspec/adapters/cockroach_psycopg/driver.py +284 -0
  101. sqlspec/adapters/cockroach_psycopg/events/__init__.py +6 -0
  102. sqlspec/adapters/cockroach_psycopg/events/store.py +34 -0
  103. sqlspec/adapters/cockroach_psycopg/litestar/__init__.py +3 -0
  104. sqlspec/adapters/cockroach_psycopg/litestar/store.py +325 -0
  105. sqlspec/adapters/duckdb/__init__.py +25 -0
  106. sqlspec/adapters/duckdb/_typing.py +81 -0
  107. sqlspec/adapters/duckdb/adk/__init__.py +14 -0
  108. sqlspec/adapters/duckdb/adk/store.py +850 -0
  109. sqlspec/adapters/duckdb/config.py +463 -0
  110. sqlspec/adapters/duckdb/core.cpython-310-aarch64-linux-gnu.so +0 -0
  111. sqlspec/adapters/duckdb/core.py +257 -0
  112. sqlspec/adapters/duckdb/data_dictionary.py +140 -0
  113. sqlspec/adapters/duckdb/driver.py +430 -0
  114. sqlspec/adapters/duckdb/events/__init__.py +5 -0
  115. sqlspec/adapters/duckdb/events/store.py +57 -0
  116. sqlspec/adapters/duckdb/litestar/__init__.py +5 -0
  117. sqlspec/adapters/duckdb/litestar/store.py +330 -0
  118. sqlspec/adapters/duckdb/pool.py +293 -0
  119. sqlspec/adapters/duckdb/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  120. sqlspec/adapters/duckdb/type_converter.py +118 -0
  121. sqlspec/adapters/mock/__init__.py +72 -0
  122. sqlspec/adapters/mock/_typing.py +147 -0
  123. sqlspec/adapters/mock/config.py +483 -0
  124. sqlspec/adapters/mock/core.py +319 -0
  125. sqlspec/adapters/mock/data_dictionary.py +366 -0
  126. sqlspec/adapters/mock/driver.py +721 -0
  127. sqlspec/adapters/mysqlconnector/__init__.py +36 -0
  128. sqlspec/adapters/mysqlconnector/_typing.py +141 -0
  129. sqlspec/adapters/mysqlconnector/adk/__init__.py +15 -0
  130. sqlspec/adapters/mysqlconnector/adk/store.py +1060 -0
  131. sqlspec/adapters/mysqlconnector/config.py +394 -0
  132. sqlspec/adapters/mysqlconnector/core.cpython-310-aarch64-linux-gnu.so +0 -0
  133. sqlspec/adapters/mysqlconnector/core.py +303 -0
  134. sqlspec/adapters/mysqlconnector/data_dictionary.py +235 -0
  135. sqlspec/adapters/mysqlconnector/driver.py +483 -0
  136. sqlspec/adapters/mysqlconnector/events/__init__.py +8 -0
  137. sqlspec/adapters/mysqlconnector/events/store.py +98 -0
  138. sqlspec/adapters/mysqlconnector/litestar/__init__.py +5 -0
  139. sqlspec/adapters/mysqlconnector/litestar/store.py +426 -0
  140. sqlspec/adapters/oracledb/__init__.py +60 -0
  141. sqlspec/adapters/oracledb/_numpy_handlers.py +141 -0
  142. sqlspec/adapters/oracledb/_typing.py +182 -0
  143. sqlspec/adapters/oracledb/_uuid_handlers.py +166 -0
  144. sqlspec/adapters/oracledb/adk/__init__.py +10 -0
  145. sqlspec/adapters/oracledb/adk/store.py +2369 -0
  146. sqlspec/adapters/oracledb/config.py +550 -0
  147. sqlspec/adapters/oracledb/core.cpython-310-aarch64-linux-gnu.so +0 -0
  148. sqlspec/adapters/oracledb/core.py +543 -0
  149. sqlspec/adapters/oracledb/data_dictionary.py +536 -0
  150. sqlspec/adapters/oracledb/driver.py +1229 -0
  151. sqlspec/adapters/oracledb/events/__init__.py +16 -0
  152. sqlspec/adapters/oracledb/events/backend.py +347 -0
  153. sqlspec/adapters/oracledb/events/store.py +420 -0
  154. sqlspec/adapters/oracledb/litestar/__init__.py +5 -0
  155. sqlspec/adapters/oracledb/litestar/store.py +781 -0
  156. sqlspec/adapters/oracledb/migrations.py +535 -0
  157. sqlspec/adapters/oracledb/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  158. sqlspec/adapters/oracledb/type_converter.py +211 -0
  159. sqlspec/adapters/psqlpy/__init__.py +17 -0
  160. sqlspec/adapters/psqlpy/_typing.py +79 -0
  161. sqlspec/adapters/psqlpy/adk/__init__.py +5 -0
  162. sqlspec/adapters/psqlpy/adk/store.py +766 -0
  163. sqlspec/adapters/psqlpy/config.py +304 -0
  164. sqlspec/adapters/psqlpy/core.cpython-310-aarch64-linux-gnu.so +0 -0
  165. sqlspec/adapters/psqlpy/core.py +480 -0
  166. sqlspec/adapters/psqlpy/data_dictionary.py +126 -0
  167. sqlspec/adapters/psqlpy/driver.py +438 -0
  168. sqlspec/adapters/psqlpy/events/__init__.py +6 -0
  169. sqlspec/adapters/psqlpy/events/backend.py +310 -0
  170. sqlspec/adapters/psqlpy/events/store.py +20 -0
  171. sqlspec/adapters/psqlpy/litestar/__init__.py +5 -0
  172. sqlspec/adapters/psqlpy/litestar/store.py +270 -0
  173. sqlspec/adapters/psqlpy/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  174. sqlspec/adapters/psqlpy/type_converter.py +113 -0
  175. sqlspec/adapters/psycopg/__init__.py +32 -0
  176. sqlspec/adapters/psycopg/_typing.py +164 -0
  177. sqlspec/adapters/psycopg/adk/__init__.py +10 -0
  178. sqlspec/adapters/psycopg/adk/store.py +1387 -0
  179. sqlspec/adapters/psycopg/config.py +576 -0
  180. sqlspec/adapters/psycopg/core.cpython-310-aarch64-linux-gnu.so +0 -0
  181. sqlspec/adapters/psycopg/core.py +450 -0
  182. sqlspec/adapters/psycopg/data_dictionary.py +289 -0
  183. sqlspec/adapters/psycopg/driver.py +975 -0
  184. sqlspec/adapters/psycopg/events/__init__.py +20 -0
  185. sqlspec/adapters/psycopg/events/backend.py +458 -0
  186. sqlspec/adapters/psycopg/events/store.py +42 -0
  187. sqlspec/adapters/psycopg/litestar/__init__.py +5 -0
  188. sqlspec/adapters/psycopg/litestar/store.py +552 -0
  189. sqlspec/adapters/psycopg/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  190. sqlspec/adapters/psycopg/type_converter.py +93 -0
  191. sqlspec/adapters/pymysql/__init__.py +21 -0
  192. sqlspec/adapters/pymysql/_typing.py +71 -0
  193. sqlspec/adapters/pymysql/adk/__init__.py +5 -0
  194. sqlspec/adapters/pymysql/adk/store.py +540 -0
  195. sqlspec/adapters/pymysql/config.py +195 -0
  196. sqlspec/adapters/pymysql/core.cpython-310-aarch64-linux-gnu.so +0 -0
  197. sqlspec/adapters/pymysql/core.py +299 -0
  198. sqlspec/adapters/pymysql/data_dictionary.py +122 -0
  199. sqlspec/adapters/pymysql/driver.py +259 -0
  200. sqlspec/adapters/pymysql/events/__init__.py +5 -0
  201. sqlspec/adapters/pymysql/events/store.py +50 -0
  202. sqlspec/adapters/pymysql/litestar/__init__.py +5 -0
  203. sqlspec/adapters/pymysql/litestar/store.py +232 -0
  204. sqlspec/adapters/pymysql/pool.py +137 -0
  205. sqlspec/adapters/spanner/__init__.py +40 -0
  206. sqlspec/adapters/spanner/_typing.py +86 -0
  207. sqlspec/adapters/spanner/adk/__init__.py +5 -0
  208. sqlspec/adapters/spanner/adk/store.py +732 -0
  209. sqlspec/adapters/spanner/config.py +352 -0
  210. sqlspec/adapters/spanner/core.cpython-310-aarch64-linux-gnu.so +0 -0
  211. sqlspec/adapters/spanner/core.py +188 -0
  212. sqlspec/adapters/spanner/data_dictionary.py +120 -0
  213. sqlspec/adapters/spanner/dialect/__init__.py +6 -0
  214. sqlspec/adapters/spanner/dialect/_spangres.py +57 -0
  215. sqlspec/adapters/spanner/dialect/_spanner.py +130 -0
  216. sqlspec/adapters/spanner/driver.py +373 -0
  217. sqlspec/adapters/spanner/events/__init__.py +5 -0
  218. sqlspec/adapters/spanner/events/store.py +187 -0
  219. sqlspec/adapters/spanner/litestar/__init__.py +5 -0
  220. sqlspec/adapters/spanner/litestar/store.py +291 -0
  221. sqlspec/adapters/spanner/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  222. sqlspec/adapters/spanner/type_converter.py +331 -0
  223. sqlspec/adapters/sqlite/__init__.py +19 -0
  224. sqlspec/adapters/sqlite/_typing.py +80 -0
  225. sqlspec/adapters/sqlite/adk/__init__.py +5 -0
  226. sqlspec/adapters/sqlite/adk/store.py +958 -0
  227. sqlspec/adapters/sqlite/config.py +280 -0
  228. sqlspec/adapters/sqlite/core.cpython-310-aarch64-linux-gnu.so +0 -0
  229. sqlspec/adapters/sqlite/core.py +312 -0
  230. sqlspec/adapters/sqlite/data_dictionary.py +202 -0
  231. sqlspec/adapters/sqlite/driver.py +359 -0
  232. sqlspec/adapters/sqlite/events/__init__.py +5 -0
  233. sqlspec/adapters/sqlite/events/store.py +20 -0
  234. sqlspec/adapters/sqlite/litestar/__init__.py +5 -0
  235. sqlspec/adapters/sqlite/litestar/store.py +316 -0
  236. sqlspec/adapters/sqlite/pool.py +198 -0
  237. sqlspec/adapters/sqlite/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  238. sqlspec/adapters/sqlite/type_converter.py +114 -0
  239. sqlspec/base.py +747 -0
  240. sqlspec/builder/__init__.py +179 -0
  241. sqlspec/builder/_base.cpython-310-aarch64-linux-gnu.so +0 -0
  242. sqlspec/builder/_base.py +1022 -0
  243. sqlspec/builder/_column.cpython-310-aarch64-linux-gnu.so +0 -0
  244. sqlspec/builder/_column.py +521 -0
  245. sqlspec/builder/_ddl.cpython-310-aarch64-linux-gnu.so +0 -0
  246. sqlspec/builder/_ddl.py +1642 -0
  247. sqlspec/builder/_delete.cpython-310-aarch64-linux-gnu.so +0 -0
  248. sqlspec/builder/_delete.py +95 -0
  249. sqlspec/builder/_dml.cpython-310-aarch64-linux-gnu.so +0 -0
  250. sqlspec/builder/_dml.py +365 -0
  251. sqlspec/builder/_explain.cpython-310-aarch64-linux-gnu.so +0 -0
  252. sqlspec/builder/_explain.py +579 -0
  253. sqlspec/builder/_expression_wrappers.cpython-310-aarch64-linux-gnu.so +0 -0
  254. sqlspec/builder/_expression_wrappers.py +46 -0
  255. sqlspec/builder/_factory.cpython-310-aarch64-linux-gnu.so +0 -0
  256. sqlspec/builder/_factory.py +1697 -0
  257. sqlspec/builder/_insert.cpython-310-aarch64-linux-gnu.so +0 -0
  258. sqlspec/builder/_insert.py +328 -0
  259. sqlspec/builder/_join.cpython-310-aarch64-linux-gnu.so +0 -0
  260. sqlspec/builder/_join.py +499 -0
  261. sqlspec/builder/_merge.cpython-310-aarch64-linux-gnu.so +0 -0
  262. sqlspec/builder/_merge.py +821 -0
  263. sqlspec/builder/_parsing_utils.cpython-310-aarch64-linux-gnu.so +0 -0
  264. sqlspec/builder/_parsing_utils.py +297 -0
  265. sqlspec/builder/_select.cpython-310-aarch64-linux-gnu.so +0 -0
  266. sqlspec/builder/_select.py +1660 -0
  267. sqlspec/builder/_temporal.cpython-310-aarch64-linux-gnu.so +0 -0
  268. sqlspec/builder/_temporal.py +139 -0
  269. sqlspec/builder/_update.cpython-310-aarch64-linux-gnu.so +0 -0
  270. sqlspec/builder/_update.py +173 -0
  271. sqlspec/builder/_vector_expressions.py +267 -0
  272. sqlspec/cli.py +911 -0
  273. sqlspec/config.py +1755 -0
  274. sqlspec/core/__init__.py +374 -0
  275. sqlspec/core/_correlation.cpython-310-aarch64-linux-gnu.so +0 -0
  276. sqlspec/core/_correlation.py +176 -0
  277. sqlspec/core/cache.cpython-310-aarch64-linux-gnu.so +0 -0
  278. sqlspec/core/cache.py +1069 -0
  279. sqlspec/core/compiler.cpython-310-aarch64-linux-gnu.so +0 -0
  280. sqlspec/core/compiler.py +954 -0
  281. sqlspec/core/explain.cpython-310-aarch64-linux-gnu.so +0 -0
  282. sqlspec/core/explain.py +275 -0
  283. sqlspec/core/filters.cpython-310-aarch64-linux-gnu.so +0 -0
  284. sqlspec/core/filters.py +952 -0
  285. sqlspec/core/hashing.cpython-310-aarch64-linux-gnu.so +0 -0
  286. sqlspec/core/hashing.py +262 -0
  287. sqlspec/core/metrics.cpython-310-aarch64-linux-gnu.so +0 -0
  288. sqlspec/core/metrics.py +83 -0
  289. sqlspec/core/parameters/__init__.py +71 -0
  290. sqlspec/core/parameters/_alignment.cpython-310-aarch64-linux-gnu.so +0 -0
  291. sqlspec/core/parameters/_alignment.py +270 -0
  292. sqlspec/core/parameters/_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  293. sqlspec/core/parameters/_converter.py +543 -0
  294. sqlspec/core/parameters/_processor.cpython-310-aarch64-linux-gnu.so +0 -0
  295. sqlspec/core/parameters/_processor.py +505 -0
  296. sqlspec/core/parameters/_registry.cpython-310-aarch64-linux-gnu.so +0 -0
  297. sqlspec/core/parameters/_registry.py +206 -0
  298. sqlspec/core/parameters/_transformers.cpython-310-aarch64-linux-gnu.so +0 -0
  299. sqlspec/core/parameters/_transformers.py +292 -0
  300. sqlspec/core/parameters/_types.cpython-310-aarch64-linux-gnu.so +0 -0
  301. sqlspec/core/parameters/_types.py +499 -0
  302. sqlspec/core/parameters/_validator.cpython-310-aarch64-linux-gnu.so +0 -0
  303. sqlspec/core/parameters/_validator.py +180 -0
  304. sqlspec/core/pipeline.cpython-310-aarch64-linux-gnu.so +0 -0
  305. sqlspec/core/pipeline.py +319 -0
  306. sqlspec/core/query_modifiers.cpython-310-aarch64-linux-gnu.so +0 -0
  307. sqlspec/core/query_modifiers.py +437 -0
  308. sqlspec/core/result/__init__.py +23 -0
  309. sqlspec/core/result/_base.cpython-310-aarch64-linux-gnu.so +0 -0
  310. sqlspec/core/result/_base.py +1121 -0
  311. sqlspec/core/result/_io.cpython-310-aarch64-linux-gnu.so +0 -0
  312. sqlspec/core/result/_io.py +28 -0
  313. sqlspec/core/splitter.cpython-310-aarch64-linux-gnu.so +0 -0
  314. sqlspec/core/splitter.py +966 -0
  315. sqlspec/core/stack.cpython-310-aarch64-linux-gnu.so +0 -0
  316. sqlspec/core/stack.py +163 -0
  317. sqlspec/core/statement.cpython-310-aarch64-linux-gnu.so +0 -0
  318. sqlspec/core/statement.py +1503 -0
  319. sqlspec/core/type_converter.cpython-310-aarch64-linux-gnu.so +0 -0
  320. sqlspec/core/type_converter.py +339 -0
  321. sqlspec/data_dictionary/__init__.py +22 -0
  322. sqlspec/data_dictionary/_loader.py +123 -0
  323. sqlspec/data_dictionary/_registry.cpython-310-aarch64-linux-gnu.so +0 -0
  324. sqlspec/data_dictionary/_registry.py +74 -0
  325. sqlspec/data_dictionary/_types.cpython-310-aarch64-linux-gnu.so +0 -0
  326. sqlspec/data_dictionary/_types.py +121 -0
  327. sqlspec/data_dictionary/dialects/__init__.py +21 -0
  328. sqlspec/data_dictionary/dialects/bigquery.cpython-310-aarch64-linux-gnu.so +0 -0
  329. sqlspec/data_dictionary/dialects/bigquery.py +49 -0
  330. sqlspec/data_dictionary/dialects/cockroachdb.cpython-310-aarch64-linux-gnu.so +0 -0
  331. sqlspec/data_dictionary/dialects/cockroachdb.py +43 -0
  332. sqlspec/data_dictionary/dialects/duckdb.cpython-310-aarch64-linux-gnu.so +0 -0
  333. sqlspec/data_dictionary/dialects/duckdb.py +47 -0
  334. sqlspec/data_dictionary/dialects/mysql.cpython-310-aarch64-linux-gnu.so +0 -0
  335. sqlspec/data_dictionary/dialects/mysql.py +42 -0
  336. sqlspec/data_dictionary/dialects/oracle.cpython-310-aarch64-linux-gnu.so +0 -0
  337. sqlspec/data_dictionary/dialects/oracle.py +34 -0
  338. sqlspec/data_dictionary/dialects/postgres.cpython-310-aarch64-linux-gnu.so +0 -0
  339. sqlspec/data_dictionary/dialects/postgres.py +46 -0
  340. sqlspec/data_dictionary/dialects/spanner.cpython-310-aarch64-linux-gnu.so +0 -0
  341. sqlspec/data_dictionary/dialects/spanner.py +37 -0
  342. sqlspec/data_dictionary/dialects/sqlite.cpython-310-aarch64-linux-gnu.so +0 -0
  343. sqlspec/data_dictionary/dialects/sqlite.py +42 -0
  344. sqlspec/data_dictionary/sql/.gitkeep +0 -0
  345. sqlspec/data_dictionary/sql/bigquery/columns.sql +23 -0
  346. sqlspec/data_dictionary/sql/bigquery/foreign_keys.sql +34 -0
  347. sqlspec/data_dictionary/sql/bigquery/indexes.sql +19 -0
  348. sqlspec/data_dictionary/sql/bigquery/tables.sql +33 -0
  349. sqlspec/data_dictionary/sql/bigquery/version.sql +3 -0
  350. sqlspec/data_dictionary/sql/cockroachdb/columns.sql +34 -0
  351. sqlspec/data_dictionary/sql/cockroachdb/foreign_keys.sql +40 -0
  352. sqlspec/data_dictionary/sql/cockroachdb/indexes.sql +32 -0
  353. sqlspec/data_dictionary/sql/cockroachdb/tables.sql +44 -0
  354. sqlspec/data_dictionary/sql/cockroachdb/version.sql +3 -0
  355. sqlspec/data_dictionary/sql/duckdb/columns.sql +23 -0
  356. sqlspec/data_dictionary/sql/duckdb/foreign_keys.sql +36 -0
  357. sqlspec/data_dictionary/sql/duckdb/indexes.sql +19 -0
  358. sqlspec/data_dictionary/sql/duckdb/tables.sql +38 -0
  359. sqlspec/data_dictionary/sql/duckdb/version.sql +3 -0
  360. sqlspec/data_dictionary/sql/mysql/columns.sql +23 -0
  361. sqlspec/data_dictionary/sql/mysql/foreign_keys.sql +28 -0
  362. sqlspec/data_dictionary/sql/mysql/indexes.sql +26 -0
  363. sqlspec/data_dictionary/sql/mysql/tables.sql +33 -0
  364. sqlspec/data_dictionary/sql/mysql/version.sql +3 -0
  365. sqlspec/data_dictionary/sql/oracle/columns.sql +23 -0
  366. sqlspec/data_dictionary/sql/oracle/foreign_keys.sql +48 -0
  367. sqlspec/data_dictionary/sql/oracle/indexes.sql +44 -0
  368. sqlspec/data_dictionary/sql/oracle/tables.sql +25 -0
  369. sqlspec/data_dictionary/sql/oracle/version.sql +20 -0
  370. sqlspec/data_dictionary/sql/postgres/columns.sql +34 -0
  371. sqlspec/data_dictionary/sql/postgres/foreign_keys.sql +40 -0
  372. sqlspec/data_dictionary/sql/postgres/indexes.sql +56 -0
  373. sqlspec/data_dictionary/sql/postgres/tables.sql +44 -0
  374. sqlspec/data_dictionary/sql/postgres/version.sql +3 -0
  375. sqlspec/data_dictionary/sql/spanner/columns.sql +23 -0
  376. sqlspec/data_dictionary/sql/spanner/foreign_keys.sql +70 -0
  377. sqlspec/data_dictionary/sql/spanner/indexes.sql +30 -0
  378. sqlspec/data_dictionary/sql/spanner/tables.sql +9 -0
  379. sqlspec/data_dictionary/sql/spanner/version.sql +3 -0
  380. sqlspec/data_dictionary/sql/sqlite/columns.sql +23 -0
  381. sqlspec/data_dictionary/sql/sqlite/foreign_keys.sql +22 -0
  382. sqlspec/data_dictionary/sql/sqlite/indexes.sql +7 -0
  383. sqlspec/data_dictionary/sql/sqlite/tables.sql +28 -0
  384. sqlspec/data_dictionary/sql/sqlite/version.sql +3 -0
  385. sqlspec/driver/__init__.py +32 -0
  386. sqlspec/driver/_async.cpython-310-aarch64-linux-gnu.so +0 -0
  387. sqlspec/driver/_async.py +1737 -0
  388. sqlspec/driver/_common.cpython-310-aarch64-linux-gnu.so +0 -0
  389. sqlspec/driver/_common.py +1478 -0
  390. sqlspec/driver/_sql_helpers.cpython-310-aarch64-linux-gnu.so +0 -0
  391. sqlspec/driver/_sql_helpers.py +148 -0
  392. sqlspec/driver/_storage_helpers.cpython-310-aarch64-linux-gnu.so +0 -0
  393. sqlspec/driver/_storage_helpers.py +144 -0
  394. sqlspec/driver/_sync.cpython-310-aarch64-linux-gnu.so +0 -0
  395. sqlspec/driver/_sync.py +1710 -0
  396. sqlspec/exceptions.py +338 -0
  397. sqlspec/extensions/__init__.py +0 -0
  398. sqlspec/extensions/adk/__init__.py +70 -0
  399. sqlspec/extensions/adk/_types.py +51 -0
  400. sqlspec/extensions/adk/converters.py +172 -0
  401. sqlspec/extensions/adk/memory/__init__.py +69 -0
  402. sqlspec/extensions/adk/memory/_types.py +30 -0
  403. sqlspec/extensions/adk/memory/converters.py +149 -0
  404. sqlspec/extensions/adk/memory/service.py +217 -0
  405. sqlspec/extensions/adk/memory/store.py +569 -0
  406. sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +246 -0
  407. sqlspec/extensions/adk/migrations/__init__.py +0 -0
  408. sqlspec/extensions/adk/service.py +225 -0
  409. sqlspec/extensions/adk/store.py +567 -0
  410. sqlspec/extensions/events/__init__.py +51 -0
  411. sqlspec/extensions/events/_channel.py +703 -0
  412. sqlspec/extensions/events/_hints.py +45 -0
  413. sqlspec/extensions/events/_models.py +23 -0
  414. sqlspec/extensions/events/_payload.py +69 -0
  415. sqlspec/extensions/events/_protocols.py +134 -0
  416. sqlspec/extensions/events/_queue.py +461 -0
  417. sqlspec/extensions/events/_store.py +209 -0
  418. sqlspec/extensions/events/migrations/0001_create_event_queue.py +59 -0
  419. sqlspec/extensions/events/migrations/__init__.py +3 -0
  420. sqlspec/extensions/fastapi/__init__.py +19 -0
  421. sqlspec/extensions/fastapi/extension.py +351 -0
  422. sqlspec/extensions/fastapi/providers.py +607 -0
  423. sqlspec/extensions/flask/__init__.py +37 -0
  424. sqlspec/extensions/flask/_state.py +76 -0
  425. sqlspec/extensions/flask/_utils.py +71 -0
  426. sqlspec/extensions/flask/extension.py +519 -0
  427. sqlspec/extensions/litestar/__init__.py +28 -0
  428. sqlspec/extensions/litestar/_utils.py +52 -0
  429. sqlspec/extensions/litestar/channels.py +165 -0
  430. sqlspec/extensions/litestar/cli.py +102 -0
  431. sqlspec/extensions/litestar/config.py +90 -0
  432. sqlspec/extensions/litestar/handlers.py +316 -0
  433. sqlspec/extensions/litestar/migrations/0001_create_session_table.py +137 -0
  434. sqlspec/extensions/litestar/migrations/__init__.py +3 -0
  435. sqlspec/extensions/litestar/plugin.py +671 -0
  436. sqlspec/extensions/litestar/providers.py +526 -0
  437. sqlspec/extensions/litestar/store.py +296 -0
  438. sqlspec/extensions/otel/__init__.py +58 -0
  439. sqlspec/extensions/prometheus/__init__.py +113 -0
  440. sqlspec/extensions/starlette/__init__.py +19 -0
  441. sqlspec/extensions/starlette/_state.py +30 -0
  442. sqlspec/extensions/starlette/_utils.py +96 -0
  443. sqlspec/extensions/starlette/extension.py +346 -0
  444. sqlspec/extensions/starlette/middleware.py +235 -0
  445. sqlspec/loader.cpython-310-aarch64-linux-gnu.so +0 -0
  446. sqlspec/loader.py +702 -0
  447. sqlspec/migrations/__init__.py +36 -0
  448. sqlspec/migrations/base.py +731 -0
  449. sqlspec/migrations/commands.py +1232 -0
  450. sqlspec/migrations/context.py +157 -0
  451. sqlspec/migrations/fix.py +204 -0
  452. sqlspec/migrations/loaders.py +443 -0
  453. sqlspec/migrations/runner.py +1172 -0
  454. sqlspec/migrations/templates.py +234 -0
  455. sqlspec/migrations/tracker.py +611 -0
  456. sqlspec/migrations/utils.py +256 -0
  457. sqlspec/migrations/validation.py +207 -0
  458. sqlspec/migrations/version.py +446 -0
  459. sqlspec/observability/__init__.py +55 -0
  460. sqlspec/observability/_common.cpython-310-aarch64-linux-gnu.so +0 -0
  461. sqlspec/observability/_common.py +77 -0
  462. sqlspec/observability/_config.cpython-310-aarch64-linux-gnu.so +0 -0
  463. sqlspec/observability/_config.py +348 -0
  464. sqlspec/observability/_diagnostics.cpython-310-aarch64-linux-gnu.so +0 -0
  465. sqlspec/observability/_diagnostics.py +74 -0
  466. sqlspec/observability/_dispatcher.cpython-310-aarch64-linux-gnu.so +0 -0
  467. sqlspec/observability/_dispatcher.py +152 -0
  468. sqlspec/observability/_formatters/__init__.py +13 -0
  469. sqlspec/observability/_formatters/_aws.cpython-310-aarch64-linux-gnu.so +0 -0
  470. sqlspec/observability/_formatters/_aws.py +102 -0
  471. sqlspec/observability/_formatters/_azure.cpython-310-aarch64-linux-gnu.so +0 -0
  472. sqlspec/observability/_formatters/_azure.py +96 -0
  473. sqlspec/observability/_formatters/_base.cpython-310-aarch64-linux-gnu.so +0 -0
  474. sqlspec/observability/_formatters/_base.py +57 -0
  475. sqlspec/observability/_formatters/_gcp.cpython-310-aarch64-linux-gnu.so +0 -0
  476. sqlspec/observability/_formatters/_gcp.py +131 -0
  477. sqlspec/observability/_formatting.py +58 -0
  478. sqlspec/observability/_observer.cpython-310-aarch64-linux-gnu.so +0 -0
  479. sqlspec/observability/_observer.py +357 -0
  480. sqlspec/observability/_runtime.cpython-310-aarch64-linux-gnu.so +0 -0
  481. sqlspec/observability/_runtime.py +420 -0
  482. sqlspec/observability/_sampling.cpython-310-aarch64-linux-gnu.so +0 -0
  483. sqlspec/observability/_sampling.py +188 -0
  484. sqlspec/observability/_spans.cpython-310-aarch64-linux-gnu.so +0 -0
  485. sqlspec/observability/_spans.py +161 -0
  486. sqlspec/protocols.py +916 -0
  487. sqlspec/py.typed +0 -0
  488. sqlspec/storage/__init__.py +48 -0
  489. sqlspec/storage/_utils.py +104 -0
  490. sqlspec/storage/backends/__init__.py +1 -0
  491. sqlspec/storage/backends/base.py +253 -0
  492. sqlspec/storage/backends/fsspec.py +529 -0
  493. sqlspec/storage/backends/local.py +441 -0
  494. sqlspec/storage/backends/obstore.py +916 -0
  495. sqlspec/storage/errors.py +104 -0
  496. sqlspec/storage/pipeline.py +582 -0
  497. sqlspec/storage/registry.py +301 -0
  498. sqlspec/typing.py +395 -0
  499. sqlspec/utils/__init__.py +7 -0
  500. sqlspec/utils/arrow_helpers.py +318 -0
  501. sqlspec/utils/config_tools.py +332 -0
  502. sqlspec/utils/correlation.cpython-310-aarch64-linux-gnu.so +0 -0
  503. sqlspec/utils/correlation.py +134 -0
  504. sqlspec/utils/deprecation.py +190 -0
  505. sqlspec/utils/fixtures.cpython-310-aarch64-linux-gnu.so +0 -0
  506. sqlspec/utils/fixtures.py +258 -0
  507. sqlspec/utils/logging.py +222 -0
  508. sqlspec/utils/module_loader.py +306 -0
  509. sqlspec/utils/portal.cpython-310-aarch64-linux-gnu.so +0 -0
  510. sqlspec/utils/portal.py +375 -0
  511. sqlspec/utils/schema.cpython-310-aarch64-linux-gnu.so +0 -0
  512. sqlspec/utils/schema.py +485 -0
  513. sqlspec/utils/serializers.cpython-310-aarch64-linux-gnu.so +0 -0
  514. sqlspec/utils/serializers.py +408 -0
  515. sqlspec/utils/singleton.cpython-310-aarch64-linux-gnu.so +0 -0
  516. sqlspec/utils/singleton.py +41 -0
  517. sqlspec/utils/sync_tools.cpython-310-aarch64-linux-gnu.so +0 -0
  518. sqlspec/utils/sync_tools.py +311 -0
  519. sqlspec/utils/text.cpython-310-aarch64-linux-gnu.so +0 -0
  520. sqlspec/utils/text.py +108 -0
  521. sqlspec/utils/type_converters.cpython-310-aarch64-linux-gnu.so +0 -0
  522. sqlspec/utils/type_converters.py +128 -0
  523. sqlspec/utils/type_guards.cpython-310-aarch64-linux-gnu.so +0 -0
  524. sqlspec/utils/type_guards.py +1360 -0
  525. sqlspec/utils/uuids.cpython-310-aarch64-linux-gnu.so +0 -0
  526. sqlspec/utils/uuids.py +225 -0
  527. sqlspec-0.36.0.dist-info/METADATA +205 -0
  528. sqlspec-0.36.0.dist-info/RECORD +531 -0
  529. sqlspec-0.36.0.dist-info/WHEEL +7 -0
  530. sqlspec-0.36.0.dist-info/entry_points.txt +2 -0
  531. sqlspec-0.36.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,215 @@
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.driver import AsyncDataDictionaryBase, SyncDataDictionaryBase
8
+ from sqlspec.typing import ColumnMetadata, ForeignKeyMetadata, IndexMetadata, TableMetadata, VersionInfo
9
+
10
+ if TYPE_CHECKING:
11
+ from sqlspec.adapters.cockroach_psycopg.driver import CockroachPsycopgAsyncDriver, CockroachPsycopgSyncDriver
12
+
13
+ __all__ = ("CockroachPsycopgAsyncDataDictionary", "CockroachPsycopgSyncDataDictionary")
14
+
15
+
16
+ @mypyc_attr(allow_interpreted_subclasses=True, native_class=False)
17
+ class CockroachPsycopgSyncDataDictionary(SyncDataDictionaryBase):
18
+ """CockroachDB sync data dictionary."""
19
+
20
+ dialect: ClassVar[str] = "cockroachdb"
21
+
22
+ def __init__(self) -> None:
23
+ super().__init__()
24
+
25
+ def get_version(self, driver: "CockroachPsycopgSyncDriver") -> "VersionInfo | None":
26
+ """Get CockroachDB version information."""
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 = 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
+ def get_feature_flag(self, driver: "CockroachPsycopgSyncDriver", feature: str) -> bool:
48
+ """Check if CockroachDB supports a specific feature."""
49
+ version_info = self.get_version(driver)
50
+ return self.resolve_feature_flag(feature, version_info)
51
+
52
+ def get_optimal_type(self, driver: "CockroachPsycopgSyncDriver", type_category: str) -> str:
53
+ """Get optimal CockroachDB type for a category."""
54
+ config = self.get_dialect_config()
55
+ return config.get_optimal_type(type_category)
56
+
57
+ def get_tables(self, driver: "CockroachPsycopgSyncDriver", schema: "str | None" = None) -> "list[TableMetadata]":
58
+ """Get tables sorted by dependency order."""
59
+ schema_name = self.resolve_schema(schema)
60
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="tables")
61
+ return driver.select(self.get_query("tables_by_schema"), schema_name=schema_name, schema_type=TableMetadata)
62
+
63
+ def get_columns(
64
+ self, driver: "CockroachPsycopgSyncDriver", table: "str | None" = None, schema: "str | None" = None
65
+ ) -> "list[ColumnMetadata]":
66
+ """Get column information for a table or schema."""
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 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 driver.select(
76
+ self.get_query("columns_by_table"), schema_name=schema_name, table_name=table, schema_type=ColumnMetadata
77
+ )
78
+
79
+ def get_indexes(
80
+ self, driver: "CockroachPsycopgSyncDriver", table: "str | None" = None, schema: "str | None" = None
81
+ ) -> "list[IndexMetadata]":
82
+ """Get index metadata for a table or schema."""
83
+ schema_name = self.resolve_schema(schema)
84
+ if table is None:
85
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="indexes")
86
+ return driver.select(
87
+ self.get_query("indexes_by_schema"), schema_name=schema_name, schema_type=IndexMetadata
88
+ )
89
+
90
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="indexes")
91
+ return driver.select(
92
+ self.get_query("indexes_by_table"), schema_name=schema_name, table_name=table, schema_type=IndexMetadata
93
+ )
94
+
95
+ def get_foreign_keys(
96
+ self, driver: "CockroachPsycopgSyncDriver", table: "str | None" = None, schema: "str | None" = None
97
+ ) -> "list[ForeignKeyMetadata]":
98
+ """Get foreign key metadata."""
99
+ schema_name = self.resolve_schema(schema)
100
+ if table is None:
101
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="foreign_keys")
102
+ return driver.select(
103
+ self.get_query("foreign_keys_by_schema"), schema_name=schema_name, schema_type=ForeignKeyMetadata
104
+ )
105
+
106
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="foreign_keys")
107
+ return driver.select(
108
+ self.get_query("foreign_keys_by_table"),
109
+ table_name=table,
110
+ schema_name=schema_name,
111
+ schema_type=ForeignKeyMetadata,
112
+ )
113
+
114
+
115
+ @mypyc_attr(allow_interpreted_subclasses=True, native_class=False)
116
+ class CockroachPsycopgAsyncDataDictionary(AsyncDataDictionaryBase):
117
+ """CockroachDB async data dictionary."""
118
+
119
+ dialect: ClassVar[str] = "cockroachdb"
120
+
121
+ def __init__(self) -> None:
122
+ super().__init__()
123
+
124
+ async def get_version(self, driver: "CockroachPsycopgAsyncDriver") -> "VersionInfo | None":
125
+ """Get CockroachDB version information."""
126
+ driver_id = id(driver)
127
+ if driver_id in self._version_fetch_attempted:
128
+ return self._version_cache.get(driver_id)
129
+
130
+ version_value = await driver.select_value_or_none(self.get_query("version"))
131
+ if not version_value:
132
+ self._log_version_unavailable(type(self).dialect, "missing")
133
+ self.cache_version(driver_id, None)
134
+ return None
135
+
136
+ version_info = self.parse_version_with_pattern(self.get_dialect_config().version_pattern, str(version_value))
137
+ if version_info is None:
138
+ self._log_version_unavailable(type(self).dialect, "parse_failed")
139
+ self.cache_version(driver_id, None)
140
+ return None
141
+
142
+ self._log_version_detected(type(self).dialect, version_info)
143
+ self.cache_version(driver_id, version_info)
144
+ return version_info
145
+
146
+ async def get_feature_flag(self, driver: "CockroachPsycopgAsyncDriver", feature: str) -> bool:
147
+ """Check if CockroachDB supports a specific feature."""
148
+ version_info = await self.get_version(driver)
149
+ return self.resolve_feature_flag(feature, version_info)
150
+
151
+ async def get_optimal_type(self, driver: "CockroachPsycopgAsyncDriver", type_category: str) -> str:
152
+ """Get optimal CockroachDB type for a category."""
153
+ config = self.get_dialect_config()
154
+ return config.get_optimal_type(type_category)
155
+
156
+ async def get_tables(
157
+ self, driver: "CockroachPsycopgAsyncDriver", schema: "str | None" = None
158
+ ) -> "list[TableMetadata]":
159
+ """Get tables sorted by dependency order."""
160
+ schema_name = self.resolve_schema(schema)
161
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="tables")
162
+ return await driver.select(
163
+ self.get_query("tables_by_schema"), schema_name=schema_name, schema_type=TableMetadata
164
+ )
165
+
166
+ async def get_columns(
167
+ self, driver: "CockroachPsycopgAsyncDriver", table: "str | None" = None, schema: "str | None" = None
168
+ ) -> "list[ColumnMetadata]":
169
+ """Get column information for a table or schema."""
170
+ schema_name = self.resolve_schema(schema)
171
+ if table is None:
172
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="columns")
173
+ return await driver.select(
174
+ self.get_query("columns_by_schema"), schema_name=schema_name, schema_type=ColumnMetadata
175
+ )
176
+
177
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="columns")
178
+ return await driver.select(
179
+ self.get_query("columns_by_table"), schema_name=schema_name, table_name=table, schema_type=ColumnMetadata
180
+ )
181
+
182
+ async def get_indexes(
183
+ self, driver: "CockroachPsycopgAsyncDriver", table: "str | None" = None, schema: "str | None" = None
184
+ ) -> "list[IndexMetadata]":
185
+ """Get index metadata for a table or schema."""
186
+ schema_name = self.resolve_schema(schema)
187
+ if table is None:
188
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="indexes")
189
+ return await driver.select(
190
+ self.get_query("indexes_by_schema"), schema_name=schema_name, schema_type=IndexMetadata
191
+ )
192
+
193
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="indexes")
194
+ return await driver.select(
195
+ self.get_query("indexes_by_table"), schema_name=schema_name, table_name=table, schema_type=IndexMetadata
196
+ )
197
+
198
+ async def get_foreign_keys(
199
+ self, driver: "CockroachPsycopgAsyncDriver", table: "str | None" = None, schema: "str | None" = None
200
+ ) -> "list[ForeignKeyMetadata]":
201
+ """Get foreign key metadata."""
202
+ schema_name = self.resolve_schema(schema)
203
+ if table is None:
204
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="foreign_keys")
205
+ return await driver.select(
206
+ self.get_query("foreign_keys_by_schema"), schema_name=schema_name, schema_type=ForeignKeyMetadata
207
+ )
208
+
209
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="foreign_keys")
210
+ return await driver.select(
211
+ self.get_query("foreign_keys_by_table"),
212
+ table_name=table,
213
+ schema_name=schema_name,
214
+ schema_type=ForeignKeyMetadata,
215
+ )
@@ -0,0 +1,284 @@
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.exceptions import SerializationConflictError, TransactionRetryError
32
+ from sqlspec.utils.logging import get_logger
33
+ from sqlspec.utils.type_guards import has_sqlstate
34
+
35
+ if TYPE_CHECKING:
36
+ from collections.abc import Callable
37
+
38
+ from sqlspec.driver import ExecutionResult
39
+
40
+ __all__ = (
41
+ "CockroachPsycopgAsyncDriver",
42
+ "CockroachPsycopgAsyncExceptionHandler",
43
+ "CockroachPsycopgAsyncSessionContext",
44
+ "CockroachPsycopgSyncDriver",
45
+ "CockroachPsycopgSyncExceptionHandler",
46
+ "CockroachPsycopgSyncSessionContext",
47
+ )
48
+
49
+ logger = get_logger("sqlspec.adapters.cockroach_psycopg")
50
+
51
+
52
+ class CockroachPsycopgSyncExceptionHandler:
53
+ """Context manager for handling CockroachDB psycopg exceptions."""
54
+
55
+ __slots__ = ("pending_exception",)
56
+
57
+ def __init__(self) -> None:
58
+ self.pending_exception: Exception | None = None
59
+
60
+ def __enter__(self) -> "CockroachPsycopgSyncExceptionHandler":
61
+ return self
62
+
63
+ def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> bool:
64
+ if exc_type is None:
65
+ return False
66
+ if issubclass(exc_type, psycopg.Error):
67
+ if has_sqlstate(exc_val) and str(exc_val.sqlstate) == "40001":
68
+ self.pending_exception = SerializationConflictError(str(exc_val))
69
+ return True
70
+ self.pending_exception = create_mapped_exception(exc_val)
71
+ return True
72
+ return False
73
+
74
+
75
+ class CockroachPsycopgAsyncExceptionHandler:
76
+ """Async context manager for handling CockroachDB psycopg exceptions."""
77
+
78
+ __slots__ = ("pending_exception",)
79
+
80
+ def __init__(self) -> None:
81
+ self.pending_exception: Exception | None = None
82
+
83
+ async def __aenter__(self) -> "CockroachPsycopgAsyncExceptionHandler":
84
+ return self
85
+
86
+ async def __aexit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> bool:
87
+ if exc_type is None:
88
+ return False
89
+ if issubclass(exc_type, psycopg.Error):
90
+ if has_sqlstate(exc_val) and str(exc_val.sqlstate) == "40001":
91
+ self.pending_exception = SerializationConflictError(str(exc_val))
92
+ return True
93
+ self.pending_exception = create_mapped_exception(exc_val)
94
+ return True
95
+ return False
96
+
97
+
98
+ class CockroachPsycopgSyncDriver(PsycopgSyncDriver):
99
+ """CockroachDB sync driver using psycopg.crdb."""
100
+
101
+ __slots__ = ("_enable_retry", "_follower_staleness", "_retry_config")
102
+ dialect = "postgres"
103
+
104
+ def __init__(
105
+ self,
106
+ connection: CockroachSyncConnection,
107
+ statement_config: "StatementConfig | None" = None,
108
+ driver_features: "dict[str, Any] | None" = None,
109
+ ) -> None:
110
+ if statement_config is None:
111
+ statement_config = build_statement_config().replace(
112
+ enable_caching=get_cache_config().compiled_cache_enabled
113
+ )
114
+
115
+ statement_config, normalized_features = apply_driver_features(statement_config, driver_features)
116
+ super().__init__(connection=connection, statement_config=statement_config, driver_features=normalized_features)
117
+
118
+ self._retry_config = CockroachPsycopgRetryConfig.from_features(self.driver_features)
119
+ self._enable_retry = bool(self.driver_features.get("enable_auto_retry", True))
120
+ self._follower_staleness = cast("str | None", self.driver_features.get("default_staleness"))
121
+ # Data dictionary is lazily initialized in property; use parent slot
122
+ self._data_dictionary = None
123
+
124
+ def _execute_with_retry(self, operation: "Callable[[], ExecutionResult]") -> "ExecutionResult":
125
+ if not self._enable_retry:
126
+ return operation()
127
+
128
+ last_error: Exception | None = None
129
+
130
+ def attempt_operation() -> "tuple[ExecutionResult | None, Exception | None]":
131
+ try:
132
+ return operation(), None
133
+ except Exception as exc:
134
+ return None, exc
135
+
136
+ for attempt in range(self._retry_config.max_retries + 1):
137
+ result, exc = attempt_operation()
138
+ if exc is None:
139
+ return cast("ExecutionResult", result)
140
+ last_error = exc
141
+ if not is_retryable_error(exc) or attempt >= self._retry_config.max_retries:
142
+ raise exc
143
+ with contextlib.suppress(Exception):
144
+ self.connection.rollback()
145
+ delay = calculate_backoff_seconds(attempt, self._retry_config)
146
+ if self._retry_config.enable_logging:
147
+ logger.debug("CockroachDB retry %s/%s after %.3fs", attempt + 1, self._retry_config.max_retries, delay)
148
+ time.sleep(delay)
149
+
150
+ msg = "CockroachDB transaction retry limit exceeded"
151
+ raise TransactionRetryError(msg) from last_error
152
+
153
+ def _apply_follower_reads(self, cursor: Any) -> None:
154
+ if not self.driver_features.get("enable_follower_reads", False):
155
+ return
156
+ if not self._follower_staleness:
157
+ return
158
+ cursor.execute(f"SET TRANSACTION AS OF SYSTEM TIME {self._follower_staleness}")
159
+
160
+ def dispatch_execute(self, cursor: Any, statement: SQL) -> "ExecutionResult":
161
+ def operation() -> "ExecutionResult":
162
+ if statement.returns_rows():
163
+ self._apply_follower_reads(cursor)
164
+ return super(CockroachPsycopgSyncDriver, self).dispatch_execute(cursor, statement)
165
+
166
+ return self._execute_with_retry(operation)
167
+
168
+ def dispatch_execute_many(self, cursor: Any, statement: SQL) -> "ExecutionResult":
169
+ def operation() -> "ExecutionResult":
170
+ return super(CockroachPsycopgSyncDriver, self).dispatch_execute_many(cursor, statement)
171
+
172
+ return self._execute_with_retry(operation)
173
+
174
+ def dispatch_execute_script(self, cursor: Any, statement: SQL) -> "ExecutionResult":
175
+ def operation() -> "ExecutionResult":
176
+ return super(CockroachPsycopgSyncDriver, self).dispatch_execute_script(cursor, statement)
177
+
178
+ return self._execute_with_retry(operation)
179
+
180
+ def handle_database_exceptions(self) -> "CockroachPsycopgSyncExceptionHandler": # type: ignore[override]
181
+ return CockroachPsycopgSyncExceptionHandler()
182
+
183
+ @property
184
+ def data_dictionary(self) -> "CockroachPsycopgSyncDataDictionary": # type: ignore[override]
185
+ if self._data_dictionary is None:
186
+ # Intentionally assign CockroachDB-specific data dictionary to parent slot
187
+ object.__setattr__(self, "_data_dictionary", CockroachPsycopgSyncDataDictionary())
188
+ return cast("CockroachPsycopgSyncDataDictionary", self._data_dictionary)
189
+
190
+
191
+ class CockroachPsycopgAsyncDriver(PsycopgAsyncDriver):
192
+ """CockroachDB async driver using psycopg.crdb."""
193
+
194
+ __slots__ = ("_enable_retry", "_follower_staleness", "_retry_config")
195
+ dialect = "postgres"
196
+
197
+ def __init__(
198
+ self,
199
+ connection: CockroachAsyncConnection,
200
+ statement_config: "StatementConfig | None" = None,
201
+ driver_features: "dict[str, Any] | None" = None,
202
+ ) -> None:
203
+ if statement_config is None:
204
+ statement_config = build_statement_config().replace(
205
+ enable_caching=get_cache_config().compiled_cache_enabled
206
+ )
207
+
208
+ statement_config, normalized_features = apply_driver_features(statement_config, driver_features)
209
+ super().__init__(connection=connection, statement_config=statement_config, driver_features=normalized_features)
210
+
211
+ self._retry_config = CockroachPsycopgRetryConfig.from_features(self.driver_features)
212
+ self._enable_retry = bool(self.driver_features.get("enable_auto_retry", True))
213
+ self._follower_staleness = cast("str | None", self.driver_features.get("default_staleness"))
214
+ # Data dictionary is lazily initialized in property; use parent slot
215
+ self._data_dictionary = None
216
+
217
+ async def _execute_with_retry(self, operation: "Callable[[], Any]") -> "ExecutionResult":
218
+ if not self._enable_retry:
219
+ return cast("ExecutionResult", await operation())
220
+
221
+ last_error: Exception | None = None
222
+
223
+ async def attempt_operation() -> "tuple[ExecutionResult | None, Exception | None]":
224
+ try:
225
+ return await operation(), None
226
+ except Exception as exc:
227
+ return None, exc
228
+
229
+ for attempt in range(self._retry_config.max_retries + 1):
230
+ result, exc = await attempt_operation()
231
+ if exc is None:
232
+ return cast("ExecutionResult", result)
233
+ last_error = exc
234
+ if not is_retryable_error(exc) or attempt >= self._retry_config.max_retries:
235
+ raise exc
236
+ with contextlib.suppress(Exception):
237
+ await self.connection.rollback()
238
+ delay = calculate_backoff_seconds(attempt, self._retry_config)
239
+ if self._retry_config.enable_logging:
240
+ logger.debug("CockroachDB retry %s/%s after %.3fs", attempt + 1, self._retry_config.max_retries, delay)
241
+ await asyncio.sleep(delay)
242
+
243
+ msg = "CockroachDB transaction retry limit exceeded"
244
+ raise TransactionRetryError(msg) from last_error
245
+
246
+ async def _apply_follower_reads(self, cursor: Any) -> None:
247
+ if not self.driver_features.get("enable_follower_reads", False):
248
+ return
249
+ if not self._follower_staleness:
250
+ return
251
+ await cursor.execute(f"SET TRANSACTION AS OF SYSTEM TIME {self._follower_staleness}")
252
+
253
+ async def dispatch_execute(self, cursor: Any, statement: SQL) -> "ExecutionResult":
254
+ async def operation() -> "ExecutionResult":
255
+ if statement.returns_rows():
256
+ await self._apply_follower_reads(cursor)
257
+ return await super(CockroachPsycopgAsyncDriver, self).dispatch_execute(cursor, statement)
258
+
259
+ return await self._execute_with_retry(operation)
260
+
261
+ async def dispatch_execute_many(self, cursor: Any, statement: SQL) -> "ExecutionResult":
262
+ async def operation() -> "ExecutionResult":
263
+ return await super(CockroachPsycopgAsyncDriver, self).dispatch_execute_many(cursor, statement)
264
+
265
+ return await self._execute_with_retry(operation)
266
+
267
+ async def dispatch_execute_script(self, cursor: Any, statement: SQL) -> "ExecutionResult":
268
+ async def operation() -> "ExecutionResult":
269
+ return await super(CockroachPsycopgAsyncDriver, self).dispatch_execute_script(cursor, statement)
270
+
271
+ return await self._execute_with_retry(operation)
272
+
273
+ def handle_database_exceptions(self) -> "CockroachPsycopgAsyncExceptionHandler": # type: ignore[override]
274
+ return CockroachPsycopgAsyncExceptionHandler()
275
+
276
+ @property
277
+ def data_dictionary(self) -> "CockroachPsycopgAsyncDataDictionary": # type: ignore[override]
278
+ if self._data_dictionary is None:
279
+ # Intentionally assign CockroachDB-specific data dictionary to parent slot
280
+ object.__setattr__(self, "_data_dictionary", CockroachPsycopgAsyncDataDictionary())
281
+ return cast("CockroachPsycopgAsyncDataDictionary", self._data_dictionary)
282
+
283
+
284
+ 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")