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,410 @@
1
+ """CockroachDB ADK store for Google Agent Development Kit session/event storage (asyncpg)."""
2
+
3
+ from typing import TYPE_CHECKING, Any, cast
4
+
5
+ from sqlspec.extensions.adk import BaseAsyncADKStore, EventRecord, SessionRecord
6
+ from sqlspec.extensions.adk.memory.store import BaseAsyncADKMemoryStore
7
+ from sqlspec.utils.logging import get_logger
8
+
9
+ if TYPE_CHECKING:
10
+ from sqlspec.adapters.cockroach_asyncpg.config import CockroachAsyncpgConfig
11
+ from sqlspec.extensions.adk import MemoryRecord
12
+
13
+
14
+ __all__ = ("CockroachAsyncpgADKMemoryStore", "CockroachAsyncpgADKStore")
15
+
16
+ logger = get_logger("sqlspec.adapters.cockroach_asyncpg.adk.store")
17
+
18
+
19
+ class CockroachAsyncpgADKStore(BaseAsyncADKStore["CockroachAsyncpgConfig"]):
20
+ """CockroachDB ADK store using asyncpg driver."""
21
+
22
+ __slots__ = ()
23
+
24
+ def __init__(self, config: "CockroachAsyncpgConfig") -> None:
25
+ super().__init__(config)
26
+
27
+ async def _get_create_sessions_table_sql(self) -> str:
28
+ owner_id_line = ""
29
+ if self._owner_id_column_ddl:
30
+ owner_id_line = f",\n {self._owner_id_column_ddl}"
31
+
32
+ return f"""
33
+ CREATE TABLE IF NOT EXISTS {self._session_table} (
34
+ id VARCHAR(128) PRIMARY KEY,
35
+ app_name VARCHAR(128) NOT NULL,
36
+ user_id VARCHAR(128) NOT NULL{owner_id_line},
37
+ state JSONB NOT NULL DEFAULT '{{}}'::jsonb,
38
+ create_time TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
39
+ update_time TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
40
+ );
41
+
42
+ CREATE INDEX IF NOT EXISTS idx_{self._session_table}_app_user
43
+ ON {self._session_table}(app_name, user_id);
44
+
45
+ CREATE INDEX IF NOT EXISTS idx_{self._session_table}_update_time
46
+ ON {self._session_table}(update_time DESC);
47
+ """
48
+
49
+ async def _get_create_events_table_sql(self) -> str:
50
+ return f"""
51
+ CREATE TABLE IF NOT EXISTS {self._events_table} (
52
+ id VARCHAR(128) PRIMARY KEY,
53
+ session_id VARCHAR(128) NOT NULL,
54
+ app_name VARCHAR(128) NOT NULL,
55
+ user_id VARCHAR(128) NOT NULL,
56
+ invocation_id VARCHAR(256) NOT NULL,
57
+ author VARCHAR(256) NOT NULL,
58
+ actions BYTEA NOT NULL,
59
+ long_running_tool_ids_json JSONB,
60
+ branch VARCHAR(256),
61
+ timestamp TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
62
+ content JSONB,
63
+ grounding_metadata JSONB,
64
+ custom_metadata JSONB,
65
+ partial BOOLEAN,
66
+ turn_complete BOOLEAN,
67
+ interrupted BOOLEAN,
68
+ error_code VARCHAR(256),
69
+ error_message VARCHAR(1024),
70
+ FOREIGN KEY (session_id) REFERENCES {self._session_table}(id) ON DELETE CASCADE
71
+ );
72
+
73
+ CREATE INDEX IF NOT EXISTS idx_{self._events_table}_session
74
+ ON {self._events_table}(session_id, timestamp ASC);
75
+ """
76
+
77
+ def _get_drop_tables_sql(self) -> "list[str]":
78
+ return [f"DROP TABLE IF EXISTS {self._events_table}", f"DROP TABLE IF EXISTS {self._session_table}"]
79
+
80
+ async def create_tables(self) -> None:
81
+ async with self._config.provide_session() as driver:
82
+ await driver.execute_script(await self._get_create_sessions_table_sql())
83
+ await driver.execute_script(await self._get_create_events_table_sql())
84
+
85
+ async def create_session(
86
+ self, session_id: str, app_name: str, user_id: str, state: "dict[str, Any]", owner_id: "Any | None" = None
87
+ ) -> SessionRecord:
88
+ params: tuple[Any, ...]
89
+ if self._owner_id_column_name:
90
+ sql = f"""
91
+ INSERT INTO {self._session_table} (id, app_name, user_id, {self._owner_id_column_name}, state, create_time, update_time)
92
+ VALUES ($1, $2, $3, $4, $5, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
93
+ """
94
+ params = (session_id, app_name, user_id, owner_id, state)
95
+ else:
96
+ sql = f"""
97
+ INSERT INTO {self._session_table} (id, app_name, user_id, state, create_time, update_time)
98
+ VALUES ($1, $2, $3, $4, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
99
+ """
100
+ params = (session_id, app_name, user_id, state)
101
+
102
+ async with self._config.provide_connection() as conn:
103
+ await conn.execute(sql, *params)
104
+
105
+ result = await self.get_session(session_id)
106
+ if result is None:
107
+ msg = "Session creation failed"
108
+ raise RuntimeError(msg)
109
+ return result
110
+
111
+ async def get_session(self, session_id: str) -> "SessionRecord | None":
112
+ sql = f"""
113
+ SELECT id, app_name, user_id, state, create_time, update_time
114
+ FROM {self._session_table}
115
+ WHERE id = $1
116
+ """
117
+
118
+ async with self._config.provide_connection() as conn:
119
+ row = await conn.fetchrow(sql, session_id)
120
+ if row is None:
121
+ return None
122
+
123
+ return SessionRecord(
124
+ id=row["id"],
125
+ app_name=row["app_name"],
126
+ user_id=row["user_id"],
127
+ state=row["state"],
128
+ create_time=row["create_time"],
129
+ update_time=row["update_time"],
130
+ )
131
+
132
+ async def update_session_state(self, session_id: str, state: "dict[str, Any]") -> None:
133
+ sql = f"""
134
+ UPDATE {self._session_table}
135
+ SET state = $1, update_time = CURRENT_TIMESTAMP
136
+ WHERE id = $2
137
+ """
138
+
139
+ async with self._config.provide_connection() as conn:
140
+ await conn.execute(sql, state, session_id)
141
+
142
+ async def delete_session(self, session_id: str) -> None:
143
+ sql = f"DELETE FROM {self._session_table} WHERE id = $1"
144
+
145
+ async with self._config.provide_connection() as conn:
146
+ await conn.execute(sql, session_id)
147
+
148
+ async def list_sessions(self, app_name: str, user_id: str | None = None) -> "list[SessionRecord]":
149
+ if user_id is None:
150
+ sql = f"""
151
+ SELECT id, app_name, user_id, state, create_time, update_time
152
+ FROM {self._session_table}
153
+ WHERE app_name = $1
154
+ ORDER BY update_time DESC
155
+ """
156
+ params: tuple[Any, ...] = (app_name,)
157
+ else:
158
+ sql = f"""
159
+ SELECT id, app_name, user_id, state, create_time, update_time
160
+ FROM {self._session_table}
161
+ WHERE app_name = $1 AND user_id = $2
162
+ ORDER BY update_time DESC
163
+ """
164
+ params = (app_name, user_id)
165
+
166
+ async with self._config.provide_connection() as conn:
167
+ rows = await conn.fetch(sql, *params)
168
+
169
+ return [
170
+ SessionRecord(
171
+ id=row["id"],
172
+ app_name=row["app_name"],
173
+ user_id=row["user_id"],
174
+ state=row["state"],
175
+ create_time=row["create_time"],
176
+ update_time=row["update_time"],
177
+ )
178
+ for row in rows
179
+ ]
180
+
181
+ async def append_event(self, event_record: EventRecord) -> None:
182
+ sql = f"""
183
+ INSERT INTO {self._events_table} (
184
+ id, session_id, app_name, user_id, invocation_id, author, actions,
185
+ long_running_tool_ids_json, branch, timestamp, content,
186
+ grounding_metadata, custom_metadata, partial, turn_complete,
187
+ interrupted, error_code, error_message
188
+ ) VALUES (
189
+ $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18
190
+ )
191
+ """
192
+
193
+ async with self._config.provide_connection() as conn:
194
+ await conn.execute(
195
+ sql,
196
+ event_record["id"],
197
+ event_record["session_id"],
198
+ event_record["app_name"],
199
+ event_record["user_id"],
200
+ event_record["invocation_id"],
201
+ event_record["author"],
202
+ event_record["actions"],
203
+ event_record.get("long_running_tool_ids_json"),
204
+ event_record.get("branch"),
205
+ event_record["timestamp"],
206
+ event_record.get("content"),
207
+ event_record.get("grounding_metadata"),
208
+ event_record.get("custom_metadata"),
209
+ event_record.get("partial"),
210
+ event_record.get("turn_complete"),
211
+ event_record.get("interrupted"),
212
+ event_record.get("error_code"),
213
+ event_record.get("error_message"),
214
+ )
215
+
216
+ async def list_events(self, session_id: str) -> "list[EventRecord]":
217
+ sql = f"""
218
+ SELECT id, session_id, app_name, user_id, invocation_id, author, actions,
219
+ long_running_tool_ids_json, branch, timestamp, content,
220
+ grounding_metadata, custom_metadata, partial, turn_complete,
221
+ interrupted, error_code, error_message
222
+ FROM {self._events_table}
223
+ WHERE session_id = $1
224
+ ORDER BY timestamp ASC
225
+ """
226
+
227
+ async with self._config.provide_connection() as conn:
228
+ rows = await conn.fetch(sql, session_id)
229
+
230
+ return [
231
+ EventRecord(
232
+ id=row["id"],
233
+ session_id=row["session_id"],
234
+ app_name=row["app_name"],
235
+ user_id=row["user_id"],
236
+ invocation_id=row["invocation_id"],
237
+ author=row["author"],
238
+ actions=bytes(row["actions"]),
239
+ long_running_tool_ids_json=row["long_running_tool_ids_json"],
240
+ branch=row["branch"],
241
+ timestamp=row["timestamp"],
242
+ content=row["content"],
243
+ grounding_metadata=row["grounding_metadata"],
244
+ custom_metadata=row["custom_metadata"],
245
+ partial=row["partial"],
246
+ turn_complete=row["turn_complete"],
247
+ interrupted=row["interrupted"],
248
+ error_code=row["error_code"],
249
+ error_message=row["error_message"],
250
+ )
251
+ for row in rows
252
+ ]
253
+
254
+
255
+ class CockroachAsyncpgADKMemoryStore(BaseAsyncADKMemoryStore["CockroachAsyncpgConfig"]):
256
+ """CockroachDB ADK memory store using asyncpg driver."""
257
+
258
+ __slots__ = ()
259
+
260
+ def __init__(self, config: "CockroachAsyncpgConfig") -> None:
261
+ super().__init__(config)
262
+
263
+ async def _get_create_memory_table_sql(self) -> str:
264
+ owner_id_line = ""
265
+ if self._owner_id_column_ddl:
266
+ owner_id_line = f",\n {self._owner_id_column_ddl}"
267
+
268
+ return f"""
269
+ CREATE TABLE IF NOT EXISTS {self._memory_table} (
270
+ id VARCHAR(128) PRIMARY KEY,
271
+ session_id VARCHAR(128) NOT NULL,
272
+ app_name VARCHAR(128) NOT NULL,
273
+ user_id VARCHAR(128) NOT NULL,
274
+ event_id VARCHAR(128) NOT NULL UNIQUE,
275
+ author VARCHAR(256){owner_id_line},
276
+ timestamp TIMESTAMPTZ NOT NULL,
277
+ content_json JSONB NOT NULL,
278
+ content_text TEXT NOT NULL,
279
+ metadata_json JSONB,
280
+ inserted_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
281
+ );
282
+
283
+ CREATE INDEX IF NOT EXISTS idx_{self._memory_table}_app_user_time
284
+ ON {self._memory_table}(app_name, user_id, timestamp DESC);
285
+
286
+ CREATE INDEX IF NOT EXISTS idx_{self._memory_table}_session
287
+ ON {self._memory_table}(session_id);
288
+ """
289
+
290
+ def _get_drop_memory_table_sql(self) -> "list[str]":
291
+ return [f"DROP TABLE IF EXISTS {self._memory_table}"]
292
+
293
+ async def create_tables(self) -> None:
294
+ if not self._enabled:
295
+ return
296
+
297
+ async with self._config.provide_session() as driver:
298
+ await driver.execute_script(await self._get_create_memory_table_sql())
299
+
300
+ async def insert_memory_entries(self, entries: "list[MemoryRecord]", owner_id: "object | None" = None) -> int:
301
+ if not self._enabled:
302
+ msg = "Memory store is disabled"
303
+ raise RuntimeError(msg)
304
+
305
+ if not entries:
306
+ return 0
307
+
308
+ inserted_count = 0
309
+ async with self._config.provide_connection() as conn:
310
+ for entry in entries:
311
+ if self._owner_id_column_name:
312
+ sql = f"""
313
+ INSERT INTO {self._memory_table}
314
+ (id, session_id, app_name, user_id, event_id, author,
315
+ {self._owner_id_column_name}, timestamp, content_json,
316
+ content_text, metadata_json, inserted_at)
317
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12)
318
+ ON CONFLICT (event_id) DO NOTHING
319
+ """
320
+ result = await conn.execute(
321
+ sql,
322
+ entry["id"],
323
+ entry["session_id"],
324
+ entry["app_name"],
325
+ entry["user_id"],
326
+ entry["event_id"],
327
+ entry["author"],
328
+ owner_id,
329
+ entry["timestamp"],
330
+ entry["content_json"],
331
+ entry["content_text"],
332
+ entry["metadata_json"],
333
+ entry["inserted_at"],
334
+ )
335
+ else:
336
+ sql = f"""
337
+ INSERT INTO {self._memory_table}
338
+ (id, session_id, app_name, user_id, event_id, author,
339
+ timestamp, content_json, content_text, metadata_json, inserted_at)
340
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)
341
+ ON CONFLICT (event_id) DO NOTHING
342
+ """
343
+ result = await conn.execute(
344
+ sql,
345
+ entry["id"],
346
+ entry["session_id"],
347
+ entry["app_name"],
348
+ entry["user_id"],
349
+ entry["event_id"],
350
+ entry["author"],
351
+ entry["timestamp"],
352
+ entry["content_json"],
353
+ entry["content_text"],
354
+ entry["metadata_json"],
355
+ entry["inserted_at"],
356
+ )
357
+
358
+ if result and result.split()[-1].isdigit() and int(result.split()[-1]) > 0:
359
+ inserted_count += 1
360
+
361
+ return inserted_count
362
+
363
+ async def search_entries(
364
+ self, query: str, app_name: str, user_id: str, limit: "int | None" = None
365
+ ) -> "list[MemoryRecord]":
366
+ if not self._enabled:
367
+ msg = "Memory store is disabled"
368
+ raise RuntimeError(msg)
369
+
370
+ if not query:
371
+ return []
372
+
373
+ effective_limit = limit if limit is not None else self._max_results
374
+ if self._use_fts:
375
+ logger.debug("CockroachDB full-text search not supported; using simple search")
376
+
377
+ sql = f"""
378
+ SELECT * FROM {self._memory_table}
379
+ WHERE app_name = $1 AND user_id = $2 AND content_text ILIKE $3
380
+ ORDER BY timestamp DESC
381
+ LIMIT $4
382
+ """
383
+
384
+ async with self._config.provide_connection() as conn:
385
+ rows = await conn.fetch(sql, app_name, user_id, f"%{query}%", effective_limit)
386
+
387
+ return [cast("MemoryRecord", dict(row)) for row in rows]
388
+
389
+ async def delete_entries_by_session(self, session_id: str) -> int:
390
+ if not self._enabled:
391
+ msg = "Memory store is disabled"
392
+ raise RuntimeError(msg)
393
+
394
+ sql = f"DELETE FROM {self._memory_table} WHERE session_id = $1"
395
+ async with self._config.provide_connection() as conn:
396
+ result = await conn.execute(sql, session_id)
397
+ return int(result.split()[-1]) if result else 0
398
+
399
+ async def delete_entries_older_than(self, days: int) -> int:
400
+ if not self._enabled:
401
+ msg = "Memory store is disabled"
402
+ raise RuntimeError(msg)
403
+
404
+ sql = f"""
405
+ DELETE FROM {self._memory_table}
406
+ WHERE inserted_at < (CURRENT_TIMESTAMP - INTERVAL $1 DAY)
407
+ """
408
+ async with self._config.provide_connection() as conn:
409
+ result = await conn.execute(sql, days)
410
+ return int(result.split()[-1]) if result else 0
@@ -0,0 +1,238 @@
1
+ """CockroachDB AsyncPG configuration."""
2
+
3
+ from typing import TYPE_CHECKING, Any, ClassVar, TypedDict, cast
4
+
5
+ from asyncpg import create_pool as asyncpg_create_pool
6
+ from typing_extensions import NotRequired
7
+
8
+ from sqlspec.adapters.asyncpg.core import apply_driver_features, build_connection_config, default_statement_config
9
+ from sqlspec.adapters.cockroach_asyncpg._typing import (
10
+ CockroachAsyncpgConnection,
11
+ CockroachAsyncpgPool,
12
+ CockroachAsyncpgSessionContext,
13
+ )
14
+ from sqlspec.adapters.cockroach_asyncpg.core import CockroachAsyncpgRetryConfig
15
+ from sqlspec.adapters.cockroach_asyncpg.driver import CockroachAsyncpgDriver, CockroachAsyncpgExceptionHandler
16
+ from sqlspec.config import AsyncDatabaseConfig, ExtensionConfigs
17
+ from sqlspec.extensions.events import EventRuntimeHints
18
+ from sqlspec.utils.config_tools import normalize_connection_config, reject_pool_aliases
19
+
20
+ if TYPE_CHECKING:
21
+ from collections.abc import Awaitable, Callable
22
+
23
+ from sqlspec.core import StatementConfig
24
+ from sqlspec.observability import ObservabilityConfig
25
+
26
+ __all__ = (
27
+ "CockroachAsyncpgConfig",
28
+ "CockroachAsyncpgConnectionConfig",
29
+ "CockroachAsyncpgDriverFeatures",
30
+ "CockroachAsyncpgPoolConfig",
31
+ )
32
+
33
+
34
+ class CockroachAsyncpgConnectionConfig(TypedDict):
35
+ """AsyncPG connection parameters for CockroachDB."""
36
+
37
+ dsn: NotRequired[str]
38
+ host: NotRequired[str]
39
+ port: NotRequired[int]
40
+ user: NotRequired[str]
41
+ password: NotRequired[str]
42
+ database: NotRequired[str]
43
+ ssl: NotRequired[Any]
44
+ passfile: NotRequired[str]
45
+ direct_tls: NotRequired[bool]
46
+ connect_timeout: NotRequired[float]
47
+ command_timeout: NotRequired[float]
48
+ statement_cache_size: NotRequired[int]
49
+ max_cached_statement_lifetime: NotRequired[int]
50
+ max_cacheable_statement_size: NotRequired[int]
51
+ server_settings: NotRequired["dict[str, str]"]
52
+
53
+
54
+ class CockroachAsyncpgPoolConfig(CockroachAsyncpgConnectionConfig):
55
+ """AsyncPG pool parameters for CockroachDB."""
56
+
57
+ min_size: NotRequired[int]
58
+ max_size: NotRequired[int]
59
+ max_queries: NotRequired[int]
60
+ max_inactive_connection_lifetime: NotRequired[float]
61
+ setup: NotRequired["Callable[[CockroachAsyncpgConnection], Awaitable[None]]"]
62
+ init: NotRequired["Callable[[CockroachAsyncpgConnection], Awaitable[None]]"]
63
+ extra: NotRequired["dict[str, Any]"]
64
+
65
+
66
+ class CockroachAsyncpgDriverFeatures(TypedDict):
67
+ """Driver feature flags for CockroachDB AsyncPG adapter."""
68
+
69
+ enable_auto_retry: NotRequired[bool]
70
+ max_retries: NotRequired[int]
71
+ retry_delay_base_ms: NotRequired[float]
72
+ retry_delay_max_ms: NotRequired[float]
73
+ enable_retry_logging: NotRequired[bool]
74
+ enable_follower_reads: NotRequired[bool]
75
+ default_staleness: NotRequired[str]
76
+ json_serializer: NotRequired["Callable[[Any], str]"]
77
+ json_deserializer: NotRequired["Callable[[str], Any]"]
78
+ enable_json_codecs: NotRequired[bool]
79
+ enable_pgvector: NotRequired[bool]
80
+ enable_events: NotRequired[bool]
81
+ events_backend: NotRequired[str]
82
+
83
+
84
+ class _CockroachAsyncpgSessionFactory:
85
+ __slots__ = ("_config", "_ctx")
86
+
87
+ def __init__(self, config: "CockroachAsyncpgConfig") -> None:
88
+ self._config = config
89
+ self._ctx: Any | None = None
90
+
91
+ async def acquire_connection(self) -> "CockroachAsyncpgConnection":
92
+ pool = self._config.connection_instance
93
+ if pool is None:
94
+ pool = await self._config.create_pool()
95
+ self._config.connection_instance = pool
96
+ ctx = pool.acquire()
97
+ self._ctx = ctx
98
+ return cast("CockroachAsyncpgConnection", await ctx.__aenter__())
99
+
100
+ async def release_connection(self, _conn: "CockroachAsyncpgConnection") -> None:
101
+ if self._ctx is not None:
102
+ await self._ctx.__aexit__(None, None, None)
103
+ self._ctx = None
104
+
105
+
106
+ class CockroachAsyncpgConnectionContext:
107
+ """Async context manager for CockroachDB AsyncPG connections."""
108
+
109
+ __slots__ = ("_config", "_connection")
110
+
111
+ def __init__(self, config: "CockroachAsyncpgConfig") -> None:
112
+ self._config = config
113
+ self._connection: CockroachAsyncpgConnection | None = None
114
+
115
+ async def __aenter__(self) -> "CockroachAsyncpgConnection":
116
+ pool = self._config.connection_instance
117
+ if pool is None:
118
+ pool = await self._config.create_pool()
119
+ self._config.connection_instance = pool
120
+ self._connection = await pool.acquire()
121
+ return self._connection
122
+
123
+ async def __aexit__(
124
+ self, exc_type: "type[BaseException] | None", exc_val: "BaseException | None", exc_tb: Any
125
+ ) -> bool | None:
126
+ if self._connection is not None:
127
+ if self._config.connection_instance:
128
+ await self._config.connection_instance.release(self._connection) # type: ignore[arg-type]
129
+ self._connection = None
130
+ return None
131
+
132
+
133
+ class CockroachAsyncpgConfig(
134
+ AsyncDatabaseConfig[CockroachAsyncpgConnection, CockroachAsyncpgPool, CockroachAsyncpgDriver]
135
+ ):
136
+ """Configuration for CockroachDB using AsyncPG."""
137
+
138
+ driver_type: "ClassVar[type[CockroachAsyncpgDriver]]" = CockroachAsyncpgDriver
139
+ connection_type: "ClassVar[type[CockroachAsyncpgConnection]]" = CockroachAsyncpgConnection # type: ignore[assignment]
140
+ supports_transactional_ddl: "ClassVar[bool]" = True
141
+ supports_native_arrow_export: "ClassVar[bool]" = True
142
+ supports_native_arrow_import: "ClassVar[bool]" = True
143
+ supports_native_parquet_export: "ClassVar[bool]" = True
144
+ supports_native_parquet_import: "ClassVar[bool]" = True
145
+
146
+ def __init__(
147
+ self,
148
+ *,
149
+ connection_config: "CockroachAsyncpgPoolConfig | dict[str, Any] | None" = None,
150
+ connection_instance: "CockroachAsyncpgPool | None" = None,
151
+ migration_config: "dict[str, Any] | None" = None,
152
+ statement_config: "StatementConfig | None" = None,
153
+ driver_features: "CockroachAsyncpgDriverFeatures | dict[str, Any] | None" = None,
154
+ bind_key: "str | None" = None,
155
+ extension_config: "ExtensionConfigs | None" = None,
156
+ observability_config: "ObservabilityConfig | None" = None,
157
+ **kwargs: Any,
158
+ ) -> None:
159
+ reject_pool_aliases(kwargs)
160
+
161
+ connection_config = normalize_connection_config(connection_config)
162
+ statement_config = statement_config or default_statement_config
163
+ statement_config, driver_features = apply_driver_features(statement_config, driver_features)
164
+
165
+ driver_features.setdefault("enable_auto_retry", True)
166
+ _ = CockroachAsyncpgRetryConfig.from_features(driver_features)
167
+
168
+ super().__init__(
169
+ connection_config=connection_config,
170
+ connection_instance=connection_instance,
171
+ migration_config=migration_config,
172
+ statement_config=statement_config,
173
+ driver_features=driver_features,
174
+ bind_key=bind_key,
175
+ extension_config=extension_config,
176
+ observability_config=observability_config,
177
+ **kwargs,
178
+ )
179
+
180
+ async def _create_pool(self) -> "CockroachAsyncpgPool":
181
+ config = build_connection_config(self.connection_config)
182
+ return await asyncpg_create_pool(**config)
183
+
184
+ async def _close_pool(self) -> None:
185
+ if not self.connection_instance:
186
+ return
187
+ await self.connection_instance.close()
188
+ self.connection_instance = None
189
+
190
+ async def create_connection(self) -> "CockroachAsyncpgConnection":
191
+ if self.connection_instance is None:
192
+ self.connection_instance = await self.create_pool()
193
+ return cast("CockroachAsyncpgConnection", await self.connection_instance.acquire())
194
+
195
+ def provide_connection(self, *args: Any, **kwargs: Any) -> "CockroachAsyncpgConnectionContext":
196
+ return CockroachAsyncpgConnectionContext(self)
197
+
198
+ def provide_session(
199
+ self,
200
+ *_args: Any,
201
+ statement_config: "StatementConfig | None" = None,
202
+ follower_reads: bool | None = None,
203
+ staleness: str | None = None,
204
+ **_kwargs: Any,
205
+ ) -> "CockroachAsyncpgSessionContext":
206
+ factory = _CockroachAsyncpgSessionFactory(self)
207
+ driver_features = dict(self.driver_features)
208
+ if follower_reads is not None:
209
+ driver_features["enable_follower_reads"] = follower_reads
210
+ if staleness is not None:
211
+ driver_features["default_staleness"] = staleness
212
+
213
+ return CockroachAsyncpgSessionContext(
214
+ acquire_connection=factory.acquire_connection,
215
+ release_connection=factory.release_connection,
216
+ statement_config=statement_config or self.statement_config or default_statement_config,
217
+ driver_features=driver_features,
218
+ prepare_driver=self._prepare_driver,
219
+ )
220
+
221
+ async def provide_pool(self, *args: Any, **kwargs: Any) -> "CockroachAsyncpgPool":
222
+ if not self.connection_instance:
223
+ self.connection_instance = await self.create_pool()
224
+ return self.connection_instance
225
+
226
+ def get_signature_namespace(self) -> "dict[str, Any]":
227
+ namespace = super().get_signature_namespace()
228
+ namespace.update({
229
+ "CockroachAsyncpgConnectionConfig": CockroachAsyncpgConnectionConfig,
230
+ "CockroachAsyncpgPoolConfig": CockroachAsyncpgPoolConfig,
231
+ "CockroachAsyncpgDriver": CockroachAsyncpgDriver,
232
+ "CockroachAsyncpgExceptionHandler": CockroachAsyncpgExceptionHandler,
233
+ "CockroachAsyncpgSessionContext": CockroachAsyncpgSessionContext,
234
+ })
235
+ return namespace
236
+
237
+ def get_event_runtime_hints(self) -> "EventRuntimeHints":
238
+ return EventRuntimeHints(poll_interval=0.5, select_for_update=True, skip_locked=True)