sqlspec 0.47.0__cp314-cp314-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (621) hide show
  1. f68e0789eb443ecb1c2c__mypyc.cp314-win_amd64.pyd +0 -0
  2. sqlspec/__init__.py +167 -0
  3. sqlspec/__main__.py +12 -0
  4. sqlspec/__metadata__.py +14 -0
  5. sqlspec/_typing.py +714 -0
  6. sqlspec/adapters/__init__.py +0 -0
  7. sqlspec/adapters/adbc/__init__.py +13 -0
  8. sqlspec/adapters/adbc/_typing.py +106 -0
  9. sqlspec/adapters/adbc/adk/__init__.py +5 -0
  10. sqlspec/adapters/adbc/adk/store.py +1280 -0
  11. sqlspec/adapters/adbc/config.py +378 -0
  12. sqlspec/adapters/adbc/core.cp314-win_amd64.pyd +0 -0
  13. sqlspec/adapters/adbc/core.py +922 -0
  14. sqlspec/adapters/adbc/data_dictionary.py +339 -0
  15. sqlspec/adapters/adbc/driver.py +534 -0
  16. sqlspec/adapters/adbc/events/__init__.py +5 -0
  17. sqlspec/adapters/adbc/events/store.py +285 -0
  18. sqlspec/adapters/adbc/litestar/__init__.py +5 -0
  19. sqlspec/adapters/adbc/litestar/store.py +534 -0
  20. sqlspec/adapters/adbc/type_converter.cp314-win_amd64.pyd +0 -0
  21. sqlspec/adapters/adbc/type_converter.py +142 -0
  22. sqlspec/adapters/aiomysql/__init__.py +21 -0
  23. sqlspec/adapters/aiomysql/_typing.py +137 -0
  24. sqlspec/adapters/aiomysql/adk/__init__.py +5 -0
  25. sqlspec/adapters/aiomysql/adk/store.py +678 -0
  26. sqlspec/adapters/aiomysql/config.py +305 -0
  27. sqlspec/adapters/aiomysql/core.cp314-win_amd64.pyd +0 -0
  28. sqlspec/adapters/aiomysql/core.py +536 -0
  29. sqlspec/adapters/aiomysql/data_dictionary.py +121 -0
  30. sqlspec/adapters/aiomysql/driver.py +386 -0
  31. sqlspec/adapters/aiomysql/events/__init__.py +5 -0
  32. sqlspec/adapters/aiomysql/events/store.py +104 -0
  33. sqlspec/adapters/aiomysql/litestar/__init__.py +5 -0
  34. sqlspec/adapters/aiomysql/litestar/store.py +314 -0
  35. sqlspec/adapters/aiosqlite/__init__.py +26 -0
  36. sqlspec/adapters/aiosqlite/_typing.py +109 -0
  37. sqlspec/adapters/aiosqlite/adk/__init__.py +5 -0
  38. sqlspec/adapters/aiosqlite/adk/store.py +829 -0
  39. sqlspec/adapters/aiosqlite/config.py +315 -0
  40. sqlspec/adapters/aiosqlite/core.cp314-win_amd64.pyd +0 -0
  41. sqlspec/adapters/aiosqlite/core.py +315 -0
  42. sqlspec/adapters/aiosqlite/data_dictionary.py +202 -0
  43. sqlspec/adapters/aiosqlite/driver.py +311 -0
  44. sqlspec/adapters/aiosqlite/events/__init__.py +5 -0
  45. sqlspec/adapters/aiosqlite/events/store.py +20 -0
  46. sqlspec/adapters/aiosqlite/litestar/__init__.py +5 -0
  47. sqlspec/adapters/aiosqlite/litestar/store.py +279 -0
  48. sqlspec/adapters/aiosqlite/pool.cp314-win_amd64.pyd +0 -0
  49. sqlspec/adapters/aiosqlite/pool.py +734 -0
  50. sqlspec/adapters/asyncmy/__init__.py +21 -0
  51. sqlspec/adapters/asyncmy/_typing.py +113 -0
  52. sqlspec/adapters/asyncmy/adk/__init__.py +5 -0
  53. sqlspec/adapters/asyncmy/adk/store.py +644 -0
  54. sqlspec/adapters/asyncmy/config.py +307 -0
  55. sqlspec/adapters/asyncmy/core.cp314-win_amd64.pyd +0 -0
  56. sqlspec/adapters/asyncmy/core.py +538 -0
  57. sqlspec/adapters/asyncmy/data_dictionary.py +122 -0
  58. sqlspec/adapters/asyncmy/driver.py +391 -0
  59. sqlspec/adapters/asyncmy/events/__init__.py +5 -0
  60. sqlspec/adapters/asyncmy/events/store.py +104 -0
  61. sqlspec/adapters/asyncmy/litestar/__init__.py +5 -0
  62. sqlspec/adapters/asyncmy/litestar/store.py +296 -0
  63. sqlspec/adapters/asyncpg/__init__.py +26 -0
  64. sqlspec/adapters/asyncpg/_typing.py +103 -0
  65. sqlspec/adapters/asyncpg/adk/__init__.py +5 -0
  66. sqlspec/adapters/asyncpg/adk/store.py +483 -0
  67. sqlspec/adapters/asyncpg/config.py +575 -0
  68. sqlspec/adapters/asyncpg/core.cp314-win_amd64.pyd +0 -0
  69. sqlspec/adapters/asyncpg/core.py +480 -0
  70. sqlspec/adapters/asyncpg/data_dictionary.py +157 -0
  71. sqlspec/adapters/asyncpg/driver.py +487 -0
  72. sqlspec/adapters/asyncpg/events/__init__.py +6 -0
  73. sqlspec/adapters/asyncpg/events/_hub.py +181 -0
  74. sqlspec/adapters/asyncpg/events/backend.py +210 -0
  75. sqlspec/adapters/asyncpg/events/store.py +40 -0
  76. sqlspec/adapters/asyncpg/litestar/__init__.py +5 -0
  77. sqlspec/adapters/asyncpg/litestar/store.py +251 -0
  78. sqlspec/adapters/bigquery/__init__.py +15 -0
  79. sqlspec/adapters/bigquery/_typing.py +108 -0
  80. sqlspec/adapters/bigquery/config.py +362 -0
  81. sqlspec/adapters/bigquery/core.cp314-win_amd64.pyd +0 -0
  82. sqlspec/adapters/bigquery/core.py +768 -0
  83. sqlspec/adapters/bigquery/data_dictionary.py +120 -0
  84. sqlspec/adapters/bigquery/driver.py +542 -0
  85. sqlspec/adapters/bigquery/events/__init__.py +5 -0
  86. sqlspec/adapters/bigquery/events/store.py +139 -0
  87. sqlspec/adapters/bigquery/litestar/__init__.py +5 -0
  88. sqlspec/adapters/bigquery/litestar/store.py +325 -0
  89. sqlspec/adapters/bigquery/type_converter.cp314-win_amd64.pyd +0 -0
  90. sqlspec/adapters/bigquery/type_converter.py +107 -0
  91. sqlspec/adapters/cockroach_asyncpg/__init__.py +26 -0
  92. sqlspec/adapters/cockroach_asyncpg/_typing.py +73 -0
  93. sqlspec/adapters/cockroach_asyncpg/adk/__init__.py +3 -0
  94. sqlspec/adapters/cockroach_asyncpg/adk/store.py +465 -0
  95. sqlspec/adapters/cockroach_asyncpg/config.py +248 -0
  96. sqlspec/adapters/cockroach_asyncpg/core.cp314-win_amd64.pyd +0 -0
  97. sqlspec/adapters/cockroach_asyncpg/core.py +55 -0
  98. sqlspec/adapters/cockroach_asyncpg/data_dictionary.py +110 -0
  99. sqlspec/adapters/cockroach_asyncpg/driver.py +142 -0
  100. sqlspec/adapters/cockroach_asyncpg/events/__init__.py +3 -0
  101. sqlspec/adapters/cockroach_asyncpg/events/store.py +20 -0
  102. sqlspec/adapters/cockroach_asyncpg/litestar/__init__.py +3 -0
  103. sqlspec/adapters/cockroach_asyncpg/litestar/store.py +142 -0
  104. sqlspec/adapters/cockroach_psycopg/__init__.py +39 -0
  105. sqlspec/adapters/cockroach_psycopg/_typing.py +137 -0
  106. sqlspec/adapters/cockroach_psycopg/adk/__init__.py +13 -0
  107. sqlspec/adapters/cockroach_psycopg/adk/store.py +1039 -0
  108. sqlspec/adapters/cockroach_psycopg/config.py +511 -0
  109. sqlspec/adapters/cockroach_psycopg/core.cp314-win_amd64.pyd +0 -0
  110. sqlspec/adapters/cockroach_psycopg/core.py +63 -0
  111. sqlspec/adapters/cockroach_psycopg/data_dictionary.py +220 -0
  112. sqlspec/adapters/cockroach_psycopg/driver.py +273 -0
  113. sqlspec/adapters/cockroach_psycopg/events/__init__.py +6 -0
  114. sqlspec/adapters/cockroach_psycopg/events/store.py +34 -0
  115. sqlspec/adapters/cockroach_psycopg/litestar/__init__.py +3 -0
  116. sqlspec/adapters/cockroach_psycopg/litestar/store.py +327 -0
  117. sqlspec/adapters/duckdb/__init__.py +29 -0
  118. sqlspec/adapters/duckdb/_typing.py +104 -0
  119. sqlspec/adapters/duckdb/adk/__init__.py +14 -0
  120. sqlspec/adapters/duckdb/adk/store.py +935 -0
  121. sqlspec/adapters/duckdb/config.py +386 -0
  122. sqlspec/adapters/duckdb/core.cp314-win_amd64.pyd +0 -0
  123. sqlspec/adapters/duckdb/core.py +332 -0
  124. sqlspec/adapters/duckdb/data_dictionary.py +140 -0
  125. sqlspec/adapters/duckdb/driver.py +426 -0
  126. sqlspec/adapters/duckdb/events/__init__.py +5 -0
  127. sqlspec/adapters/duckdb/events/store.py +57 -0
  128. sqlspec/adapters/duckdb/litestar/__init__.py +5 -0
  129. sqlspec/adapters/duckdb/litestar/store.py +330 -0
  130. sqlspec/adapters/duckdb/pool.cp314-win_amd64.pyd +0 -0
  131. sqlspec/adapters/duckdb/pool.py +350 -0
  132. sqlspec/adapters/duckdb/type_converter.cp314-win_amd64.pyd +0 -0
  133. sqlspec/adapters/duckdb/type_converter.py +118 -0
  134. sqlspec/adapters/mysqlconnector/__init__.py +39 -0
  135. sqlspec/adapters/mysqlconnector/_typing.py +186 -0
  136. sqlspec/adapters/mysqlconnector/adk/__init__.py +15 -0
  137. sqlspec/adapters/mysqlconnector/adk/store.py +1183 -0
  138. sqlspec/adapters/mysqlconnector/config.py +421 -0
  139. sqlspec/adapters/mysqlconnector/core.cp314-win_amd64.pyd +0 -0
  140. sqlspec/adapters/mysqlconnector/core.py +472 -0
  141. sqlspec/adapters/mysqlconnector/data_dictionary.py +230 -0
  142. sqlspec/adapters/mysqlconnector/driver.py +516 -0
  143. sqlspec/adapters/mysqlconnector/events/__init__.py +8 -0
  144. sqlspec/adapters/mysqlconnector/events/store.py +98 -0
  145. sqlspec/adapters/mysqlconnector/litestar/__init__.py +5 -0
  146. sqlspec/adapters/mysqlconnector/litestar/store.py +426 -0
  147. sqlspec/adapters/oracledb/__init__.py +39 -0
  148. sqlspec/adapters/oracledb/_json_handlers.cp314-win_amd64.pyd +0 -0
  149. sqlspec/adapters/oracledb/_json_handlers.py +196 -0
  150. sqlspec/adapters/oracledb/_param_types.cp314-win_amd64.pyd +0 -0
  151. sqlspec/adapters/oracledb/_param_types.py +46 -0
  152. sqlspec/adapters/oracledb/_typing.py +258 -0
  153. sqlspec/adapters/oracledb/_uuid_handlers.cp314-win_amd64.pyd +0 -0
  154. sqlspec/adapters/oracledb/_uuid_handlers.py +163 -0
  155. sqlspec/adapters/oracledb/_vector_handlers.cp314-win_amd64.pyd +0 -0
  156. sqlspec/adapters/oracledb/_vector_handlers.py +228 -0
  157. sqlspec/adapters/oracledb/adk/__init__.py +21 -0
  158. sqlspec/adapters/oracledb/adk/store.py +2453 -0
  159. sqlspec/adapters/oracledb/config.py +575 -0
  160. sqlspec/adapters/oracledb/core.cp314-win_amd64.pyd +0 -0
  161. sqlspec/adapters/oracledb/core.py +820 -0
  162. sqlspec/adapters/oracledb/data_dictionary.py +404 -0
  163. sqlspec/adapters/oracledb/driver.py +1277 -0
  164. sqlspec/adapters/oracledb/events/__init__.py +16 -0
  165. sqlspec/adapters/oracledb/events/_hub.py +345 -0
  166. sqlspec/adapters/oracledb/events/backend.py +300 -0
  167. sqlspec/adapters/oracledb/events/store.py +420 -0
  168. sqlspec/adapters/oracledb/litestar/__init__.py +5 -0
  169. sqlspec/adapters/oracledb/litestar/store.py +781 -0
  170. sqlspec/adapters/oracledb/migrations.py +539 -0
  171. sqlspec/adapters/oracledb/type_converter.cp314-win_amd64.pyd +0 -0
  172. sqlspec/adapters/oracledb/type_converter.py +211 -0
  173. sqlspec/adapters/psqlpy/__init__.py +18 -0
  174. sqlspec/adapters/psqlpy/_typing.py +121 -0
  175. sqlspec/adapters/psqlpy/adk/__init__.py +5 -0
  176. sqlspec/adapters/psqlpy/adk/store.py +591 -0
  177. sqlspec/adapters/psqlpy/config.py +376 -0
  178. sqlspec/adapters/psqlpy/core.cp314-win_amd64.pyd +0 -0
  179. sqlspec/adapters/psqlpy/core.py +694 -0
  180. sqlspec/adapters/psqlpy/data_dictionary.py +121 -0
  181. sqlspec/adapters/psqlpy/driver.py +411 -0
  182. sqlspec/adapters/psqlpy/events/__init__.py +6 -0
  183. sqlspec/adapters/psqlpy/events/_hub.py +204 -0
  184. sqlspec/adapters/psqlpy/events/backend.py +210 -0
  185. sqlspec/adapters/psqlpy/events/store.py +20 -0
  186. sqlspec/adapters/psqlpy/litestar/__init__.py +5 -0
  187. sqlspec/adapters/psqlpy/litestar/store.py +270 -0
  188. sqlspec/adapters/psqlpy/type_converter.cp314-win_amd64.pyd +0 -0
  189. sqlspec/adapters/psqlpy/type_converter.py +113 -0
  190. sqlspec/adapters/psycopg/__init__.py +38 -0
  191. sqlspec/adapters/psycopg/_typing.py +218 -0
  192. sqlspec/adapters/psycopg/adk/__init__.py +10 -0
  193. sqlspec/adapters/psycopg/adk/store.py +1106 -0
  194. sqlspec/adapters/psycopg/config.py +695 -0
  195. sqlspec/adapters/psycopg/core.cp314-win_amd64.pyd +0 -0
  196. sqlspec/adapters/psycopg/core.py +520 -0
  197. sqlspec/adapters/psycopg/data_dictionary.py +278 -0
  198. sqlspec/adapters/psycopg/driver.py +1033 -0
  199. sqlspec/adapters/psycopg/events/__init__.py +20 -0
  200. sqlspec/adapters/psycopg/events/_hub.py +388 -0
  201. sqlspec/adapters/psycopg/events/backend.py +398 -0
  202. sqlspec/adapters/psycopg/events/store.py +42 -0
  203. sqlspec/adapters/psycopg/litestar/__init__.py +5 -0
  204. sqlspec/adapters/psycopg/litestar/store.py +554 -0
  205. sqlspec/adapters/psycopg/type_converter.cp314-win_amd64.pyd +0 -0
  206. sqlspec/adapters/psycopg/type_converter.py +93 -0
  207. sqlspec/adapters/pymysql/__init__.py +21 -0
  208. sqlspec/adapters/pymysql/_typing.py +92 -0
  209. sqlspec/adapters/pymysql/adk/__init__.py +5 -0
  210. sqlspec/adapters/pymysql/adk/store.py +657 -0
  211. sqlspec/adapters/pymysql/config.py +176 -0
  212. sqlspec/adapters/pymysql/core.cp314-win_amd64.pyd +0 -0
  213. sqlspec/adapters/pymysql/core.py +469 -0
  214. sqlspec/adapters/pymysql/data_dictionary.py +120 -0
  215. sqlspec/adapters/pymysql/driver.py +271 -0
  216. sqlspec/adapters/pymysql/events/__init__.py +5 -0
  217. sqlspec/adapters/pymysql/events/store.py +50 -0
  218. sqlspec/adapters/pymysql/litestar/__init__.py +5 -0
  219. sqlspec/adapters/pymysql/litestar/store.py +232 -0
  220. sqlspec/adapters/pymysql/pool.cp314-win_amd64.pyd +0 -0
  221. sqlspec/adapters/pymysql/pool.py +184 -0
  222. sqlspec/adapters/spanner/__init__.py +33 -0
  223. sqlspec/adapters/spanner/_typing.py +102 -0
  224. sqlspec/adapters/spanner/adk/__init__.py +5 -0
  225. sqlspec/adapters/spanner/adk/store.py +758 -0
  226. sqlspec/adapters/spanner/config.py +355 -0
  227. sqlspec/adapters/spanner/core.cp314-win_amd64.pyd +0 -0
  228. sqlspec/adapters/spanner/core.py +263 -0
  229. sqlspec/adapters/spanner/data_dictionary.py +120 -0
  230. sqlspec/adapters/spanner/driver.py +407 -0
  231. sqlspec/adapters/spanner/events/__init__.py +5 -0
  232. sqlspec/adapters/spanner/events/store.py +187 -0
  233. sqlspec/adapters/spanner/litestar/__init__.py +5 -0
  234. sqlspec/adapters/spanner/litestar/store.py +291 -0
  235. sqlspec/adapters/spanner/type_converter.cp314-win_amd64.pyd +0 -0
  236. sqlspec/adapters/spanner/type_converter.py +342 -0
  237. sqlspec/adapters/sqlite/__init__.py +19 -0
  238. sqlspec/adapters/sqlite/_typing.py +123 -0
  239. sqlspec/adapters/sqlite/adk/__init__.py +5 -0
  240. sqlspec/adapters/sqlite/adk/store.py +992 -0
  241. sqlspec/adapters/sqlite/config.py +240 -0
  242. sqlspec/adapters/sqlite/core.cp314-win_amd64.pyd +0 -0
  243. sqlspec/adapters/sqlite/core.py +357 -0
  244. sqlspec/adapters/sqlite/data_dictionary.py +198 -0
  245. sqlspec/adapters/sqlite/driver.py +527 -0
  246. sqlspec/adapters/sqlite/events/__init__.py +5 -0
  247. sqlspec/adapters/sqlite/events/store.py +20 -0
  248. sqlspec/adapters/sqlite/litestar/__init__.py +5 -0
  249. sqlspec/adapters/sqlite/litestar/store.py +316 -0
  250. sqlspec/adapters/sqlite/pool.cp314-win_amd64.pyd +0 -0
  251. sqlspec/adapters/sqlite/pool.py +237 -0
  252. sqlspec/adapters/sqlite/type_converter.cp314-win_amd64.pyd +0 -0
  253. sqlspec/adapters/sqlite/type_converter.py +114 -0
  254. sqlspec/base.py +832 -0
  255. sqlspec/builder/__init__.py +181 -0
  256. sqlspec/builder/_base.cp314-win_amd64.pyd +0 -0
  257. sqlspec/builder/_base.py +1071 -0
  258. sqlspec/builder/_column.cp314-win_amd64.pyd +0 -0
  259. sqlspec/builder/_column.py +521 -0
  260. sqlspec/builder/_ddl.cp314-win_amd64.pyd +0 -0
  261. sqlspec/builder/_ddl.py +1691 -0
  262. sqlspec/builder/_delete.cp314-win_amd64.pyd +0 -0
  263. sqlspec/builder/_delete.py +95 -0
  264. sqlspec/builder/_dml.cp314-win_amd64.pyd +0 -0
  265. sqlspec/builder/_dml.py +386 -0
  266. sqlspec/builder/_explain.cp314-win_amd64.pyd +0 -0
  267. sqlspec/builder/_explain.py +579 -0
  268. sqlspec/builder/_expression_wrappers.cp314-win_amd64.pyd +0 -0
  269. sqlspec/builder/_expression_wrappers.py +46 -0
  270. sqlspec/builder/_factory.cp314-win_amd64.pyd +0 -0
  271. sqlspec/builder/_factory.py +1884 -0
  272. sqlspec/builder/_insert.cp314-win_amd64.pyd +0 -0
  273. sqlspec/builder/_insert.py +405 -0
  274. sqlspec/builder/_join.cp314-win_amd64.pyd +0 -0
  275. sqlspec/builder/_join.py +489 -0
  276. sqlspec/builder/_merge.cp314-win_amd64.pyd +0 -0
  277. sqlspec/builder/_merge.py +823 -0
  278. sqlspec/builder/_parsing_utils.cp314-win_amd64.pyd +0 -0
  279. sqlspec/builder/_parsing_utils.py +295 -0
  280. sqlspec/builder/_select.cp314-win_amd64.pyd +0 -0
  281. sqlspec/builder/_select.py +1666 -0
  282. sqlspec/builder/_temporal.cp314-win_amd64.pyd +0 -0
  283. sqlspec/builder/_temporal.py +167 -0
  284. sqlspec/builder/_update.cp314-win_amd64.pyd +0 -0
  285. sqlspec/builder/_update.py +173 -0
  286. sqlspec/builder/_vector_distance.cp314-win_amd64.pyd +0 -0
  287. sqlspec/builder/_vector_distance.py +330 -0
  288. sqlspec/cli.py +1095 -0
  289. sqlspec/config.py +2383 -0
  290. sqlspec/core/__init__.py +372 -0
  291. sqlspec/core/_correlation.cp314-win_amd64.pyd +0 -0
  292. sqlspec/core/_correlation.py +176 -0
  293. sqlspec/core/_pagination.py +42 -0
  294. sqlspec/core/_pool.cp314-win_amd64.pyd +0 -0
  295. sqlspec/core/_pool.py +76 -0
  296. sqlspec/core/cache.cp314-win_amd64.pyd +0 -0
  297. sqlspec/core/cache.py +1085 -0
  298. sqlspec/core/compiler.cp314-win_amd64.pyd +0 -0
  299. sqlspec/core/compiler.py +1090 -0
  300. sqlspec/core/config_runtime.cp314-win_amd64.pyd +0 -0
  301. sqlspec/core/config_runtime.py +174 -0
  302. sqlspec/core/explain.cp314-win_amd64.pyd +0 -0
  303. sqlspec/core/explain.py +275 -0
  304. sqlspec/core/filters.cp314-win_amd64.pyd +0 -0
  305. sqlspec/core/filters.py +969 -0
  306. sqlspec/core/hashing.cp314-win_amd64.pyd +0 -0
  307. sqlspec/core/hashing.py +266 -0
  308. sqlspec/core/metrics.cp314-win_amd64.pyd +0 -0
  309. sqlspec/core/metrics.py +83 -0
  310. sqlspec/core/parameters/__init__.py +72 -0
  311. sqlspec/core/parameters/_alignment.cp314-win_amd64.pyd +0 -0
  312. sqlspec/core/parameters/_alignment.py +283 -0
  313. sqlspec/core/parameters/_converter.cp314-win_amd64.pyd +0 -0
  314. sqlspec/core/parameters/_converter.py +554 -0
  315. sqlspec/core/parameters/_processor.cp314-win_amd64.pyd +0 -0
  316. sqlspec/core/parameters/_processor.py +1182 -0
  317. sqlspec/core/parameters/_registry.cp314-win_amd64.pyd +0 -0
  318. sqlspec/core/parameters/_registry.py +206 -0
  319. sqlspec/core/parameters/_transformers.cp314-win_amd64.pyd +0 -0
  320. sqlspec/core/parameters/_transformers.py +324 -0
  321. sqlspec/core/parameters/_types.cp314-win_amd64.pyd +0 -0
  322. sqlspec/core/parameters/_types.py +536 -0
  323. sqlspec/core/parameters/_validator.cp314-win_amd64.pyd +0 -0
  324. sqlspec/core/parameters/_validator.py +171 -0
  325. sqlspec/core/pipeline.cp314-win_amd64.pyd +0 -0
  326. sqlspec/core/pipeline.py +333 -0
  327. sqlspec/core/query_modifiers.cp314-win_amd64.pyd +0 -0
  328. sqlspec/core/query_modifiers.py +508 -0
  329. sqlspec/core/result/__init__.py +25 -0
  330. sqlspec/core/result/_base.cp314-win_amd64.pyd +0 -0
  331. sqlspec/core/result/_base.py +1232 -0
  332. sqlspec/core/result/_io.cp314-win_amd64.pyd +0 -0
  333. sqlspec/core/result/_io.py +28 -0
  334. sqlspec/core/splitter.cp314-win_amd64.pyd +0 -0
  335. sqlspec/core/splitter.py +1021 -0
  336. sqlspec/core/sqlcommenter.cp314-win_amd64.pyd +0 -0
  337. sqlspec/core/sqlcommenter.py +249 -0
  338. sqlspec/core/stack.cp314-win_amd64.pyd +0 -0
  339. sqlspec/core/stack.py +163 -0
  340. sqlspec/core/statement.cp314-win_amd64.pyd +0 -0
  341. sqlspec/core/statement.py +1865 -0
  342. sqlspec/core/type_converter.cp314-win_amd64.pyd +0 -0
  343. sqlspec/core/type_converter.py +340 -0
  344. sqlspec/data_dictionary/__init__.py +22 -0
  345. sqlspec/data_dictionary/_loader.cp314-win_amd64.pyd +0 -0
  346. sqlspec/data_dictionary/_loader.py +138 -0
  347. sqlspec/data_dictionary/_registry.cp314-win_amd64.pyd +0 -0
  348. sqlspec/data_dictionary/_registry.py +74 -0
  349. sqlspec/data_dictionary/_types.cp314-win_amd64.pyd +0 -0
  350. sqlspec/data_dictionary/_types.py +121 -0
  351. sqlspec/data_dictionary/dialects/__init__.py +21 -0
  352. sqlspec/data_dictionary/dialects/bigquery.cp314-win_amd64.pyd +0 -0
  353. sqlspec/data_dictionary/dialects/bigquery.py +81 -0
  354. sqlspec/data_dictionary/dialects/cockroachdb.cp314-win_amd64.pyd +0 -0
  355. sqlspec/data_dictionary/dialects/cockroachdb.py +54 -0
  356. sqlspec/data_dictionary/dialects/duckdb.cp314-win_amd64.pyd +0 -0
  357. sqlspec/data_dictionary/dialects/duckdb.py +47 -0
  358. sqlspec/data_dictionary/dialects/mysql.cp314-win_amd64.pyd +0 -0
  359. sqlspec/data_dictionary/dialects/mysql.py +53 -0
  360. sqlspec/data_dictionary/dialects/oracle.cp314-win_amd64.pyd +0 -0
  361. sqlspec/data_dictionary/dialects/oracle.py +197 -0
  362. sqlspec/data_dictionary/dialects/postgres.cp314-win_amd64.pyd +0 -0
  363. sqlspec/data_dictionary/dialects/postgres.py +69 -0
  364. sqlspec/data_dictionary/dialects/spanner.cp314-win_amd64.pyd +0 -0
  365. sqlspec/data_dictionary/dialects/spanner.py +37 -0
  366. sqlspec/data_dictionary/dialects/sqlite.cp314-win_amd64.pyd +0 -0
  367. sqlspec/data_dictionary/dialects/sqlite.py +59 -0
  368. sqlspec/data_dictionary/sql/.gitkeep +0 -0
  369. sqlspec/data_dictionary/sql/bigquery/columns.sql +23 -0
  370. sqlspec/data_dictionary/sql/bigquery/foreign_keys.sql +34 -0
  371. sqlspec/data_dictionary/sql/bigquery/indexes.sql +19 -0
  372. sqlspec/data_dictionary/sql/bigquery/tables.sql +33 -0
  373. sqlspec/data_dictionary/sql/bigquery/version.sql +3 -0
  374. sqlspec/data_dictionary/sql/cockroachdb/columns.sql +34 -0
  375. sqlspec/data_dictionary/sql/cockroachdb/foreign_keys.sql +40 -0
  376. sqlspec/data_dictionary/sql/cockroachdb/indexes.sql +32 -0
  377. sqlspec/data_dictionary/sql/cockroachdb/tables.sql +44 -0
  378. sqlspec/data_dictionary/sql/cockroachdb/version.sql +3 -0
  379. sqlspec/data_dictionary/sql/duckdb/columns.sql +23 -0
  380. sqlspec/data_dictionary/sql/duckdb/foreign_keys.sql +36 -0
  381. sqlspec/data_dictionary/sql/duckdb/indexes.sql +19 -0
  382. sqlspec/data_dictionary/sql/duckdb/tables.sql +38 -0
  383. sqlspec/data_dictionary/sql/duckdb/version.sql +3 -0
  384. sqlspec/data_dictionary/sql/mysql/columns.sql +23 -0
  385. sqlspec/data_dictionary/sql/mysql/foreign_keys.sql +28 -0
  386. sqlspec/data_dictionary/sql/mysql/indexes.sql +26 -0
  387. sqlspec/data_dictionary/sql/mysql/tables.sql +33 -0
  388. sqlspec/data_dictionary/sql/mysql/version.sql +3 -0
  389. sqlspec/data_dictionary/sql/oracle/columns.sql +23 -0
  390. sqlspec/data_dictionary/sql/oracle/foreign_keys.sql +48 -0
  391. sqlspec/data_dictionary/sql/oracle/indexes.sql +44 -0
  392. sqlspec/data_dictionary/sql/oracle/tables.sql +25 -0
  393. sqlspec/data_dictionary/sql/oracle/version.sql +20 -0
  394. sqlspec/data_dictionary/sql/postgres/columns.sql +34 -0
  395. sqlspec/data_dictionary/sql/postgres/foreign_keys.sql +40 -0
  396. sqlspec/data_dictionary/sql/postgres/indexes.sql +56 -0
  397. sqlspec/data_dictionary/sql/postgres/tables.sql +44 -0
  398. sqlspec/data_dictionary/sql/postgres/version.sql +3 -0
  399. sqlspec/data_dictionary/sql/spanner/columns.sql +23 -0
  400. sqlspec/data_dictionary/sql/spanner/foreign_keys.sql +70 -0
  401. sqlspec/data_dictionary/sql/spanner/indexes.sql +30 -0
  402. sqlspec/data_dictionary/sql/spanner/tables.sql +9 -0
  403. sqlspec/data_dictionary/sql/spanner/version.sql +3 -0
  404. sqlspec/data_dictionary/sql/sqlite/columns.sql +23 -0
  405. sqlspec/data_dictionary/sql/sqlite/foreign_keys.sql +22 -0
  406. sqlspec/data_dictionary/sql/sqlite/indexes.sql +7 -0
  407. sqlspec/data_dictionary/sql/sqlite/tables.sql +28 -0
  408. sqlspec/data_dictionary/sql/sqlite/version.sql +3 -0
  409. sqlspec/dialects/__init__.py +22 -0
  410. sqlspec/dialects/_compat.cp314-win_amd64.pyd +0 -0
  411. sqlspec/dialects/_compat.py +14 -0
  412. sqlspec/dialects/postgres/__init__.py +9 -0
  413. sqlspec/dialects/postgres/_generators.cp314-win_amd64.pyd +0 -0
  414. sqlspec/dialects/postgres/_generators.py +57 -0
  415. sqlspec/dialects/postgres/_operators.cp314-win_amd64.pyd +0 -0
  416. sqlspec/dialects/postgres/_operators.py +81 -0
  417. sqlspec/dialects/postgres/_paradedb.py +50 -0
  418. sqlspec/dialects/postgres/_pgvector.py +36 -0
  419. sqlspec/dialects/spanner/__init__.py +6 -0
  420. sqlspec/dialects/spanner/_generators.cp314-win_amd64.pyd +0 -0
  421. sqlspec/dialects/spanner/_generators.py +206 -0
  422. sqlspec/dialects/spanner/_spangres.py +77 -0
  423. sqlspec/dialects/spanner/_spanner.py +179 -0
  424. sqlspec/driver/__init__.py +49 -0
  425. sqlspec/driver/_async.cp314-win_amd64.pyd +0 -0
  426. sqlspec/driver/_async.py +1830 -0
  427. sqlspec/driver/_common.cp314-win_amd64.pyd +0 -0
  428. sqlspec/driver/_common.py +2292 -0
  429. sqlspec/driver/_exception_handler.cp314-win_amd64.pyd +0 -0
  430. sqlspec/driver/_exception_handler.py +108 -0
  431. sqlspec/driver/_query_cache.cp314-win_amd64.pyd +0 -0
  432. sqlspec/driver/_query_cache.py +96 -0
  433. sqlspec/driver/_sql_helpers.cp314-win_amd64.pyd +0 -0
  434. sqlspec/driver/_sql_helpers.py +139 -0
  435. sqlspec/driver/_storage_helpers.cp314-win_amd64.pyd +0 -0
  436. sqlspec/driver/_storage_helpers.py +153 -0
  437. sqlspec/driver/_sync.cp314-win_amd64.pyd +0 -0
  438. sqlspec/driver/_sync.py +1817 -0
  439. sqlspec/exceptions.cp314-win_amd64.pyd +0 -0
  440. sqlspec/exceptions.py +480 -0
  441. sqlspec/extensions/__init__.py +0 -0
  442. sqlspec/extensions/adk/__init__.py +84 -0
  443. sqlspec/extensions/adk/_config_utils.py +199 -0
  444. sqlspec/extensions/adk/_types.cp314-win_amd64.pyd +0 -0
  445. sqlspec/extensions/adk/_types.py +41 -0
  446. sqlspec/extensions/adk/artifact/__init__.py +57 -0
  447. sqlspec/extensions/adk/artifact/_types.cp314-win_amd64.pyd +0 -0
  448. sqlspec/extensions/adk/artifact/_types.py +32 -0
  449. sqlspec/extensions/adk/artifact/service.py +508 -0
  450. sqlspec/extensions/adk/artifact/store.py +361 -0
  451. sqlspec/extensions/adk/converters.py +212 -0
  452. sqlspec/extensions/adk/memory/__init__.py +69 -0
  453. sqlspec/extensions/adk/memory/_types.cp314-win_amd64.pyd +0 -0
  454. sqlspec/extensions/adk/memory/_types.py +30 -0
  455. sqlspec/extensions/adk/memory/converters.py +225 -0
  456. sqlspec/extensions/adk/memory/service.py +316 -0
  457. sqlspec/extensions/adk/memory/store.py +525 -0
  458. sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +184 -0
  459. sqlspec/extensions/adk/migrations/__init__.py +0 -0
  460. sqlspec/extensions/adk/service.py +279 -0
  461. sqlspec/extensions/adk/store.py +590 -0
  462. sqlspec/extensions/events/__init__.py +51 -0
  463. sqlspec/extensions/events/_channel.py +703 -0
  464. sqlspec/extensions/events/_hints.cp314-win_amd64.pyd +0 -0
  465. sqlspec/extensions/events/_hints.py +45 -0
  466. sqlspec/extensions/events/_models.py +23 -0
  467. sqlspec/extensions/events/_payload.cp314-win_amd64.pyd +0 -0
  468. sqlspec/extensions/events/_payload.py +69 -0
  469. sqlspec/extensions/events/_protocols.py +134 -0
  470. sqlspec/extensions/events/_queue.py +462 -0
  471. sqlspec/extensions/events/_store.py +209 -0
  472. sqlspec/extensions/events/migrations/0001_create_event_queue.py +59 -0
  473. sqlspec/extensions/events/migrations/__init__.py +3 -0
  474. sqlspec/extensions/fastapi/__init__.py +22 -0
  475. sqlspec/extensions/fastapi/extension.py +391 -0
  476. sqlspec/extensions/fastapi/providers.cp314-win_amd64.pyd +0 -0
  477. sqlspec/extensions/fastapi/providers.py +712 -0
  478. sqlspec/extensions/flask/__init__.py +38 -0
  479. sqlspec/extensions/flask/_state.py +87 -0
  480. sqlspec/extensions/flask/_utils.py +71 -0
  481. sqlspec/extensions/flask/extension.py +539 -0
  482. sqlspec/extensions/litestar/__init__.py +31 -0
  483. sqlspec/extensions/litestar/_utils.py +52 -0
  484. sqlspec/extensions/litestar/channels.py +165 -0
  485. sqlspec/extensions/litestar/cli.py +102 -0
  486. sqlspec/extensions/litestar/config.py +90 -0
  487. sqlspec/extensions/litestar/handlers.py +316 -0
  488. sqlspec/extensions/litestar/migrations/0001_create_session_table.py +137 -0
  489. sqlspec/extensions/litestar/migrations/__init__.py +3 -0
  490. sqlspec/extensions/litestar/plugin.py +1066 -0
  491. sqlspec/extensions/litestar/providers.cp314-win_amd64.pyd +0 -0
  492. sqlspec/extensions/litestar/providers.py +784 -0
  493. sqlspec/extensions/litestar/store.py +298 -0
  494. sqlspec/extensions/otel/__init__.py +58 -0
  495. sqlspec/extensions/prometheus/__init__.py +113 -0
  496. sqlspec/extensions/sanic/__init__.py +19 -0
  497. sqlspec/extensions/sanic/_state.py +43 -0
  498. sqlspec/extensions/sanic/_utils.py +127 -0
  499. sqlspec/extensions/sanic/extension.py +647 -0
  500. sqlspec/extensions/starlette/__init__.py +22 -0
  501. sqlspec/extensions/starlette/_state.py +42 -0
  502. sqlspec/extensions/starlette/_utils.py +96 -0
  503. sqlspec/extensions/starlette/extension.py +374 -0
  504. sqlspec/extensions/starlette/middleware.py +281 -0
  505. sqlspec/loader.cp314-win_amd64.pyd +0 -0
  506. sqlspec/loader.py +727 -0
  507. sqlspec/migrations/__init__.py +39 -0
  508. sqlspec/migrations/base.cp314-win_amd64.pyd +0 -0
  509. sqlspec/migrations/base.py +862 -0
  510. sqlspec/migrations/commands.py +2151 -0
  511. sqlspec/migrations/context.cp314-win_amd64.pyd +0 -0
  512. sqlspec/migrations/context.py +157 -0
  513. sqlspec/migrations/fix.cp314-win_amd64.pyd +0 -0
  514. sqlspec/migrations/fix.py +204 -0
  515. sqlspec/migrations/loaders.cp314-win_amd64.pyd +0 -0
  516. sqlspec/migrations/loaders.py +443 -0
  517. sqlspec/migrations/runner.cp314-win_amd64.pyd +0 -0
  518. sqlspec/migrations/runner.py +1195 -0
  519. sqlspec/migrations/squash.cp314-win_amd64.pyd +0 -0
  520. sqlspec/migrations/squash.py +490 -0
  521. sqlspec/migrations/templates.cp314-win_amd64.pyd +0 -0
  522. sqlspec/migrations/templates.py +234 -0
  523. sqlspec/migrations/tracker.cp314-win_amd64.pyd +0 -0
  524. sqlspec/migrations/tracker.py +792 -0
  525. sqlspec/migrations/utils.cp314-win_amd64.pyd +0 -0
  526. sqlspec/migrations/utils.py +256 -0
  527. sqlspec/migrations/validation.cp314-win_amd64.pyd +0 -0
  528. sqlspec/migrations/validation.py +359 -0
  529. sqlspec/migrations/version.cp314-win_amd64.pyd +0 -0
  530. sqlspec/migrations/version.py +446 -0
  531. sqlspec/observability/__init__.py +57 -0
  532. sqlspec/observability/_common.cp314-win_amd64.pyd +0 -0
  533. sqlspec/observability/_common.py +77 -0
  534. sqlspec/observability/_config.cp314-win_amd64.pyd +0 -0
  535. sqlspec/observability/_config.py +364 -0
  536. sqlspec/observability/_diagnostics.cp314-win_amd64.pyd +0 -0
  537. sqlspec/observability/_diagnostics.py +74 -0
  538. sqlspec/observability/_dispatcher.cp314-win_amd64.pyd +0 -0
  539. sqlspec/observability/_dispatcher.py +200 -0
  540. sqlspec/observability/_formatters/__init__.py +13 -0
  541. sqlspec/observability/_formatters/_aws.cp314-win_amd64.pyd +0 -0
  542. sqlspec/observability/_formatters/_aws.py +102 -0
  543. sqlspec/observability/_formatters/_azure.cp314-win_amd64.pyd +0 -0
  544. sqlspec/observability/_formatters/_azure.py +96 -0
  545. sqlspec/observability/_formatters/_base.cp314-win_amd64.pyd +0 -0
  546. sqlspec/observability/_formatters/_base.py +57 -0
  547. sqlspec/observability/_formatters/_gcp.cp314-win_amd64.pyd +0 -0
  548. sqlspec/observability/_formatters/_gcp.py +131 -0
  549. sqlspec/observability/_formatting.py +58 -0
  550. sqlspec/observability/_observer.cp314-win_amd64.pyd +0 -0
  551. sqlspec/observability/_observer.py +361 -0
  552. sqlspec/observability/_runtime.cp314-win_amd64.pyd +0 -0
  553. sqlspec/observability/_runtime.py +461 -0
  554. sqlspec/observability/_sampling.cp314-win_amd64.pyd +0 -0
  555. sqlspec/observability/_sampling.py +188 -0
  556. sqlspec/observability/_spans.cp314-win_amd64.pyd +0 -0
  557. sqlspec/observability/_spans.py +161 -0
  558. sqlspec/protocols.py +955 -0
  559. sqlspec/py.typed +0 -0
  560. sqlspec/service.py +433 -0
  561. sqlspec/storage/__init__.py +48 -0
  562. sqlspec/storage/_arrow_payload.py +68 -0
  563. sqlspec/storage/_paths.cp314-win_amd64.pyd +0 -0
  564. sqlspec/storage/_paths.py +58 -0
  565. sqlspec/storage/_utils.py +46 -0
  566. sqlspec/storage/backends/__init__.py +1 -0
  567. sqlspec/storage/backends/base.cp314-win_amd64.pyd +0 -0
  568. sqlspec/storage/backends/base.py +374 -0
  569. sqlspec/storage/backends/fsspec.py +574 -0
  570. sqlspec/storage/backends/local.py +468 -0
  571. sqlspec/storage/backends/obstore.py +956 -0
  572. sqlspec/storage/errors.cp314-win_amd64.pyd +0 -0
  573. sqlspec/storage/errors.py +102 -0
  574. sqlspec/storage/pipeline.cp314-win_amd64.pyd +0 -0
  575. sqlspec/storage/pipeline.py +628 -0
  576. sqlspec/storage/registry.cp314-win_amd64.pyd +0 -0
  577. sqlspec/storage/registry.py +329 -0
  578. sqlspec/typing.py +405 -0
  579. sqlspec/utils/__init__.py +7 -0
  580. sqlspec/utils/arrow_helpers.py +384 -0
  581. sqlspec/utils/config_tools.cp314-win_amd64.pyd +0 -0
  582. sqlspec/utils/config_tools.py +314 -0
  583. sqlspec/utils/correlation.cp314-win_amd64.pyd +0 -0
  584. sqlspec/utils/correlation.py +134 -0
  585. sqlspec/utils/deprecation.cp314-win_amd64.pyd +0 -0
  586. sqlspec/utils/deprecation.py +157 -0
  587. sqlspec/utils/dispatch.cp314-win_amd64.pyd +0 -0
  588. sqlspec/utils/dispatch.py +101 -0
  589. sqlspec/utils/fixtures.cp314-win_amd64.pyd +0 -0
  590. sqlspec/utils/fixtures.py +260 -0
  591. sqlspec/utils/logging.cp314-win_amd64.pyd +0 -0
  592. sqlspec/utils/logging.py +251 -0
  593. sqlspec/utils/module_loader.py +306 -0
  594. sqlspec/utils/portal.cp314-win_amd64.pyd +0 -0
  595. sqlspec/utils/portal.py +377 -0
  596. sqlspec/utils/schema.cp314-win_amd64.pyd +0 -0
  597. sqlspec/utils/schema.py +1040 -0
  598. sqlspec/utils/serializers/__init__.py +30 -0
  599. sqlspec/utils/serializers/_json.cp314-win_amd64.pyd +0 -0
  600. sqlspec/utils/serializers/_json.py +415 -0
  601. sqlspec/utils/serializers/_numpy.cp314-win_amd64.pyd +0 -0
  602. sqlspec/utils/serializers/_numpy.py +65 -0
  603. sqlspec/utils/serializers/_schema.cp314-win_amd64.pyd +0 -0
  604. sqlspec/utils/serializers/_schema.py +285 -0
  605. sqlspec/utils/singleton.cp314-win_amd64.pyd +0 -0
  606. sqlspec/utils/singleton.py +41 -0
  607. sqlspec/utils/sync_tools.cp314-win_amd64.pyd +0 -0
  608. sqlspec/utils/sync_tools.py +316 -0
  609. sqlspec/utils/text.cp314-win_amd64.pyd +0 -0
  610. sqlspec/utils/text.py +109 -0
  611. sqlspec/utils/type_converters.cp314-win_amd64.pyd +0 -0
  612. sqlspec/utils/type_converters.py +216 -0
  613. sqlspec/utils/type_guards.cp314-win_amd64.pyd +0 -0
  614. sqlspec/utils/type_guards.py +1508 -0
  615. sqlspec/utils/uuids.cp314-win_amd64.pyd +0 -0
  616. sqlspec/utils/uuids.py +241 -0
  617. sqlspec-0.47.0.dist-info/METADATA +202 -0
  618. sqlspec-0.47.0.dist-info/RECORD +621 -0
  619. sqlspec-0.47.0.dist-info/WHEEL +4 -0
  620. sqlspec-0.47.0.dist-info/entry_points.txt +6 -0
  621. sqlspec-0.47.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,590 @@
1
+ """Base store classes for ADK session backend (sync and async)."""
2
+
3
+ import logging
4
+ import re
5
+ from abc import ABC, abstractmethod
6
+ from typing import TYPE_CHECKING, Any, Final, Generic, TypeVar
7
+
8
+ from sqlspec.extensions.adk._config_utils import _get_adk_session_store_config
9
+ from sqlspec.observability import resolve_db_system
10
+ from sqlspec.utils.logging import get_logger, log_with_context
11
+
12
+ if TYPE_CHECKING:
13
+ from datetime import datetime
14
+
15
+ from sqlspec.config import DatabaseConfigProtocol
16
+ from sqlspec.extensions.adk._types import EventRecord, SessionRecord
17
+
18
+ ConfigT = TypeVar("ConfigT", bound="DatabaseConfigProtocol[Any, Any, Any]")
19
+
20
+ logger = get_logger("sqlspec.extensions.adk.store")
21
+
22
+ __all__ = ("BaseAsyncADKStore", "BaseSyncADKStore")
23
+
24
+ VALID_TABLE_NAME_PATTERN: Final = re.compile(r"^[a-zA-Z_][a-zA-Z0-9_]*$")
25
+ COLUMN_NAME_PATTERN: Final = re.compile(r"^(\w+)")
26
+ MAX_TABLE_NAME_LENGTH: Final = 63
27
+
28
+
29
+ def _parse_owner_id_column(owner_id_column_ddl: str) -> str:
30
+ """Extract column name from owner ID column DDL definition.
31
+
32
+ Args:
33
+ owner_id_column_ddl: Full column DDL string (e.g., "user_id INTEGER REFERENCES users(id)").
34
+
35
+ Returns:
36
+ Column name only (first word).
37
+
38
+ Raises:
39
+ ValueError: If DDL format is invalid.
40
+
41
+ Examples:
42
+ "account_id INTEGER NOT NULL" -> "account_id"
43
+ "user_id UUID REFERENCES users(id)" -> "user_id"
44
+ "tenant VARCHAR(64) DEFAULT 'public'" -> "tenant"
45
+
46
+ Notes:
47
+ Only the column name is parsed. The rest of the DDL is passed through
48
+ verbatim to CREATE TABLE statements.
49
+ """
50
+ match = COLUMN_NAME_PATTERN.match(owner_id_column_ddl.strip())
51
+ if not match:
52
+ msg = f"Invalid owner_id_column DDL: {owner_id_column_ddl!r}. Must start with column name."
53
+ raise ValueError(msg)
54
+
55
+ return match.group(1)
56
+
57
+
58
+ def _validate_table_name(table_name: str) -> None:
59
+ """Validate table name for SQL safety.
60
+
61
+ Args:
62
+ table_name: Table name to validate.
63
+
64
+ Raises:
65
+ ValueError: If table name is invalid.
66
+
67
+ Notes:
68
+ - Must start with letter or underscore
69
+ - Can only contain letters, numbers, and underscores
70
+ - Maximum length is 63 characters (PostgreSQL limit)
71
+ - Prevents SQL injection in table names
72
+ """
73
+ if not table_name:
74
+ msg = "Table name cannot be empty"
75
+ raise ValueError(msg)
76
+
77
+ if len(table_name) > MAX_TABLE_NAME_LENGTH:
78
+ msg = f"Table name too long: {len(table_name)} chars (max {MAX_TABLE_NAME_LENGTH})"
79
+ raise ValueError(msg)
80
+
81
+ if not VALID_TABLE_NAME_PATTERN.match(table_name):
82
+ msg = (
83
+ f"Invalid table name: {table_name!r}. "
84
+ "Must start with letter/underscore and contain only alphanumeric characters and underscores"
85
+ )
86
+ raise ValueError(msg)
87
+
88
+
89
+ class BaseAsyncADKStore(ABC, Generic[ConfigT]):
90
+ """Base class for async SQLSpec-backed ADK session stores.
91
+
92
+ Implements storage operations for Google ADK sessions and events using
93
+ SQLSpec database adapters with async/await.
94
+
95
+ This abstract base class provides common functionality for all database-specific
96
+ store implementations including:
97
+ - Connection management via SQLSpec configs
98
+ - Table name validation
99
+ - Session and event CRUD operations
100
+
101
+ Subclasses must implement dialect-specific SQL queries and will be created
102
+ in each adapter directory (e.g., sqlspec/adapters/asyncpg/adk/store.py).
103
+
104
+ Args:
105
+ config: SQLSpec database configuration with extension_config["adk"] settings.
106
+
107
+ Notes:
108
+ Configuration is read from config.extension_config["adk"]:
109
+ - session_table: Sessions table name (default: "adk_sessions")
110
+ - events_table: Events table name (default: "adk_events")
111
+ - owner_id_column: Optional owner FK column DDL (default: None)
112
+ """
113
+
114
+ __slots__ = ("_config", "_events_table", "_owner_id_column_ddl", "_owner_id_column_name", "_session_table")
115
+
116
+ def __init__(self, config: ConfigT) -> None:
117
+ """Initialize the ADK store.
118
+
119
+ Args:
120
+ config: SQLSpec database configuration.
121
+
122
+ Notes:
123
+ Reads configuration from config.extension_config["adk"]:
124
+ - session_table: Sessions table name (default: "adk_sessions")
125
+ - events_table: Events table name (default: "adk_events")
126
+ - owner_id_column: Optional owner FK column DDL (default: None)
127
+ """
128
+ self._config = config
129
+ store_config = self._get_store_config_from_extension()
130
+ self._session_table: str = str(store_config["session_table"])
131
+ self._events_table: str = str(store_config["events_table"])
132
+ self._owner_id_column_ddl: str | None = store_config.get("owner_id_column")
133
+ self._owner_id_column_name: str | None = (
134
+ _parse_owner_id_column(self._owner_id_column_ddl) if self._owner_id_column_ddl else None
135
+ )
136
+ _validate_table_name(self._session_table)
137
+ _validate_table_name(self._events_table)
138
+
139
+ def _get_store_config_from_extension(self) -> "dict[str, Any]":
140
+ """Extract ADK store configuration from config.extension_config.
141
+
142
+ Returns:
143
+ Dict with session_table, events_table, and optionally owner_id_column.
144
+ """
145
+ return dict(_get_adk_session_store_config(self._config))
146
+
147
+ @property
148
+ def config(self) -> ConfigT:
149
+ """Return the database configuration."""
150
+ return self._config
151
+
152
+ @property
153
+ def session_table(self) -> str:
154
+ """Return the sessions table name."""
155
+ return self._session_table
156
+
157
+ @property
158
+ def events_table(self) -> str:
159
+ """Return the events table name."""
160
+ return self._events_table
161
+
162
+ @property
163
+ def owner_id_column_ddl(self) -> "str | None":
164
+ """Return the full owner ID column DDL (or None if not configured)."""
165
+ return self._owner_id_column_ddl
166
+
167
+ @property
168
+ def owner_id_column_name(self) -> "str | None":
169
+ """Return the owner ID column name only (or None if not configured)."""
170
+ return self._owner_id_column_name
171
+
172
+ @abstractmethod
173
+ async def create_session(
174
+ self, session_id: str, app_name: str, user_id: str, state: "dict[str, Any]", owner_id: "Any | None" = None
175
+ ) -> "SessionRecord":
176
+ """Create a new session.
177
+
178
+ Args:
179
+ session_id: Unique identifier for the session.
180
+ app_name: Name of the application.
181
+ user_id: ID of the user.
182
+ state: Session state dictionary.
183
+ owner_id: Optional owner ID value for owner_id_column (if configured).
184
+
185
+ Returns:
186
+ The created session record.
187
+ """
188
+ raise NotImplementedError
189
+
190
+ @abstractmethod
191
+ async def get_session(self, session_id: str) -> "SessionRecord | None":
192
+ """Get a session by ID.
193
+
194
+ Args:
195
+ session_id: Session identifier.
196
+
197
+ Returns:
198
+ Session record if found, None otherwise.
199
+ """
200
+ raise NotImplementedError
201
+
202
+ @abstractmethod
203
+ async def update_session_state(self, session_id: str, state: "dict[str, Any]") -> None:
204
+ """Update session state.
205
+
206
+ Args:
207
+ session_id: Session identifier.
208
+ state: New state dictionary.
209
+ """
210
+ raise NotImplementedError
211
+
212
+ @abstractmethod
213
+ async def list_sessions(self, app_name: str, user_id: "str | None" = None) -> "list[SessionRecord]":
214
+ """List all sessions for an app, optionally filtered by user.
215
+
216
+ Args:
217
+ app_name: Name of the application.
218
+ user_id: ID of the user. If None, returns all sessions for the app.
219
+
220
+ Returns:
221
+ List of session records.
222
+ """
223
+ raise NotImplementedError
224
+
225
+ @abstractmethod
226
+ async def delete_session(self, session_id: str) -> None:
227
+ """Delete a session and its events.
228
+
229
+ Args:
230
+ session_id: Session identifier.
231
+ """
232
+ raise NotImplementedError
233
+
234
+ @abstractmethod
235
+ async def append_event(self, event_record: "EventRecord") -> None:
236
+ """Append an event to a session.
237
+
238
+ Args:
239
+ event_record: Event record to store.
240
+ """
241
+ raise NotImplementedError
242
+
243
+ @abstractmethod
244
+ async def append_event_and_update_state(
245
+ self, event_record: "EventRecord", session_id: str, state: "dict[str, Any]"
246
+ ) -> "SessionRecord":
247
+ """Atomically append an event and update the session's durable state.
248
+
249
+ This is the authoritative durable write boundary for post-creation
250
+ session mutations. The event insert and state update must succeed
251
+ together or fail together, and the updated session record is returned
252
+ in the same round-trip so callers don't need a follow-up read.
253
+
254
+ Args:
255
+ event_record: Event record to store.
256
+ session_id: Session identifier whose state should be updated.
257
+ state: Post-append durable state snapshot (``temp:`` keys already
258
+ stripped by the service layer).
259
+
260
+ Returns:
261
+ The updated SessionRecord reflecting the new state and update_time.
262
+
263
+ Raises:
264
+ ValueError: If the session row no longer exists at update time
265
+ (raced with delete_session).
266
+ """
267
+ raise NotImplementedError
268
+
269
+ @abstractmethod
270
+ async def get_events(
271
+ self, session_id: str, after_timestamp: "datetime | None" = None, limit: "int | None" = None
272
+ ) -> "list[EventRecord]":
273
+ """Get events for a session.
274
+
275
+ Args:
276
+ session_id: Session identifier.
277
+ after_timestamp: Only return events after this time.
278
+ limit: Maximum number of events to return.
279
+
280
+ Returns:
281
+ List of event records ordered by timestamp ascending.
282
+ """
283
+ raise NotImplementedError
284
+
285
+ @abstractmethod
286
+ async def create_tables(self) -> None:
287
+ """Create the sessions and events tables if they don't exist."""
288
+ raise NotImplementedError
289
+
290
+ async def ensure_tables(self) -> None:
291
+ """Create tables and emit a standardized log entry."""
292
+
293
+ await self.create_tables()
294
+ self._log_tables_created()
295
+
296
+ @abstractmethod
297
+ async def _get_create_sessions_table_sql(self) -> str:
298
+ """Get the CREATE TABLE SQL for the sessions table.
299
+
300
+ Returns:
301
+ SQL statement to create the sessions table.
302
+ """
303
+ raise NotImplementedError
304
+
305
+ @abstractmethod
306
+ async def _get_create_events_table_sql(self) -> str:
307
+ """Get the CREATE TABLE SQL for the events table.
308
+
309
+ Returns:
310
+ SQL statement to create the events table.
311
+ """
312
+ raise NotImplementedError
313
+
314
+ @abstractmethod
315
+ def _get_drop_tables_sql(self) -> "list[str]":
316
+ """Get the DROP TABLE SQL statements for this database dialect.
317
+
318
+ Returns:
319
+ List of SQL statements to drop the tables and all indexes.
320
+ Order matters: drop events table before sessions table due to FK.
321
+
322
+ Notes:
323
+ Should use IF EXISTS or dialect-specific error handling
324
+ to allow idempotent migrations.
325
+ """
326
+ raise NotImplementedError
327
+
328
+ def _log_tables_created(self) -> None:
329
+ log_with_context(
330
+ logger,
331
+ logging.DEBUG,
332
+ "adk.tables.ready",
333
+ db_system=resolve_db_system(type(self).__name__),
334
+ session_table=self._session_table,
335
+ events_table=self._events_table,
336
+ )
337
+
338
+
339
+ class BaseSyncADKStore(ABC, Generic[ConfigT]):
340
+ """Base class for sync SQLSpec-backed ADK session stores.
341
+
342
+ Implements storage operations for Google ADK sessions and events using
343
+ SQLSpec database adapters with synchronous execution.
344
+
345
+ This abstract base class provides common functionality for sync database-specific
346
+ store implementations including:
347
+ - Connection management via SQLSpec configs
348
+ - Table name validation
349
+ - Session and event CRUD operations
350
+
351
+ Subclasses must implement dialect-specific SQL queries and will be created
352
+ in each adapter directory (e.g., sqlspec/adapters/sqlite/adk/store.py).
353
+
354
+ Args:
355
+ config: SQLSpec database configuration with extension_config["adk"] settings.
356
+
357
+ Notes:
358
+ Configuration is read from config.extension_config["adk"]:
359
+ - session_table: Sessions table name (default: "adk_sessions")
360
+ - events_table: Events table name (default: "adk_events")
361
+ - owner_id_column: Optional owner FK column DDL (default: None)
362
+ """
363
+
364
+ __slots__ = ("_config", "_events_table", "_owner_id_column_ddl", "_owner_id_column_name", "_session_table")
365
+
366
+ def __init__(self, config: ConfigT) -> None:
367
+ """Initialize the sync ADK store.
368
+
369
+ Args:
370
+ config: SQLSpec database configuration.
371
+
372
+ Notes:
373
+ Reads configuration from config.extension_config["adk"]:
374
+ - session_table: Sessions table name (default: "adk_sessions")
375
+ - events_table: Events table name (default: "adk_events")
376
+ - owner_id_column: Optional owner FK column DDL (default: None)
377
+ """
378
+ self._config = config
379
+ store_config = self._get_store_config_from_extension()
380
+ self._session_table: str = str(store_config["session_table"])
381
+ self._events_table: str = str(store_config["events_table"])
382
+ self._owner_id_column_ddl: str | None = store_config.get("owner_id_column")
383
+ self._owner_id_column_name: str | None = (
384
+ _parse_owner_id_column(self._owner_id_column_ddl) if self._owner_id_column_ddl else None
385
+ )
386
+ _validate_table_name(self._session_table)
387
+ _validate_table_name(self._events_table)
388
+
389
+ def _get_store_config_from_extension(self) -> "dict[str, Any]":
390
+ """Extract ADK store configuration from config.extension_config.
391
+
392
+ Returns:
393
+ Dict with session_table, events_table, and optionally owner_id_column.
394
+ """
395
+ return dict(_get_adk_session_store_config(self._config))
396
+
397
+ @property
398
+ def config(self) -> ConfigT:
399
+ """Return the database configuration."""
400
+ return self._config
401
+
402
+ @property
403
+ def session_table(self) -> str:
404
+ """Return the sessions table name."""
405
+ return self._session_table
406
+
407
+ @property
408
+ def events_table(self) -> str:
409
+ """Return the events table name."""
410
+ return self._events_table
411
+
412
+ @property
413
+ def owner_id_column_ddl(self) -> "str | None":
414
+ """Return the full owner ID column DDL (or None if not configured)."""
415
+ return self._owner_id_column_ddl
416
+
417
+ @property
418
+ def owner_id_column_name(self) -> "str | None":
419
+ """Return the owner ID column name only (or None if not configured)."""
420
+ return self._owner_id_column_name
421
+
422
+ @abstractmethod
423
+ def create_session(
424
+ self, session_id: str, app_name: str, user_id: str, state: "dict[str, Any]", owner_id: "Any | None" = None
425
+ ) -> "SessionRecord":
426
+ """Create a new session.
427
+
428
+ Args:
429
+ session_id: Unique identifier for the session.
430
+ app_name: Name of the application.
431
+ user_id: ID of the user.
432
+ state: Session state dictionary.
433
+ owner_id: Optional owner ID value for owner_id_column (if configured).
434
+
435
+ Returns:
436
+ The created session record.
437
+ """
438
+ raise NotImplementedError
439
+
440
+ @abstractmethod
441
+ def get_session(self, session_id: str) -> "SessionRecord | None":
442
+ """Get a session by ID.
443
+
444
+ Args:
445
+ session_id: Session identifier.
446
+
447
+ Returns:
448
+ Session record if found, None otherwise.
449
+ """
450
+ raise NotImplementedError
451
+
452
+ @abstractmethod
453
+ def update_session_state(self, session_id: str, state: "dict[str, Any]") -> None:
454
+ """Update session state.
455
+
456
+ Args:
457
+ session_id: Session identifier.
458
+ state: New state dictionary.
459
+ """
460
+ raise NotImplementedError
461
+
462
+ @abstractmethod
463
+ def list_sessions(self, app_name: str, user_id: "str | None" = None) -> "list[SessionRecord]":
464
+ """List all sessions for an app, optionally filtered by user.
465
+
466
+ Args:
467
+ app_name: Name of the application.
468
+ user_id: ID of the user. If None, returns all sessions for the app.
469
+
470
+ Returns:
471
+ List of session records.
472
+ """
473
+ raise NotImplementedError
474
+
475
+ @abstractmethod
476
+ def delete_session(self, session_id: str) -> None:
477
+ """Delete a session and its events.
478
+
479
+ Args:
480
+ session_id: Session identifier.
481
+ """
482
+ raise NotImplementedError
483
+
484
+ @abstractmethod
485
+ def create_event(
486
+ self,
487
+ event_id: str,
488
+ session_id: str,
489
+ app_name: str,
490
+ user_id: str,
491
+ author: "str | None" = None,
492
+ actions: "bytes | None" = None,
493
+ content: "dict[str, Any] | None" = None,
494
+ **kwargs: Any,
495
+ ) -> "EventRecord":
496
+ """Create a new event.
497
+
498
+ Args:
499
+ event_id: Unique event identifier.
500
+ session_id: Session identifier.
501
+ app_name: Application name.
502
+ user_id: User identifier.
503
+ author: Event author (user/assistant/system).
504
+ actions: Pickled actions object.
505
+ content: Event content (JSONB/JSON).
506
+ **kwargs: Additional optional fields.
507
+
508
+ Returns:
509
+ Created event record.
510
+ """
511
+ raise NotImplementedError
512
+
513
+ @abstractmethod
514
+ def create_event_and_update_state(
515
+ self, event_record: "EventRecord", session_id: str, state: "dict[str, Any]"
516
+ ) -> None:
517
+ """Atomically create an event and update the session's durable state.
518
+
519
+ This is the authoritative durable write boundary for post-creation
520
+ session mutations. The event insert and state update must succeed
521
+ together or fail together.
522
+
523
+ Args:
524
+ event_record: Event record to store.
525
+ session_id: Session identifier whose state should be updated.
526
+ state: Post-append durable state snapshot (``temp:`` keys already
527
+ stripped by the service layer).
528
+ """
529
+ raise NotImplementedError
530
+
531
+ @abstractmethod
532
+ def list_events(self, session_id: str) -> "list[EventRecord]":
533
+ """List events for a session ordered by timestamp.
534
+
535
+ Args:
536
+ session_id: Session identifier.
537
+
538
+ Returns:
539
+ List of event records ordered by timestamp ASC.
540
+ """
541
+ raise NotImplementedError
542
+
543
+ @abstractmethod
544
+ def create_tables(self) -> None:
545
+ """Create both sessions and events tables if they don't exist."""
546
+ raise NotImplementedError
547
+
548
+ def ensure_tables(self) -> None:
549
+ """Create tables and emit a standardized log entry."""
550
+
551
+ self.create_tables()
552
+ self._log_tables_created()
553
+
554
+ @abstractmethod
555
+ def _get_create_sessions_table_sql(self) -> str:
556
+ """Get SQL to create sessions table.
557
+
558
+ Returns:
559
+ SQL statement to create adk_sessions table with indexes.
560
+ """
561
+ raise NotImplementedError
562
+
563
+ @abstractmethod
564
+ def _get_create_events_table_sql(self) -> str:
565
+ """Get SQL to create events table.
566
+
567
+ Returns:
568
+ SQL statement to create adk_events table with indexes.
569
+ """
570
+ raise NotImplementedError
571
+
572
+ def _log_tables_created(self) -> None:
573
+ log_with_context(
574
+ logger,
575
+ logging.DEBUG,
576
+ "adk.tables.ready",
577
+ db_system=resolve_db_system(type(self).__name__),
578
+ session_table=self._session_table,
579
+ events_table=self._events_table,
580
+ )
581
+
582
+ @abstractmethod
583
+ def _get_drop_tables_sql(self) -> "list[str]":
584
+ """Get SQL to drop tables.
585
+
586
+ Returns:
587
+ List of SQL statements to drop tables and indexes.
588
+ Order matters: drop events before sessions due to FK.
589
+ """
590
+ raise NotImplementedError
@@ -0,0 +1,51 @@
1
+ """Event channel package exports."""
2
+
3
+ from sqlspec.extensions.events._channel import (
4
+ AsyncEventChannel,
5
+ AsyncEventListener,
6
+ SyncEventChannel,
7
+ SyncEventListener,
8
+ load_native_backend,
9
+ resolve_poll_interval,
10
+ )
11
+ from sqlspec.extensions.events._hints import EventRuntimeHints, get_runtime_hints, resolve_adapter_name
12
+ from sqlspec.extensions.events._models import EventMessage
13
+ from sqlspec.extensions.events._payload import decode_notify_payload, encode_notify_payload, parse_event_timestamp
14
+ from sqlspec.extensions.events._protocols import (
15
+ AsyncEventBackendProtocol,
16
+ AsyncEventHandler,
17
+ SyncEventBackendProtocol,
18
+ SyncEventHandler,
19
+ )
20
+ from sqlspec.extensions.events._queue import AsyncTableEventQueue, SyncTableEventQueue, build_queue_backend
21
+ from sqlspec.extensions.events._store import (
22
+ BaseEventQueueStore,
23
+ normalize_event_channel_name,
24
+ normalize_queue_table_name,
25
+ )
26
+
27
+ __all__ = (
28
+ "AsyncEventBackendProtocol",
29
+ "AsyncEventChannel",
30
+ "AsyncEventHandler",
31
+ "AsyncEventListener",
32
+ "AsyncTableEventQueue",
33
+ "BaseEventQueueStore",
34
+ "EventMessage",
35
+ "EventRuntimeHints",
36
+ "SyncEventBackendProtocol",
37
+ "SyncEventChannel",
38
+ "SyncEventHandler",
39
+ "SyncEventListener",
40
+ "SyncTableEventQueue",
41
+ "build_queue_backend",
42
+ "decode_notify_payload",
43
+ "encode_notify_payload",
44
+ "get_runtime_hints",
45
+ "load_native_backend",
46
+ "normalize_event_channel_name",
47
+ "normalize_queue_table_name",
48
+ "parse_event_timestamp",
49
+ "resolve_adapter_name",
50
+ "resolve_poll_interval",
51
+ )