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,536 @@
1
+ """Oracle-specific data dictionary for metadata queries."""
2
+
3
+ import re
4
+ from typing import TYPE_CHECKING, Any, ClassVar, cast
5
+
6
+ from mypy_extensions import mypyc_attr
7
+
8
+ from sqlspec.data_dictionary import get_dialect_config
9
+ from sqlspec.driver import AsyncDataDictionaryBase, SyncDataDictionaryBase
10
+ from sqlspec.typing import ColumnMetadata, ForeignKeyMetadata, IndexMetadata, TableMetadata, VersionInfo
11
+ from sqlspec.utils.logging import get_logger
12
+
13
+ if TYPE_CHECKING:
14
+ from sqlspec.adapters.oracledb.driver import OracleAsyncDriver, OracleSyncDriver
15
+ from sqlspec.data_dictionary._types import DialectConfig
16
+
17
+ ORACLE_MIN_JSON_NATIVE_VERSION = 21
18
+ ORACLE_MIN_JSON_NATIVE_COMPATIBLE = 20
19
+ ORACLE_MIN_JSON_BLOB_VERSION = 12
20
+ ORACLE_MIN_OSON_VERSION = 19
21
+ ORACLE_VERSION_PARTS_COUNT = 3
22
+
23
+ VERSION_NUMBER_PATTERN = re.compile(r"(\d+)")
24
+ logger = get_logger("sqlspec.adapters.oracledb.data_dictionary")
25
+
26
+ __all__ = ("OracleVersionInfo", "OracledbAsyncDataDictionary", "OracledbSyncDataDictionary")
27
+
28
+
29
+ class OracleVersionInfo(VersionInfo):
30
+ """Oracle database version information."""
31
+
32
+ def __init__(
33
+ self, major: int, minor: int = 0, patch: int = 0, compatible: "str | None" = None, is_autonomous: bool = False
34
+ ) -> None:
35
+ """Initialize Oracle version info.
36
+
37
+ Args:
38
+ major: Major version number (e.g., 19, 21, 23).
39
+ minor: Minor version number.
40
+ patch: Patch version number.
41
+ compatible: Compatible parameter value.
42
+ is_autonomous: Whether this is an Autonomous Database.
43
+ """
44
+ super().__init__(major, minor, patch)
45
+ self.compatible = compatible
46
+ self.is_autonomous = is_autonomous
47
+
48
+ @property
49
+ def compatible_major(self) -> "int | None":
50
+ """Get major version from compatible parameter."""
51
+ if not self.compatible:
52
+ return None
53
+ parts = self.compatible.split(".")
54
+ if not parts:
55
+ return None
56
+ return int(parts[0])
57
+
58
+ def supports_native_json(self) -> bool:
59
+ """Check if database supports native JSON data type."""
60
+ return (
61
+ self.major >= ORACLE_MIN_JSON_NATIVE_VERSION
62
+ and (self.compatible_major or 0) >= ORACLE_MIN_JSON_NATIVE_COMPATIBLE
63
+ )
64
+
65
+ def supports_oson_blob(self) -> bool:
66
+ """Check if database supports BLOB with OSON format."""
67
+ if self.major >= ORACLE_MIN_JSON_NATIVE_VERSION:
68
+ return True
69
+ return self.major >= ORACLE_MIN_OSON_VERSION and self.is_autonomous
70
+
71
+ def supports_json_blob(self) -> bool:
72
+ """Check if database supports BLOB with JSON validation."""
73
+ return self.major >= ORACLE_MIN_JSON_BLOB_VERSION
74
+
75
+ def __str__(self) -> str:
76
+ """String representation of version info."""
77
+ version_str = f"{self.major}.{self.minor}.{self.patch}"
78
+ if self.compatible:
79
+ version_str += f" (compatible={self.compatible})"
80
+ if self.is_autonomous:
81
+ version_str += " [Autonomous]"
82
+ return version_str
83
+
84
+
85
+ @mypyc_attr(allow_interpreted_subclasses=True, native_class=False)
86
+ class OracledbSyncDataDictionary(SyncDataDictionaryBase):
87
+ """Oracle-specific sync data dictionary."""
88
+
89
+ dialect: ClassVar[str] = "oracle"
90
+
91
+ def __init__(self) -> None:
92
+ super().__init__()
93
+
94
+ def get_dialect_config(self) -> "DialectConfig":
95
+ """Return the dialect configuration for this data dictionary."""
96
+ return get_dialect_config(type(self).dialect)
97
+
98
+ def resolve_schema(self, schema: "str | None") -> "str | None":
99
+ """Return a schema name using dialect defaults when missing."""
100
+ if schema is not None:
101
+ return schema
102
+ return self.get_dialect_config().default_schema
103
+
104
+ def _extract_version_value(self, row: Any) -> "str | None":
105
+ if isinstance(row, dict):
106
+ for key in ("version", "VERSION", "Version"):
107
+ value = row.get(key)
108
+ if value:
109
+ return str(value)
110
+ if isinstance(row, (list, tuple)) and row:
111
+ return str(row[0])
112
+ if row is not None:
113
+ return str(row)
114
+ return None
115
+
116
+ def _parse_version_components(self, version_str: str) -> "tuple[int, int, int] | None":
117
+ parts = [int(value) for value in VERSION_NUMBER_PATTERN.findall(version_str)]
118
+ if not parts:
119
+ return None
120
+ while len(parts) < ORACLE_VERSION_PARTS_COUNT:
121
+ parts.append(0)
122
+ return parts[0], parts[1], parts[2]
123
+
124
+ def _build_version_info(
125
+ self, version_value: "str | None", compatible: "str | None", is_autonomous: bool
126
+ ) -> "OracleVersionInfo | None":
127
+ if not version_value:
128
+ return None
129
+ parts = self._parse_version_components(version_value)
130
+ if parts is None:
131
+ return None
132
+ return OracleVersionInfo(parts[0], parts[1], parts[2], compatible=compatible, is_autonomous=is_autonomous)
133
+
134
+ def _get_oracle_json_type(self, version_info: "OracleVersionInfo | None") -> str:
135
+ if version_info is None:
136
+ return "CLOB"
137
+ if version_info.supports_native_json():
138
+ return "JSON"
139
+ if version_info.supports_oson_blob():
140
+ return "BLOB"
141
+ if version_info.supports_json_blob():
142
+ return "BLOB"
143
+ return "CLOB"
144
+
145
+ def _merge_table_lists(
146
+ self, ordered: "list[TableMetadata]", all_tables: "list[TableMetadata]"
147
+ ) -> "list[TableMetadata]":
148
+ if not ordered:
149
+ return sorted(all_tables, key=lambda item: item.get("table_name") or "")
150
+ ordered_names = {item.get("table_name") for item in ordered if item.get("table_name")}
151
+ remainder = [item for item in all_tables if item.get("table_name") not in ordered_names]
152
+ return ordered + remainder
153
+
154
+ def _resolve_feature_flag(self, version_info: "OracleVersionInfo | None", feature: str) -> bool:
155
+ if feature == "is_autonomous":
156
+ return bool(version_info and version_info.is_autonomous)
157
+ if version_info is None:
158
+ return False
159
+ if feature == "supports_native_json":
160
+ return version_info.supports_native_json()
161
+ if feature == "supports_oson_blob":
162
+ return version_info.supports_oson_blob()
163
+ if feature == "supports_json_blob":
164
+ return version_info.supports_json_blob()
165
+ if feature == "supports_json":
166
+ return version_info.supports_json_blob()
167
+
168
+ config = get_dialect_config(type(self).dialect)
169
+ flag = config.get_feature_flag(feature)
170
+ if flag is not None:
171
+ return flag
172
+ required_version = config.get_feature_version(feature)
173
+ if required_version is None:
174
+ return False
175
+ return bool(version_info >= required_version)
176
+
177
+ def list_available_features(self) -> "list[str]":
178
+ config = get_dialect_config(type(self).dialect)
179
+ features: set[str] = set()
180
+ features.update(config.feature_flags.keys())
181
+ features.update(config.feature_versions.keys())
182
+ features.update({
183
+ "is_autonomous",
184
+ "supports_native_json",
185
+ "supports_oson_blob",
186
+ "supports_json_blob",
187
+ "supports_json",
188
+ })
189
+ return sorted(features)
190
+
191
+ def _get_compatible_value(self, driver: "OracleSyncDriver") -> "str | None":
192
+ query_text = self.get_query_text("compatible")
193
+ try:
194
+ value = driver.select_value(query_text)
195
+ if value is None:
196
+ return None
197
+ return str(value)
198
+ except Exception:
199
+ return None
200
+
201
+ def _is_autonomous(self, driver: "OracleSyncDriver") -> bool:
202
+ query_text = self.get_query_text("autonomous_service")
203
+ try:
204
+ return bool(driver.select_value_or_none(query_text))
205
+ except Exception:
206
+ return False
207
+
208
+ def get_version(self, driver: "OracleSyncDriver") -> "OracleVersionInfo | None":
209
+ """Get Oracle database version information."""
210
+ driver_id = id(driver)
211
+ # Inline cache check to avoid cross-module method call that causes mypyc segfault
212
+ if driver_id in self._version_fetch_attempted:
213
+ return cast("OracleVersionInfo | None", self._version_cache.get(driver_id))
214
+ # Not cached, fetch from database
215
+
216
+ version_row = driver.select_one_or_none(self.get_query_text("version"))
217
+ if not version_row:
218
+ self._log_version_unavailable(type(self).dialect, "missing")
219
+ self.cache_version(driver_id, None)
220
+ return None
221
+
222
+ version_value = self._extract_version_value(version_row)
223
+ if not version_value:
224
+ self._log_version_unavailable(type(self).dialect, "parse_failed")
225
+ self.cache_version(driver_id, None)
226
+ return None
227
+
228
+ compatible = self._get_compatible_value(driver)
229
+ is_autonomous = self._is_autonomous(driver)
230
+ version_info = self._build_version_info(version_value, compatible, is_autonomous)
231
+ if version_info is None:
232
+ self._log_version_unavailable(type(self).dialect, "parse_failed")
233
+ self.cache_version(driver_id, None)
234
+ return None
235
+
236
+ self._log_version_detected(type(self).dialect, version_info)
237
+ self.cache_version(driver_id, version_info)
238
+ return version_info
239
+
240
+ def get_feature_flag(self, driver: "OracleSyncDriver", feature: str) -> bool:
241
+ """Check if Oracle database supports a specific feature."""
242
+ version_info = self.get_version(driver)
243
+ return self._resolve_feature_flag(version_info, feature)
244
+
245
+ def get_optimal_type(self, driver: "OracleSyncDriver", type_category: str) -> str:
246
+ """Get optimal Oracle type for a category."""
247
+ if type_category == "json":
248
+ return self._get_oracle_json_type(self.get_version(driver))
249
+ return self.get_dialect_config().get_optimal_type(type_category)
250
+
251
+ def get_tables(self, driver: "OracleSyncDriver", schema: "str | None" = None) -> "list[TableMetadata]":
252
+ """Get tables sorted by dependency order with full coverage."""
253
+ schema_name = self.resolve_schema(schema)
254
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="tables")
255
+ ordered_rows = driver.select(
256
+ self.get_query("tables_by_schema"), schema_name=schema_name, schema_type=TableMetadata
257
+ )
258
+ all_rows = driver.select(
259
+ self.get_query("all_tables_by_schema"), schema_name=schema_name, schema_type=TableMetadata
260
+ )
261
+ return self._merge_table_lists(ordered_rows, all_rows)
262
+
263
+ def get_columns(
264
+ self, driver: "OracleSyncDriver", table: "str | None" = None, schema: "str | None" = None
265
+ ) -> "list[ColumnMetadata]":
266
+ """Get column information for a table or schema."""
267
+ schema_name = self.resolve_schema(schema)
268
+ if table is None:
269
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="columns")
270
+ return driver.select(
271
+ self.get_query("columns_by_schema"), schema_name=schema_name, schema_type=ColumnMetadata
272
+ )
273
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="columns")
274
+ return driver.select(
275
+ self.get_query("columns_by_table"), schema_name=schema_name, table_name=table, schema_type=ColumnMetadata
276
+ )
277
+
278
+ def get_indexes(
279
+ self, driver: "OracleSyncDriver", table: "str | None" = None, schema: "str | None" = None
280
+ ) -> "list[IndexMetadata]":
281
+ """Get index metadata for a table or schema."""
282
+ schema_name = self.resolve_schema(schema)
283
+ if table is None:
284
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="indexes")
285
+ return driver.select(
286
+ self.get_query("indexes_by_schema"), schema_name=schema_name, schema_type=IndexMetadata
287
+ )
288
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="indexes")
289
+ return driver.select(
290
+ self.get_query("indexes_by_table"), schema_name=schema_name, table_name=table, schema_type=IndexMetadata
291
+ )
292
+
293
+ def get_foreign_keys(
294
+ self, driver: "OracleSyncDriver", table: "str | None" = None, schema: "str | None" = None
295
+ ) -> "list[ForeignKeyMetadata]":
296
+ """Get foreign key metadata."""
297
+ schema_name = self.resolve_schema(schema)
298
+ if table is None:
299
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="foreign_keys")
300
+ return driver.select(
301
+ self.get_query("foreign_keys_by_schema"), schema_name=schema_name, schema_type=ForeignKeyMetadata
302
+ )
303
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="foreign_keys")
304
+ return driver.select(
305
+ self.get_query("foreign_keys_by_table"),
306
+ schema_name=schema_name,
307
+ table_name=table,
308
+ schema_type=ForeignKeyMetadata,
309
+ )
310
+
311
+
312
+ @mypyc_attr(allow_interpreted_subclasses=True, native_class=False)
313
+ class OracledbAsyncDataDictionary(AsyncDataDictionaryBase):
314
+ """Oracle-specific async data dictionary."""
315
+
316
+ dialect: ClassVar[str] = "oracle"
317
+
318
+ def __init__(self) -> None:
319
+ super().__init__()
320
+
321
+ def get_dialect_config(self) -> "DialectConfig":
322
+ """Return the dialect configuration for this data dictionary."""
323
+ return get_dialect_config(type(self).dialect)
324
+
325
+ def resolve_schema(self, schema: "str | None") -> "str | None":
326
+ """Return a schema name using dialect defaults when missing."""
327
+ if schema is not None:
328
+ return schema
329
+ return self.get_dialect_config().default_schema
330
+
331
+ def _extract_version_value(self, row: Any) -> "str | None":
332
+ if isinstance(row, dict):
333
+ for key in ("version", "VERSION", "Version"):
334
+ value = row.get(key)
335
+ if value:
336
+ return str(value)
337
+ if isinstance(row, (list, tuple)) and row:
338
+ return str(row[0])
339
+ if row is not None:
340
+ return str(row)
341
+ return None
342
+
343
+ def _parse_version_components(self, version_str: str) -> "tuple[int, int, int] | None":
344
+ parts = [int(value) for value in VERSION_NUMBER_PATTERN.findall(version_str)]
345
+ if not parts:
346
+ return None
347
+ while len(parts) < ORACLE_VERSION_PARTS_COUNT:
348
+ parts.append(0)
349
+ return parts[0], parts[1], parts[2]
350
+
351
+ def _build_version_info(
352
+ self, version_value: "str | None", compatible: "str | None", is_autonomous: bool
353
+ ) -> "OracleVersionInfo | None":
354
+ if not version_value:
355
+ return None
356
+ parts = self._parse_version_components(version_value)
357
+ if parts is None:
358
+ return None
359
+ return OracleVersionInfo(parts[0], parts[1], parts[2], compatible=compatible, is_autonomous=is_autonomous)
360
+
361
+ def _get_oracle_json_type(self, version_info: "OracleVersionInfo | None") -> str:
362
+ if version_info is None:
363
+ return "CLOB"
364
+ if version_info.supports_native_json():
365
+ return "JSON"
366
+ if version_info.supports_oson_blob():
367
+ return "BLOB"
368
+ if version_info.supports_json_blob():
369
+ return "BLOB"
370
+ return "CLOB"
371
+
372
+ def _merge_table_lists(
373
+ self, ordered: "list[TableMetadata]", all_tables: "list[TableMetadata]"
374
+ ) -> "list[TableMetadata]":
375
+ if not ordered:
376
+ return sorted(all_tables, key=lambda item: item.get("table_name") or "")
377
+ ordered_names = {item.get("table_name") for item in ordered if item.get("table_name")}
378
+ remainder = [item for item in all_tables if item.get("table_name") not in ordered_names]
379
+ return ordered + remainder
380
+
381
+ def _resolve_feature_flag(self, version_info: "OracleVersionInfo | None", feature: str) -> bool:
382
+ if feature == "is_autonomous":
383
+ return bool(version_info and version_info.is_autonomous)
384
+ if version_info is None:
385
+ return False
386
+ if feature == "supports_native_json":
387
+ return version_info.supports_native_json()
388
+ if feature == "supports_oson_blob":
389
+ return version_info.supports_oson_blob()
390
+ if feature == "supports_json_blob":
391
+ return version_info.supports_json_blob()
392
+ if feature == "supports_json":
393
+ return version_info.supports_json_blob()
394
+
395
+ config = get_dialect_config(type(self).dialect)
396
+ flag = config.get_feature_flag(feature)
397
+ if flag is not None:
398
+ return flag
399
+ required_version = config.get_feature_version(feature)
400
+ if required_version is None:
401
+ return False
402
+ return bool(version_info >= required_version)
403
+
404
+ def list_available_features(self) -> "list[str]":
405
+ config = get_dialect_config(type(self).dialect)
406
+ features: set[str] = set()
407
+ features.update(config.feature_flags.keys())
408
+ features.update(config.feature_versions.keys())
409
+ features.update({
410
+ "is_autonomous",
411
+ "supports_native_json",
412
+ "supports_oson_blob",
413
+ "supports_json_blob",
414
+ "supports_json",
415
+ })
416
+ return sorted(features)
417
+
418
+ async def _get_compatible_value(self, driver: "OracleAsyncDriver") -> "str | None":
419
+ query_text = self.get_query_text("compatible")
420
+ try:
421
+ value = await driver.select_value(query_text)
422
+ if value is None:
423
+ return None
424
+ return str(value)
425
+ except Exception:
426
+ return None
427
+
428
+ async def _is_autonomous(self, driver: "OracleAsyncDriver") -> bool:
429
+ query_text = self.get_query_text("autonomous_service")
430
+ try:
431
+ return bool(await driver.select_value_or_none(query_text))
432
+ except Exception:
433
+ return False
434
+
435
+ async def get_version(self, driver: "OracleAsyncDriver") -> "OracleVersionInfo | None":
436
+ """Get Oracle database version information."""
437
+ driver_id = id(driver)
438
+ # Inline cache check to avoid cross-module method call that causes mypyc segfault
439
+ if driver_id in self._version_fetch_attempted:
440
+ return cast("OracleVersionInfo | None", self._version_cache.get(driver_id))
441
+ # Not cached, fetch from database
442
+
443
+ version_row = await driver.select_one_or_none(self.get_query_text("version"))
444
+ if not version_row:
445
+ self._log_version_unavailable(type(self).dialect, "missing")
446
+ self.cache_version(driver_id, None)
447
+ return None
448
+
449
+ version_value = self._extract_version_value(version_row)
450
+ if not version_value:
451
+ self._log_version_unavailable(type(self).dialect, "parse_failed")
452
+ self.cache_version(driver_id, None)
453
+ return None
454
+
455
+ compatible = await self._get_compatible_value(driver)
456
+ is_autonomous = await self._is_autonomous(driver)
457
+ version_info = self._build_version_info(version_value, compatible, is_autonomous)
458
+ if version_info is None:
459
+ self._log_version_unavailable(type(self).dialect, "parse_failed")
460
+ self.cache_version(driver_id, None)
461
+ return None
462
+
463
+ self._log_version_detected(type(self).dialect, version_info)
464
+ self.cache_version(driver_id, version_info)
465
+ return version_info
466
+
467
+ async def get_feature_flag(self, driver: "OracleAsyncDriver", feature: str) -> bool:
468
+ """Check if Oracle database supports a specific feature."""
469
+ version_info = await self.get_version(driver)
470
+ return self._resolve_feature_flag(version_info, feature)
471
+
472
+ async def get_optimal_type(self, driver: "OracleAsyncDriver", type_category: str) -> str:
473
+ """Get optimal Oracle type for a category."""
474
+ if type_category == "json":
475
+ return self._get_oracle_json_type(await self.get_version(driver))
476
+ return self.get_dialect_config().get_optimal_type(type_category)
477
+
478
+ async def get_tables(self, driver: "OracleAsyncDriver", schema: "str | None" = None) -> "list[TableMetadata]":
479
+ """Get tables sorted by dependency order with full coverage."""
480
+ schema_name = self.resolve_schema(schema)
481
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="tables")
482
+ ordered_rows = await driver.select(
483
+ self.get_query("tables_by_schema"), schema_name=schema_name, schema_type=TableMetadata
484
+ )
485
+ all_rows = await driver.select(
486
+ self.get_query("all_tables_by_schema"), schema_name=schema_name, schema_type=TableMetadata
487
+ )
488
+ return self._merge_table_lists(ordered_rows, all_rows)
489
+
490
+ async def get_columns(
491
+ self, driver: "OracleAsyncDriver", table: "str | None" = None, schema: "str | None" = None
492
+ ) -> "list[ColumnMetadata]":
493
+ """Get column information for a table or schema."""
494
+ schema_name = self.resolve_schema(schema)
495
+ if table is None:
496
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="columns")
497
+ return await driver.select(
498
+ self.get_query("columns_by_schema"), schema_name=schema_name, schema_type=ColumnMetadata
499
+ )
500
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="columns")
501
+ return await driver.select(
502
+ self.get_query("columns_by_table"), schema_name=schema_name, table_name=table, schema_type=ColumnMetadata
503
+ )
504
+
505
+ async def get_indexes(
506
+ self, driver: "OracleAsyncDriver", table: "str | None" = None, schema: "str | None" = None
507
+ ) -> "list[IndexMetadata]":
508
+ """Get index metadata for a table or schema."""
509
+ schema_name = self.resolve_schema(schema)
510
+ if table is None:
511
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="indexes")
512
+ return await driver.select(
513
+ self.get_query("indexes_by_schema"), schema_name=schema_name, schema_type=IndexMetadata
514
+ )
515
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="indexes")
516
+ return await driver.select(
517
+ self.get_query("indexes_by_table"), schema_name=schema_name, table_name=table, schema_type=IndexMetadata
518
+ )
519
+
520
+ async def get_foreign_keys(
521
+ self, driver: "OracleAsyncDriver", table: "str | None" = None, schema: "str | None" = None
522
+ ) -> "list[ForeignKeyMetadata]":
523
+ """Get foreign key metadata."""
524
+ schema_name = self.resolve_schema(schema)
525
+ if table is None:
526
+ self._log_schema_introspect(driver, schema_name=schema_name, table_name=None, operation="foreign_keys")
527
+ return await driver.select(
528
+ self.get_query("foreign_keys_by_schema"), schema_name=schema_name, schema_type=ForeignKeyMetadata
529
+ )
530
+ self._log_table_describe(driver, schema_name=schema_name, table_name=table, operation="foreign_keys")
531
+ return await driver.select(
532
+ self.get_query("foreign_keys_by_table"),
533
+ schema_name=schema_name,
534
+ table_name=table,
535
+ schema_type=ForeignKeyMetadata,
536
+ )