sqlspec 0.47.0__cp314-cp314-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (621) hide show
  1. f68e0789eb443ecb1c2c__mypyc.cp314-win_amd64.pyd +0 -0
  2. sqlspec/__init__.py +167 -0
  3. sqlspec/__main__.py +12 -0
  4. sqlspec/__metadata__.py +14 -0
  5. sqlspec/_typing.py +714 -0
  6. sqlspec/adapters/__init__.py +0 -0
  7. sqlspec/adapters/adbc/__init__.py +13 -0
  8. sqlspec/adapters/adbc/_typing.py +106 -0
  9. sqlspec/adapters/adbc/adk/__init__.py +5 -0
  10. sqlspec/adapters/adbc/adk/store.py +1280 -0
  11. sqlspec/adapters/adbc/config.py +378 -0
  12. sqlspec/adapters/adbc/core.cp314-win_amd64.pyd +0 -0
  13. sqlspec/adapters/adbc/core.py +922 -0
  14. sqlspec/adapters/adbc/data_dictionary.py +339 -0
  15. sqlspec/adapters/adbc/driver.py +534 -0
  16. sqlspec/adapters/adbc/events/__init__.py +5 -0
  17. sqlspec/adapters/adbc/events/store.py +285 -0
  18. sqlspec/adapters/adbc/litestar/__init__.py +5 -0
  19. sqlspec/adapters/adbc/litestar/store.py +534 -0
  20. sqlspec/adapters/adbc/type_converter.cp314-win_amd64.pyd +0 -0
  21. sqlspec/adapters/adbc/type_converter.py +142 -0
  22. sqlspec/adapters/aiomysql/__init__.py +21 -0
  23. sqlspec/adapters/aiomysql/_typing.py +137 -0
  24. sqlspec/adapters/aiomysql/adk/__init__.py +5 -0
  25. sqlspec/adapters/aiomysql/adk/store.py +678 -0
  26. sqlspec/adapters/aiomysql/config.py +305 -0
  27. sqlspec/adapters/aiomysql/core.cp314-win_amd64.pyd +0 -0
  28. sqlspec/adapters/aiomysql/core.py +536 -0
  29. sqlspec/adapters/aiomysql/data_dictionary.py +121 -0
  30. sqlspec/adapters/aiomysql/driver.py +386 -0
  31. sqlspec/adapters/aiomysql/events/__init__.py +5 -0
  32. sqlspec/adapters/aiomysql/events/store.py +104 -0
  33. sqlspec/adapters/aiomysql/litestar/__init__.py +5 -0
  34. sqlspec/adapters/aiomysql/litestar/store.py +314 -0
  35. sqlspec/adapters/aiosqlite/__init__.py +26 -0
  36. sqlspec/adapters/aiosqlite/_typing.py +109 -0
  37. sqlspec/adapters/aiosqlite/adk/__init__.py +5 -0
  38. sqlspec/adapters/aiosqlite/adk/store.py +829 -0
  39. sqlspec/adapters/aiosqlite/config.py +315 -0
  40. sqlspec/adapters/aiosqlite/core.cp314-win_amd64.pyd +0 -0
  41. sqlspec/adapters/aiosqlite/core.py +315 -0
  42. sqlspec/adapters/aiosqlite/data_dictionary.py +202 -0
  43. sqlspec/adapters/aiosqlite/driver.py +311 -0
  44. sqlspec/adapters/aiosqlite/events/__init__.py +5 -0
  45. sqlspec/adapters/aiosqlite/events/store.py +20 -0
  46. sqlspec/adapters/aiosqlite/litestar/__init__.py +5 -0
  47. sqlspec/adapters/aiosqlite/litestar/store.py +279 -0
  48. sqlspec/adapters/aiosqlite/pool.cp314-win_amd64.pyd +0 -0
  49. sqlspec/adapters/aiosqlite/pool.py +734 -0
  50. sqlspec/adapters/asyncmy/__init__.py +21 -0
  51. sqlspec/adapters/asyncmy/_typing.py +113 -0
  52. sqlspec/adapters/asyncmy/adk/__init__.py +5 -0
  53. sqlspec/adapters/asyncmy/adk/store.py +644 -0
  54. sqlspec/adapters/asyncmy/config.py +307 -0
  55. sqlspec/adapters/asyncmy/core.cp314-win_amd64.pyd +0 -0
  56. sqlspec/adapters/asyncmy/core.py +538 -0
  57. sqlspec/adapters/asyncmy/data_dictionary.py +122 -0
  58. sqlspec/adapters/asyncmy/driver.py +391 -0
  59. sqlspec/adapters/asyncmy/events/__init__.py +5 -0
  60. sqlspec/adapters/asyncmy/events/store.py +104 -0
  61. sqlspec/adapters/asyncmy/litestar/__init__.py +5 -0
  62. sqlspec/adapters/asyncmy/litestar/store.py +296 -0
  63. sqlspec/adapters/asyncpg/__init__.py +26 -0
  64. sqlspec/adapters/asyncpg/_typing.py +103 -0
  65. sqlspec/adapters/asyncpg/adk/__init__.py +5 -0
  66. sqlspec/adapters/asyncpg/adk/store.py +483 -0
  67. sqlspec/adapters/asyncpg/config.py +575 -0
  68. sqlspec/adapters/asyncpg/core.cp314-win_amd64.pyd +0 -0
  69. sqlspec/adapters/asyncpg/core.py +480 -0
  70. sqlspec/adapters/asyncpg/data_dictionary.py +157 -0
  71. sqlspec/adapters/asyncpg/driver.py +487 -0
  72. sqlspec/adapters/asyncpg/events/__init__.py +6 -0
  73. sqlspec/adapters/asyncpg/events/_hub.py +181 -0
  74. sqlspec/adapters/asyncpg/events/backend.py +210 -0
  75. sqlspec/adapters/asyncpg/events/store.py +40 -0
  76. sqlspec/adapters/asyncpg/litestar/__init__.py +5 -0
  77. sqlspec/adapters/asyncpg/litestar/store.py +251 -0
  78. sqlspec/adapters/bigquery/__init__.py +15 -0
  79. sqlspec/adapters/bigquery/_typing.py +108 -0
  80. sqlspec/adapters/bigquery/config.py +362 -0
  81. sqlspec/adapters/bigquery/core.cp314-win_amd64.pyd +0 -0
  82. sqlspec/adapters/bigquery/core.py +768 -0
  83. sqlspec/adapters/bigquery/data_dictionary.py +120 -0
  84. sqlspec/adapters/bigquery/driver.py +542 -0
  85. sqlspec/adapters/bigquery/events/__init__.py +5 -0
  86. sqlspec/adapters/bigquery/events/store.py +139 -0
  87. sqlspec/adapters/bigquery/litestar/__init__.py +5 -0
  88. sqlspec/adapters/bigquery/litestar/store.py +325 -0
  89. sqlspec/adapters/bigquery/type_converter.cp314-win_amd64.pyd +0 -0
  90. sqlspec/adapters/bigquery/type_converter.py +107 -0
  91. sqlspec/adapters/cockroach_asyncpg/__init__.py +26 -0
  92. sqlspec/adapters/cockroach_asyncpg/_typing.py +73 -0
  93. sqlspec/adapters/cockroach_asyncpg/adk/__init__.py +3 -0
  94. sqlspec/adapters/cockroach_asyncpg/adk/store.py +465 -0
  95. sqlspec/adapters/cockroach_asyncpg/config.py +248 -0
  96. sqlspec/adapters/cockroach_asyncpg/core.cp314-win_amd64.pyd +0 -0
  97. sqlspec/adapters/cockroach_asyncpg/core.py +55 -0
  98. sqlspec/adapters/cockroach_asyncpg/data_dictionary.py +110 -0
  99. sqlspec/adapters/cockroach_asyncpg/driver.py +142 -0
  100. sqlspec/adapters/cockroach_asyncpg/events/__init__.py +3 -0
  101. sqlspec/adapters/cockroach_asyncpg/events/store.py +20 -0
  102. sqlspec/adapters/cockroach_asyncpg/litestar/__init__.py +3 -0
  103. sqlspec/adapters/cockroach_asyncpg/litestar/store.py +142 -0
  104. sqlspec/adapters/cockroach_psycopg/__init__.py +39 -0
  105. sqlspec/adapters/cockroach_psycopg/_typing.py +137 -0
  106. sqlspec/adapters/cockroach_psycopg/adk/__init__.py +13 -0
  107. sqlspec/adapters/cockroach_psycopg/adk/store.py +1039 -0
  108. sqlspec/adapters/cockroach_psycopg/config.py +511 -0
  109. sqlspec/adapters/cockroach_psycopg/core.cp314-win_amd64.pyd +0 -0
  110. sqlspec/adapters/cockroach_psycopg/core.py +63 -0
  111. sqlspec/adapters/cockroach_psycopg/data_dictionary.py +220 -0
  112. sqlspec/adapters/cockroach_psycopg/driver.py +273 -0
  113. sqlspec/adapters/cockroach_psycopg/events/__init__.py +6 -0
  114. sqlspec/adapters/cockroach_psycopg/events/store.py +34 -0
  115. sqlspec/adapters/cockroach_psycopg/litestar/__init__.py +3 -0
  116. sqlspec/adapters/cockroach_psycopg/litestar/store.py +327 -0
  117. sqlspec/adapters/duckdb/__init__.py +29 -0
  118. sqlspec/adapters/duckdb/_typing.py +104 -0
  119. sqlspec/adapters/duckdb/adk/__init__.py +14 -0
  120. sqlspec/adapters/duckdb/adk/store.py +935 -0
  121. sqlspec/adapters/duckdb/config.py +386 -0
  122. sqlspec/adapters/duckdb/core.cp314-win_amd64.pyd +0 -0
  123. sqlspec/adapters/duckdb/core.py +332 -0
  124. sqlspec/adapters/duckdb/data_dictionary.py +140 -0
  125. sqlspec/adapters/duckdb/driver.py +426 -0
  126. sqlspec/adapters/duckdb/events/__init__.py +5 -0
  127. sqlspec/adapters/duckdb/events/store.py +57 -0
  128. sqlspec/adapters/duckdb/litestar/__init__.py +5 -0
  129. sqlspec/adapters/duckdb/litestar/store.py +330 -0
  130. sqlspec/adapters/duckdb/pool.cp314-win_amd64.pyd +0 -0
  131. sqlspec/adapters/duckdb/pool.py +350 -0
  132. sqlspec/adapters/duckdb/type_converter.cp314-win_amd64.pyd +0 -0
  133. sqlspec/adapters/duckdb/type_converter.py +118 -0
  134. sqlspec/adapters/mysqlconnector/__init__.py +39 -0
  135. sqlspec/adapters/mysqlconnector/_typing.py +186 -0
  136. sqlspec/adapters/mysqlconnector/adk/__init__.py +15 -0
  137. sqlspec/adapters/mysqlconnector/adk/store.py +1183 -0
  138. sqlspec/adapters/mysqlconnector/config.py +421 -0
  139. sqlspec/adapters/mysqlconnector/core.cp314-win_amd64.pyd +0 -0
  140. sqlspec/adapters/mysqlconnector/core.py +472 -0
  141. sqlspec/adapters/mysqlconnector/data_dictionary.py +230 -0
  142. sqlspec/adapters/mysqlconnector/driver.py +516 -0
  143. sqlspec/adapters/mysqlconnector/events/__init__.py +8 -0
  144. sqlspec/adapters/mysqlconnector/events/store.py +98 -0
  145. sqlspec/adapters/mysqlconnector/litestar/__init__.py +5 -0
  146. sqlspec/adapters/mysqlconnector/litestar/store.py +426 -0
  147. sqlspec/adapters/oracledb/__init__.py +39 -0
  148. sqlspec/adapters/oracledb/_json_handlers.cp314-win_amd64.pyd +0 -0
  149. sqlspec/adapters/oracledb/_json_handlers.py +196 -0
  150. sqlspec/adapters/oracledb/_param_types.cp314-win_amd64.pyd +0 -0
  151. sqlspec/adapters/oracledb/_param_types.py +46 -0
  152. sqlspec/adapters/oracledb/_typing.py +258 -0
  153. sqlspec/adapters/oracledb/_uuid_handlers.cp314-win_amd64.pyd +0 -0
  154. sqlspec/adapters/oracledb/_uuid_handlers.py +163 -0
  155. sqlspec/adapters/oracledb/_vector_handlers.cp314-win_amd64.pyd +0 -0
  156. sqlspec/adapters/oracledb/_vector_handlers.py +228 -0
  157. sqlspec/adapters/oracledb/adk/__init__.py +21 -0
  158. sqlspec/adapters/oracledb/adk/store.py +2453 -0
  159. sqlspec/adapters/oracledb/config.py +575 -0
  160. sqlspec/adapters/oracledb/core.cp314-win_amd64.pyd +0 -0
  161. sqlspec/adapters/oracledb/core.py +820 -0
  162. sqlspec/adapters/oracledb/data_dictionary.py +404 -0
  163. sqlspec/adapters/oracledb/driver.py +1277 -0
  164. sqlspec/adapters/oracledb/events/__init__.py +16 -0
  165. sqlspec/adapters/oracledb/events/_hub.py +345 -0
  166. sqlspec/adapters/oracledb/events/backend.py +300 -0
  167. sqlspec/adapters/oracledb/events/store.py +420 -0
  168. sqlspec/adapters/oracledb/litestar/__init__.py +5 -0
  169. sqlspec/adapters/oracledb/litestar/store.py +781 -0
  170. sqlspec/adapters/oracledb/migrations.py +539 -0
  171. sqlspec/adapters/oracledb/type_converter.cp314-win_amd64.pyd +0 -0
  172. sqlspec/adapters/oracledb/type_converter.py +211 -0
  173. sqlspec/adapters/psqlpy/__init__.py +18 -0
  174. sqlspec/adapters/psqlpy/_typing.py +121 -0
  175. sqlspec/adapters/psqlpy/adk/__init__.py +5 -0
  176. sqlspec/adapters/psqlpy/adk/store.py +591 -0
  177. sqlspec/adapters/psqlpy/config.py +376 -0
  178. sqlspec/adapters/psqlpy/core.cp314-win_amd64.pyd +0 -0
  179. sqlspec/adapters/psqlpy/core.py +694 -0
  180. sqlspec/adapters/psqlpy/data_dictionary.py +121 -0
  181. sqlspec/adapters/psqlpy/driver.py +411 -0
  182. sqlspec/adapters/psqlpy/events/__init__.py +6 -0
  183. sqlspec/adapters/psqlpy/events/_hub.py +204 -0
  184. sqlspec/adapters/psqlpy/events/backend.py +210 -0
  185. sqlspec/adapters/psqlpy/events/store.py +20 -0
  186. sqlspec/adapters/psqlpy/litestar/__init__.py +5 -0
  187. sqlspec/adapters/psqlpy/litestar/store.py +270 -0
  188. sqlspec/adapters/psqlpy/type_converter.cp314-win_amd64.pyd +0 -0
  189. sqlspec/adapters/psqlpy/type_converter.py +113 -0
  190. sqlspec/adapters/psycopg/__init__.py +38 -0
  191. sqlspec/adapters/psycopg/_typing.py +218 -0
  192. sqlspec/adapters/psycopg/adk/__init__.py +10 -0
  193. sqlspec/adapters/psycopg/adk/store.py +1106 -0
  194. sqlspec/adapters/psycopg/config.py +695 -0
  195. sqlspec/adapters/psycopg/core.cp314-win_amd64.pyd +0 -0
  196. sqlspec/adapters/psycopg/core.py +520 -0
  197. sqlspec/adapters/psycopg/data_dictionary.py +278 -0
  198. sqlspec/adapters/psycopg/driver.py +1033 -0
  199. sqlspec/adapters/psycopg/events/__init__.py +20 -0
  200. sqlspec/adapters/psycopg/events/_hub.py +388 -0
  201. sqlspec/adapters/psycopg/events/backend.py +398 -0
  202. sqlspec/adapters/psycopg/events/store.py +42 -0
  203. sqlspec/adapters/psycopg/litestar/__init__.py +5 -0
  204. sqlspec/adapters/psycopg/litestar/store.py +554 -0
  205. sqlspec/adapters/psycopg/type_converter.cp314-win_amd64.pyd +0 -0
  206. sqlspec/adapters/psycopg/type_converter.py +93 -0
  207. sqlspec/adapters/pymysql/__init__.py +21 -0
  208. sqlspec/adapters/pymysql/_typing.py +92 -0
  209. sqlspec/adapters/pymysql/adk/__init__.py +5 -0
  210. sqlspec/adapters/pymysql/adk/store.py +657 -0
  211. sqlspec/adapters/pymysql/config.py +176 -0
  212. sqlspec/adapters/pymysql/core.cp314-win_amd64.pyd +0 -0
  213. sqlspec/adapters/pymysql/core.py +469 -0
  214. sqlspec/adapters/pymysql/data_dictionary.py +120 -0
  215. sqlspec/adapters/pymysql/driver.py +271 -0
  216. sqlspec/adapters/pymysql/events/__init__.py +5 -0
  217. sqlspec/adapters/pymysql/events/store.py +50 -0
  218. sqlspec/adapters/pymysql/litestar/__init__.py +5 -0
  219. sqlspec/adapters/pymysql/litestar/store.py +232 -0
  220. sqlspec/adapters/pymysql/pool.cp314-win_amd64.pyd +0 -0
  221. sqlspec/adapters/pymysql/pool.py +184 -0
  222. sqlspec/adapters/spanner/__init__.py +33 -0
  223. sqlspec/adapters/spanner/_typing.py +102 -0
  224. sqlspec/adapters/spanner/adk/__init__.py +5 -0
  225. sqlspec/adapters/spanner/adk/store.py +758 -0
  226. sqlspec/adapters/spanner/config.py +355 -0
  227. sqlspec/adapters/spanner/core.cp314-win_amd64.pyd +0 -0
  228. sqlspec/adapters/spanner/core.py +263 -0
  229. sqlspec/adapters/spanner/data_dictionary.py +120 -0
  230. sqlspec/adapters/spanner/driver.py +407 -0
  231. sqlspec/adapters/spanner/events/__init__.py +5 -0
  232. sqlspec/adapters/spanner/events/store.py +187 -0
  233. sqlspec/adapters/spanner/litestar/__init__.py +5 -0
  234. sqlspec/adapters/spanner/litestar/store.py +291 -0
  235. sqlspec/adapters/spanner/type_converter.cp314-win_amd64.pyd +0 -0
  236. sqlspec/adapters/spanner/type_converter.py +342 -0
  237. sqlspec/adapters/sqlite/__init__.py +19 -0
  238. sqlspec/adapters/sqlite/_typing.py +123 -0
  239. sqlspec/adapters/sqlite/adk/__init__.py +5 -0
  240. sqlspec/adapters/sqlite/adk/store.py +992 -0
  241. sqlspec/adapters/sqlite/config.py +240 -0
  242. sqlspec/adapters/sqlite/core.cp314-win_amd64.pyd +0 -0
  243. sqlspec/adapters/sqlite/core.py +357 -0
  244. sqlspec/adapters/sqlite/data_dictionary.py +198 -0
  245. sqlspec/adapters/sqlite/driver.py +527 -0
  246. sqlspec/adapters/sqlite/events/__init__.py +5 -0
  247. sqlspec/adapters/sqlite/events/store.py +20 -0
  248. sqlspec/adapters/sqlite/litestar/__init__.py +5 -0
  249. sqlspec/adapters/sqlite/litestar/store.py +316 -0
  250. sqlspec/adapters/sqlite/pool.cp314-win_amd64.pyd +0 -0
  251. sqlspec/adapters/sqlite/pool.py +237 -0
  252. sqlspec/adapters/sqlite/type_converter.cp314-win_amd64.pyd +0 -0
  253. sqlspec/adapters/sqlite/type_converter.py +114 -0
  254. sqlspec/base.py +832 -0
  255. sqlspec/builder/__init__.py +181 -0
  256. sqlspec/builder/_base.cp314-win_amd64.pyd +0 -0
  257. sqlspec/builder/_base.py +1071 -0
  258. sqlspec/builder/_column.cp314-win_amd64.pyd +0 -0
  259. sqlspec/builder/_column.py +521 -0
  260. sqlspec/builder/_ddl.cp314-win_amd64.pyd +0 -0
  261. sqlspec/builder/_ddl.py +1691 -0
  262. sqlspec/builder/_delete.cp314-win_amd64.pyd +0 -0
  263. sqlspec/builder/_delete.py +95 -0
  264. sqlspec/builder/_dml.cp314-win_amd64.pyd +0 -0
  265. sqlspec/builder/_dml.py +386 -0
  266. sqlspec/builder/_explain.cp314-win_amd64.pyd +0 -0
  267. sqlspec/builder/_explain.py +579 -0
  268. sqlspec/builder/_expression_wrappers.cp314-win_amd64.pyd +0 -0
  269. sqlspec/builder/_expression_wrappers.py +46 -0
  270. sqlspec/builder/_factory.cp314-win_amd64.pyd +0 -0
  271. sqlspec/builder/_factory.py +1884 -0
  272. sqlspec/builder/_insert.cp314-win_amd64.pyd +0 -0
  273. sqlspec/builder/_insert.py +405 -0
  274. sqlspec/builder/_join.cp314-win_amd64.pyd +0 -0
  275. sqlspec/builder/_join.py +489 -0
  276. sqlspec/builder/_merge.cp314-win_amd64.pyd +0 -0
  277. sqlspec/builder/_merge.py +823 -0
  278. sqlspec/builder/_parsing_utils.cp314-win_amd64.pyd +0 -0
  279. sqlspec/builder/_parsing_utils.py +295 -0
  280. sqlspec/builder/_select.cp314-win_amd64.pyd +0 -0
  281. sqlspec/builder/_select.py +1666 -0
  282. sqlspec/builder/_temporal.cp314-win_amd64.pyd +0 -0
  283. sqlspec/builder/_temporal.py +167 -0
  284. sqlspec/builder/_update.cp314-win_amd64.pyd +0 -0
  285. sqlspec/builder/_update.py +173 -0
  286. sqlspec/builder/_vector_distance.cp314-win_amd64.pyd +0 -0
  287. sqlspec/builder/_vector_distance.py +330 -0
  288. sqlspec/cli.py +1095 -0
  289. sqlspec/config.py +2383 -0
  290. sqlspec/core/__init__.py +372 -0
  291. sqlspec/core/_correlation.cp314-win_amd64.pyd +0 -0
  292. sqlspec/core/_correlation.py +176 -0
  293. sqlspec/core/_pagination.py +42 -0
  294. sqlspec/core/_pool.cp314-win_amd64.pyd +0 -0
  295. sqlspec/core/_pool.py +76 -0
  296. sqlspec/core/cache.cp314-win_amd64.pyd +0 -0
  297. sqlspec/core/cache.py +1085 -0
  298. sqlspec/core/compiler.cp314-win_amd64.pyd +0 -0
  299. sqlspec/core/compiler.py +1090 -0
  300. sqlspec/core/config_runtime.cp314-win_amd64.pyd +0 -0
  301. sqlspec/core/config_runtime.py +174 -0
  302. sqlspec/core/explain.cp314-win_amd64.pyd +0 -0
  303. sqlspec/core/explain.py +275 -0
  304. sqlspec/core/filters.cp314-win_amd64.pyd +0 -0
  305. sqlspec/core/filters.py +969 -0
  306. sqlspec/core/hashing.cp314-win_amd64.pyd +0 -0
  307. sqlspec/core/hashing.py +266 -0
  308. sqlspec/core/metrics.cp314-win_amd64.pyd +0 -0
  309. sqlspec/core/metrics.py +83 -0
  310. sqlspec/core/parameters/__init__.py +72 -0
  311. sqlspec/core/parameters/_alignment.cp314-win_amd64.pyd +0 -0
  312. sqlspec/core/parameters/_alignment.py +283 -0
  313. sqlspec/core/parameters/_converter.cp314-win_amd64.pyd +0 -0
  314. sqlspec/core/parameters/_converter.py +554 -0
  315. sqlspec/core/parameters/_processor.cp314-win_amd64.pyd +0 -0
  316. sqlspec/core/parameters/_processor.py +1182 -0
  317. sqlspec/core/parameters/_registry.cp314-win_amd64.pyd +0 -0
  318. sqlspec/core/parameters/_registry.py +206 -0
  319. sqlspec/core/parameters/_transformers.cp314-win_amd64.pyd +0 -0
  320. sqlspec/core/parameters/_transformers.py +324 -0
  321. sqlspec/core/parameters/_types.cp314-win_amd64.pyd +0 -0
  322. sqlspec/core/parameters/_types.py +536 -0
  323. sqlspec/core/parameters/_validator.cp314-win_amd64.pyd +0 -0
  324. sqlspec/core/parameters/_validator.py +171 -0
  325. sqlspec/core/pipeline.cp314-win_amd64.pyd +0 -0
  326. sqlspec/core/pipeline.py +333 -0
  327. sqlspec/core/query_modifiers.cp314-win_amd64.pyd +0 -0
  328. sqlspec/core/query_modifiers.py +508 -0
  329. sqlspec/core/result/__init__.py +25 -0
  330. sqlspec/core/result/_base.cp314-win_amd64.pyd +0 -0
  331. sqlspec/core/result/_base.py +1232 -0
  332. sqlspec/core/result/_io.cp314-win_amd64.pyd +0 -0
  333. sqlspec/core/result/_io.py +28 -0
  334. sqlspec/core/splitter.cp314-win_amd64.pyd +0 -0
  335. sqlspec/core/splitter.py +1021 -0
  336. sqlspec/core/sqlcommenter.cp314-win_amd64.pyd +0 -0
  337. sqlspec/core/sqlcommenter.py +249 -0
  338. sqlspec/core/stack.cp314-win_amd64.pyd +0 -0
  339. sqlspec/core/stack.py +163 -0
  340. sqlspec/core/statement.cp314-win_amd64.pyd +0 -0
  341. sqlspec/core/statement.py +1865 -0
  342. sqlspec/core/type_converter.cp314-win_amd64.pyd +0 -0
  343. sqlspec/core/type_converter.py +340 -0
  344. sqlspec/data_dictionary/__init__.py +22 -0
  345. sqlspec/data_dictionary/_loader.cp314-win_amd64.pyd +0 -0
  346. sqlspec/data_dictionary/_loader.py +138 -0
  347. sqlspec/data_dictionary/_registry.cp314-win_amd64.pyd +0 -0
  348. sqlspec/data_dictionary/_registry.py +74 -0
  349. sqlspec/data_dictionary/_types.cp314-win_amd64.pyd +0 -0
  350. sqlspec/data_dictionary/_types.py +121 -0
  351. sqlspec/data_dictionary/dialects/__init__.py +21 -0
  352. sqlspec/data_dictionary/dialects/bigquery.cp314-win_amd64.pyd +0 -0
  353. sqlspec/data_dictionary/dialects/bigquery.py +81 -0
  354. sqlspec/data_dictionary/dialects/cockroachdb.cp314-win_amd64.pyd +0 -0
  355. sqlspec/data_dictionary/dialects/cockroachdb.py +54 -0
  356. sqlspec/data_dictionary/dialects/duckdb.cp314-win_amd64.pyd +0 -0
  357. sqlspec/data_dictionary/dialects/duckdb.py +47 -0
  358. sqlspec/data_dictionary/dialects/mysql.cp314-win_amd64.pyd +0 -0
  359. sqlspec/data_dictionary/dialects/mysql.py +53 -0
  360. sqlspec/data_dictionary/dialects/oracle.cp314-win_amd64.pyd +0 -0
  361. sqlspec/data_dictionary/dialects/oracle.py +197 -0
  362. sqlspec/data_dictionary/dialects/postgres.cp314-win_amd64.pyd +0 -0
  363. sqlspec/data_dictionary/dialects/postgres.py +69 -0
  364. sqlspec/data_dictionary/dialects/spanner.cp314-win_amd64.pyd +0 -0
  365. sqlspec/data_dictionary/dialects/spanner.py +37 -0
  366. sqlspec/data_dictionary/dialects/sqlite.cp314-win_amd64.pyd +0 -0
  367. sqlspec/data_dictionary/dialects/sqlite.py +59 -0
  368. sqlspec/data_dictionary/sql/.gitkeep +0 -0
  369. sqlspec/data_dictionary/sql/bigquery/columns.sql +23 -0
  370. sqlspec/data_dictionary/sql/bigquery/foreign_keys.sql +34 -0
  371. sqlspec/data_dictionary/sql/bigquery/indexes.sql +19 -0
  372. sqlspec/data_dictionary/sql/bigquery/tables.sql +33 -0
  373. sqlspec/data_dictionary/sql/bigquery/version.sql +3 -0
  374. sqlspec/data_dictionary/sql/cockroachdb/columns.sql +34 -0
  375. sqlspec/data_dictionary/sql/cockroachdb/foreign_keys.sql +40 -0
  376. sqlspec/data_dictionary/sql/cockroachdb/indexes.sql +32 -0
  377. sqlspec/data_dictionary/sql/cockroachdb/tables.sql +44 -0
  378. sqlspec/data_dictionary/sql/cockroachdb/version.sql +3 -0
  379. sqlspec/data_dictionary/sql/duckdb/columns.sql +23 -0
  380. sqlspec/data_dictionary/sql/duckdb/foreign_keys.sql +36 -0
  381. sqlspec/data_dictionary/sql/duckdb/indexes.sql +19 -0
  382. sqlspec/data_dictionary/sql/duckdb/tables.sql +38 -0
  383. sqlspec/data_dictionary/sql/duckdb/version.sql +3 -0
  384. sqlspec/data_dictionary/sql/mysql/columns.sql +23 -0
  385. sqlspec/data_dictionary/sql/mysql/foreign_keys.sql +28 -0
  386. sqlspec/data_dictionary/sql/mysql/indexes.sql +26 -0
  387. sqlspec/data_dictionary/sql/mysql/tables.sql +33 -0
  388. sqlspec/data_dictionary/sql/mysql/version.sql +3 -0
  389. sqlspec/data_dictionary/sql/oracle/columns.sql +23 -0
  390. sqlspec/data_dictionary/sql/oracle/foreign_keys.sql +48 -0
  391. sqlspec/data_dictionary/sql/oracle/indexes.sql +44 -0
  392. sqlspec/data_dictionary/sql/oracle/tables.sql +25 -0
  393. sqlspec/data_dictionary/sql/oracle/version.sql +20 -0
  394. sqlspec/data_dictionary/sql/postgres/columns.sql +34 -0
  395. sqlspec/data_dictionary/sql/postgres/foreign_keys.sql +40 -0
  396. sqlspec/data_dictionary/sql/postgres/indexes.sql +56 -0
  397. sqlspec/data_dictionary/sql/postgres/tables.sql +44 -0
  398. sqlspec/data_dictionary/sql/postgres/version.sql +3 -0
  399. sqlspec/data_dictionary/sql/spanner/columns.sql +23 -0
  400. sqlspec/data_dictionary/sql/spanner/foreign_keys.sql +70 -0
  401. sqlspec/data_dictionary/sql/spanner/indexes.sql +30 -0
  402. sqlspec/data_dictionary/sql/spanner/tables.sql +9 -0
  403. sqlspec/data_dictionary/sql/spanner/version.sql +3 -0
  404. sqlspec/data_dictionary/sql/sqlite/columns.sql +23 -0
  405. sqlspec/data_dictionary/sql/sqlite/foreign_keys.sql +22 -0
  406. sqlspec/data_dictionary/sql/sqlite/indexes.sql +7 -0
  407. sqlspec/data_dictionary/sql/sqlite/tables.sql +28 -0
  408. sqlspec/data_dictionary/sql/sqlite/version.sql +3 -0
  409. sqlspec/dialects/__init__.py +22 -0
  410. sqlspec/dialects/_compat.cp314-win_amd64.pyd +0 -0
  411. sqlspec/dialects/_compat.py +14 -0
  412. sqlspec/dialects/postgres/__init__.py +9 -0
  413. sqlspec/dialects/postgres/_generators.cp314-win_amd64.pyd +0 -0
  414. sqlspec/dialects/postgres/_generators.py +57 -0
  415. sqlspec/dialects/postgres/_operators.cp314-win_amd64.pyd +0 -0
  416. sqlspec/dialects/postgres/_operators.py +81 -0
  417. sqlspec/dialects/postgres/_paradedb.py +50 -0
  418. sqlspec/dialects/postgres/_pgvector.py +36 -0
  419. sqlspec/dialects/spanner/__init__.py +6 -0
  420. sqlspec/dialects/spanner/_generators.cp314-win_amd64.pyd +0 -0
  421. sqlspec/dialects/spanner/_generators.py +206 -0
  422. sqlspec/dialects/spanner/_spangres.py +77 -0
  423. sqlspec/dialects/spanner/_spanner.py +179 -0
  424. sqlspec/driver/__init__.py +49 -0
  425. sqlspec/driver/_async.cp314-win_amd64.pyd +0 -0
  426. sqlspec/driver/_async.py +1830 -0
  427. sqlspec/driver/_common.cp314-win_amd64.pyd +0 -0
  428. sqlspec/driver/_common.py +2292 -0
  429. sqlspec/driver/_exception_handler.cp314-win_amd64.pyd +0 -0
  430. sqlspec/driver/_exception_handler.py +108 -0
  431. sqlspec/driver/_query_cache.cp314-win_amd64.pyd +0 -0
  432. sqlspec/driver/_query_cache.py +96 -0
  433. sqlspec/driver/_sql_helpers.cp314-win_amd64.pyd +0 -0
  434. sqlspec/driver/_sql_helpers.py +139 -0
  435. sqlspec/driver/_storage_helpers.cp314-win_amd64.pyd +0 -0
  436. sqlspec/driver/_storage_helpers.py +153 -0
  437. sqlspec/driver/_sync.cp314-win_amd64.pyd +0 -0
  438. sqlspec/driver/_sync.py +1817 -0
  439. sqlspec/exceptions.cp314-win_amd64.pyd +0 -0
  440. sqlspec/exceptions.py +480 -0
  441. sqlspec/extensions/__init__.py +0 -0
  442. sqlspec/extensions/adk/__init__.py +84 -0
  443. sqlspec/extensions/adk/_config_utils.py +199 -0
  444. sqlspec/extensions/adk/_types.cp314-win_amd64.pyd +0 -0
  445. sqlspec/extensions/adk/_types.py +41 -0
  446. sqlspec/extensions/adk/artifact/__init__.py +57 -0
  447. sqlspec/extensions/adk/artifact/_types.cp314-win_amd64.pyd +0 -0
  448. sqlspec/extensions/adk/artifact/_types.py +32 -0
  449. sqlspec/extensions/adk/artifact/service.py +508 -0
  450. sqlspec/extensions/adk/artifact/store.py +361 -0
  451. sqlspec/extensions/adk/converters.py +212 -0
  452. sqlspec/extensions/adk/memory/__init__.py +69 -0
  453. sqlspec/extensions/adk/memory/_types.cp314-win_amd64.pyd +0 -0
  454. sqlspec/extensions/adk/memory/_types.py +30 -0
  455. sqlspec/extensions/adk/memory/converters.py +225 -0
  456. sqlspec/extensions/adk/memory/service.py +316 -0
  457. sqlspec/extensions/adk/memory/store.py +525 -0
  458. sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +184 -0
  459. sqlspec/extensions/adk/migrations/__init__.py +0 -0
  460. sqlspec/extensions/adk/service.py +279 -0
  461. sqlspec/extensions/adk/store.py +590 -0
  462. sqlspec/extensions/events/__init__.py +51 -0
  463. sqlspec/extensions/events/_channel.py +703 -0
  464. sqlspec/extensions/events/_hints.cp314-win_amd64.pyd +0 -0
  465. sqlspec/extensions/events/_hints.py +45 -0
  466. sqlspec/extensions/events/_models.py +23 -0
  467. sqlspec/extensions/events/_payload.cp314-win_amd64.pyd +0 -0
  468. sqlspec/extensions/events/_payload.py +69 -0
  469. sqlspec/extensions/events/_protocols.py +134 -0
  470. sqlspec/extensions/events/_queue.py +462 -0
  471. sqlspec/extensions/events/_store.py +209 -0
  472. sqlspec/extensions/events/migrations/0001_create_event_queue.py +59 -0
  473. sqlspec/extensions/events/migrations/__init__.py +3 -0
  474. sqlspec/extensions/fastapi/__init__.py +22 -0
  475. sqlspec/extensions/fastapi/extension.py +391 -0
  476. sqlspec/extensions/fastapi/providers.cp314-win_amd64.pyd +0 -0
  477. sqlspec/extensions/fastapi/providers.py +712 -0
  478. sqlspec/extensions/flask/__init__.py +38 -0
  479. sqlspec/extensions/flask/_state.py +87 -0
  480. sqlspec/extensions/flask/_utils.py +71 -0
  481. sqlspec/extensions/flask/extension.py +539 -0
  482. sqlspec/extensions/litestar/__init__.py +31 -0
  483. sqlspec/extensions/litestar/_utils.py +52 -0
  484. sqlspec/extensions/litestar/channels.py +165 -0
  485. sqlspec/extensions/litestar/cli.py +102 -0
  486. sqlspec/extensions/litestar/config.py +90 -0
  487. sqlspec/extensions/litestar/handlers.py +316 -0
  488. sqlspec/extensions/litestar/migrations/0001_create_session_table.py +137 -0
  489. sqlspec/extensions/litestar/migrations/__init__.py +3 -0
  490. sqlspec/extensions/litestar/plugin.py +1066 -0
  491. sqlspec/extensions/litestar/providers.cp314-win_amd64.pyd +0 -0
  492. sqlspec/extensions/litestar/providers.py +784 -0
  493. sqlspec/extensions/litestar/store.py +298 -0
  494. sqlspec/extensions/otel/__init__.py +58 -0
  495. sqlspec/extensions/prometheus/__init__.py +113 -0
  496. sqlspec/extensions/sanic/__init__.py +19 -0
  497. sqlspec/extensions/sanic/_state.py +43 -0
  498. sqlspec/extensions/sanic/_utils.py +127 -0
  499. sqlspec/extensions/sanic/extension.py +647 -0
  500. sqlspec/extensions/starlette/__init__.py +22 -0
  501. sqlspec/extensions/starlette/_state.py +42 -0
  502. sqlspec/extensions/starlette/_utils.py +96 -0
  503. sqlspec/extensions/starlette/extension.py +374 -0
  504. sqlspec/extensions/starlette/middleware.py +281 -0
  505. sqlspec/loader.cp314-win_amd64.pyd +0 -0
  506. sqlspec/loader.py +727 -0
  507. sqlspec/migrations/__init__.py +39 -0
  508. sqlspec/migrations/base.cp314-win_amd64.pyd +0 -0
  509. sqlspec/migrations/base.py +862 -0
  510. sqlspec/migrations/commands.py +2151 -0
  511. sqlspec/migrations/context.cp314-win_amd64.pyd +0 -0
  512. sqlspec/migrations/context.py +157 -0
  513. sqlspec/migrations/fix.cp314-win_amd64.pyd +0 -0
  514. sqlspec/migrations/fix.py +204 -0
  515. sqlspec/migrations/loaders.cp314-win_amd64.pyd +0 -0
  516. sqlspec/migrations/loaders.py +443 -0
  517. sqlspec/migrations/runner.cp314-win_amd64.pyd +0 -0
  518. sqlspec/migrations/runner.py +1195 -0
  519. sqlspec/migrations/squash.cp314-win_amd64.pyd +0 -0
  520. sqlspec/migrations/squash.py +490 -0
  521. sqlspec/migrations/templates.cp314-win_amd64.pyd +0 -0
  522. sqlspec/migrations/templates.py +234 -0
  523. sqlspec/migrations/tracker.cp314-win_amd64.pyd +0 -0
  524. sqlspec/migrations/tracker.py +792 -0
  525. sqlspec/migrations/utils.cp314-win_amd64.pyd +0 -0
  526. sqlspec/migrations/utils.py +256 -0
  527. sqlspec/migrations/validation.cp314-win_amd64.pyd +0 -0
  528. sqlspec/migrations/validation.py +359 -0
  529. sqlspec/migrations/version.cp314-win_amd64.pyd +0 -0
  530. sqlspec/migrations/version.py +446 -0
  531. sqlspec/observability/__init__.py +57 -0
  532. sqlspec/observability/_common.cp314-win_amd64.pyd +0 -0
  533. sqlspec/observability/_common.py +77 -0
  534. sqlspec/observability/_config.cp314-win_amd64.pyd +0 -0
  535. sqlspec/observability/_config.py +364 -0
  536. sqlspec/observability/_diagnostics.cp314-win_amd64.pyd +0 -0
  537. sqlspec/observability/_diagnostics.py +74 -0
  538. sqlspec/observability/_dispatcher.cp314-win_amd64.pyd +0 -0
  539. sqlspec/observability/_dispatcher.py +200 -0
  540. sqlspec/observability/_formatters/__init__.py +13 -0
  541. sqlspec/observability/_formatters/_aws.cp314-win_amd64.pyd +0 -0
  542. sqlspec/observability/_formatters/_aws.py +102 -0
  543. sqlspec/observability/_formatters/_azure.cp314-win_amd64.pyd +0 -0
  544. sqlspec/observability/_formatters/_azure.py +96 -0
  545. sqlspec/observability/_formatters/_base.cp314-win_amd64.pyd +0 -0
  546. sqlspec/observability/_formatters/_base.py +57 -0
  547. sqlspec/observability/_formatters/_gcp.cp314-win_amd64.pyd +0 -0
  548. sqlspec/observability/_formatters/_gcp.py +131 -0
  549. sqlspec/observability/_formatting.py +58 -0
  550. sqlspec/observability/_observer.cp314-win_amd64.pyd +0 -0
  551. sqlspec/observability/_observer.py +361 -0
  552. sqlspec/observability/_runtime.cp314-win_amd64.pyd +0 -0
  553. sqlspec/observability/_runtime.py +461 -0
  554. sqlspec/observability/_sampling.cp314-win_amd64.pyd +0 -0
  555. sqlspec/observability/_sampling.py +188 -0
  556. sqlspec/observability/_spans.cp314-win_amd64.pyd +0 -0
  557. sqlspec/observability/_spans.py +161 -0
  558. sqlspec/protocols.py +955 -0
  559. sqlspec/py.typed +0 -0
  560. sqlspec/service.py +433 -0
  561. sqlspec/storage/__init__.py +48 -0
  562. sqlspec/storage/_arrow_payload.py +68 -0
  563. sqlspec/storage/_paths.cp314-win_amd64.pyd +0 -0
  564. sqlspec/storage/_paths.py +58 -0
  565. sqlspec/storage/_utils.py +46 -0
  566. sqlspec/storage/backends/__init__.py +1 -0
  567. sqlspec/storage/backends/base.cp314-win_amd64.pyd +0 -0
  568. sqlspec/storage/backends/base.py +374 -0
  569. sqlspec/storage/backends/fsspec.py +574 -0
  570. sqlspec/storage/backends/local.py +468 -0
  571. sqlspec/storage/backends/obstore.py +956 -0
  572. sqlspec/storage/errors.cp314-win_amd64.pyd +0 -0
  573. sqlspec/storage/errors.py +102 -0
  574. sqlspec/storage/pipeline.cp314-win_amd64.pyd +0 -0
  575. sqlspec/storage/pipeline.py +628 -0
  576. sqlspec/storage/registry.cp314-win_amd64.pyd +0 -0
  577. sqlspec/storage/registry.py +329 -0
  578. sqlspec/typing.py +405 -0
  579. sqlspec/utils/__init__.py +7 -0
  580. sqlspec/utils/arrow_helpers.py +384 -0
  581. sqlspec/utils/config_tools.cp314-win_amd64.pyd +0 -0
  582. sqlspec/utils/config_tools.py +314 -0
  583. sqlspec/utils/correlation.cp314-win_amd64.pyd +0 -0
  584. sqlspec/utils/correlation.py +134 -0
  585. sqlspec/utils/deprecation.cp314-win_amd64.pyd +0 -0
  586. sqlspec/utils/deprecation.py +157 -0
  587. sqlspec/utils/dispatch.cp314-win_amd64.pyd +0 -0
  588. sqlspec/utils/dispatch.py +101 -0
  589. sqlspec/utils/fixtures.cp314-win_amd64.pyd +0 -0
  590. sqlspec/utils/fixtures.py +260 -0
  591. sqlspec/utils/logging.cp314-win_amd64.pyd +0 -0
  592. sqlspec/utils/logging.py +251 -0
  593. sqlspec/utils/module_loader.py +306 -0
  594. sqlspec/utils/portal.cp314-win_amd64.pyd +0 -0
  595. sqlspec/utils/portal.py +377 -0
  596. sqlspec/utils/schema.cp314-win_amd64.pyd +0 -0
  597. sqlspec/utils/schema.py +1040 -0
  598. sqlspec/utils/serializers/__init__.py +30 -0
  599. sqlspec/utils/serializers/_json.cp314-win_amd64.pyd +0 -0
  600. sqlspec/utils/serializers/_json.py +415 -0
  601. sqlspec/utils/serializers/_numpy.cp314-win_amd64.pyd +0 -0
  602. sqlspec/utils/serializers/_numpy.py +65 -0
  603. sqlspec/utils/serializers/_schema.cp314-win_amd64.pyd +0 -0
  604. sqlspec/utils/serializers/_schema.py +285 -0
  605. sqlspec/utils/singleton.cp314-win_amd64.pyd +0 -0
  606. sqlspec/utils/singleton.py +41 -0
  607. sqlspec/utils/sync_tools.cp314-win_amd64.pyd +0 -0
  608. sqlspec/utils/sync_tools.py +316 -0
  609. sqlspec/utils/text.cp314-win_amd64.pyd +0 -0
  610. sqlspec/utils/text.py +109 -0
  611. sqlspec/utils/type_converters.cp314-win_amd64.pyd +0 -0
  612. sqlspec/utils/type_converters.py +216 -0
  613. sqlspec/utils/type_guards.cp314-win_amd64.pyd +0 -0
  614. sqlspec/utils/type_guards.py +1508 -0
  615. sqlspec/utils/uuids.cp314-win_amd64.pyd +0 -0
  616. sqlspec/utils/uuids.py +241 -0
  617. sqlspec-0.47.0.dist-info/METADATA +202 -0
  618. sqlspec-0.47.0.dist-info/RECORD +621 -0
  619. sqlspec-0.47.0.dist-info/WHEEL +4 -0
  620. sqlspec-0.47.0.dist-info/entry_points.txt +6 -0
  621. sqlspec-0.47.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,554 @@
1
+ """Parameter style conversion utilities."""
2
+
3
+ from collections.abc import Callable, Mapping, Sequence
4
+ from typing import Any
5
+
6
+ from mypy_extensions import mypyc_attr
7
+
8
+ from sqlspec.core.parameters._types import (
9
+ ConvertedParameters,
10
+ NamedParameterOutput,
11
+ ParameterInfo,
12
+ ParameterMapping,
13
+ ParameterPayload,
14
+ ParameterSequence,
15
+ ParameterStyle,
16
+ PositionalParameterOutput,
17
+ )
18
+ from sqlspec.core.parameters._validator import ParameterValidator
19
+ from sqlspec.exceptions import SQLSpecError
20
+
21
+ __all__ = ("ParameterConverter",)
22
+
23
+ _ORDERED_PARAM_INFO_MIN_SIZE = 2
24
+
25
+
26
+ def _placeholder_qmark(_: Any) -> str:
27
+ return "?"
28
+
29
+
30
+ def _placeholder_numeric(index: Any) -> str:
31
+ return f"${int(index) + 1}"
32
+
33
+
34
+ def _placeholder_named_colon(name: Any) -> str:
35
+ return f":{name}"
36
+
37
+
38
+ def _placeholder_positional_colon(index: Any) -> str:
39
+ return f":{int(index) + 1}"
40
+
41
+
42
+ def _placeholder_named_at(name: Any) -> str:
43
+ return f"@{name}"
44
+
45
+
46
+ def _placeholder_named_dollar(name: Any) -> str:
47
+ return f"${name}"
48
+
49
+
50
+ def _placeholder_named_pyformat(name: Any) -> str:
51
+ return f"%({name})s"
52
+
53
+
54
+ def _placeholder_positional_pyformat(_: Any) -> str:
55
+ return "%s"
56
+
57
+
58
+ def _ordered_parameter_info(param_info: "list[ParameterInfo]") -> "list[ParameterInfo]":
59
+ if len(param_info) < _ORDERED_PARAM_INFO_MIN_SIZE:
60
+ return param_info
61
+
62
+ previous_position = param_info[0].position
63
+ for param in param_info[1:]:
64
+ if param.position < previous_position:
65
+ return sorted(param_info, key=lambda item: item.position)
66
+ previous_position = param.position
67
+ return param_info
68
+
69
+
70
+ def _single_parameter_style(param_info: "list[ParameterInfo]") -> "ParameterStyle | None":
71
+ if not param_info:
72
+ return None
73
+
74
+ style = param_info[0].style
75
+ for param in param_info[1:]:
76
+ if param.style != style:
77
+ return None
78
+ return style
79
+
80
+
81
+ def _is_positional_style(style: "ParameterStyle") -> bool:
82
+ return style in {
83
+ ParameterStyle.QMARK,
84
+ ParameterStyle.NUMERIC,
85
+ ParameterStyle.POSITIONAL_PYFORMAT,
86
+ ParameterStyle.POSITIONAL_COLON,
87
+ }
88
+
89
+
90
+ def _parameter_lookup_key(param: "ParameterInfo") -> str:
91
+ if param.style in {ParameterStyle.QMARK, ParameterStyle.POSITIONAL_PYFORMAT}:
92
+ return f"{param.placeholder_text}_{param.ordinal}"
93
+ return param.placeholder_text
94
+
95
+
96
+ def _normalized_named_parameter_name(param: "ParameterInfo") -> str:
97
+ param_name = param.name or f"param_{param.ordinal}"
98
+ if param_name.isdigit():
99
+ return f"param_{param.ordinal}"
100
+ return param_name
101
+
102
+
103
+ @mypyc_attr(allow_interpreted_subclasses=False)
104
+ class ParameterConverter:
105
+ """Parameter style conversion helper."""
106
+
107
+ __slots__ = ("_placeholder_generators", "validator")
108
+
109
+ def __init__(self, validator: "ParameterValidator | None" = None) -> None:
110
+ self.validator = validator or ParameterValidator()
111
+
112
+ self._placeholder_generators: dict[ParameterStyle, Callable[[Any], str]] = {
113
+ ParameterStyle.QMARK: _placeholder_qmark,
114
+ ParameterStyle.NUMERIC: _placeholder_numeric,
115
+ ParameterStyle.NAMED_COLON: _placeholder_named_colon,
116
+ ParameterStyle.POSITIONAL_COLON: _placeholder_positional_colon,
117
+ ParameterStyle.NAMED_AT: _placeholder_named_at,
118
+ ParameterStyle.NAMED_DOLLAR: _placeholder_named_dollar,
119
+ ParameterStyle.NAMED_PYFORMAT: _placeholder_named_pyformat,
120
+ ParameterStyle.POSITIONAL_PYFORMAT: _placeholder_positional_pyformat,
121
+ }
122
+
123
+ def convert_placeholder_style(
124
+ self,
125
+ sql: str,
126
+ parameters: "ParameterPayload",
127
+ target_style: "ParameterStyle",
128
+ is_many: bool = False,
129
+ *,
130
+ strict_named_parameters: bool = True,
131
+ param_info: "list[ParameterInfo] | None" = None,
132
+ ) -> "tuple[str, ConvertedParameters]":
133
+ extracted_param_info = param_info if param_info is not None else self.validator.extract_parameters(sql)
134
+
135
+ if target_style == ParameterStyle.STATIC:
136
+ return self._embed_static_parameters(sql, parameters, extracted_param_info)
137
+
138
+ current_style = _single_parameter_style(extracted_param_info)
139
+ if current_style is not None and target_style == current_style:
140
+ converted_parameters = self._convert_parameter_format(
141
+ parameters,
142
+ extracted_param_info,
143
+ target_style,
144
+ parameters,
145
+ preserve_parameter_format=True,
146
+ is_many=is_many,
147
+ strict_named_parameters=strict_named_parameters,
148
+ )
149
+ return sql, converted_parameters
150
+
151
+ converted_sql = self._convert_placeholders_to_style(sql, extracted_param_info, target_style)
152
+ converted_parameters = self._convert_parameter_format(
153
+ parameters,
154
+ extracted_param_info,
155
+ target_style,
156
+ parameters,
157
+ preserve_parameter_format=True,
158
+ is_many=is_many,
159
+ strict_named_parameters=strict_named_parameters,
160
+ )
161
+ return converted_sql, converted_parameters
162
+
163
+ def _build_conversion_plan(
164
+ self, param_info: "list[ParameterInfo]", target_style: "ParameterStyle"
165
+ ) -> "tuple[list[ParameterInfo], dict[str, int]]":
166
+ ordered_params = _ordered_parameter_info(param_info)
167
+
168
+ unique_params: dict[str, int] = {}
169
+ for param in ordered_params:
170
+ param_key = _parameter_lookup_key(param)
171
+ if param_key not in unique_params:
172
+ unique_params[param_key] = len(unique_params)
173
+
174
+ return ordered_params, unique_params
175
+
176
+ def _convert_placeholders_to_style(
177
+ self, sql: str, param_info: "list[ParameterInfo]", target_style: "ParameterStyle"
178
+ ) -> str:
179
+ generator = self._placeholder_generators.get(target_style)
180
+ if generator is None:
181
+ msg = f"Unsupported target parameter style: {target_style}"
182
+ raise ValueError(msg)
183
+
184
+ ordered_params, unique_params = self._build_conversion_plan(param_info, target_style)
185
+
186
+ placeholder_text_len_cache: dict[str, int] = {}
187
+ # Build SQL using forward iteration with list join (O(n) vs O(n^2) string slicing)
188
+ segments: list[str] = []
189
+ last_end = 0
190
+
191
+ is_positional_style = _is_positional_style(target_style)
192
+
193
+ for param in ordered_params:
194
+ # Cache placeholder text length
195
+ if param.placeholder_text not in placeholder_text_len_cache:
196
+ placeholder_text_len_cache[param.placeholder_text] = len(param.placeholder_text)
197
+ text_len = placeholder_text_len_cache[param.placeholder_text]
198
+
199
+ # Generate new placeholder based on target style
200
+ if is_positional_style:
201
+ param_key = _parameter_lookup_key(param)
202
+ new_placeholder = generator(unique_params[param_key])
203
+ else:
204
+ param_name = _normalized_named_parameter_name(param)
205
+ new_placeholder = generator(param_name)
206
+
207
+ # Append segment before this placeholder and the new placeholder
208
+ segments.extend((sql[last_end : param.position], new_placeholder))
209
+ last_end = param.position + text_len
210
+
211
+ # Append remaining SQL after last placeholder
212
+ segments.append(sql[last_end:])
213
+
214
+ return "".join(segments)
215
+
216
+ def convert_parameter_info_style(
217
+ self, param_info: "list[ParameterInfo]", target_style: "ParameterStyle"
218
+ ) -> "list[ParameterInfo]":
219
+ generator = self._placeholder_generators.get(target_style)
220
+ if generator is None:
221
+ msg = f"Unsupported target parameter style: {target_style}"
222
+ raise ValueError(msg)
223
+
224
+ ordered_params, unique_params = self._build_conversion_plan(param_info, target_style)
225
+ is_positional_style = _is_positional_style(target_style)
226
+ converted_param_info: list[ParameterInfo] = []
227
+ delta = 0
228
+
229
+ for param in ordered_params:
230
+ if is_positional_style:
231
+ converted_index = unique_params[_parameter_lookup_key(param)]
232
+ placeholder_text = generator(converted_index)
233
+ name = None
234
+ if target_style in {ParameterStyle.NUMERIC, ParameterStyle.POSITIONAL_COLON}:
235
+ name = str(converted_index + 1)
236
+ else:
237
+ name = _normalized_named_parameter_name(param)
238
+ placeholder_text = generator(name)
239
+
240
+ converted_position = param.position + delta
241
+ converted_param_info.append(
242
+ ParameterInfo(
243
+ name=name,
244
+ style=target_style,
245
+ position=converted_position,
246
+ ordinal=param.ordinal,
247
+ placeholder_text=placeholder_text,
248
+ )
249
+ )
250
+ delta += len(placeholder_text) - len(param.placeholder_text)
251
+
252
+ return converted_param_info
253
+
254
+ def _convert_sequence_to_dict(
255
+ self, parameters: "ParameterSequence", param_info: "list[ParameterInfo]"
256
+ ) -> "NamedParameterOutput":
257
+ param_dict: dict[str, Any] = {}
258
+ for i, param in enumerate(param_info):
259
+ if i < len(parameters):
260
+ name = param.name or f"param_{param.ordinal}"
261
+ param_dict[name] = parameters[i]
262
+ return param_dict
263
+
264
+ def _align_mapping_for_named_style(
265
+ self, parameters: "Mapping[str, Any]", param_info: "list[ParameterInfo]"
266
+ ) -> "NamedParameterOutput":
267
+ """Align a mapping with the placeholder names of a named-style target."""
268
+ expected_names = {param.name or f"param_{param.ordinal}" for param in param_info}
269
+ if expected_names.issubset(parameters.keys()):
270
+ return dict(parameters)
271
+ return self._convert_sequence_to_dict(list(parameters.values()), param_info)
272
+
273
+ def _extract_param_value_mixed_styles(
274
+ self, param: "ParameterInfo", parameters: "ParameterMapping", param_keys: "list[str]"
275
+ ) -> "tuple[object | None, bool]":
276
+ if param.name and param.name in parameters:
277
+ return parameters[param.name], True
278
+ if param.placeholder_text in parameters:
279
+ return parameters[param.placeholder_text], True
280
+
281
+ if (
282
+ param.style == ParameterStyle.NUMERIC
283
+ and param.name
284
+ and param.name.isdigit()
285
+ and param.ordinal < len(param_keys)
286
+ ):
287
+ key_to_use = param_keys[param.ordinal]
288
+ return parameters[key_to_use], True
289
+
290
+ if f"param_{param.ordinal}" in parameters:
291
+ return parameters[f"param_{param.ordinal}"], True
292
+
293
+ ordinal_key = str(param.ordinal + 1)
294
+ if ordinal_key in parameters:
295
+ return parameters[ordinal_key], True
296
+
297
+ try:
298
+ ordered_keys = list(parameters.keys())
299
+ except AttributeError:
300
+ ordered_keys = []
301
+ if ordered_keys and param.ordinal < len(ordered_keys):
302
+ key = ordered_keys[param.ordinal]
303
+ if key in parameters:
304
+ return parameters[key], True
305
+
306
+ return None, False
307
+
308
+ def _extract_param_value_single_style(
309
+ self, param: "ParameterInfo", parameters: "ParameterMapping"
310
+ ) -> "tuple[object | None, bool]":
311
+ if param.name and param.name in parameters:
312
+ return parameters[param.name], True
313
+ if param.placeholder_text in parameters:
314
+ return parameters[param.placeholder_text], True
315
+ if f"param_{param.ordinal}" in parameters:
316
+ return parameters[f"param_{param.ordinal}"], True
317
+
318
+ ordinal_key = str(param.ordinal + 1)
319
+ if ordinal_key in parameters:
320
+ return parameters[ordinal_key], True
321
+
322
+ try:
323
+ ordered_keys = list(parameters.keys())
324
+ except AttributeError:
325
+ ordered_keys = []
326
+ if ordered_keys and param.ordinal < len(ordered_keys):
327
+ key = ordered_keys[param.ordinal]
328
+ if key in parameters:
329
+ return parameters[key], True
330
+
331
+ return None, False
332
+
333
+ def _collect_missing_named_parameters(
334
+ self, param_info: "list[ParameterInfo]", parameters: "ParameterMapping"
335
+ ) -> "list[str]":
336
+ named_styles = {
337
+ ParameterStyle.NAMED_COLON,
338
+ ParameterStyle.NAMED_AT,
339
+ ParameterStyle.NAMED_DOLLAR,
340
+ ParameterStyle.NAMED_PYFORMAT,
341
+ }
342
+ missing: list[str] = []
343
+ for param in param_info:
344
+ if param.style not in named_styles or not param.name:
345
+ continue
346
+ if param.name in parameters or param.placeholder_text in parameters:
347
+ continue
348
+ missing.append(param.name)
349
+ return sorted(set(missing))
350
+
351
+ def _preserve_original_format(
352
+ self, param_values: "list[Any]", original_parameters: object
353
+ ) -> "PositionalParameterOutput":
354
+ if isinstance(original_parameters, tuple):
355
+ return tuple(param_values)
356
+ if isinstance(original_parameters, list):
357
+ return param_values
358
+ if isinstance(original_parameters, Mapping):
359
+ return tuple(param_values)
360
+ return tuple(param_values)
361
+
362
+ def _convert_parameter_format(
363
+ self,
364
+ parameters: "ParameterPayload",
365
+ param_info: "list[ParameterInfo]",
366
+ target_style: "ParameterStyle",
367
+ original_parameters: object | None = None,
368
+ preserve_parameter_format: bool = False,
369
+ is_many: bool = False,
370
+ *,
371
+ strict_named_parameters: bool = True,
372
+ ) -> "ConvertedParameters":
373
+ if not parameters or not param_info:
374
+ # When parameters is falsy, it's either None or empty - return None
375
+ if parameters is None:
376
+ return None
377
+ # For empty containers, convert to concrete type
378
+ if isinstance(parameters, Mapping):
379
+ return dict(parameters)
380
+ if isinstance(parameters, (list, tuple)):
381
+ return list(parameters) if isinstance(parameters, list) else tuple(parameters)
382
+ return None
383
+
384
+ if (
385
+ is_many
386
+ and isinstance(parameters, Sequence)
387
+ and not isinstance(parameters, (str, bytes, bytearray))
388
+ and parameters
389
+ ):
390
+ normalized_sets: list[Any] = [
391
+ self._convert_parameter_format(
392
+ param_set,
393
+ param_info,
394
+ target_style,
395
+ param_set,
396
+ preserve_parameter_format,
397
+ is_many=False,
398
+ strict_named_parameters=strict_named_parameters,
399
+ )
400
+ for param_set in parameters
401
+ ]
402
+ if preserve_parameter_format and isinstance(parameters, tuple):
403
+ return tuple(normalized_sets)
404
+ return normalized_sets
405
+
406
+ is_named_style = target_style in {
407
+ ParameterStyle.NAMED_COLON,
408
+ ParameterStyle.NAMED_AT,
409
+ ParameterStyle.NAMED_DOLLAR,
410
+ ParameterStyle.NAMED_PYFORMAT,
411
+ }
412
+ if is_named_style:
413
+ if isinstance(parameters, Mapping):
414
+ return self._align_mapping_for_named_style(parameters, param_info)
415
+ if isinstance(parameters, Sequence) and not isinstance(parameters, (str, bytes)):
416
+ return self._convert_sequence_to_dict(parameters, param_info)
417
+
418
+ elif isinstance(parameters, Sequence) and not isinstance(parameters, (str, bytes)):
419
+ return list(parameters) if isinstance(parameters, list) else tuple(parameters)
420
+
421
+ elif isinstance(parameters, Mapping):
422
+ if strict_named_parameters:
423
+ missing_names = self._collect_missing_named_parameters(param_info, parameters)
424
+ if missing_names:
425
+ msg = f"Missing named parameter(s): {', '.join(missing_names)}"
426
+ raise SQLSpecError(msg)
427
+ param_values: list[Any] = []
428
+ parameter_styles = {p.style for p in param_info}
429
+ has_mixed_styles = len(parameter_styles) > 1
430
+
431
+ unique_params: dict[str, Any] = {}
432
+ param_order: list[str] = []
433
+
434
+ if has_mixed_styles:
435
+ param_keys = list(parameters.keys())
436
+ for param in param_info:
437
+ param_key = param.placeholder_text if param.name else f"{param.placeholder_text}_{param.ordinal}"
438
+ if param_key not in unique_params:
439
+ value, found = self._extract_param_value_mixed_styles(param, parameters, param_keys)
440
+ if found:
441
+ unique_params[param_key] = value
442
+ param_order.append(param_key)
443
+ else:
444
+ for param in param_info:
445
+ param_key = param.placeholder_text if param.name else f"{param.placeholder_text}_{param.ordinal}"
446
+ if param_key not in unique_params:
447
+ value, found = self._extract_param_value_single_style(param, parameters)
448
+ if found:
449
+ unique_params[param_key] = value
450
+ param_order.append(param_key)
451
+
452
+ needs_expansion = target_style in {
453
+ ParameterStyle.QMARK,
454
+ ParameterStyle.POSITIONAL_PYFORMAT,
455
+ ParameterStyle.POSITIONAL_COLON,
456
+ }
457
+
458
+ if needs_expansion:
459
+ param_values = []
460
+ for param in param_info:
461
+ param_key = param.placeholder_text if param.name else f"{param.placeholder_text}_{param.ordinal}"
462
+ if param_key in unique_params:
463
+ param_values.append(unique_params[param_key])
464
+ else:
465
+ param_values = [unique_params[param_key] for param_key in param_order]
466
+
467
+ if preserve_parameter_format and original_parameters is not None:
468
+ return self._preserve_original_format(param_values, original_parameters)
469
+
470
+ return param_values
471
+
472
+ # Fallback for non-standard parameters - return None
473
+ return None
474
+
475
+ def _embed_static_parameters(
476
+ self, sql: str, parameters: "ParameterPayload", param_info: "list[ParameterInfo]"
477
+ ) -> "tuple[str, None]":
478
+ if not param_info:
479
+ return sql, None
480
+
481
+ unique_params: dict[str, int] = {}
482
+ for param in param_info:
483
+ if param.style in {ParameterStyle.QMARK, ParameterStyle.POSITIONAL_PYFORMAT}:
484
+ param_key = f"{param.placeholder_text}_{param.ordinal}"
485
+ elif (param.style == ParameterStyle.NUMERIC and param.name) or param.name:
486
+ param_key = param.placeholder_text
487
+ else:
488
+ param_key = f"{param.placeholder_text}_{param.ordinal}"
489
+
490
+ if param_key not in unique_params:
491
+ unique_params[param_key] = len(unique_params)
492
+
493
+ static_sql = sql
494
+ for param in reversed(param_info):
495
+ param_value = self._get_parameter_value_with_reuse(parameters, param, unique_params)
496
+
497
+ if param_value is None:
498
+ literal = "NULL"
499
+ elif isinstance(param_value, str):
500
+ escaped = param_value.replace("'", "''")
501
+ literal = f"'{escaped}'"
502
+ elif isinstance(param_value, bool):
503
+ literal = "TRUE" if param_value else "FALSE"
504
+ elif isinstance(param_value, (int, float)):
505
+ literal = str(param_value)
506
+ else:
507
+ literal = f"'{param_value!s}'"
508
+
509
+ static_sql = (
510
+ static_sql[: param.position] + literal + static_sql[param.position + len(param.placeholder_text) :]
511
+ )
512
+
513
+ return static_sql, None
514
+
515
+ def _get_parameter_value(self, parameters: "ParameterPayload", param: "ParameterInfo") -> object | None:
516
+ if isinstance(parameters, Mapping):
517
+ if param.name and param.name in parameters:
518
+ return parameters[param.name]
519
+ if f"param_{param.ordinal}" in parameters:
520
+ return parameters[f"param_{param.ordinal}"]
521
+ if str(param.ordinal + 1) in parameters:
522
+ return parameters[str(param.ordinal + 1)]
523
+ elif isinstance(parameters, Sequence) and not isinstance(parameters, (str, bytes)):
524
+ if param.ordinal < len(parameters):
525
+ return parameters[param.ordinal]
526
+
527
+ return None
528
+
529
+ def _get_parameter_value_with_reuse(
530
+ self, parameters: "ParameterPayload", param: "ParameterInfo", unique_params: "dict[str, int]"
531
+ ) -> object | None:
532
+ if param.style in {ParameterStyle.QMARK, ParameterStyle.POSITIONAL_PYFORMAT}:
533
+ param_key = f"{param.placeholder_text}_{param.ordinal}"
534
+ elif (param.style == ParameterStyle.NUMERIC and param.name) or param.name:
535
+ param_key = param.placeholder_text
536
+ else:
537
+ param_key = f"{param.placeholder_text}_{param.ordinal}"
538
+
539
+ unique_ordinal = unique_params.get(param_key)
540
+ if unique_ordinal is None:
541
+ return None
542
+
543
+ if isinstance(parameters, Mapping):
544
+ if param.name and param.name in parameters:
545
+ return parameters[param.name]
546
+ if f"param_{unique_ordinal}" in parameters:
547
+ return parameters[f"param_{unique_ordinal}"]
548
+ if str(unique_ordinal + 1) in parameters:
549
+ return parameters[str(unique_ordinal + 1)]
550
+ elif isinstance(parameters, Sequence) and not isinstance(parameters, (str, bytes)):
551
+ if unique_ordinal < len(parameters):
552
+ return parameters[unique_ordinal]
553
+
554
+ return None