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,420 @@
1
+ """Oracle event queue stores with auto-detected JSON storage.
2
+
3
+ JSON storage is automatically detected based on Oracle version:
4
+ - json: Native JSON type (Oracle 21c+ with COMPATIBLE >= 20)
5
+ - blob_json: BLOB with IS JSON constraint (Oracle 12c+, recommended)
6
+ - blob: Plain BLOB without constraint (Oracle 11g and earlier)
7
+
8
+ Note: CLOB should be avoided for JSON storage in Oracle. Oracle recommends
9
+ BLOB over CLOB for JSON data as BLOB performs significantly better.
10
+
11
+ Configuration (optional override):
12
+ extension_config={
13
+ "events": {
14
+ "json_storage": "blob_json", # Override auto-detection
15
+ "in_memory": False # Enable INMEMORY PRIORITY HIGH
16
+ }
17
+ }
18
+ """
19
+
20
+ import logging
21
+ from enum import Enum
22
+ from typing import TYPE_CHECKING, Any
23
+
24
+ from sqlspec.adapters.oracledb.data_dictionary import (
25
+ OracledbAsyncDataDictionary,
26
+ OracledbSyncDataDictionary,
27
+ OracleVersionInfo,
28
+ )
29
+ from sqlspec.extensions.events import BaseEventQueueStore
30
+ from sqlspec.utils.logging import get_logger, log_with_context
31
+
32
+ if TYPE_CHECKING:
33
+ from sqlspec.adapters.oracledb.config import OracleAsyncConfig, OracleSyncConfig
34
+
35
+ __all__ = ("OracleAsyncEventQueueStore", "OracleSyncEventQueueStore")
36
+
37
+ logger = get_logger("sqlspec.adapters.oracledb.events.store")
38
+
39
+
40
+ class JSONStorageType(Enum):
41
+ """Oracle JSON storage types based on database version."""
42
+
43
+ JSON_NATIVE = "json"
44
+ BLOB_JSON = "blob_json"
45
+ BLOB_PLAIN = "blob"
46
+
47
+
48
+ def _storage_type_from_version(version_info: "OracleVersionInfo | None") -> JSONStorageType:
49
+ """Determine JSON storage type based on Oracle version metadata."""
50
+ if version_info and version_info.supports_native_json():
51
+ log_with_context(
52
+ logger,
53
+ logging.DEBUG,
54
+ "events.queue.storage.detected",
55
+ storage_type=JSONStorageType.JSON_NATIVE.value,
56
+ version=str(version_info),
57
+ )
58
+ return JSONStorageType.JSON_NATIVE
59
+
60
+ if version_info and version_info.supports_json_blob():
61
+ log_with_context(
62
+ logger,
63
+ logging.DEBUG,
64
+ "events.queue.storage.detected",
65
+ storage_type=JSONStorageType.BLOB_JSON.value,
66
+ version=str(version_info),
67
+ )
68
+ return JSONStorageType.BLOB_JSON
69
+
70
+ log_with_context(
71
+ logger,
72
+ logging.DEBUG,
73
+ "events.queue.storage.detected",
74
+ storage_type=JSONStorageType.BLOB_PLAIN.value,
75
+ version=str(version_info),
76
+ )
77
+ return JSONStorageType.BLOB_PLAIN
78
+
79
+
80
+ def _init_oracle_settings(extension_settings: "dict[str, Any]") -> "tuple[bool, JSONStorageType | None]":
81
+ """Initialize Oracle-specific settings from extension config.
82
+
83
+ Args:
84
+ extension_settings: The events extension settings dict.
85
+
86
+ Returns:
87
+ Tuple of (in_memory, json_storage) settings.
88
+ """
89
+ in_memory = bool(extension_settings.get("in_memory", False))
90
+
91
+ json_storage_override = extension_settings.get("json_storage")
92
+ if json_storage_override == "json":
93
+ json_storage: JSONStorageType | None = JSONStorageType.JSON_NATIVE
94
+ elif json_storage_override == "blob_json":
95
+ json_storage = JSONStorageType.BLOB_JSON
96
+ elif json_storage_override == "blob":
97
+ json_storage = JSONStorageType.BLOB_PLAIN
98
+ else:
99
+ json_storage = None
100
+
101
+ return in_memory, json_storage
102
+
103
+
104
+ def _build_oracle_create_table_sql(
105
+ table_name: str, storage_type: "JSONStorageType", in_memory: bool, index_name: str
106
+ ) -> str:
107
+ """Build Oracle CREATE TABLE and INDEX SQL as a single PL/SQL script.
108
+
109
+ Args:
110
+ table_name: The queue table name.
111
+ storage_type: JSON storage type (native, blob_json, or blob).
112
+ in_memory: Whether to add INMEMORY clause.
113
+ index_name: The index name to create.
114
+
115
+ Returns:
116
+ PL/SQL script for creating table and index.
117
+ """
118
+ inmemory_clause = "INMEMORY PRIORITY HIGH" if in_memory else ""
119
+
120
+ if storage_type == JSONStorageType.JSON_NATIVE:
121
+ payload_col = "payload_json JSON NOT NULL"
122
+ metadata_col = "metadata_json JSON"
123
+ elif storage_type == JSONStorageType.BLOB_JSON:
124
+ payload_col = "payload_json BLOB CHECK (payload_json IS JSON) NOT NULL"
125
+ metadata_col = "metadata_json BLOB CHECK (metadata_json IS JSON)"
126
+ else:
127
+ payload_col = "payload_json BLOB NOT NULL"
128
+ metadata_col = "metadata_json BLOB"
129
+
130
+ return f"""
131
+ BEGIN
132
+ EXECUTE IMMEDIATE 'CREATE TABLE {table_name} (
133
+ event_id VARCHAR2(64) PRIMARY KEY,
134
+ channel VARCHAR2(128) NOT NULL,
135
+ {payload_col},
136
+ {metadata_col},
137
+ status VARCHAR2(32) DEFAULT ''pending'' NOT NULL,
138
+ available_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,
139
+ lease_expires_at TIMESTAMP,
140
+ attempts NUMBER(10) DEFAULT 0 NOT NULL,
141
+ created_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,
142
+ acknowledged_at TIMESTAMP
143
+ ) {inmemory_clause}';
144
+ EXCEPTION
145
+ WHEN OTHERS THEN
146
+ IF SQLCODE != -955 THEN
147
+ RAISE;
148
+ END IF;
149
+ END;
150
+
151
+ BEGIN
152
+ EXECUTE IMMEDIATE 'CREATE INDEX {index_name}
153
+ ON {table_name}(channel, status, available_at)';
154
+ EXCEPTION
155
+ WHEN OTHERS THEN
156
+ IF SQLCODE != -955 THEN
157
+ RAISE;
158
+ END IF;
159
+ END;
160
+ """
161
+
162
+
163
+ def _build_oracle_drop_sql(table_name: str, index_name: str) -> "list[str]":
164
+ """Build Oracle DROP TABLE SQL with PL/SQL error handling.
165
+
166
+ Args:
167
+ table_name: The queue table name.
168
+ index_name: The index name to drop.
169
+
170
+ Returns:
171
+ List of PL/SQL scripts for dropping index and table.
172
+ """
173
+ return [
174
+ f"""
175
+ BEGIN
176
+ EXECUTE IMMEDIATE 'DROP INDEX {index_name}';
177
+ EXCEPTION
178
+ WHEN OTHERS THEN
179
+ IF SQLCODE != -1418 THEN
180
+ RAISE;
181
+ END IF;
182
+ END;
183
+ """,
184
+ f"""
185
+ BEGIN
186
+ EXECUTE IMMEDIATE 'DROP TABLE {table_name}';
187
+ EXCEPTION
188
+ WHEN OTHERS THEN
189
+ IF SQLCODE != -942 THEN
190
+ RAISE;
191
+ END IF;
192
+ END;
193
+ """,
194
+ ]
195
+
196
+
197
+ class OracleSyncEventQueueStore(BaseEventQueueStore["OracleSyncConfig"]):
198
+ """Oracle sync event queue store with auto-detected JSON storage.
199
+
200
+ Automatically detects the Oracle version and uses the optimal JSON storage:
201
+ - Oracle 21c+: Native JSON type
202
+ - Oracle 12c-19c: BLOB with IS JSON constraint
203
+ - Oracle 11g: Plain BLOB
204
+
205
+ Args:
206
+ config: OracleSyncConfig with extension_config["events"] settings.
207
+
208
+ Notes:
209
+ Configuration is read from config.extension_config["events"]:
210
+ - queue_table: Table name (default: "sqlspec_event_queue")
211
+ - json_storage: Override auto-detection ("json", "blob_json", "blob")
212
+ - in_memory: Enable INMEMORY PRIORITY HIGH clause (default: False)
213
+
214
+ Example:
215
+ from sqlspec.adapters.oracledb import OracleSyncConfig
216
+ from sqlspec.adapters.oracledb.events import OracleSyncEventQueueStore
217
+
218
+ config = OracleSyncConfig(connection_config={"dsn": "oracle://..."})
219
+ store = OracleSyncEventQueueStore(config)
220
+ store.create_table() # Auto-detects version and creates table
221
+ """
222
+
223
+ __slots__ = ("_in_memory", "_json_storage", "_oracle_version_info")
224
+
225
+ def __init__(self, config: "OracleSyncConfig") -> None:
226
+ """Initialize Oracle sync event queue store."""
227
+ super().__init__(config)
228
+ self._in_memory, self._json_storage = _init_oracle_settings(self._extension_settings)
229
+ self._oracle_version_info: OracleVersionInfo | None = None
230
+
231
+ def _column_types(self) -> "tuple[str, str, str]":
232
+ """Return Oracle column types based on storage mode."""
233
+ storage = self._json_storage or JSONStorageType.BLOB_JSON
234
+ if storage == JSONStorageType.JSON_NATIVE:
235
+ return "JSON", "JSON", "TIMESTAMP"
236
+ return "BLOB", "BLOB", "TIMESTAMP"
237
+
238
+ def _string_type(self, length: int) -> str:
239
+ """Return Oracle VARCHAR2 type syntax."""
240
+ return f"VARCHAR2({length})"
241
+
242
+ def _index_name(self) -> str:
243
+ """Return index name truncated to Oracle's 30-character limit."""
244
+ base_name = f"idx_{self.table_name.replace('.', '_')}_channel_status"
245
+ return base_name[:30]
246
+
247
+ def create_statements(self) -> "list[str]":
248
+ """Return single PL/SQL script for table and index creation.
249
+
250
+ Uses cached storage type if available, otherwise defaults to BLOB_JSON.
251
+ For auto-detection, use create_table() instead.
252
+ """
253
+ storage_type = self._json_storage or JSONStorageType.BLOB_JSON
254
+ return [_build_oracle_create_table_sql(self.table_name, storage_type, self._in_memory, self._index_name())]
255
+
256
+ def drop_statements(self) -> "list[str]":
257
+ """Return drop statements in reverse dependency order."""
258
+ return _build_oracle_drop_sql(self.table_name, self._index_name())
259
+
260
+ def _detect_json_storage_type(self) -> JSONStorageType:
261
+ """Detect the appropriate JSON storage type based on Oracle version.
262
+
263
+ Returns cached storage type if already detected, otherwise queries the database.
264
+ """
265
+ if self._json_storage is not None:
266
+ return self._json_storage
267
+
268
+ version_info = self._get_version_info()
269
+ self._json_storage = _storage_type_from_version(version_info)
270
+ return self._json_storage
271
+
272
+ def _get_version_info(self) -> "OracleVersionInfo | None":
273
+ """Return cached Oracle version info using data dictionary."""
274
+ if self._oracle_version_info is not None:
275
+ return self._oracle_version_info
276
+
277
+ with self._config.provide_session() as driver:
278
+ dictionary = OracledbSyncDataDictionary()
279
+ self._oracle_version_info = dictionary.get_version(driver)
280
+
281
+ if self._oracle_version_info is None:
282
+ log_with_context(
283
+ logger,
284
+ logging.WARNING,
285
+ "events.queue.storage.fallback",
286
+ storage_type=JSONStorageType.BLOB_JSON.value,
287
+ reason="version_detection_failed",
288
+ )
289
+
290
+ return self._oracle_version_info
291
+
292
+ def create_table(self) -> None:
293
+ """Create the event queue table with auto-detected storage type."""
294
+ storage_type = self._detect_json_storage_type()
295
+ log_with_context(
296
+ logger, logging.DEBUG, "events.queue.create", storage_type=storage_type.value, table_name=self.table_name
297
+ )
298
+
299
+ with self._config.provide_session() as driver:
300
+ sql = _build_oracle_create_table_sql(self.table_name, storage_type, self._in_memory, self._index_name())
301
+ driver.execute_script(sql)
302
+
303
+ def drop_table(self) -> None:
304
+ """Drop the event queue table and index."""
305
+ with self._config.provide_session() as driver:
306
+ for stmt in _build_oracle_drop_sql(self.table_name, self._index_name()):
307
+ driver.execute_script(stmt)
308
+
309
+
310
+ class OracleAsyncEventQueueStore(BaseEventQueueStore["OracleAsyncConfig"]):
311
+ """Oracle async event queue store with auto-detected JSON storage.
312
+
313
+ Automatically detects the Oracle version and uses the optimal JSON storage:
314
+ - Oracle 21c+: Native JSON type
315
+ - Oracle 12c-19c: BLOB with IS JSON constraint
316
+ - Oracle 11g: Plain BLOB
317
+
318
+ Args:
319
+ config: OracleAsyncConfig with extension_config["events"] settings.
320
+
321
+ Notes:
322
+ Configuration is read from config.extension_config["events"]:
323
+ - queue_table: Table name (default: "sqlspec_event_queue")
324
+ - json_storage: Override auto-detection ("json", "blob_json", "blob")
325
+ - in_memory: Enable INMEMORY PRIORITY HIGH clause (default: False)
326
+
327
+ Example:
328
+ from sqlspec.adapters.oracledb import OracleAsyncConfig
329
+ from sqlspec.adapters.oracledb.events import OracleAsyncEventQueueStore
330
+
331
+ config = OracleAsyncConfig(connection_config={"dsn": "oracle://..."})
332
+ store = OracleAsyncEventQueueStore(config)
333
+ await store.create_table() # Auto-detects version and creates table
334
+ """
335
+
336
+ __slots__ = ("_in_memory", "_json_storage", "_oracle_version_info")
337
+
338
+ def __init__(self, config: "OracleAsyncConfig") -> None:
339
+ """Initialize Oracle async event queue store."""
340
+ super().__init__(config)
341
+ self._in_memory, self._json_storage = _init_oracle_settings(self._extension_settings)
342
+ self._oracle_version_info: OracleVersionInfo | None = None
343
+
344
+ def _column_types(self) -> "tuple[str, str, str]":
345
+ """Return Oracle column types based on storage mode."""
346
+ storage = self._json_storage or JSONStorageType.BLOB_JSON
347
+ if storage == JSONStorageType.JSON_NATIVE:
348
+ return "JSON", "JSON", "TIMESTAMP"
349
+ return "BLOB", "BLOB", "TIMESTAMP"
350
+
351
+ def _string_type(self, length: int) -> str:
352
+ """Return Oracle VARCHAR2 type syntax."""
353
+ return f"VARCHAR2({length})"
354
+
355
+ def _index_name(self) -> str:
356
+ """Return index name truncated to Oracle's 30-character limit."""
357
+ base_name = f"idx_{self.table_name.replace('.', '_')}_channel_status"
358
+ return base_name[:30]
359
+
360
+ def create_statements(self) -> "list[str]":
361
+ """Return single PL/SQL script for table and index creation.
362
+
363
+ Uses cached storage type if available, otherwise defaults to BLOB_JSON.
364
+ For auto-detection, use create_table() instead.
365
+ """
366
+ storage_type = self._json_storage or JSONStorageType.BLOB_JSON
367
+ return [_build_oracle_create_table_sql(self.table_name, storage_type, self._in_memory, self._index_name())]
368
+
369
+ def drop_statements(self) -> "list[str]":
370
+ """Return drop statements in reverse dependency order."""
371
+ return _build_oracle_drop_sql(self.table_name, self._index_name())
372
+
373
+ async def _detect_json_storage_type(self) -> JSONStorageType:
374
+ """Detect the appropriate JSON storage type based on Oracle version.
375
+
376
+ Returns cached storage type if already detected, otherwise queries the database.
377
+ """
378
+ if self._json_storage is not None:
379
+ return self._json_storage
380
+
381
+ version_info = await self._get_version_info()
382
+ self._json_storage = _storage_type_from_version(version_info)
383
+ return self._json_storage
384
+
385
+ async def _get_version_info(self) -> "OracleVersionInfo | None":
386
+ """Return cached Oracle version info using data dictionary."""
387
+ if self._oracle_version_info is not None:
388
+ return self._oracle_version_info
389
+
390
+ async with self._config.provide_session() as driver:
391
+ dictionary = OracledbAsyncDataDictionary()
392
+ self._oracle_version_info = await dictionary.get_version(driver)
393
+
394
+ if self._oracle_version_info is None:
395
+ log_with_context(
396
+ logger,
397
+ logging.WARNING,
398
+ "events.queue.storage.fallback",
399
+ storage_type=JSONStorageType.BLOB_JSON.value,
400
+ reason="version_detection_failed",
401
+ )
402
+
403
+ return self._oracle_version_info
404
+
405
+ async def create_table(self) -> None:
406
+ """Create the event queue table with auto-detected storage type."""
407
+ storage_type = await self._detect_json_storage_type()
408
+ log_with_context(
409
+ logger, logging.DEBUG, "events.queue.create", storage_type=storage_type.value, table_name=self.table_name
410
+ )
411
+
412
+ async with self._config.provide_session() as driver:
413
+ sql = _build_oracle_create_table_sql(self.table_name, storage_type, self._in_memory, self._index_name())
414
+ await driver.execute_script(sql)
415
+
416
+ async def drop_table(self) -> None:
417
+ """Drop the event queue table and index."""
418
+ async with self._config.provide_session() as driver:
419
+ for stmt in _build_oracle_drop_sql(self.table_name, self._index_name()):
420
+ await driver.execute_script(stmt)
@@ -0,0 +1,5 @@
1
+ """Oracle Litestar integration exports."""
2
+
3
+ from sqlspec.adapters.oracledb.litestar.store import OracleAsyncStore, OracleSyncStore
4
+
5
+ __all__ = ("OracleAsyncStore", "OracleSyncStore")