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,505 @@
1
+ """Parameter processing pipeline orchestrator."""
2
+
3
+ import hashlib
4
+ from collections import OrderedDict
5
+ from collections.abc import Callable, Mapping, Sequence
6
+ from typing import Any
7
+
8
+ from mypy_extensions import mypyc_attr
9
+
10
+ from sqlspec.core.parameters._alignment import looks_like_execute_many
11
+ from sqlspec.core.parameters._converter import ParameterConverter
12
+ from sqlspec.core.parameters._types import (
13
+ ConvertedParameters,
14
+ ParameterInfo,
15
+ ParameterPayload,
16
+ ParameterProcessingResult,
17
+ ParameterProfile,
18
+ ParameterStyle,
19
+ ParameterStyleConfig,
20
+ TypedParameter,
21
+ wrap_with_type,
22
+ )
23
+ from sqlspec.core.parameters._validator import ParameterValidator
24
+
25
+ __all__ = ("ParameterProcessor", "fingerprint_parameters")
26
+
27
+
28
+ def _mapping_item_sort_key(item: "tuple[object, object]") -> str:
29
+ return repr(item[0])
30
+
31
+
32
+ def _fingerprint_parameters(parameters: "ParameterPayload") -> str:
33
+ """Return a stable fingerprint for caching parameter payloads.
34
+
35
+ Args:
36
+ parameters: Original parameter payload supplied by the caller.
37
+
38
+ Returns:
39
+ Deterministic fingerprint string derived from the parameter payload.
40
+ """
41
+ if parameters is None:
42
+ return "none"
43
+
44
+ if isinstance(parameters, Mapping):
45
+ if not parameters:
46
+ return f"{type(parameters).__name__}:empty"
47
+ try:
48
+ items = sorted(parameters.items(), key=_mapping_item_sort_key)
49
+ except Exception:
50
+ items = list(parameters.items())
51
+ data = repr(tuple(items))
52
+ elif isinstance(parameters, Sequence) and not isinstance(parameters, (str, bytes, bytearray)):
53
+ if not parameters:
54
+ return f"{type(parameters).__name__}:empty"
55
+ data = repr(tuple(parameters))
56
+ else:
57
+ data = repr(parameters)
58
+
59
+ digest = hashlib.blake2b(data.encode("utf-8"), digest_size=8).hexdigest()
60
+ return f"{type(parameters).__name__}:{digest}"
61
+
62
+
63
+ def fingerprint_parameters(parameters: "ParameterPayload") -> str:
64
+ """Return a stable fingerprint for parameter payloads.
65
+
66
+ Args:
67
+ parameters: Original parameter payload supplied by the caller.
68
+
69
+ Returns:
70
+ Deterministic fingerprint string derived from the parameter payload.
71
+ """
72
+ return _fingerprint_parameters(parameters)
73
+
74
+
75
+ def _coerce_nested_value(value: object, type_coercion_map: "dict[type, Callable[[Any], Any]]") -> object:
76
+ if isinstance(value, (list, tuple)) and not isinstance(value, (str, bytes)):
77
+ return [_coerce_parameter_value(item, type_coercion_map) for item in value]
78
+ if isinstance(value, dict):
79
+ return {key: _coerce_parameter_value(val, type_coercion_map) for key, val in value.items()}
80
+ return value
81
+
82
+
83
+ def _coerce_parameter_value(value: object, type_coercion_map: "dict[type, Callable[[Any], Any]]") -> object:
84
+ if value is None:
85
+ return value
86
+
87
+ if isinstance(value, TypedParameter):
88
+ wrapped_value: object = value.value
89
+ if wrapped_value is None:
90
+ return wrapped_value
91
+ original_type = value.original_type
92
+ if original_type in type_coercion_map:
93
+ coerced = type_coercion_map[original_type](wrapped_value)
94
+ return _coerce_nested_value(coerced, type_coercion_map)
95
+ return wrapped_value
96
+
97
+ value_type = type(value)
98
+ if value_type in type_coercion_map:
99
+ coerced = type_coercion_map[value_type](value)
100
+ return _coerce_nested_value(coerced, type_coercion_map)
101
+ return value
102
+
103
+
104
+ def _coerce_parameter_set(param_set: object, type_coercion_map: "dict[type, Callable[[Any], Any]]") -> object:
105
+ if isinstance(param_set, Sequence) and not isinstance(param_set, (str, bytes)):
106
+ return [_coerce_parameter_value(item, type_coercion_map) for item in param_set]
107
+ if isinstance(param_set, Mapping):
108
+ return {key: _coerce_parameter_value(val, type_coercion_map) for key, val in param_set.items()}
109
+ return _coerce_parameter_value(param_set, type_coercion_map)
110
+
111
+
112
+ def _coerce_parameters_payload(
113
+ parameters: "ParameterPayload", type_coercion_map: "dict[type, Callable[[Any], Any]]", is_many: bool
114
+ ) -> object:
115
+ if is_many and isinstance(parameters, Sequence) and not isinstance(parameters, (str, bytes)):
116
+ return [_coerce_parameter_set(param_set, type_coercion_map) for param_set in parameters]
117
+ if isinstance(parameters, Sequence) and not isinstance(parameters, (str, bytes)):
118
+ return [_coerce_parameter_value(item, type_coercion_map) for item in parameters]
119
+ if isinstance(parameters, Mapping):
120
+ return {key: _coerce_parameter_value(val, type_coercion_map) for key, val in parameters.items()}
121
+ return _coerce_parameter_value(parameters, type_coercion_map)
122
+
123
+
124
+ @mypyc_attr(allow_interpreted_subclasses=False)
125
+ class ParameterProcessor:
126
+ """Parameter processing engine coordinating conversion phases."""
127
+
128
+ __slots__ = ("_cache", "_cache_hits", "_cache_max_size", "_cache_misses", "_converter", "_validator")
129
+
130
+ DEFAULT_CACHE_SIZE = 1000
131
+
132
+ def __init__(
133
+ self,
134
+ *,
135
+ converter: "ParameterConverter | None" = None,
136
+ validator: "ParameterValidator | None" = None,
137
+ cache_max_size: int | None = None,
138
+ validator_cache_max_size: int | None = None,
139
+ ) -> None:
140
+ self._cache: OrderedDict[str, ParameterProcessingResult] = OrderedDict()
141
+ if cache_max_size is None:
142
+ cache_max_size = self.DEFAULT_CACHE_SIZE
143
+ self._cache_max_size = max(cache_max_size, 0)
144
+ self._cache_hits = 0
145
+ self._cache_misses = 0
146
+ if converter is None:
147
+ if validator is None:
148
+ validator_cache = validator_cache_max_size
149
+ if validator_cache is None:
150
+ validator_cache = self._cache_max_size
151
+ validator = ParameterValidator(cache_max_size=validator_cache)
152
+ self._validator = validator
153
+ self._converter = ParameterConverter(self._validator)
154
+ else:
155
+ self._converter = converter
156
+ if validator is None:
157
+ self._validator = converter.validator
158
+ else:
159
+ self._validator = validator
160
+ self._converter.validator = validator
161
+ if validator_cache_max_size is not None and isinstance(self._validator, ParameterValidator):
162
+ self._validator.set_cache_max_size(validator_cache_max_size)
163
+
164
+ def clear_cache(self) -> None:
165
+ """Clear cached processing results and reset stats."""
166
+ self._cache.clear()
167
+ self._cache_hits = 0
168
+ self._cache_misses = 0
169
+ if isinstance(self._validator, ParameterValidator):
170
+ self._validator.clear_cache()
171
+
172
+ def cache_stats(self) -> "dict[str, int]":
173
+ """Return cache statistics for parameter processing."""
174
+ stats = {
175
+ "hits": self._cache_hits,
176
+ "misses": self._cache_misses,
177
+ "size": len(self._cache),
178
+ "max_size": self._cache_max_size,
179
+ }
180
+ if isinstance(self._validator, ParameterValidator):
181
+ validator_stats = self._validator.cache_stats()
182
+ stats["validator_hits"] = validator_stats["hits"]
183
+ stats["validator_misses"] = validator_stats["misses"]
184
+ stats["validator_size"] = validator_stats["size"]
185
+ stats["validator_max_size"] = validator_stats["max_size"]
186
+ else:
187
+ stats["validator_hits"] = 0
188
+ stats["validator_misses"] = 0
189
+ stats["validator_size"] = 0
190
+ stats["validator_max_size"] = 0
191
+ return stats
192
+
193
+ def _compile_static_script(
194
+ self, sql: str, parameters: "ParameterPayload", config: "ParameterStyleConfig", is_many: bool, cache_key: str
195
+ ) -> "ParameterProcessingResult":
196
+ coerced_params = parameters
197
+ if config.type_coercion_map and parameters:
198
+ coerced_params = self._coerce_parameter_types(parameters, config.type_coercion_map, is_many)
199
+
200
+ static_sql, static_params = self._converter.convert_placeholder_style(
201
+ sql, coerced_params, ParameterStyle.STATIC, is_many, strict_named_parameters=config.strict_named_parameters
202
+ )
203
+ result = ParameterProcessingResult(static_sql, static_params, ParameterProfile.empty(), sqlglot_sql=static_sql)
204
+ return self._store_cached_result(cache_key, result)
205
+
206
+ def _select_execution_style(
207
+ self, original_styles: "set[ParameterStyle]", config: "ParameterStyleConfig"
208
+ ) -> "ParameterStyle":
209
+ if len(original_styles) == 1 and config.supported_execution_parameter_styles is not None:
210
+ original_style = next(iter(original_styles))
211
+ if original_style in config.supported_execution_parameter_styles:
212
+ return original_style
213
+ return config.default_execution_parameter_style or config.default_parameter_style
214
+
215
+ def _wrap_parameter_types(self, parameters: "ParameterPayload") -> "ConvertedParameters":
216
+ if isinstance(parameters, Sequence) and not isinstance(parameters, (str, bytes)):
217
+ return [wrap_with_type(p) for p in parameters]
218
+ if isinstance(parameters, Mapping):
219
+ return {k: wrap_with_type(v) for k, v in parameters.items()}
220
+ return None
221
+
222
+ def _coerce_parameter_types(
223
+ self,
224
+ parameters: "ParameterPayload",
225
+ type_coercion_map: "dict[type, Callable[[Any], Any]]",
226
+ is_many: bool = False,
227
+ ) -> "ConvertedParameters":
228
+ result = _coerce_parameters_payload(parameters, type_coercion_map, is_many)
229
+ # Type narrow the result - _coerce_parameters_payload returns object but we know it produces concrete types
230
+ if result is None:
231
+ return None
232
+ if isinstance(result, dict):
233
+ return result
234
+ if isinstance(result, list):
235
+ return result
236
+ if isinstance(result, tuple):
237
+ return result
238
+ return None
239
+
240
+ def _store_cached_result(self, cache_key: str, result: "ParameterProcessingResult") -> "ParameterProcessingResult":
241
+ if self._cache_max_size <= 0:
242
+ return result
243
+ self._cache[cache_key] = result
244
+ self._cache.move_to_end(cache_key)
245
+ if len(self._cache) > self._cache_max_size:
246
+ self._cache.popitem(last=False)
247
+ return result
248
+
249
+ def _needs_mapping_normalization(
250
+ self, payload: "ParameterPayload", param_info: "list[ParameterInfo]", is_many: bool
251
+ ) -> bool:
252
+ if not payload or not param_info:
253
+ return False
254
+
255
+ has_named_placeholders = any(
256
+ param.style
257
+ in {
258
+ ParameterStyle.NAMED_COLON,
259
+ ParameterStyle.NAMED_AT,
260
+ ParameterStyle.NAMED_DOLLAR,
261
+ ParameterStyle.NAMED_PYFORMAT,
262
+ }
263
+ for param in param_info
264
+ )
265
+ if has_named_placeholders:
266
+ return False
267
+
268
+ looks_many = is_many or looks_like_execute_many(payload)
269
+ if not looks_many:
270
+ return False
271
+
272
+ if isinstance(payload, Mapping):
273
+ return True
274
+
275
+ if isinstance(payload, Sequence) and not isinstance(payload, (str, bytes, bytearray)):
276
+ return any(isinstance(item, Mapping) for item in payload)
277
+
278
+ return False
279
+
280
+ def _normalize_sql_for_parsing(self, sql: str, param_info: "list[ParameterInfo]", dialect: str | None) -> str:
281
+ if not self._needs_parse_normalization(param_info, dialect):
282
+ return sql
283
+ normalized_sql, _ = self._converter.normalize_sql_for_parsing(sql, dialect, param_info=param_info)
284
+ return normalized_sql
285
+
286
+ def _make_processor_cache_key(
287
+ self,
288
+ sql: str,
289
+ parameters: "ParameterPayload",
290
+ config: "ParameterStyleConfig",
291
+ is_many: bool,
292
+ dialect: str | None,
293
+ wrap_types: bool,
294
+ normalize_for_parsing: bool,
295
+ ) -> str:
296
+ param_fingerprint = _fingerprint_parameters(parameters)
297
+ dialect_marker = dialect or "default"
298
+ default_style = config.default_parameter_style.value if config.default_parameter_style else "unknown"
299
+ return (
300
+ f"{sql}:{param_fingerprint}:{default_style}:{is_many}:{dialect_marker}:{wrap_types}:{normalize_for_parsing}"
301
+ )
302
+
303
+ def process(
304
+ self,
305
+ sql: str,
306
+ parameters: "ParameterPayload",
307
+ config: "ParameterStyleConfig",
308
+ dialect: str | None = None,
309
+ is_many: bool = False,
310
+ wrap_types: bool = True,
311
+ ) -> "ParameterProcessingResult":
312
+ return self._process_internal(
313
+ sql, parameters, config, dialect=dialect, is_many=is_many, wrap_types=wrap_types, normalize_for_parsing=True
314
+ )
315
+
316
+ def process_for_execution(
317
+ self,
318
+ sql: str,
319
+ parameters: "ParameterPayload",
320
+ config: "ParameterStyleConfig",
321
+ dialect: str | None = None,
322
+ is_many: bool = False,
323
+ wrap_types: bool = True,
324
+ ) -> "ParameterProcessingResult":
325
+ """Process parameters for execution without parse normalization.
326
+
327
+ Args:
328
+ sql: SQL string to process.
329
+ parameters: Parameter payload.
330
+ config: Parameter style configuration.
331
+ dialect: Optional SQL dialect.
332
+ is_many: Whether this is execute_many.
333
+ wrap_types: Whether to wrap parameters with type metadata.
334
+
335
+ Returns:
336
+ ParameterProcessingResult with execution SQL and parameters.
337
+ """
338
+ return self._process_internal(
339
+ sql,
340
+ parameters,
341
+ config,
342
+ dialect=dialect,
343
+ is_many=is_many,
344
+ wrap_types=wrap_types,
345
+ normalize_for_parsing=False,
346
+ )
347
+
348
+ def _process_internal(
349
+ self,
350
+ sql: str,
351
+ parameters: "ParameterPayload",
352
+ config: "ParameterStyleConfig",
353
+ *,
354
+ dialect: str | None,
355
+ is_many: bool,
356
+ wrap_types: bool,
357
+ normalize_for_parsing: bool,
358
+ ) -> "ParameterProcessingResult":
359
+ cache_key = self._make_processor_cache_key(
360
+ sql, parameters, config, is_many, dialect, wrap_types, normalize_for_parsing
361
+ )
362
+ if self._cache_max_size > 0:
363
+ cached_result = self._cache.get(cache_key)
364
+ if cached_result is not None:
365
+ self._cache.move_to_end(cache_key)
366
+ self._cache_hits += 1
367
+ return cached_result
368
+ self._cache_misses += 1
369
+
370
+ param_info = self._validator.extract_parameters(sql)
371
+ original_styles = {p.style for p in param_info} if param_info else set()
372
+ needs_execution_conversion = self._needs_execution_placeholder_conversion(param_info, config)
373
+
374
+ if config.needs_static_script_compilation and param_info and parameters and not is_many:
375
+ return self._compile_static_script(sql, parameters, config, is_many, cache_key)
376
+
377
+ requires_mapping = self._needs_mapping_normalization(parameters, param_info, is_many)
378
+ if (
379
+ not needs_execution_conversion
380
+ and not config.type_coercion_map
381
+ and not config.output_transformer
382
+ and not requires_mapping
383
+ ):
384
+ normalized_sql = self._normalize_sql_for_parsing(sql, param_info, dialect) if normalize_for_parsing else sql
385
+ result = ParameterProcessingResult(
386
+ sql, parameters, ParameterProfile(param_info), sqlglot_sql=normalized_sql
387
+ )
388
+ return self._store_cached_result(cache_key, result)
389
+
390
+ processed_sql, processed_parameters = sql, parameters
391
+
392
+ if requires_mapping:
393
+ target_style = self._select_execution_style(original_styles, config)
394
+ processed_sql, processed_parameters = self._converter.convert_placeholder_style(
395
+ processed_sql,
396
+ processed_parameters,
397
+ target_style,
398
+ is_many,
399
+ strict_named_parameters=config.strict_named_parameters,
400
+ )
401
+
402
+ if processed_parameters and wrap_types:
403
+ processed_parameters = self._wrap_parameter_types(processed_parameters)
404
+
405
+ if config.type_coercion_map and processed_parameters:
406
+ processed_parameters = self._coerce_parameter_types(processed_parameters, config.type_coercion_map, is_many)
407
+
408
+ processed_sql, processed_parameters = self._convert_placeholders_for_execution(
409
+ processed_sql, processed_parameters, config, original_styles, needs_execution_conversion, is_many
410
+ )
411
+
412
+ if config.output_transformer:
413
+ processed_sql, processed_parameters = config.output_transformer(processed_sql, processed_parameters)
414
+
415
+ final_param_info = self._validator.extract_parameters(processed_sql)
416
+ final_profile = ParameterProfile(final_param_info)
417
+ sqlglot_sql = (
418
+ self._normalize_sql_for_parsing(processed_sql, final_param_info, dialect)
419
+ if normalize_for_parsing
420
+ else processed_sql
421
+ )
422
+ result = ParameterProcessingResult(processed_sql, processed_parameters, final_profile, sqlglot_sql=sqlglot_sql)
423
+
424
+ return self._store_cached_result(cache_key, result)
425
+
426
+ def _needs_execution_placeholder_conversion(
427
+ self, param_info: "list[ParameterInfo]", config: "ParameterStyleConfig"
428
+ ) -> bool:
429
+ """Determine whether execution placeholder conversion is required."""
430
+ if config.needs_static_script_compilation:
431
+ return True
432
+
433
+ if not param_info:
434
+ return False
435
+
436
+ current_styles = {param.style for param in param_info}
437
+
438
+ if (
439
+ config.allow_mixed_parameter_styles
440
+ and len(current_styles) > 1
441
+ and config.supported_execution_parameter_styles is not None
442
+ and len(config.supported_execution_parameter_styles) > 1
443
+ and all(style in config.supported_execution_parameter_styles for style in current_styles)
444
+ ):
445
+ return False
446
+
447
+ if (
448
+ config.supported_execution_parameter_styles is not None
449
+ and len(config.supported_execution_parameter_styles) > 1
450
+ and all(style in config.supported_execution_parameter_styles for style in current_styles)
451
+ ):
452
+ return False
453
+
454
+ if len(current_styles) > 1:
455
+ return True
456
+
457
+ if len(current_styles) == 1:
458
+ current_style = next(iter(current_styles))
459
+ supported_styles = config.supported_execution_parameter_styles
460
+ if supported_styles is None:
461
+ return True
462
+ return current_style not in supported_styles
463
+
464
+ return True
465
+
466
+ def _needs_parse_normalization(self, param_info: "list[ParameterInfo]", dialect: str | None = None) -> bool:
467
+ incompatible_styles = self._validator.get_sqlglot_incompatible_styles(dialect)
468
+ return any(p.style in incompatible_styles for p in param_info)
469
+
470
+ def _convert_placeholders_for_execution(
471
+ self,
472
+ sql: str,
473
+ parameters: "ParameterPayload",
474
+ config: "ParameterStyleConfig",
475
+ original_styles: "set[ParameterStyle]",
476
+ needs_execution_conversion: bool,
477
+ is_many: bool,
478
+ ) -> "tuple[str, ConvertedParameters]":
479
+ if not needs_execution_conversion:
480
+ # Convert parameters to concrete type for return
481
+ if parameters is None:
482
+ return sql, None
483
+ if isinstance(parameters, dict):
484
+ return sql, parameters
485
+ if isinstance(parameters, list):
486
+ return sql, parameters
487
+ if isinstance(parameters, tuple):
488
+ return sql, parameters
489
+ if isinstance(parameters, Mapping):
490
+ return sql, dict(parameters)
491
+ if isinstance(parameters, Sequence) and not isinstance(parameters, (str, bytes)):
492
+ return sql, list(parameters)
493
+ return sql, None
494
+
495
+ if is_many and config.preserve_original_params_for_many and isinstance(parameters, (list, tuple)):
496
+ target_style = self._select_execution_style(original_styles, config)
497
+ processed_sql, _ = self._converter.convert_placeholder_style(
498
+ sql, parameters, target_style, is_many, strict_named_parameters=config.strict_named_parameters
499
+ )
500
+ return processed_sql, parameters
501
+
502
+ target_style = self._select_execution_style(original_styles, config)
503
+ return self._converter.convert_placeholder_style(
504
+ sql, parameters, target_style, is_many, strict_named_parameters=config.strict_named_parameters
505
+ )