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,95 @@
1
+ """DELETE statement builder.
2
+
3
+ Provides a fluent interface for building SQL DELETE queries with
4
+ parameter binding and validation.
5
+ """
6
+
7
+ from typing import TYPE_CHECKING, Any
8
+
9
+ from sqlglot import exp
10
+
11
+ if TYPE_CHECKING:
12
+ from sqlglot.dialects.dialect import DialectType
13
+
14
+ from sqlspec.builder._base import BuiltQuery, QueryBuilder
15
+ from sqlspec.builder._dml import DeleteFromClauseMixin
16
+ from sqlspec.builder._explain import ExplainMixin
17
+ from sqlspec.builder._select import ReturningClauseMixin, WhereClauseMixin
18
+ from sqlspec.core import SQLResult
19
+ from sqlspec.exceptions import SQLBuilderError
20
+
21
+ __all__ = ("Delete",)
22
+
23
+
24
+ class Delete(QueryBuilder, WhereClauseMixin, ReturningClauseMixin, DeleteFromClauseMixin, ExplainMixin):
25
+ """Builder for DELETE statements.
26
+
27
+ Constructs SQL DELETE statements with parameter binding and validation.
28
+ Does not support JOIN operations to maintain cross-dialect compatibility.
29
+ """
30
+
31
+ __slots__ = ()
32
+ _expression: exp.Expression | None
33
+
34
+ def __init__(self, table: str | None = None, **kwargs: Any) -> None:
35
+ """Initialize DELETE with optional table.
36
+
37
+ Args:
38
+ table: Target table name
39
+ **kwargs: Additional QueryBuilder arguments
40
+ """
41
+ (dialect, schema, enable_optimization, optimize_joins, optimize_predicates, simplify_expressions) = (
42
+ self._parse_query_builder_kwargs(kwargs)
43
+ )
44
+ super().__init__(
45
+ dialect=dialect,
46
+ schema=schema,
47
+ enable_optimization=enable_optimization,
48
+ optimize_joins=optimize_joins,
49
+ optimize_predicates=optimize_predicates,
50
+ simplify_expressions=simplify_expressions,
51
+ )
52
+ self._initialize_expression()
53
+
54
+ if table:
55
+ self.from_(table)
56
+
57
+ @property
58
+ def _expected_result_type(self) -> "type[SQLResult]":
59
+ """Get the expected result type for DELETE operations.
60
+
61
+ Returns:
62
+ The ExecuteResult type for DELETE statements.
63
+ """
64
+ return SQLResult
65
+
66
+ def _create_base_expression(self) -> "exp.Delete":
67
+ """Create a new sqlglot Delete expression.
68
+
69
+ Returns:
70
+ A new sqlglot Delete expression.
71
+ """
72
+ return exp.Delete()
73
+
74
+ def build(self, dialect: "DialectType" = None) -> "BuiltQuery":
75
+ """Build the DELETE query with validation.
76
+
77
+ Args:
78
+ dialect: Optional dialect override for SQL generation.
79
+
80
+ Returns:
81
+ BuiltQuery: The built query with SQL and parameters.
82
+
83
+ Raises:
84
+ SQLBuilderError: If the table is not specified.
85
+ """
86
+
87
+ if self._expression is None or not isinstance(self._expression, exp.Delete):
88
+ msg = "DELETE requires a table to be specified. Use from() to set the table."
89
+ raise SQLBuilderError(msg)
90
+
91
+ if self._expression.this is None:
92
+ msg = "DELETE requires a table to be specified. Use from() to set the table."
93
+ raise SQLBuilderError(msg)
94
+
95
+ return super().build(dialect=dialect)
@@ -0,0 +1,365 @@
1
+ """Reusable mixins for INSERT/UPDATE/DELETE builders."""
2
+
3
+ from collections.abc import Mapping, Sequence
4
+ from typing import Any, cast
5
+
6
+ from mypy_extensions import trait
7
+ from sqlglot import exp
8
+ from typing_extensions import Self
9
+
10
+ from sqlspec.builder._base import BuiltQuery, QueryBuilder
11
+ from sqlspec.builder._parsing_utils import extract_sql_object_expression
12
+ from sqlspec.exceptions import SQLBuilderError
13
+ from sqlspec.protocols import SQLBuilderProtocol
14
+ from sqlspec.utils.type_guards import has_expression_and_sql, has_parameter_builder, is_dict
15
+
16
+ __all__ = (
17
+ "DeleteFromClauseMixin",
18
+ "InsertFromSelectMixin",
19
+ "InsertIntoClauseMixin",
20
+ "InsertValuesMixin",
21
+ "UpdateFromClauseMixin",
22
+ "UpdateSetClauseMixin",
23
+ "UpdateTableClauseMixin",
24
+ )
25
+
26
+ ARG_PAIR_COUNT = 2
27
+ SINGLE_VALUE_COUNT = 1
28
+
29
+
30
+ # ---------------------------------------------------------------------------
31
+ # DELETE helpers
32
+ # ---------------------------------------------------------------------------
33
+
34
+
35
+ @trait
36
+ class DeleteFromClauseMixin:
37
+ """Mixin providing FROM clause support for DELETE builders."""
38
+
39
+ __slots__ = ()
40
+
41
+ def get_expression(self) -> exp.Expression | None: ...
42
+ def set_expression(self, expression: exp.Expression) -> None: ...
43
+
44
+ def from_(self, table: str) -> Self:
45
+ current_expr = self.get_expression()
46
+ if current_expr is None:
47
+ self.set_expression(exp.Delete())
48
+ current_expr = self.get_expression()
49
+
50
+ if not isinstance(current_expr, exp.Delete):
51
+ msg = f"Base expression for Delete is {type(current_expr).__name__}, expected Delete."
52
+ raise SQLBuilderError(msg)
53
+
54
+ assert current_expr is not None
55
+ current_expr.set("this", exp.to_table(table))
56
+ return self
57
+
58
+
59
+ # ---------------------------------------------------------------------------
60
+ # INSERT helpers
61
+ # ---------------------------------------------------------------------------
62
+
63
+
64
+ @trait
65
+ class InsertIntoClauseMixin:
66
+ __slots__ = ()
67
+
68
+ def get_expression(self) -> exp.Expression | None: ...
69
+ def set_expression(self, expression: exp.Expression) -> None: ...
70
+
71
+ def into(self, table: str) -> Self:
72
+ current_expr = self.get_expression()
73
+ if current_expr is None:
74
+ self.set_expression(exp.Insert())
75
+ current_expr = self.get_expression()
76
+
77
+ if not isinstance(current_expr, exp.Insert):
78
+ msg = "Cannot set target table on a non-INSERT expression."
79
+ raise SQLBuilderError(msg)
80
+
81
+ assert current_expr is not None
82
+ current_expr.set("this", exp.to_table(table))
83
+ return self
84
+
85
+
86
+ @trait
87
+ class InsertValuesMixin:
88
+ __slots__ = ()
89
+
90
+ def get_expression(self) -> exp.Expression | None: ...
91
+ def set_expression(self, expression: exp.Expression) -> None: ...
92
+
93
+ _columns: list[str]
94
+
95
+ def columns(self, *columns: str | exp.Expression) -> Self:
96
+ current_expr = self.get_expression()
97
+ if current_expr is None:
98
+ self.set_expression(exp.Insert())
99
+ current_expr = self.get_expression()
100
+
101
+ if not isinstance(current_expr, exp.Insert):
102
+ msg = "Cannot set columns on a non-INSERT expression."
103
+ raise SQLBuilderError(msg)
104
+
105
+ assert current_expr is not None
106
+ current_this = current_expr.args.get("this")
107
+ if current_this is None:
108
+ msg = "Table must be set using .into() before setting columns."
109
+ raise SQLBuilderError(msg)
110
+
111
+ if columns:
112
+ identifiers = [exp.to_identifier(col) if isinstance(col, str) else col for col in columns]
113
+ table_name = current_this.this
114
+ current_expr.set("this", exp.Schema(this=table_name, expressions=identifiers))
115
+ elif isinstance(current_this, exp.Schema):
116
+ table_name = current_this.this
117
+ current_expr.set("this", exp.Table(this=table_name))
118
+
119
+ try:
120
+ cols = self._columns
121
+ if not columns:
122
+ cols.clear()
123
+ else:
124
+ cols[:] = [col if isinstance(col, str) else str(col) for col in columns]
125
+ except AttributeError:
126
+ pass
127
+ return self
128
+
129
+ def values(self, *values: Any, **kwargs: Any) -> Self:
130
+ current_expr = self.get_expression()
131
+ if current_expr is None:
132
+ self.set_expression(exp.Insert())
133
+ current_expr = self.get_expression()
134
+
135
+ if not isinstance(current_expr, exp.Insert):
136
+ msg = "Cannot add values to a non-INSERT expression."
137
+ raise SQLBuilderError(msg)
138
+
139
+ assert current_expr is not None
140
+ if current_expr.args.get("this") is None:
141
+ msg = "The target table must be set using .into() before adding values."
142
+ raise SQLBuilderError(msg)
143
+
144
+ builder = cast("SQLBuilderProtocol", self)
145
+
146
+ positional_values = list(values)
147
+ if len(positional_values) == SINGLE_VALUE_COUNT and is_dict(positional_values[0]) and not kwargs:
148
+ kwargs = positional_values[0]
149
+ positional_values = []
150
+
151
+ if kwargs and positional_values:
152
+ msg = "Cannot mix positional values with keyword values."
153
+ raise SQLBuilderError(msg)
154
+
155
+ row_expressions: list[exp.Expression] = []
156
+ column_defs: list[str] = list(self._columns or [])
157
+
158
+ if kwargs:
159
+ if not column_defs:
160
+ self.columns(*kwargs.keys())
161
+ column_defs = list(self._columns or [])
162
+ for col, val in kwargs.items():
163
+ if isinstance(val, exp.Expression):
164
+ row_expressions.append(val)
165
+ continue
166
+ if has_expression_and_sql(val):
167
+ row_expressions.append(extract_sql_object_expression(val, builder=self))
168
+ continue
169
+ column_name = str(col).split(".")[-1]
170
+ placeholder, _ = builder._create_placeholder(val, column_name) # pyright: ignore[reportPrivateUsage]
171
+ row_expressions.append(placeholder)
172
+ else:
173
+ if column_defs and len(positional_values) != len(column_defs):
174
+ msg = (
175
+ f"Number of values ({len(positional_values)}) does not match the number of specified columns "
176
+ f"({len(column_defs)})."
177
+ )
178
+ raise SQLBuilderError(msg)
179
+
180
+ for index, raw_value in enumerate(positional_values):
181
+ if isinstance(raw_value, exp.Expression):
182
+ row_expressions.append(raw_value)
183
+ elif has_expression_and_sql(raw_value):
184
+ row_expressions.append(extract_sql_object_expression(raw_value, builder=self))
185
+ else:
186
+ if column_defs and index < len(column_defs):
187
+ column_token = column_defs[index]
188
+ column_name = column_token.rsplit(".", maxsplit=1)[-1]
189
+ else:
190
+ column_name = f"value_{index + 1}"
191
+ placeholder, _ = builder._create_placeholder(raw_value, column_name) # pyright: ignore[reportPrivateUsage]
192
+ row_expressions.append(placeholder)
193
+
194
+ values_node = current_expr.args.get("expression")
195
+ tuple_expression = exp.Tuple(expressions=row_expressions)
196
+ if isinstance(values_node, exp.Values):
197
+ values_node.expressions.append(tuple_expression)
198
+ else:
199
+ current_expr.set("expression", exp.Values(expressions=[tuple_expression]))
200
+ return self
201
+
202
+ def add_values(self, values: Sequence[Any]) -> Self:
203
+ return self.values(*values)
204
+
205
+
206
+ @trait
207
+ class InsertFromSelectMixin:
208
+ __slots__ = ()
209
+
210
+ def get_expression(self) -> exp.Expression | None: ...
211
+ def set_expression(self, expression: exp.Expression) -> None: ...
212
+
213
+ def from_select(self, select_builder: SQLBuilderProtocol) -> Self:
214
+ current_expr = self.get_expression()
215
+ if current_expr is None:
216
+ self.set_expression(exp.Insert())
217
+ current_expr = self.get_expression()
218
+
219
+ if not isinstance(current_expr, exp.Insert):
220
+ msg = "Cannot set INSERT source on a non-INSERT expression."
221
+ raise SQLBuilderError(msg)
222
+
223
+ assert current_expr is not None
224
+ if current_expr.args.get("this") is None:
225
+ msg = "The target table must be set using .into() before adding values."
226
+ raise SQLBuilderError(msg)
227
+ subquery_parameters = select_builder.parameters
228
+ if subquery_parameters:
229
+ builder_with_params = cast("SQLBuilderProtocol", self)
230
+ for param_name, param_value in subquery_parameters.items():
231
+ builder_with_params.add_parameter(param_value, name=param_name)
232
+
233
+ select_expr = select_builder.get_expression()
234
+ if select_expr and isinstance(select_expr, exp.Select):
235
+ current_expr.set("expression", select_expr.copy())
236
+ else:
237
+ msg = "SelectBuilder must have a valid SELECT expression."
238
+ raise SQLBuilderError(msg)
239
+ return self
240
+
241
+
242
+ # ---------------------------------------------------------------------------
243
+ # UPDATE helpers
244
+ # ---------------------------------------------------------------------------
245
+
246
+
247
+ @trait
248
+ class UpdateTableClauseMixin:
249
+ __slots__ = ()
250
+
251
+ def get_expression(self) -> exp.Expression | None: ...
252
+ def set_expression(self, expression: exp.Expression) -> None: ...
253
+
254
+ def table(self, table_name: str, alias: str | None = None) -> Self:
255
+ current_expr = self.get_expression()
256
+ if current_expr is None or not isinstance(current_expr, exp.Update):
257
+ self.set_expression(exp.Update(this=None, expressions=[], joins=[]))
258
+ current_expr = self.get_expression()
259
+
260
+ assert current_expr is not None
261
+
262
+ table_expr: exp.Expression = exp.to_table(table_name, alias=alias)
263
+ current_expr.set("this", table_expr)
264
+ return self
265
+
266
+
267
+ @trait
268
+ class UpdateSetClauseMixin:
269
+ __slots__ = ()
270
+
271
+ def get_expression(self) -> exp.Expression | None: ...
272
+ def set_expression(self, expression: exp.Expression) -> None: ...
273
+
274
+ def _process_update_value(self, val: Any, col: Any) -> exp.Expression:
275
+ if isinstance(val, exp.Expression):
276
+ return val
277
+ if has_parameter_builder(val):
278
+ subquery = val.build()
279
+ sql_text = subquery.sql if isinstance(subquery, BuiltQuery) else str(subquery)
280
+ query_builder = cast("QueryBuilder", self)
281
+ value_expr = exp.paren(exp.maybe_parse(sql_text, dialect=query_builder.dialect))
282
+ for p_name, p_value in val.parameters.items():
283
+ query_builder.add_parameter(p_value, name=p_name)
284
+ return value_expr
285
+ if has_expression_and_sql(val):
286
+ return extract_sql_object_expression(val, builder=self)
287
+ sql_builder = cast("SQLBuilderProtocol", self)
288
+ column_name = col if isinstance(col, str) else str(col)
289
+ if "." in column_name:
290
+ column_name = column_name.split(".")[-1]
291
+ placeholder, _ = sql_builder.create_placeholder(val, column_name)
292
+ return placeholder
293
+
294
+ def set(self, *args: Any, **kwargs: Any) -> Self:
295
+ if not args and not kwargs:
296
+ return self
297
+ current_expr = self.get_expression()
298
+ if current_expr is None:
299
+ self.set_expression(exp.Update())
300
+ current_expr = self.get_expression()
301
+
302
+ if not isinstance(current_expr, exp.Update):
303
+ msg = "Cannot add SET clause to non-UPDATE expression."
304
+ raise SQLBuilderError(msg)
305
+
306
+ assert current_expr is not None
307
+
308
+ assignments: list[exp.Expression] = []
309
+ if len(args) == ARG_PAIR_COUNT and not kwargs:
310
+ col, val = args
311
+ col_expr = col if isinstance(col, exp.Column) else exp.column(col)
312
+ assignments.append(exp.EQ(this=col_expr, expression=self._process_update_value(val, col)))
313
+ elif (len(args) == SINGLE_VALUE_COUNT and isinstance(args[0], Mapping)) or kwargs:
314
+ all_values = dict(args[0] if args else {}, **kwargs)
315
+ for col, val in all_values.items():
316
+ assignments.append(exp.EQ(this=exp.column(col), expression=self._process_update_value(val, col)))
317
+ else:
318
+ msg = "Invalid arguments for set(): use (column, value), mapping, or kwargs."
319
+ raise SQLBuilderError(msg)
320
+
321
+ existing = current_expr.args.get("expressions", [])
322
+ current_expr.set("expressions", existing + assignments)
323
+ return self
324
+
325
+
326
+ @trait
327
+ class UpdateFromClauseMixin:
328
+ __slots__ = ()
329
+
330
+ def get_expression(self) -> exp.Expression | None: ...
331
+ def set_expression(self, expression: exp.Expression) -> None: ...
332
+
333
+ def from_(self, table: str | exp.Expression | Any, alias: str | None = None) -> Self:
334
+ current_expr = self.get_expression()
335
+ if current_expr is None or not isinstance(current_expr, exp.Update):
336
+ msg = "Cannot add FROM clause to non-UPDATE expression. Set the main table first."
337
+ raise SQLBuilderError(msg)
338
+
339
+ assert current_expr is not None
340
+ table_expr: exp.Expression
341
+ if isinstance(table, str):
342
+ table_expr = exp.to_table(table, alias=alias)
343
+ elif isinstance(table, SQLBuilderProtocol):
344
+ subquery_params = table.parameters
345
+ if subquery_params:
346
+ builder_with_params = cast("SQLBuilderProtocol", self)
347
+ for param_name, param_value in subquery_params.items():
348
+ builder_with_params.add_parameter(param_value, name=param_name)
349
+ raw_expression = table.get_expression()
350
+ subquery_source = raw_expression if isinstance(raw_expression, exp.Expression) else exp.select()
351
+ subquery_exp = exp.paren(subquery_source)
352
+ table_expr = exp.alias_(subquery_exp, alias) if alias else subquery_exp
353
+ elif isinstance(table, exp.Expression):
354
+ table_expr = exp.alias_(table, alias) if alias else table
355
+ else:
356
+ msg = f"Unsupported table type for FROM clause: {type(table)}"
357
+ raise SQLBuilderError(msg)
358
+
359
+ from_clause = current_expr.args.get("from")
360
+ if from_clause is None:
361
+ from_clause = exp.From(expressions=[])
362
+ current_expr.set("from", from_clause)
363
+
364
+ from_clause.append("expressions", table_expr)
365
+ return self