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,521 @@
1
+ """Column expressions for query building.
2
+
3
+ Provides Column objects that support Python operators for building
4
+ SQL conditions with parameter binding.
5
+ """
6
+
7
+ from collections.abc import Iterable
8
+ from datetime import date, datetime
9
+ from typing import Any, cast
10
+
11
+ from sqlglot import exp
12
+
13
+ from sqlspec.builder._vector_expressions import VectorDistance
14
+
15
+ __all__ = ("Column", "ColumnExpression", "FunctionColumn")
16
+
17
+
18
+ def _convert_value(value: Any) -> exp.Expression:
19
+ """Convert a Python value to a SQLGlot expression.
20
+
21
+ Special handling for datetime objects to prevent SQLGlot from
22
+ converting them to TIME_STR_TO_TIME function calls. Datetime
23
+ objects should be passed as parameters, not converted to SQL functions.
24
+
25
+ Args:
26
+ value: The value to convert
27
+
28
+ Returns:
29
+ A SQLGlot expression representing the value
30
+ """
31
+ if isinstance(value, (datetime, date)):
32
+ return exp.Literal(this=value, is_string=False)
33
+ return exp.convert(value)
34
+
35
+
36
+ class ColumnExpression:
37
+ """Base class for column expressions that can be combined with operators."""
38
+
39
+ __slots__ = ("_expression",)
40
+
41
+ def __init__(self, expression: exp.Expression) -> None:
42
+ self._expression = expression
43
+
44
+ def __and__(self, other: "ColumnExpression") -> "ColumnExpression":
45
+ """Combine with AND operator (&)."""
46
+ if not isinstance(other, ColumnExpression):
47
+ return NotImplemented
48
+ return ColumnExpression(exp.And(this=self._expression, expression=other._expression))
49
+
50
+ def __or__(self, other: "ColumnExpression") -> "ColumnExpression":
51
+ """Combine with OR operator (|)."""
52
+ if not isinstance(other, ColumnExpression):
53
+ return NotImplemented
54
+ return ColumnExpression(exp.Or(this=self._expression, expression=other._expression))
55
+
56
+ def __invert__(self) -> "ColumnExpression":
57
+ """Apply NOT operator (~)."""
58
+ return ColumnExpression(exp.Not(this=self._expression))
59
+
60
+ def __bool__(self) -> bool:
61
+ """Prevent accidental use of 'and'/'or' keywords."""
62
+ msg = (
63
+ "Cannot use 'and'/'or' operators on ColumnExpression. "
64
+ "Use '&'/'|' operators instead. "
65
+ f"Expression: {self._expression.sql()}"
66
+ )
67
+ raise TypeError(msg)
68
+
69
+ @property
70
+ def sqlglot_expression(self) -> exp.Expression:
71
+ """Get the underlying SQLGlot expression."""
72
+ return self._expression
73
+
74
+
75
+ class Column:
76
+ """Represents a database column with Python operator support."""
77
+
78
+ __slots__ = ("_expression", "name", "table")
79
+
80
+ def __init__(self, name: str, table: str | None = None) -> None:
81
+ self.name = name
82
+ self.table = table
83
+
84
+ if table:
85
+ self._expression = exp.Column(this=exp.Identifier(this=name), table=exp.Identifier(this=table))
86
+ else:
87
+ self._expression = exp.Column(this=exp.Identifier(this=name))
88
+
89
+ def _convert_value(self, value: Any) -> exp.Expression:
90
+ """Convert a Python value to a SQLGlot expression."""
91
+ return _convert_value(value)
92
+
93
+ def __eq__(self, other: object) -> ColumnExpression: # type: ignore[override]
94
+ """Equal to (==)."""
95
+ if other is None:
96
+ return ColumnExpression(exp.Is(this=self._expression, expression=exp.Null()))
97
+ return ColumnExpression(exp.EQ(this=self._expression, expression=self._convert_value(other)))
98
+
99
+ def __ne__(self, other: object) -> ColumnExpression: # type: ignore[override]
100
+ """Not equal to (!=)."""
101
+ if other is None:
102
+ return ColumnExpression(exp.Not(this=exp.Is(this=self._expression, expression=exp.Null())))
103
+ return ColumnExpression(exp.NEQ(this=self._expression, expression=self._convert_value(other)))
104
+
105
+ def __gt__(self, other: Any) -> ColumnExpression:
106
+ """Greater than (>)."""
107
+ return ColumnExpression(exp.GT(this=self._expression, expression=self._convert_value(other)))
108
+
109
+ def __ge__(self, other: Any) -> ColumnExpression:
110
+ """Greater than or equal (>=)."""
111
+ return ColumnExpression(exp.GTE(this=self._expression, expression=self._convert_value(other)))
112
+
113
+ def __lt__(self, other: Any) -> ColumnExpression:
114
+ """Less than (<)."""
115
+ return ColumnExpression(exp.LT(this=self._expression, expression=self._convert_value(other)))
116
+
117
+ def __le__(self, other: Any) -> ColumnExpression:
118
+ """Less than or equal (<=)."""
119
+ return ColumnExpression(exp.LTE(this=self._expression, expression=self._convert_value(other)))
120
+
121
+ def __invert__(self) -> ColumnExpression:
122
+ """Apply NOT operator (~)."""
123
+ return ColumnExpression(exp.Not(this=self._expression))
124
+
125
+ def like(self, pattern: str, escape: str | None = None) -> ColumnExpression:
126
+ """SQL LIKE pattern matching."""
127
+ if escape:
128
+ like_expr = exp.Like(
129
+ this=self._expression, expression=self._convert_value(pattern), escape=self._convert_value(escape)
130
+ )
131
+ else:
132
+ like_expr = exp.Like(this=self._expression, expression=self._convert_value(pattern))
133
+ return ColumnExpression(like_expr)
134
+
135
+ def ilike(self, pattern: str) -> ColumnExpression:
136
+ """Case-insensitive LIKE."""
137
+ return ColumnExpression(exp.ILike(this=self._expression, expression=self._convert_value(pattern)))
138
+
139
+ def in_(self, values: Iterable[Any]) -> ColumnExpression:
140
+ """SQL IN clause."""
141
+ converted_values = [self._convert_value(v) for v in values]
142
+ return ColumnExpression(exp.In(this=self._expression, expressions=converted_values))
143
+
144
+ def not_in(self, values: Iterable[Any]) -> ColumnExpression:
145
+ """SQL NOT IN clause."""
146
+ return ~self.in_(values)
147
+
148
+ def between(self, start: Any, end: Any) -> ColumnExpression:
149
+ """SQL BETWEEN clause."""
150
+ return ColumnExpression(
151
+ exp.Between(this=self._expression, low=self._convert_value(start), high=self._convert_value(end))
152
+ )
153
+
154
+ def is_null(self) -> ColumnExpression:
155
+ """SQL IS NULL."""
156
+ return ColumnExpression(exp.Is(this=self._expression, expression=exp.Null()))
157
+
158
+ def is_not_null(self) -> ColumnExpression:
159
+ """SQL IS NOT NULL."""
160
+ return ColumnExpression(exp.Not(this=exp.Is(this=self._expression, expression=exp.Null())))
161
+
162
+ def not_like(self, pattern: str, escape: str | None = None) -> ColumnExpression:
163
+ """SQL NOT LIKE pattern matching."""
164
+ return ~self.like(pattern, escape)
165
+
166
+ def not_ilike(self, pattern: str) -> ColumnExpression:
167
+ """Case-insensitive NOT LIKE."""
168
+ return ~self.ilike(pattern)
169
+
170
+ def any_(self, values: Iterable[Any]) -> ColumnExpression:
171
+ """SQL = ANY(...) clause."""
172
+ converted_values = [self._convert_value(v) for v in values]
173
+ return ColumnExpression(exp.EQ(this=self._expression, expression=exp.Any(expressions=converted_values)))
174
+
175
+ def not_any_(self, values: Iterable[Any]) -> ColumnExpression:
176
+ """SQL <> ANY(...) clause."""
177
+ converted_values = [self._convert_value(v) for v in values]
178
+ return ColumnExpression(exp.NEQ(this=self._expression, expression=exp.Any(expressions=converted_values)))
179
+
180
+ def lower(self) -> "FunctionColumn":
181
+ """SQL LOWER() function."""
182
+ return FunctionColumn(exp.Lower(this=self._expression))
183
+
184
+ def upper(self) -> "FunctionColumn":
185
+ """SQL UPPER() function."""
186
+ return FunctionColumn(exp.Upper(this=self._expression))
187
+
188
+ def length(self) -> "FunctionColumn":
189
+ """SQL LENGTH() function."""
190
+ return FunctionColumn(exp.Length(this=self._expression))
191
+
192
+ def trim(self) -> "FunctionColumn":
193
+ """SQL TRIM() function."""
194
+ return FunctionColumn(exp.Trim(this=self._expression))
195
+
196
+ def abs(self) -> "FunctionColumn":
197
+ """SQL ABS() function."""
198
+ return FunctionColumn(exp.Abs(this=self._expression))
199
+
200
+ def round(self, decimals: int = 0) -> "FunctionColumn":
201
+ """SQL ROUND() function."""
202
+ if decimals == 0:
203
+ return FunctionColumn(exp.Round(this=self._expression))
204
+ return FunctionColumn(exp.Round(this=self._expression, expression=exp.convert(decimals)))
205
+
206
+ def floor(self) -> "FunctionColumn":
207
+ """SQL FLOOR() function."""
208
+ return FunctionColumn(exp.Floor(this=self._expression))
209
+
210
+ def ceil(self) -> "FunctionColumn":
211
+ """SQL CEIL() function."""
212
+ return FunctionColumn(exp.Ceil(this=self._expression))
213
+
214
+ def substring(self, start: int, length: int | None = None) -> "FunctionColumn":
215
+ """SQL SUBSTRING() function."""
216
+ args = [self._convert_value(start)]
217
+ if length is not None:
218
+ args.append(self._convert_value(length))
219
+ return FunctionColumn(exp.Substring(this=self._expression, expressions=args))
220
+
221
+ def coalesce(self, *values: Any) -> "FunctionColumn":
222
+ """SQL COALESCE() function."""
223
+ expressions = [self._expression] + [self._convert_value(v) for v in values]
224
+ return FunctionColumn(exp.Coalesce(expressions=expressions))
225
+
226
+ def cast(self, data_type: str) -> "FunctionColumn":
227
+ """SQL CAST() function."""
228
+ return FunctionColumn(exp.Cast(this=self._expression, to=exp.DataType.build(data_type)))
229
+
230
+ def count(self) -> "FunctionColumn":
231
+ """SQL COUNT() function."""
232
+ return FunctionColumn(exp.Count(this=self._expression))
233
+
234
+ def sum(self) -> "FunctionColumn":
235
+ """SQL SUM() function."""
236
+ return FunctionColumn(exp.Sum(this=self._expression))
237
+
238
+ def avg(self) -> "FunctionColumn":
239
+ """SQL AVG() function."""
240
+ return FunctionColumn(exp.Avg(this=self._expression))
241
+
242
+ def min(self) -> "FunctionColumn":
243
+ """SQL MIN() function."""
244
+ return FunctionColumn(exp.Min(this=self._expression))
245
+
246
+ def max(self) -> "FunctionColumn":
247
+ """SQL MAX() function."""
248
+ return FunctionColumn(exp.Max(this=self._expression))
249
+
250
+ def count_distinct(self) -> "FunctionColumn":
251
+ """SQL COUNT(DISTINCT column) function."""
252
+ return FunctionColumn(exp.Count(this=exp.Distinct(expressions=[self._expression])))
253
+
254
+ @staticmethod
255
+ def count_all() -> "FunctionColumn":
256
+ """SQL COUNT(*) function."""
257
+ return FunctionColumn(exp.Count(this=exp.Star()))
258
+
259
+ @staticmethod
260
+ def _normalize_metric(metric: str) -> str:
261
+ """Normalize and validate vector distance metric."""
262
+ normalized_metric = metric.lower()
263
+ valid_metrics = {"euclidean", "cosine", "inner_product", "euclidean_squared"}
264
+ if normalized_metric not in valid_metrics:
265
+ msg = f"Invalid metric: {metric}. Must be one of {valid_metrics}"
266
+ raise ValueError(msg)
267
+ return normalized_metric
268
+
269
+ def _convert_vector_value(self, value: "list[float] | Column | exp.Expression") -> "exp.Expression":
270
+ """Convert a vector input into a SQLGlot expression."""
271
+ if isinstance(value, list):
272
+ return exp.Array(expressions=[exp.Literal.number(v) for v in value])
273
+ if isinstance(value, Column):
274
+ return value._expression
275
+ if isinstance(value, exp.Expression):
276
+ return value
277
+ msg = f"Unsupported vector type: {type(value)}"
278
+ raise TypeError(msg)
279
+
280
+ def vector_distance(
281
+ self, other_vector: "list[float] | Column | exp.Expression", metric: str = "euclidean"
282
+ ) -> "FunctionColumn":
283
+ """Calculate vector distance using specified metric.
284
+
285
+ Generates dialect-specific SQL for vector distance calculation:
286
+ - PostgreSQL (pgvector): Operators <->, <=>, <#>
287
+ - MySQL 9+: DISTANCE(col, vec, 'METRIC') function
288
+ - Oracle 23ai+: VECTOR_DISTANCE(col, vec, METRIC) function
289
+
290
+ Args:
291
+ other_vector: Vector to compare against (list, Column, or SQLGlot expression).
292
+ metric: Distance metric to use. Options:
293
+ - "euclidean": L2 distance (default)
294
+ - "cosine": Cosine distance
295
+ - "inner_product": Negative inner product
296
+ - "euclidean_squared": L2² distance (Oracle only)
297
+
298
+ Returns:
299
+ FunctionColumn expression for use in SELECT, WHERE, ORDER BY.
300
+
301
+ Examples:
302
+ Basic distance query with threshold:
303
+ >>> query = (
304
+ ... sql
305
+ ... .select("*")
306
+ ... .from_("docs")
307
+ ... .where(
308
+ ... Column("embedding").vector_distance(
309
+ ... [0.1, 0.2], metric="euclidean"
310
+ ... )
311
+ ... < 0.5
312
+ ... )
313
+ ... )
314
+
315
+ Distance in SELECT clause with alias:
316
+ >>> query = (
317
+ ... sql
318
+ ... .select(
319
+ ... "id",
320
+ ... Column("embedding")
321
+ ... .vector_distance([0.1, 0.2])
322
+ ... .as_("dist"),
323
+ ... )
324
+ ... .from_("docs")
325
+ ... .order_by("dist")
326
+ ... )
327
+
328
+ Compare two vector columns:
329
+ >>> query = (
330
+ ... sql
331
+ ... .select("*")
332
+ ... .from_("pairs")
333
+ ... .where(
334
+ ... Column("vec1").vector_distance(
335
+ ... Column("vec2"), metric="cosine"
336
+ ... )
337
+ ... < 0.3
338
+ ... )
339
+ ... )
340
+ """
341
+ normalized_metric = self._normalize_metric(metric)
342
+ vec_expr = self._convert_vector_value(other_vector)
343
+ distance_expr = VectorDistance(this=self._expression, expression=vec_expr, metric=normalized_metric)
344
+ return FunctionColumn(distance_expr)
345
+
346
+ def cosine_similarity(self, other_vector: "list[float] | Column | exp.Expression") -> "FunctionColumn":
347
+ """Calculate cosine similarity (1 - cosine_distance).
348
+
349
+ Convenience method that computes similarity instead of distance.
350
+ Returns values in range [-1, 1] where 1 = identical vectors.
351
+
352
+ Args:
353
+ other_vector: Vector to compare against (list, Column, or expression).
354
+
355
+ Returns:
356
+ FunctionColumn expression: 1 - cosine_distance(self, other_vector).
357
+
358
+ Examples:
359
+ Find most similar documents:
360
+ >>> query = (
361
+ ... sql
362
+ ... .select(
363
+ ... "id",
364
+ ... Column("embedding")
365
+ ... .cosine_similarity([0.1, 0.2])
366
+ ... .as_("score"),
367
+ ... )
368
+ ... .from_("docs")
369
+ ... .order_by(sql.column("score").desc())
370
+ ... .limit(10)
371
+ ... )
372
+ """
373
+ cosine_dist = self.vector_distance(other_vector, metric="cosine")
374
+ similarity_expr = exp.Sub(this=exp.Literal.number(1), expression=exp.Paren(this=cosine_dist._expression)) # pyright: ignore[reportPrivateUsage]
375
+ return FunctionColumn(similarity_expr)
376
+
377
+ def alias(self, alias_name: str) -> exp.Expression:
378
+ """Create an aliased column expression."""
379
+ return exp.Alias(this=self._expression, alias=alias_name)
380
+
381
+ def asc(self) -> exp.Ordered:
382
+ """Create an ASC ordering expression."""
383
+ return exp.Ordered(this=self._expression, desc=False)
384
+
385
+ def desc(self) -> exp.Ordered:
386
+ """Create a DESC ordering expression."""
387
+ return exp.Ordered(this=self._expression, desc=True)
388
+
389
+ def as_(self, alias: str) -> exp.Alias:
390
+ """Create an aliased expression."""
391
+ return cast("exp.Alias", exp.alias_(self._expression, alias))
392
+
393
+ def __repr__(self) -> str:
394
+ if self.table:
395
+ return f"Column<{self.table}.{self.name}>"
396
+ return f"Column<{self.name}>"
397
+
398
+ def __hash__(self) -> int:
399
+ """Hash based on table and column name."""
400
+ return hash((self.table, self.name))
401
+
402
+ @property
403
+ def sqlglot_expression(self) -> exp.Expression:
404
+ """Get the underlying SQLGlot expression (public API).
405
+
406
+ Returns:
407
+ The SQLGlot expression for this column
408
+ """
409
+ return self._expression
410
+
411
+
412
+ class FunctionColumn:
413
+ """Represents the result of a SQL function call on a column."""
414
+
415
+ __slots__ = ("_expression",)
416
+
417
+ def __init__(self, expression: "exp.Expression") -> None:
418
+ self._expression = expression
419
+
420
+ def _convert_value(self, value: Any) -> exp.Expression:
421
+ """Convert a Python value to a SQLGlot expression."""
422
+ return _convert_value(value)
423
+
424
+ @property
425
+ def sqlglot_expression(self) -> "exp.Expression":
426
+ """Return underlying SQLGlot expression."""
427
+ return self._expression
428
+
429
+ def __eq__(self, other: object) -> ColumnExpression: # type: ignore[override]
430
+ return ColumnExpression(exp.EQ(this=self._expression, expression=self._convert_value(other)))
431
+
432
+ def __ne__(self, other: object) -> ColumnExpression: # type: ignore[override]
433
+ return ColumnExpression(exp.NEQ(this=self._expression, expression=self._convert_value(other)))
434
+
435
+ def __gt__(self, other: Any) -> ColumnExpression:
436
+ """Greater than (>)."""
437
+ return ColumnExpression(exp.GT(this=self._expression, expression=self._convert_value(other)))
438
+
439
+ def __ge__(self, other: Any) -> ColumnExpression:
440
+ """Greater than or equal (>=)."""
441
+ return ColumnExpression(exp.GTE(this=self._expression, expression=self._convert_value(other)))
442
+
443
+ def __lt__(self, other: Any) -> ColumnExpression:
444
+ """Less than (<)."""
445
+ return ColumnExpression(exp.LT(this=self._expression, expression=self._convert_value(other)))
446
+
447
+ def __le__(self, other: Any) -> ColumnExpression:
448
+ """Less than or equal (<=)."""
449
+ return ColumnExpression(exp.LTE(this=self._expression, expression=self._convert_value(other)))
450
+
451
+ def like(self, pattern: str) -> ColumnExpression:
452
+ return ColumnExpression(exp.Like(this=self._expression, expression=self._convert_value(pattern)))
453
+
454
+ def ilike(self, pattern: str) -> ColumnExpression:
455
+ """Case-insensitive LIKE."""
456
+ return ColumnExpression(exp.ILike(this=self._expression, expression=self._convert_value(pattern)))
457
+
458
+ def in_(self, values: Iterable[Any]) -> ColumnExpression:
459
+ """SQL IN clause."""
460
+ converted_values = [self._convert_value(v) for v in values]
461
+ return ColumnExpression(exp.In(this=self._expression, expressions=converted_values))
462
+
463
+ def not_in_(self, values: Iterable[Any]) -> ColumnExpression:
464
+ """SQL NOT IN clause."""
465
+ return ~self.in_(values)
466
+
467
+ def not_like(self, pattern: str) -> ColumnExpression:
468
+ """SQL NOT LIKE."""
469
+ return ~self.like(pattern)
470
+
471
+ def not_ilike(self, pattern: str) -> ColumnExpression:
472
+ """Case-insensitive NOT LIKE."""
473
+ return ~self.ilike(pattern)
474
+
475
+ def between(self, start: Any, end: Any) -> ColumnExpression:
476
+ """SQL BETWEEN clause."""
477
+ return ColumnExpression(
478
+ exp.Between(this=self._expression, low=self._convert_value(start), high=self._convert_value(end))
479
+ )
480
+
481
+ def is_null(self) -> ColumnExpression:
482
+ """SQL IS NULL."""
483
+ return ColumnExpression(exp.Is(this=self._expression, expression=exp.Null()))
484
+
485
+ def is_not_null(self) -> ColumnExpression:
486
+ """SQL IS NOT NULL."""
487
+ return ColumnExpression(exp.Not(this=exp.Is(this=self._expression, expression=exp.Null())))
488
+
489
+ def any_(self, values: Iterable[Any]) -> ColumnExpression:
490
+ """SQL = ANY(...) clause."""
491
+ converted_values = [self._convert_value(v) for v in values]
492
+ return ColumnExpression(exp.EQ(this=self._expression, expression=exp.Any(expressions=converted_values)))
493
+
494
+ def not_any_(self, values: Iterable[Any]) -> ColumnExpression:
495
+ """SQL <> ANY(...) clause."""
496
+ converted_values = [self._convert_value(v) for v in values]
497
+ return ColumnExpression(exp.NEQ(this=self._expression, expression=exp.Any(expressions=converted_values)))
498
+
499
+ def alias(self, alias_name: str) -> "exp.Expression":
500
+ """Create an aliased function expression."""
501
+ return exp.Alias(this=self._expression, alias=alias_name)
502
+
503
+ def as_(self, alias: str) -> "exp.Alias":
504
+ """Create an aliased expression using sqlglot helper."""
505
+ return cast("exp.Alias", exp.alias_(self._expression, alias))
506
+
507
+ def cast(self, data_type: str) -> "FunctionColumn":
508
+ """SQL CAST() function."""
509
+ return FunctionColumn(exp.Cast(this=self._expression, to=exp.DataType.build(data_type)))
510
+
511
+ def asc(self) -> "exp.Ordered":
512
+ """Create an ASC ordering expression."""
513
+ return exp.Ordered(this=self._expression, desc=False)
514
+
515
+ def desc(self) -> "exp.Ordered":
516
+ """Create a DESC ordering expression."""
517
+ return exp.Ordered(this=self._expression, desc=True)
518
+
519
+ def __hash__(self) -> int:
520
+ """Hash based on the SQL expression."""
521
+ return hash(self._expression.sql())