sqlspec 0.47.0__cp314-cp314-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (621) hide show
  1. f68e0789eb443ecb1c2c__mypyc.cp314-win_amd64.pyd +0 -0
  2. sqlspec/__init__.py +167 -0
  3. sqlspec/__main__.py +12 -0
  4. sqlspec/__metadata__.py +14 -0
  5. sqlspec/_typing.py +714 -0
  6. sqlspec/adapters/__init__.py +0 -0
  7. sqlspec/adapters/adbc/__init__.py +13 -0
  8. sqlspec/adapters/adbc/_typing.py +106 -0
  9. sqlspec/adapters/adbc/adk/__init__.py +5 -0
  10. sqlspec/adapters/adbc/adk/store.py +1280 -0
  11. sqlspec/adapters/adbc/config.py +378 -0
  12. sqlspec/adapters/adbc/core.cp314-win_amd64.pyd +0 -0
  13. sqlspec/adapters/adbc/core.py +922 -0
  14. sqlspec/adapters/adbc/data_dictionary.py +339 -0
  15. sqlspec/adapters/adbc/driver.py +534 -0
  16. sqlspec/adapters/adbc/events/__init__.py +5 -0
  17. sqlspec/adapters/adbc/events/store.py +285 -0
  18. sqlspec/adapters/adbc/litestar/__init__.py +5 -0
  19. sqlspec/adapters/adbc/litestar/store.py +534 -0
  20. sqlspec/adapters/adbc/type_converter.cp314-win_amd64.pyd +0 -0
  21. sqlspec/adapters/adbc/type_converter.py +142 -0
  22. sqlspec/adapters/aiomysql/__init__.py +21 -0
  23. sqlspec/adapters/aiomysql/_typing.py +137 -0
  24. sqlspec/adapters/aiomysql/adk/__init__.py +5 -0
  25. sqlspec/adapters/aiomysql/adk/store.py +678 -0
  26. sqlspec/adapters/aiomysql/config.py +305 -0
  27. sqlspec/adapters/aiomysql/core.cp314-win_amd64.pyd +0 -0
  28. sqlspec/adapters/aiomysql/core.py +536 -0
  29. sqlspec/adapters/aiomysql/data_dictionary.py +121 -0
  30. sqlspec/adapters/aiomysql/driver.py +386 -0
  31. sqlspec/adapters/aiomysql/events/__init__.py +5 -0
  32. sqlspec/adapters/aiomysql/events/store.py +104 -0
  33. sqlspec/adapters/aiomysql/litestar/__init__.py +5 -0
  34. sqlspec/adapters/aiomysql/litestar/store.py +314 -0
  35. sqlspec/adapters/aiosqlite/__init__.py +26 -0
  36. sqlspec/adapters/aiosqlite/_typing.py +109 -0
  37. sqlspec/adapters/aiosqlite/adk/__init__.py +5 -0
  38. sqlspec/adapters/aiosqlite/adk/store.py +829 -0
  39. sqlspec/adapters/aiosqlite/config.py +315 -0
  40. sqlspec/adapters/aiosqlite/core.cp314-win_amd64.pyd +0 -0
  41. sqlspec/adapters/aiosqlite/core.py +315 -0
  42. sqlspec/adapters/aiosqlite/data_dictionary.py +202 -0
  43. sqlspec/adapters/aiosqlite/driver.py +311 -0
  44. sqlspec/adapters/aiosqlite/events/__init__.py +5 -0
  45. sqlspec/adapters/aiosqlite/events/store.py +20 -0
  46. sqlspec/adapters/aiosqlite/litestar/__init__.py +5 -0
  47. sqlspec/adapters/aiosqlite/litestar/store.py +279 -0
  48. sqlspec/adapters/aiosqlite/pool.cp314-win_amd64.pyd +0 -0
  49. sqlspec/adapters/aiosqlite/pool.py +734 -0
  50. sqlspec/adapters/asyncmy/__init__.py +21 -0
  51. sqlspec/adapters/asyncmy/_typing.py +113 -0
  52. sqlspec/adapters/asyncmy/adk/__init__.py +5 -0
  53. sqlspec/adapters/asyncmy/adk/store.py +644 -0
  54. sqlspec/adapters/asyncmy/config.py +307 -0
  55. sqlspec/adapters/asyncmy/core.cp314-win_amd64.pyd +0 -0
  56. sqlspec/adapters/asyncmy/core.py +538 -0
  57. sqlspec/adapters/asyncmy/data_dictionary.py +122 -0
  58. sqlspec/adapters/asyncmy/driver.py +391 -0
  59. sqlspec/adapters/asyncmy/events/__init__.py +5 -0
  60. sqlspec/adapters/asyncmy/events/store.py +104 -0
  61. sqlspec/adapters/asyncmy/litestar/__init__.py +5 -0
  62. sqlspec/adapters/asyncmy/litestar/store.py +296 -0
  63. sqlspec/adapters/asyncpg/__init__.py +26 -0
  64. sqlspec/adapters/asyncpg/_typing.py +103 -0
  65. sqlspec/adapters/asyncpg/adk/__init__.py +5 -0
  66. sqlspec/adapters/asyncpg/adk/store.py +483 -0
  67. sqlspec/adapters/asyncpg/config.py +575 -0
  68. sqlspec/adapters/asyncpg/core.cp314-win_amd64.pyd +0 -0
  69. sqlspec/adapters/asyncpg/core.py +480 -0
  70. sqlspec/adapters/asyncpg/data_dictionary.py +157 -0
  71. sqlspec/adapters/asyncpg/driver.py +487 -0
  72. sqlspec/adapters/asyncpg/events/__init__.py +6 -0
  73. sqlspec/adapters/asyncpg/events/_hub.py +181 -0
  74. sqlspec/adapters/asyncpg/events/backend.py +210 -0
  75. sqlspec/adapters/asyncpg/events/store.py +40 -0
  76. sqlspec/adapters/asyncpg/litestar/__init__.py +5 -0
  77. sqlspec/adapters/asyncpg/litestar/store.py +251 -0
  78. sqlspec/adapters/bigquery/__init__.py +15 -0
  79. sqlspec/adapters/bigquery/_typing.py +108 -0
  80. sqlspec/adapters/bigquery/config.py +362 -0
  81. sqlspec/adapters/bigquery/core.cp314-win_amd64.pyd +0 -0
  82. sqlspec/adapters/bigquery/core.py +768 -0
  83. sqlspec/adapters/bigquery/data_dictionary.py +120 -0
  84. sqlspec/adapters/bigquery/driver.py +542 -0
  85. sqlspec/adapters/bigquery/events/__init__.py +5 -0
  86. sqlspec/adapters/bigquery/events/store.py +139 -0
  87. sqlspec/adapters/bigquery/litestar/__init__.py +5 -0
  88. sqlspec/adapters/bigquery/litestar/store.py +325 -0
  89. sqlspec/adapters/bigquery/type_converter.cp314-win_amd64.pyd +0 -0
  90. sqlspec/adapters/bigquery/type_converter.py +107 -0
  91. sqlspec/adapters/cockroach_asyncpg/__init__.py +26 -0
  92. sqlspec/adapters/cockroach_asyncpg/_typing.py +73 -0
  93. sqlspec/adapters/cockroach_asyncpg/adk/__init__.py +3 -0
  94. sqlspec/adapters/cockroach_asyncpg/adk/store.py +465 -0
  95. sqlspec/adapters/cockroach_asyncpg/config.py +248 -0
  96. sqlspec/adapters/cockroach_asyncpg/core.cp314-win_amd64.pyd +0 -0
  97. sqlspec/adapters/cockroach_asyncpg/core.py +55 -0
  98. sqlspec/adapters/cockroach_asyncpg/data_dictionary.py +110 -0
  99. sqlspec/adapters/cockroach_asyncpg/driver.py +142 -0
  100. sqlspec/adapters/cockroach_asyncpg/events/__init__.py +3 -0
  101. sqlspec/adapters/cockroach_asyncpg/events/store.py +20 -0
  102. sqlspec/adapters/cockroach_asyncpg/litestar/__init__.py +3 -0
  103. sqlspec/adapters/cockroach_asyncpg/litestar/store.py +142 -0
  104. sqlspec/adapters/cockroach_psycopg/__init__.py +39 -0
  105. sqlspec/adapters/cockroach_psycopg/_typing.py +137 -0
  106. sqlspec/adapters/cockroach_psycopg/adk/__init__.py +13 -0
  107. sqlspec/adapters/cockroach_psycopg/adk/store.py +1039 -0
  108. sqlspec/adapters/cockroach_psycopg/config.py +511 -0
  109. sqlspec/adapters/cockroach_psycopg/core.cp314-win_amd64.pyd +0 -0
  110. sqlspec/adapters/cockroach_psycopg/core.py +63 -0
  111. sqlspec/adapters/cockroach_psycopg/data_dictionary.py +220 -0
  112. sqlspec/adapters/cockroach_psycopg/driver.py +273 -0
  113. sqlspec/adapters/cockroach_psycopg/events/__init__.py +6 -0
  114. sqlspec/adapters/cockroach_psycopg/events/store.py +34 -0
  115. sqlspec/adapters/cockroach_psycopg/litestar/__init__.py +3 -0
  116. sqlspec/adapters/cockroach_psycopg/litestar/store.py +327 -0
  117. sqlspec/adapters/duckdb/__init__.py +29 -0
  118. sqlspec/adapters/duckdb/_typing.py +104 -0
  119. sqlspec/adapters/duckdb/adk/__init__.py +14 -0
  120. sqlspec/adapters/duckdb/adk/store.py +935 -0
  121. sqlspec/adapters/duckdb/config.py +386 -0
  122. sqlspec/adapters/duckdb/core.cp314-win_amd64.pyd +0 -0
  123. sqlspec/adapters/duckdb/core.py +332 -0
  124. sqlspec/adapters/duckdb/data_dictionary.py +140 -0
  125. sqlspec/adapters/duckdb/driver.py +426 -0
  126. sqlspec/adapters/duckdb/events/__init__.py +5 -0
  127. sqlspec/adapters/duckdb/events/store.py +57 -0
  128. sqlspec/adapters/duckdb/litestar/__init__.py +5 -0
  129. sqlspec/adapters/duckdb/litestar/store.py +330 -0
  130. sqlspec/adapters/duckdb/pool.cp314-win_amd64.pyd +0 -0
  131. sqlspec/adapters/duckdb/pool.py +350 -0
  132. sqlspec/adapters/duckdb/type_converter.cp314-win_amd64.pyd +0 -0
  133. sqlspec/adapters/duckdb/type_converter.py +118 -0
  134. sqlspec/adapters/mysqlconnector/__init__.py +39 -0
  135. sqlspec/adapters/mysqlconnector/_typing.py +186 -0
  136. sqlspec/adapters/mysqlconnector/adk/__init__.py +15 -0
  137. sqlspec/adapters/mysqlconnector/adk/store.py +1183 -0
  138. sqlspec/adapters/mysqlconnector/config.py +421 -0
  139. sqlspec/adapters/mysqlconnector/core.cp314-win_amd64.pyd +0 -0
  140. sqlspec/adapters/mysqlconnector/core.py +472 -0
  141. sqlspec/adapters/mysqlconnector/data_dictionary.py +230 -0
  142. sqlspec/adapters/mysqlconnector/driver.py +516 -0
  143. sqlspec/adapters/mysqlconnector/events/__init__.py +8 -0
  144. sqlspec/adapters/mysqlconnector/events/store.py +98 -0
  145. sqlspec/adapters/mysqlconnector/litestar/__init__.py +5 -0
  146. sqlspec/adapters/mysqlconnector/litestar/store.py +426 -0
  147. sqlspec/adapters/oracledb/__init__.py +39 -0
  148. sqlspec/adapters/oracledb/_json_handlers.cp314-win_amd64.pyd +0 -0
  149. sqlspec/adapters/oracledb/_json_handlers.py +196 -0
  150. sqlspec/adapters/oracledb/_param_types.cp314-win_amd64.pyd +0 -0
  151. sqlspec/adapters/oracledb/_param_types.py +46 -0
  152. sqlspec/adapters/oracledb/_typing.py +258 -0
  153. sqlspec/adapters/oracledb/_uuid_handlers.cp314-win_amd64.pyd +0 -0
  154. sqlspec/adapters/oracledb/_uuid_handlers.py +163 -0
  155. sqlspec/adapters/oracledb/_vector_handlers.cp314-win_amd64.pyd +0 -0
  156. sqlspec/adapters/oracledb/_vector_handlers.py +228 -0
  157. sqlspec/adapters/oracledb/adk/__init__.py +21 -0
  158. sqlspec/adapters/oracledb/adk/store.py +2453 -0
  159. sqlspec/adapters/oracledb/config.py +575 -0
  160. sqlspec/adapters/oracledb/core.cp314-win_amd64.pyd +0 -0
  161. sqlspec/adapters/oracledb/core.py +820 -0
  162. sqlspec/adapters/oracledb/data_dictionary.py +404 -0
  163. sqlspec/adapters/oracledb/driver.py +1277 -0
  164. sqlspec/adapters/oracledb/events/__init__.py +16 -0
  165. sqlspec/adapters/oracledb/events/_hub.py +345 -0
  166. sqlspec/adapters/oracledb/events/backend.py +300 -0
  167. sqlspec/adapters/oracledb/events/store.py +420 -0
  168. sqlspec/adapters/oracledb/litestar/__init__.py +5 -0
  169. sqlspec/adapters/oracledb/litestar/store.py +781 -0
  170. sqlspec/adapters/oracledb/migrations.py +539 -0
  171. sqlspec/adapters/oracledb/type_converter.cp314-win_amd64.pyd +0 -0
  172. sqlspec/adapters/oracledb/type_converter.py +211 -0
  173. sqlspec/adapters/psqlpy/__init__.py +18 -0
  174. sqlspec/adapters/psqlpy/_typing.py +121 -0
  175. sqlspec/adapters/psqlpy/adk/__init__.py +5 -0
  176. sqlspec/adapters/psqlpy/adk/store.py +591 -0
  177. sqlspec/adapters/psqlpy/config.py +376 -0
  178. sqlspec/adapters/psqlpy/core.cp314-win_amd64.pyd +0 -0
  179. sqlspec/adapters/psqlpy/core.py +694 -0
  180. sqlspec/adapters/psqlpy/data_dictionary.py +121 -0
  181. sqlspec/adapters/psqlpy/driver.py +411 -0
  182. sqlspec/adapters/psqlpy/events/__init__.py +6 -0
  183. sqlspec/adapters/psqlpy/events/_hub.py +204 -0
  184. sqlspec/adapters/psqlpy/events/backend.py +210 -0
  185. sqlspec/adapters/psqlpy/events/store.py +20 -0
  186. sqlspec/adapters/psqlpy/litestar/__init__.py +5 -0
  187. sqlspec/adapters/psqlpy/litestar/store.py +270 -0
  188. sqlspec/adapters/psqlpy/type_converter.cp314-win_amd64.pyd +0 -0
  189. sqlspec/adapters/psqlpy/type_converter.py +113 -0
  190. sqlspec/adapters/psycopg/__init__.py +38 -0
  191. sqlspec/adapters/psycopg/_typing.py +218 -0
  192. sqlspec/adapters/psycopg/adk/__init__.py +10 -0
  193. sqlspec/adapters/psycopg/adk/store.py +1106 -0
  194. sqlspec/adapters/psycopg/config.py +695 -0
  195. sqlspec/adapters/psycopg/core.cp314-win_amd64.pyd +0 -0
  196. sqlspec/adapters/psycopg/core.py +520 -0
  197. sqlspec/adapters/psycopg/data_dictionary.py +278 -0
  198. sqlspec/adapters/psycopg/driver.py +1033 -0
  199. sqlspec/adapters/psycopg/events/__init__.py +20 -0
  200. sqlspec/adapters/psycopg/events/_hub.py +388 -0
  201. sqlspec/adapters/psycopg/events/backend.py +398 -0
  202. sqlspec/adapters/psycopg/events/store.py +42 -0
  203. sqlspec/adapters/psycopg/litestar/__init__.py +5 -0
  204. sqlspec/adapters/psycopg/litestar/store.py +554 -0
  205. sqlspec/adapters/psycopg/type_converter.cp314-win_amd64.pyd +0 -0
  206. sqlspec/adapters/psycopg/type_converter.py +93 -0
  207. sqlspec/adapters/pymysql/__init__.py +21 -0
  208. sqlspec/adapters/pymysql/_typing.py +92 -0
  209. sqlspec/adapters/pymysql/adk/__init__.py +5 -0
  210. sqlspec/adapters/pymysql/adk/store.py +657 -0
  211. sqlspec/adapters/pymysql/config.py +176 -0
  212. sqlspec/adapters/pymysql/core.cp314-win_amd64.pyd +0 -0
  213. sqlspec/adapters/pymysql/core.py +469 -0
  214. sqlspec/adapters/pymysql/data_dictionary.py +120 -0
  215. sqlspec/adapters/pymysql/driver.py +271 -0
  216. sqlspec/adapters/pymysql/events/__init__.py +5 -0
  217. sqlspec/adapters/pymysql/events/store.py +50 -0
  218. sqlspec/adapters/pymysql/litestar/__init__.py +5 -0
  219. sqlspec/adapters/pymysql/litestar/store.py +232 -0
  220. sqlspec/adapters/pymysql/pool.cp314-win_amd64.pyd +0 -0
  221. sqlspec/adapters/pymysql/pool.py +184 -0
  222. sqlspec/adapters/spanner/__init__.py +33 -0
  223. sqlspec/adapters/spanner/_typing.py +102 -0
  224. sqlspec/adapters/spanner/adk/__init__.py +5 -0
  225. sqlspec/adapters/spanner/adk/store.py +758 -0
  226. sqlspec/adapters/spanner/config.py +355 -0
  227. sqlspec/adapters/spanner/core.cp314-win_amd64.pyd +0 -0
  228. sqlspec/adapters/spanner/core.py +263 -0
  229. sqlspec/adapters/spanner/data_dictionary.py +120 -0
  230. sqlspec/adapters/spanner/driver.py +407 -0
  231. sqlspec/adapters/spanner/events/__init__.py +5 -0
  232. sqlspec/adapters/spanner/events/store.py +187 -0
  233. sqlspec/adapters/spanner/litestar/__init__.py +5 -0
  234. sqlspec/adapters/spanner/litestar/store.py +291 -0
  235. sqlspec/adapters/spanner/type_converter.cp314-win_amd64.pyd +0 -0
  236. sqlspec/adapters/spanner/type_converter.py +342 -0
  237. sqlspec/adapters/sqlite/__init__.py +19 -0
  238. sqlspec/adapters/sqlite/_typing.py +123 -0
  239. sqlspec/adapters/sqlite/adk/__init__.py +5 -0
  240. sqlspec/adapters/sqlite/adk/store.py +992 -0
  241. sqlspec/adapters/sqlite/config.py +240 -0
  242. sqlspec/adapters/sqlite/core.cp314-win_amd64.pyd +0 -0
  243. sqlspec/adapters/sqlite/core.py +357 -0
  244. sqlspec/adapters/sqlite/data_dictionary.py +198 -0
  245. sqlspec/adapters/sqlite/driver.py +527 -0
  246. sqlspec/adapters/sqlite/events/__init__.py +5 -0
  247. sqlspec/adapters/sqlite/events/store.py +20 -0
  248. sqlspec/adapters/sqlite/litestar/__init__.py +5 -0
  249. sqlspec/adapters/sqlite/litestar/store.py +316 -0
  250. sqlspec/adapters/sqlite/pool.cp314-win_amd64.pyd +0 -0
  251. sqlspec/adapters/sqlite/pool.py +237 -0
  252. sqlspec/adapters/sqlite/type_converter.cp314-win_amd64.pyd +0 -0
  253. sqlspec/adapters/sqlite/type_converter.py +114 -0
  254. sqlspec/base.py +832 -0
  255. sqlspec/builder/__init__.py +181 -0
  256. sqlspec/builder/_base.cp314-win_amd64.pyd +0 -0
  257. sqlspec/builder/_base.py +1071 -0
  258. sqlspec/builder/_column.cp314-win_amd64.pyd +0 -0
  259. sqlspec/builder/_column.py +521 -0
  260. sqlspec/builder/_ddl.cp314-win_amd64.pyd +0 -0
  261. sqlspec/builder/_ddl.py +1691 -0
  262. sqlspec/builder/_delete.cp314-win_amd64.pyd +0 -0
  263. sqlspec/builder/_delete.py +95 -0
  264. sqlspec/builder/_dml.cp314-win_amd64.pyd +0 -0
  265. sqlspec/builder/_dml.py +386 -0
  266. sqlspec/builder/_explain.cp314-win_amd64.pyd +0 -0
  267. sqlspec/builder/_explain.py +579 -0
  268. sqlspec/builder/_expression_wrappers.cp314-win_amd64.pyd +0 -0
  269. sqlspec/builder/_expression_wrappers.py +46 -0
  270. sqlspec/builder/_factory.cp314-win_amd64.pyd +0 -0
  271. sqlspec/builder/_factory.py +1884 -0
  272. sqlspec/builder/_insert.cp314-win_amd64.pyd +0 -0
  273. sqlspec/builder/_insert.py +405 -0
  274. sqlspec/builder/_join.cp314-win_amd64.pyd +0 -0
  275. sqlspec/builder/_join.py +489 -0
  276. sqlspec/builder/_merge.cp314-win_amd64.pyd +0 -0
  277. sqlspec/builder/_merge.py +823 -0
  278. sqlspec/builder/_parsing_utils.cp314-win_amd64.pyd +0 -0
  279. sqlspec/builder/_parsing_utils.py +295 -0
  280. sqlspec/builder/_select.cp314-win_amd64.pyd +0 -0
  281. sqlspec/builder/_select.py +1666 -0
  282. sqlspec/builder/_temporal.cp314-win_amd64.pyd +0 -0
  283. sqlspec/builder/_temporal.py +167 -0
  284. sqlspec/builder/_update.cp314-win_amd64.pyd +0 -0
  285. sqlspec/builder/_update.py +173 -0
  286. sqlspec/builder/_vector_distance.cp314-win_amd64.pyd +0 -0
  287. sqlspec/builder/_vector_distance.py +330 -0
  288. sqlspec/cli.py +1095 -0
  289. sqlspec/config.py +2383 -0
  290. sqlspec/core/__init__.py +372 -0
  291. sqlspec/core/_correlation.cp314-win_amd64.pyd +0 -0
  292. sqlspec/core/_correlation.py +176 -0
  293. sqlspec/core/_pagination.py +42 -0
  294. sqlspec/core/_pool.cp314-win_amd64.pyd +0 -0
  295. sqlspec/core/_pool.py +76 -0
  296. sqlspec/core/cache.cp314-win_amd64.pyd +0 -0
  297. sqlspec/core/cache.py +1085 -0
  298. sqlspec/core/compiler.cp314-win_amd64.pyd +0 -0
  299. sqlspec/core/compiler.py +1090 -0
  300. sqlspec/core/config_runtime.cp314-win_amd64.pyd +0 -0
  301. sqlspec/core/config_runtime.py +174 -0
  302. sqlspec/core/explain.cp314-win_amd64.pyd +0 -0
  303. sqlspec/core/explain.py +275 -0
  304. sqlspec/core/filters.cp314-win_amd64.pyd +0 -0
  305. sqlspec/core/filters.py +969 -0
  306. sqlspec/core/hashing.cp314-win_amd64.pyd +0 -0
  307. sqlspec/core/hashing.py +266 -0
  308. sqlspec/core/metrics.cp314-win_amd64.pyd +0 -0
  309. sqlspec/core/metrics.py +83 -0
  310. sqlspec/core/parameters/__init__.py +72 -0
  311. sqlspec/core/parameters/_alignment.cp314-win_amd64.pyd +0 -0
  312. sqlspec/core/parameters/_alignment.py +283 -0
  313. sqlspec/core/parameters/_converter.cp314-win_amd64.pyd +0 -0
  314. sqlspec/core/parameters/_converter.py +554 -0
  315. sqlspec/core/parameters/_processor.cp314-win_amd64.pyd +0 -0
  316. sqlspec/core/parameters/_processor.py +1182 -0
  317. sqlspec/core/parameters/_registry.cp314-win_amd64.pyd +0 -0
  318. sqlspec/core/parameters/_registry.py +206 -0
  319. sqlspec/core/parameters/_transformers.cp314-win_amd64.pyd +0 -0
  320. sqlspec/core/parameters/_transformers.py +324 -0
  321. sqlspec/core/parameters/_types.cp314-win_amd64.pyd +0 -0
  322. sqlspec/core/parameters/_types.py +536 -0
  323. sqlspec/core/parameters/_validator.cp314-win_amd64.pyd +0 -0
  324. sqlspec/core/parameters/_validator.py +171 -0
  325. sqlspec/core/pipeline.cp314-win_amd64.pyd +0 -0
  326. sqlspec/core/pipeline.py +333 -0
  327. sqlspec/core/query_modifiers.cp314-win_amd64.pyd +0 -0
  328. sqlspec/core/query_modifiers.py +508 -0
  329. sqlspec/core/result/__init__.py +25 -0
  330. sqlspec/core/result/_base.cp314-win_amd64.pyd +0 -0
  331. sqlspec/core/result/_base.py +1232 -0
  332. sqlspec/core/result/_io.cp314-win_amd64.pyd +0 -0
  333. sqlspec/core/result/_io.py +28 -0
  334. sqlspec/core/splitter.cp314-win_amd64.pyd +0 -0
  335. sqlspec/core/splitter.py +1021 -0
  336. sqlspec/core/sqlcommenter.cp314-win_amd64.pyd +0 -0
  337. sqlspec/core/sqlcommenter.py +249 -0
  338. sqlspec/core/stack.cp314-win_amd64.pyd +0 -0
  339. sqlspec/core/stack.py +163 -0
  340. sqlspec/core/statement.cp314-win_amd64.pyd +0 -0
  341. sqlspec/core/statement.py +1865 -0
  342. sqlspec/core/type_converter.cp314-win_amd64.pyd +0 -0
  343. sqlspec/core/type_converter.py +340 -0
  344. sqlspec/data_dictionary/__init__.py +22 -0
  345. sqlspec/data_dictionary/_loader.cp314-win_amd64.pyd +0 -0
  346. sqlspec/data_dictionary/_loader.py +138 -0
  347. sqlspec/data_dictionary/_registry.cp314-win_amd64.pyd +0 -0
  348. sqlspec/data_dictionary/_registry.py +74 -0
  349. sqlspec/data_dictionary/_types.cp314-win_amd64.pyd +0 -0
  350. sqlspec/data_dictionary/_types.py +121 -0
  351. sqlspec/data_dictionary/dialects/__init__.py +21 -0
  352. sqlspec/data_dictionary/dialects/bigquery.cp314-win_amd64.pyd +0 -0
  353. sqlspec/data_dictionary/dialects/bigquery.py +81 -0
  354. sqlspec/data_dictionary/dialects/cockroachdb.cp314-win_amd64.pyd +0 -0
  355. sqlspec/data_dictionary/dialects/cockroachdb.py +54 -0
  356. sqlspec/data_dictionary/dialects/duckdb.cp314-win_amd64.pyd +0 -0
  357. sqlspec/data_dictionary/dialects/duckdb.py +47 -0
  358. sqlspec/data_dictionary/dialects/mysql.cp314-win_amd64.pyd +0 -0
  359. sqlspec/data_dictionary/dialects/mysql.py +53 -0
  360. sqlspec/data_dictionary/dialects/oracle.cp314-win_amd64.pyd +0 -0
  361. sqlspec/data_dictionary/dialects/oracle.py +197 -0
  362. sqlspec/data_dictionary/dialects/postgres.cp314-win_amd64.pyd +0 -0
  363. sqlspec/data_dictionary/dialects/postgres.py +69 -0
  364. sqlspec/data_dictionary/dialects/spanner.cp314-win_amd64.pyd +0 -0
  365. sqlspec/data_dictionary/dialects/spanner.py +37 -0
  366. sqlspec/data_dictionary/dialects/sqlite.cp314-win_amd64.pyd +0 -0
  367. sqlspec/data_dictionary/dialects/sqlite.py +59 -0
  368. sqlspec/data_dictionary/sql/.gitkeep +0 -0
  369. sqlspec/data_dictionary/sql/bigquery/columns.sql +23 -0
  370. sqlspec/data_dictionary/sql/bigquery/foreign_keys.sql +34 -0
  371. sqlspec/data_dictionary/sql/bigquery/indexes.sql +19 -0
  372. sqlspec/data_dictionary/sql/bigquery/tables.sql +33 -0
  373. sqlspec/data_dictionary/sql/bigquery/version.sql +3 -0
  374. sqlspec/data_dictionary/sql/cockroachdb/columns.sql +34 -0
  375. sqlspec/data_dictionary/sql/cockroachdb/foreign_keys.sql +40 -0
  376. sqlspec/data_dictionary/sql/cockroachdb/indexes.sql +32 -0
  377. sqlspec/data_dictionary/sql/cockroachdb/tables.sql +44 -0
  378. sqlspec/data_dictionary/sql/cockroachdb/version.sql +3 -0
  379. sqlspec/data_dictionary/sql/duckdb/columns.sql +23 -0
  380. sqlspec/data_dictionary/sql/duckdb/foreign_keys.sql +36 -0
  381. sqlspec/data_dictionary/sql/duckdb/indexes.sql +19 -0
  382. sqlspec/data_dictionary/sql/duckdb/tables.sql +38 -0
  383. sqlspec/data_dictionary/sql/duckdb/version.sql +3 -0
  384. sqlspec/data_dictionary/sql/mysql/columns.sql +23 -0
  385. sqlspec/data_dictionary/sql/mysql/foreign_keys.sql +28 -0
  386. sqlspec/data_dictionary/sql/mysql/indexes.sql +26 -0
  387. sqlspec/data_dictionary/sql/mysql/tables.sql +33 -0
  388. sqlspec/data_dictionary/sql/mysql/version.sql +3 -0
  389. sqlspec/data_dictionary/sql/oracle/columns.sql +23 -0
  390. sqlspec/data_dictionary/sql/oracle/foreign_keys.sql +48 -0
  391. sqlspec/data_dictionary/sql/oracle/indexes.sql +44 -0
  392. sqlspec/data_dictionary/sql/oracle/tables.sql +25 -0
  393. sqlspec/data_dictionary/sql/oracle/version.sql +20 -0
  394. sqlspec/data_dictionary/sql/postgres/columns.sql +34 -0
  395. sqlspec/data_dictionary/sql/postgres/foreign_keys.sql +40 -0
  396. sqlspec/data_dictionary/sql/postgres/indexes.sql +56 -0
  397. sqlspec/data_dictionary/sql/postgres/tables.sql +44 -0
  398. sqlspec/data_dictionary/sql/postgres/version.sql +3 -0
  399. sqlspec/data_dictionary/sql/spanner/columns.sql +23 -0
  400. sqlspec/data_dictionary/sql/spanner/foreign_keys.sql +70 -0
  401. sqlspec/data_dictionary/sql/spanner/indexes.sql +30 -0
  402. sqlspec/data_dictionary/sql/spanner/tables.sql +9 -0
  403. sqlspec/data_dictionary/sql/spanner/version.sql +3 -0
  404. sqlspec/data_dictionary/sql/sqlite/columns.sql +23 -0
  405. sqlspec/data_dictionary/sql/sqlite/foreign_keys.sql +22 -0
  406. sqlspec/data_dictionary/sql/sqlite/indexes.sql +7 -0
  407. sqlspec/data_dictionary/sql/sqlite/tables.sql +28 -0
  408. sqlspec/data_dictionary/sql/sqlite/version.sql +3 -0
  409. sqlspec/dialects/__init__.py +22 -0
  410. sqlspec/dialects/_compat.cp314-win_amd64.pyd +0 -0
  411. sqlspec/dialects/_compat.py +14 -0
  412. sqlspec/dialects/postgres/__init__.py +9 -0
  413. sqlspec/dialects/postgres/_generators.cp314-win_amd64.pyd +0 -0
  414. sqlspec/dialects/postgres/_generators.py +57 -0
  415. sqlspec/dialects/postgres/_operators.cp314-win_amd64.pyd +0 -0
  416. sqlspec/dialects/postgres/_operators.py +81 -0
  417. sqlspec/dialects/postgres/_paradedb.py +50 -0
  418. sqlspec/dialects/postgres/_pgvector.py +36 -0
  419. sqlspec/dialects/spanner/__init__.py +6 -0
  420. sqlspec/dialects/spanner/_generators.cp314-win_amd64.pyd +0 -0
  421. sqlspec/dialects/spanner/_generators.py +206 -0
  422. sqlspec/dialects/spanner/_spangres.py +77 -0
  423. sqlspec/dialects/spanner/_spanner.py +179 -0
  424. sqlspec/driver/__init__.py +49 -0
  425. sqlspec/driver/_async.cp314-win_amd64.pyd +0 -0
  426. sqlspec/driver/_async.py +1830 -0
  427. sqlspec/driver/_common.cp314-win_amd64.pyd +0 -0
  428. sqlspec/driver/_common.py +2292 -0
  429. sqlspec/driver/_exception_handler.cp314-win_amd64.pyd +0 -0
  430. sqlspec/driver/_exception_handler.py +108 -0
  431. sqlspec/driver/_query_cache.cp314-win_amd64.pyd +0 -0
  432. sqlspec/driver/_query_cache.py +96 -0
  433. sqlspec/driver/_sql_helpers.cp314-win_amd64.pyd +0 -0
  434. sqlspec/driver/_sql_helpers.py +139 -0
  435. sqlspec/driver/_storage_helpers.cp314-win_amd64.pyd +0 -0
  436. sqlspec/driver/_storage_helpers.py +153 -0
  437. sqlspec/driver/_sync.cp314-win_amd64.pyd +0 -0
  438. sqlspec/driver/_sync.py +1817 -0
  439. sqlspec/exceptions.cp314-win_amd64.pyd +0 -0
  440. sqlspec/exceptions.py +480 -0
  441. sqlspec/extensions/__init__.py +0 -0
  442. sqlspec/extensions/adk/__init__.py +84 -0
  443. sqlspec/extensions/adk/_config_utils.py +199 -0
  444. sqlspec/extensions/adk/_types.cp314-win_amd64.pyd +0 -0
  445. sqlspec/extensions/adk/_types.py +41 -0
  446. sqlspec/extensions/adk/artifact/__init__.py +57 -0
  447. sqlspec/extensions/adk/artifact/_types.cp314-win_amd64.pyd +0 -0
  448. sqlspec/extensions/adk/artifact/_types.py +32 -0
  449. sqlspec/extensions/adk/artifact/service.py +508 -0
  450. sqlspec/extensions/adk/artifact/store.py +361 -0
  451. sqlspec/extensions/adk/converters.py +212 -0
  452. sqlspec/extensions/adk/memory/__init__.py +69 -0
  453. sqlspec/extensions/adk/memory/_types.cp314-win_amd64.pyd +0 -0
  454. sqlspec/extensions/adk/memory/_types.py +30 -0
  455. sqlspec/extensions/adk/memory/converters.py +225 -0
  456. sqlspec/extensions/adk/memory/service.py +316 -0
  457. sqlspec/extensions/adk/memory/store.py +525 -0
  458. sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +184 -0
  459. sqlspec/extensions/adk/migrations/__init__.py +0 -0
  460. sqlspec/extensions/adk/service.py +279 -0
  461. sqlspec/extensions/adk/store.py +590 -0
  462. sqlspec/extensions/events/__init__.py +51 -0
  463. sqlspec/extensions/events/_channel.py +703 -0
  464. sqlspec/extensions/events/_hints.cp314-win_amd64.pyd +0 -0
  465. sqlspec/extensions/events/_hints.py +45 -0
  466. sqlspec/extensions/events/_models.py +23 -0
  467. sqlspec/extensions/events/_payload.cp314-win_amd64.pyd +0 -0
  468. sqlspec/extensions/events/_payload.py +69 -0
  469. sqlspec/extensions/events/_protocols.py +134 -0
  470. sqlspec/extensions/events/_queue.py +462 -0
  471. sqlspec/extensions/events/_store.py +209 -0
  472. sqlspec/extensions/events/migrations/0001_create_event_queue.py +59 -0
  473. sqlspec/extensions/events/migrations/__init__.py +3 -0
  474. sqlspec/extensions/fastapi/__init__.py +22 -0
  475. sqlspec/extensions/fastapi/extension.py +391 -0
  476. sqlspec/extensions/fastapi/providers.cp314-win_amd64.pyd +0 -0
  477. sqlspec/extensions/fastapi/providers.py +712 -0
  478. sqlspec/extensions/flask/__init__.py +38 -0
  479. sqlspec/extensions/flask/_state.py +87 -0
  480. sqlspec/extensions/flask/_utils.py +71 -0
  481. sqlspec/extensions/flask/extension.py +539 -0
  482. sqlspec/extensions/litestar/__init__.py +31 -0
  483. sqlspec/extensions/litestar/_utils.py +52 -0
  484. sqlspec/extensions/litestar/channels.py +165 -0
  485. sqlspec/extensions/litestar/cli.py +102 -0
  486. sqlspec/extensions/litestar/config.py +90 -0
  487. sqlspec/extensions/litestar/handlers.py +316 -0
  488. sqlspec/extensions/litestar/migrations/0001_create_session_table.py +137 -0
  489. sqlspec/extensions/litestar/migrations/__init__.py +3 -0
  490. sqlspec/extensions/litestar/plugin.py +1066 -0
  491. sqlspec/extensions/litestar/providers.cp314-win_amd64.pyd +0 -0
  492. sqlspec/extensions/litestar/providers.py +784 -0
  493. sqlspec/extensions/litestar/store.py +298 -0
  494. sqlspec/extensions/otel/__init__.py +58 -0
  495. sqlspec/extensions/prometheus/__init__.py +113 -0
  496. sqlspec/extensions/sanic/__init__.py +19 -0
  497. sqlspec/extensions/sanic/_state.py +43 -0
  498. sqlspec/extensions/sanic/_utils.py +127 -0
  499. sqlspec/extensions/sanic/extension.py +647 -0
  500. sqlspec/extensions/starlette/__init__.py +22 -0
  501. sqlspec/extensions/starlette/_state.py +42 -0
  502. sqlspec/extensions/starlette/_utils.py +96 -0
  503. sqlspec/extensions/starlette/extension.py +374 -0
  504. sqlspec/extensions/starlette/middleware.py +281 -0
  505. sqlspec/loader.cp314-win_amd64.pyd +0 -0
  506. sqlspec/loader.py +727 -0
  507. sqlspec/migrations/__init__.py +39 -0
  508. sqlspec/migrations/base.cp314-win_amd64.pyd +0 -0
  509. sqlspec/migrations/base.py +862 -0
  510. sqlspec/migrations/commands.py +2151 -0
  511. sqlspec/migrations/context.cp314-win_amd64.pyd +0 -0
  512. sqlspec/migrations/context.py +157 -0
  513. sqlspec/migrations/fix.cp314-win_amd64.pyd +0 -0
  514. sqlspec/migrations/fix.py +204 -0
  515. sqlspec/migrations/loaders.cp314-win_amd64.pyd +0 -0
  516. sqlspec/migrations/loaders.py +443 -0
  517. sqlspec/migrations/runner.cp314-win_amd64.pyd +0 -0
  518. sqlspec/migrations/runner.py +1195 -0
  519. sqlspec/migrations/squash.cp314-win_amd64.pyd +0 -0
  520. sqlspec/migrations/squash.py +490 -0
  521. sqlspec/migrations/templates.cp314-win_amd64.pyd +0 -0
  522. sqlspec/migrations/templates.py +234 -0
  523. sqlspec/migrations/tracker.cp314-win_amd64.pyd +0 -0
  524. sqlspec/migrations/tracker.py +792 -0
  525. sqlspec/migrations/utils.cp314-win_amd64.pyd +0 -0
  526. sqlspec/migrations/utils.py +256 -0
  527. sqlspec/migrations/validation.cp314-win_amd64.pyd +0 -0
  528. sqlspec/migrations/validation.py +359 -0
  529. sqlspec/migrations/version.cp314-win_amd64.pyd +0 -0
  530. sqlspec/migrations/version.py +446 -0
  531. sqlspec/observability/__init__.py +57 -0
  532. sqlspec/observability/_common.cp314-win_amd64.pyd +0 -0
  533. sqlspec/observability/_common.py +77 -0
  534. sqlspec/observability/_config.cp314-win_amd64.pyd +0 -0
  535. sqlspec/observability/_config.py +364 -0
  536. sqlspec/observability/_diagnostics.cp314-win_amd64.pyd +0 -0
  537. sqlspec/observability/_diagnostics.py +74 -0
  538. sqlspec/observability/_dispatcher.cp314-win_amd64.pyd +0 -0
  539. sqlspec/observability/_dispatcher.py +200 -0
  540. sqlspec/observability/_formatters/__init__.py +13 -0
  541. sqlspec/observability/_formatters/_aws.cp314-win_amd64.pyd +0 -0
  542. sqlspec/observability/_formatters/_aws.py +102 -0
  543. sqlspec/observability/_formatters/_azure.cp314-win_amd64.pyd +0 -0
  544. sqlspec/observability/_formatters/_azure.py +96 -0
  545. sqlspec/observability/_formatters/_base.cp314-win_amd64.pyd +0 -0
  546. sqlspec/observability/_formatters/_base.py +57 -0
  547. sqlspec/observability/_formatters/_gcp.cp314-win_amd64.pyd +0 -0
  548. sqlspec/observability/_formatters/_gcp.py +131 -0
  549. sqlspec/observability/_formatting.py +58 -0
  550. sqlspec/observability/_observer.cp314-win_amd64.pyd +0 -0
  551. sqlspec/observability/_observer.py +361 -0
  552. sqlspec/observability/_runtime.cp314-win_amd64.pyd +0 -0
  553. sqlspec/observability/_runtime.py +461 -0
  554. sqlspec/observability/_sampling.cp314-win_amd64.pyd +0 -0
  555. sqlspec/observability/_sampling.py +188 -0
  556. sqlspec/observability/_spans.cp314-win_amd64.pyd +0 -0
  557. sqlspec/observability/_spans.py +161 -0
  558. sqlspec/protocols.py +955 -0
  559. sqlspec/py.typed +0 -0
  560. sqlspec/service.py +433 -0
  561. sqlspec/storage/__init__.py +48 -0
  562. sqlspec/storage/_arrow_payload.py +68 -0
  563. sqlspec/storage/_paths.cp314-win_amd64.pyd +0 -0
  564. sqlspec/storage/_paths.py +58 -0
  565. sqlspec/storage/_utils.py +46 -0
  566. sqlspec/storage/backends/__init__.py +1 -0
  567. sqlspec/storage/backends/base.cp314-win_amd64.pyd +0 -0
  568. sqlspec/storage/backends/base.py +374 -0
  569. sqlspec/storage/backends/fsspec.py +574 -0
  570. sqlspec/storage/backends/local.py +468 -0
  571. sqlspec/storage/backends/obstore.py +956 -0
  572. sqlspec/storage/errors.cp314-win_amd64.pyd +0 -0
  573. sqlspec/storage/errors.py +102 -0
  574. sqlspec/storage/pipeline.cp314-win_amd64.pyd +0 -0
  575. sqlspec/storage/pipeline.py +628 -0
  576. sqlspec/storage/registry.cp314-win_amd64.pyd +0 -0
  577. sqlspec/storage/registry.py +329 -0
  578. sqlspec/typing.py +405 -0
  579. sqlspec/utils/__init__.py +7 -0
  580. sqlspec/utils/arrow_helpers.py +384 -0
  581. sqlspec/utils/config_tools.cp314-win_amd64.pyd +0 -0
  582. sqlspec/utils/config_tools.py +314 -0
  583. sqlspec/utils/correlation.cp314-win_amd64.pyd +0 -0
  584. sqlspec/utils/correlation.py +134 -0
  585. sqlspec/utils/deprecation.cp314-win_amd64.pyd +0 -0
  586. sqlspec/utils/deprecation.py +157 -0
  587. sqlspec/utils/dispatch.cp314-win_amd64.pyd +0 -0
  588. sqlspec/utils/dispatch.py +101 -0
  589. sqlspec/utils/fixtures.cp314-win_amd64.pyd +0 -0
  590. sqlspec/utils/fixtures.py +260 -0
  591. sqlspec/utils/logging.cp314-win_amd64.pyd +0 -0
  592. sqlspec/utils/logging.py +251 -0
  593. sqlspec/utils/module_loader.py +306 -0
  594. sqlspec/utils/portal.cp314-win_amd64.pyd +0 -0
  595. sqlspec/utils/portal.py +377 -0
  596. sqlspec/utils/schema.cp314-win_amd64.pyd +0 -0
  597. sqlspec/utils/schema.py +1040 -0
  598. sqlspec/utils/serializers/__init__.py +30 -0
  599. sqlspec/utils/serializers/_json.cp314-win_amd64.pyd +0 -0
  600. sqlspec/utils/serializers/_json.py +415 -0
  601. sqlspec/utils/serializers/_numpy.cp314-win_amd64.pyd +0 -0
  602. sqlspec/utils/serializers/_numpy.py +65 -0
  603. sqlspec/utils/serializers/_schema.cp314-win_amd64.pyd +0 -0
  604. sqlspec/utils/serializers/_schema.py +285 -0
  605. sqlspec/utils/singleton.cp314-win_amd64.pyd +0 -0
  606. sqlspec/utils/singleton.py +41 -0
  607. sqlspec/utils/sync_tools.cp314-win_amd64.pyd +0 -0
  608. sqlspec/utils/sync_tools.py +316 -0
  609. sqlspec/utils/text.cp314-win_amd64.pyd +0 -0
  610. sqlspec/utils/text.py +109 -0
  611. sqlspec/utils/type_converters.cp314-win_amd64.pyd +0 -0
  612. sqlspec/utils/type_converters.py +216 -0
  613. sqlspec/utils/type_guards.cp314-win_amd64.pyd +0 -0
  614. sqlspec/utils/type_guards.py +1508 -0
  615. sqlspec/utils/uuids.cp314-win_amd64.pyd +0 -0
  616. sqlspec/utils/uuids.py +241 -0
  617. sqlspec-0.47.0.dist-info/METADATA +202 -0
  618. sqlspec-0.47.0.dist-info/RECORD +621 -0
  619. sqlspec-0.47.0.dist-info/WHEEL +4 -0
  620. sqlspec-0.47.0.dist-info/entry_points.txt +6 -0
  621. sqlspec-0.47.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,36 @@
1
+ """PGVector dialect extending Postgres with vector distance operators.
2
+
3
+ Adds support for pgvector distance operators:
4
+ - <-> : L2 (Euclidean) distance (already in base Postgres)
5
+ - <#> : Negative inner product
6
+ - <=> : Cosine distance
7
+ - <+> : L1 (Taxicab/Manhattan) distance
8
+ - <~> : Hamming distance (binary vectors)
9
+ - <%> : Jaccard distance (binary vectors)
10
+ """
11
+
12
+ from sqlglot.dialects.dialect import Dialect
13
+ from sqlglot.dialects.postgres import Postgres
14
+
15
+ from sqlspec.dialects.postgres._generators import PGVectorGenerator
16
+ from sqlspec.dialects.postgres._operators import PGVECTOR_OPERATOR_TOKENS, register_postgres_extension_operators
17
+
18
+ __all__ = ("PGVector",)
19
+
20
+ register_postgres_extension_operators()
21
+
22
+
23
+ class PGVectorTokenizer(Postgres.Tokenizer):
24
+ """Tokenizer with pgvector distance operators."""
25
+
26
+ KEYWORDS = {**Postgres.Tokenizer.KEYWORDS, **PGVECTOR_OPERATOR_TOKENS}
27
+
28
+
29
+ class PGVector(Postgres):
30
+ """PostgreSQL dialect with pgvector extension support."""
31
+
32
+ Tokenizer = PGVectorTokenizer
33
+ Generator = PGVectorGenerator
34
+
35
+
36
+ Dialect.classes["pgvector"] = PGVector
@@ -0,0 +1,6 @@
1
+ """Google Cloud Spanner sqlglot dialects."""
2
+
3
+ from sqlspec.dialects.spanner._spangres import Spangres
4
+ from sqlspec.dialects.spanner._spanner import Spanner
5
+
6
+ __all__ = ("Spangres", "Spanner")
@@ -0,0 +1,206 @@
1
+ """Spanner dialect generators with sqlglot[c] compatibility.
2
+
3
+ When sqlglot[c] is installed, generators are compiled and reject interpreted
4
+ subclasses. We detect this and use TRANSFORMS-based extension on the base
5
+ generators. When running pure-Python sqlglot, we create real subclasses.
6
+ """
7
+
8
+ from typing import Any, cast
9
+
10
+ from sqlglot import exp
11
+ from sqlglot.generator import _DISPATCH_CACHE # pyright: ignore[reportPrivateUsage]
12
+ from sqlglot.generators.bigquery import BigQueryGenerator
13
+ from sqlglot.generators.postgres import PostgresGenerator
14
+
15
+ __all__ = ("SpangresGenerator", "SpannerGenerator")
16
+
17
+ _TTL_MIN_COMPONENTS = 2
18
+ _ROW_DELETION_NAME = "ROW_DELETION_POLICY"
19
+ _INTERLEAVE_NAME = "INTERLEAVE_IN_PARENT"
20
+
21
+ # Capture originals before any patching
22
+ _original_bq_property_sql = BigQueryGenerator.property_sql
23
+ _original_bq_properties_sql = BigQueryGenerator.properties_sql
24
+ _original_bq_locate_properties = BigQueryGenerator.locate_properties
25
+ _original_pg_property_sql = PostgresGenerator.property_sql
26
+
27
+
28
+ def _is_post_schema_spanner_property(expression: exp.Expr) -> bool:
29
+ if not isinstance(expression, exp.Property) or not isinstance(expression.this, exp.Literal):
30
+ return False
31
+ return expression.this.name.upper() in {_INTERLEAVE_NAME, _ROW_DELETION_NAME, "TTL"}
32
+
33
+
34
+ def _render_interval_sql(generator: Any, expression: exp.Expr) -> str:
35
+ if isinstance(expression, exp.Interval):
36
+ unit = expression.args.get("unit")
37
+ if isinstance(expression.this, exp.Literal) and not expression.this.is_string and isinstance(unit, exp.Expr):
38
+ return f"INTERVAL {generator.sql(expression.this)} {generator.sql(unit)}"
39
+
40
+ interval_sql = cast("str", generator.sql(expression))
41
+ if not interval_sql.upper().startswith("INTERVAL"):
42
+ return f"INTERVAL {interval_sql}"
43
+ return interval_sql
44
+
45
+
46
+ # ---------------------------------------------------------------------------
47
+ # Spanner property rendering (BigQuery-based)
48
+ # ---------------------------------------------------------------------------
49
+
50
+
51
+ def _spanner_property_sql(self: Any, expression: exp.Property) -> str:
52
+ """Render Spanner-specific properties (INTERLEAVE, ROW_DELETION_POLICY, TTL)."""
53
+ if isinstance(expression.this, exp.Literal) and expression.this.name.upper() == _INTERLEAVE_NAME:
54
+ values = expression.args.get("value")
55
+ if isinstance(values, exp.Tuple) and values.expressions:
56
+ parent = self.sql(values.expressions[0])
57
+ sql = f"INTERLEAVE IN PARENT {parent}"
58
+ if len(values.expressions) >= _TTL_MIN_COMPONENTS:
59
+ on_delete_expr = values.expressions[1]
60
+ if isinstance(on_delete_expr, exp.Literal):
61
+ sql = f"{sql} ON DELETE {on_delete_expr.this}"
62
+ return sql
63
+
64
+ if isinstance(expression.this, exp.Literal) and expression.this.name.upper() == _ROW_DELETION_NAME:
65
+ values = expression.args.get("value")
66
+ if isinstance(values, exp.Tuple) and len(values.expressions) >= _TTL_MIN_COMPONENTS:
67
+ column = self.sql(values.expressions[0])
68
+ interval_sql = _render_interval_sql(self, values.expressions[1])
69
+ return f"ROW DELETION POLICY (OLDER_THAN({column}, {interval_sql}))"
70
+
71
+ if isinstance(expression.this, exp.Literal) and expression.this.name.upper() == "TTL":
72
+ values = expression.args.get("value")
73
+ if isinstance(values, exp.Tuple) and len(values.expressions) >= _TTL_MIN_COMPONENTS:
74
+ interval = _render_interval_sql(self, values.expressions[0]).removeprefix("INTERVAL ")
75
+ column = self.sql(values.expressions[1])
76
+ return f"TTL INTERVAL {interval} ON {column}"
77
+
78
+ return str(_original_bq_property_sql(self, expression))
79
+
80
+
81
+ def _spanner_properties_sql(self: Any, expression: exp.Properties) -> str:
82
+ """Render custom Spanner properties without BigQuery's OPTIONS wrapper."""
83
+ root_properties: list[exp.Expr] = []
84
+ with_properties: list[exp.Expr] = []
85
+
86
+ for property_expression in expression.expressions:
87
+ if _is_post_schema_spanner_property(property_expression):
88
+ root_properties.append(property_expression)
89
+ continue
90
+
91
+ property_location = self.PROPERTIES_LOCATION[property_expression.__class__]
92
+ if property_location == exp.Properties.Location.POST_WITH:
93
+ with_properties.append(property_expression)
94
+ elif property_location == exp.Properties.Location.POST_SCHEMA:
95
+ root_properties.append(property_expression)
96
+
97
+ root_props_ast = exp.Properties(expressions=root_properties)
98
+ root_props_ast.parent = expression.parent
99
+ with_props_ast = exp.Properties(expressions=with_properties)
100
+ with_props_ast.parent = expression.parent
101
+
102
+ root_props = self.root_properties(root_props_ast)
103
+ with_props = self.with_properties(with_props_ast)
104
+
105
+ if root_props and with_props and not self.pretty:
106
+ with_props = f" {with_props}"
107
+
108
+ return str(root_props) + str(with_props)
109
+
110
+
111
+ # ---------------------------------------------------------------------------
112
+ # Spangres property rendering (Postgres-based)
113
+ # ---------------------------------------------------------------------------
114
+
115
+
116
+ def _spangres_property_sql(self: Any, expression: exp.Property) -> str:
117
+ """Render Spangres row deletion policies."""
118
+ if isinstance(expression.this, exp.Literal) and expression.this.name.upper() == _ROW_DELETION_NAME:
119
+ values = expression.args.get("value")
120
+ if isinstance(values, exp.Tuple) and len(values.expressions) >= _TTL_MIN_COMPONENTS:
121
+ column = self.sql(values.expressions[0])
122
+ interval_sql = _render_interval_sql(self, values.expressions[1])
123
+ return f"ROW DELETION POLICY (OLDER_THAN({column}, {interval_sql}))"
124
+
125
+ return str(_original_pg_property_sql(self, expression))
126
+
127
+
128
+ # ---------------------------------------------------------------------------
129
+ # Unified extension logic (sqlglot[c] & Pure-Python)
130
+ # ---------------------------------------------------------------------------
131
+
132
+ # BigQuery / Spanner
133
+ _original_bq_property_transform = BigQueryGenerator.TRANSFORMS.get(exp.Property)
134
+ _original_bq_properties_transform = BigQueryGenerator.TRANSFORMS.get(exp.Properties)
135
+ _original_bq_create_transform = BigQueryGenerator.TRANSFORMS.get(exp.Create)
136
+
137
+
138
+ def _bq_property_transform(self: Any, expression: exp.Property) -> str:
139
+ dialect_class = getattr(self.dialect, "__class__", None)
140
+ dialect_name = dialect_class.__name__ if dialect_class else None
141
+ if dialect_name == "Spanner":
142
+ return _spanner_property_sql(self, expression)
143
+ if _original_bq_property_transform is not None:
144
+ return str(_original_bq_property_transform(self, expression))
145
+ return str(_original_bq_property_sql(self, expression))
146
+
147
+
148
+ def _bq_properties_transform(self: Any, expression: exp.Properties) -> str:
149
+ dialect_class = getattr(self.dialect, "__class__", None)
150
+ dialect_name = dialect_class.__name__ if dialect_class else None
151
+ if dialect_name == "Spanner":
152
+ return _spanner_properties_sql(self, expression)
153
+ if _original_bq_properties_transform is not None:
154
+ return str(_original_bq_properties_transform(self, expression))
155
+ return str(_original_bq_properties_sql(self, expression))
156
+
157
+
158
+ def _bq_create_transform(self: Any, expression: exp.Create) -> str:
159
+ dialect_class = getattr(self.dialect, "__class__", None)
160
+ dialect_name = dialect_class.__name__ if dialect_class else None
161
+ if dialect_name == "Spanner" and expression.this and expression.kind == "TABLE":
162
+ properties = expression.args.get("properties")
163
+ if properties:
164
+ # Re-order properties so Spanner ones stay at the schema boundary
165
+ new_expressions = []
166
+ for p in properties.expressions:
167
+ if _is_post_schema_spanner_property(p):
168
+ # Force to POST_SCHEMA if it's a Spanner property
169
+ new_expressions.append(p)
170
+ else:
171
+ new_expressions.append(p)
172
+ properties.set("expressions", new_expressions)
173
+
174
+ if _original_bq_create_transform is not None:
175
+ return str(_original_bq_create_transform(self, expression))
176
+ return str(self.create_sql(expression))
177
+
178
+
179
+ BigQueryGenerator.TRANSFORMS[exp.Property] = _bq_property_transform
180
+ BigQueryGenerator.TRANSFORMS[exp.Properties] = _bq_properties_transform
181
+ BigQueryGenerator.TRANSFORMS[exp.Create] = _bq_create_transform
182
+
183
+ _DISPATCH_CACHE.pop(BigQueryGenerator, None)
184
+
185
+ SpannerGenerator = BigQueryGenerator # pyright: ignore[reportAssignmentType]
186
+
187
+
188
+ # Postgres / Spangres
189
+ _original_pg_property_transform = PostgresGenerator.TRANSFORMS.get(exp.Property)
190
+
191
+
192
+ def _pg_property_transform(self: Any, expression: exp.Property) -> str:
193
+ dialect_class = getattr(self.dialect, "__class__", None)
194
+ dialect_name = dialect_class.__name__ if dialect_class else None
195
+ if dialect_name == "Spangres":
196
+ return _spangres_property_sql(self, expression)
197
+ if _original_pg_property_transform is not None:
198
+ return str(_original_pg_property_transform(self, expression))
199
+ return str(_original_pg_property_sql(self, expression))
200
+
201
+
202
+ PostgresGenerator.TRANSFORMS[exp.Property] = _pg_property_transform
203
+
204
+ _DISPATCH_CACHE.pop(PostgresGenerator, None)
205
+
206
+ SpangresGenerator = PostgresGenerator # pyright: ignore[reportAssignmentType]
@@ -0,0 +1,77 @@
1
+ r"""Google Cloud Spanner PostgreSQL-interface dialect ("Spangres")."""
2
+
3
+ from typing import Any, Final, cast
4
+
5
+ from sqlglot import exp
6
+ from sqlglot.dialects.postgres import Postgres
7
+ from sqlglot.parsers.postgres import PostgresParser
8
+ from sqlglot.tokenizer_core import TokenType
9
+
10
+ from sqlspec.dialects.spanner._generators import SpangresGenerator
11
+
12
+ __all__ = ("Spangres",)
13
+
14
+ _ROW_DELETION_NAME = "ROW_DELETION_POLICY"
15
+ _TTL_MIN_COMPONENTS = 2
16
+ _ORIGINAL_PARSE_PROPERTY_ATTR: Final[str] = "_sqlspec_original_parse_property"
17
+ _HOOKS_REGISTERED_ATTR: Final[str] = "_sqlspec_spangres_hooks_registered"
18
+
19
+
20
+ def _normalize_interval_expression(expression: exp.Expr) -> exp.Expr:
21
+ if isinstance(expression, exp.Alias):
22
+ alias = expression.args.get("alias")
23
+ if isinstance(alias, exp.Identifier) and isinstance(expression.this, exp.Expr):
24
+ return exp.Interval(this=expression.this.copy(), unit=alias.copy())
25
+ return expression
26
+
27
+
28
+ def _is_spangres_dialect(parser: Any) -> bool:
29
+ dialect = getattr(parser, "dialect", None)
30
+ return dialect is not None and dialect.__class__.__name__ == "Spangres"
31
+
32
+
33
+ def _original_postgres_parse_property() -> Any:
34
+ original = getattr(PostgresParser, _ORIGINAL_PARSE_PROPERTY_ATTR, None)
35
+ if callable(original):
36
+ return original
37
+ original = PostgresParser._parse_property
38
+ setattr(PostgresParser, _ORIGINAL_PARSE_PROPERTY_ATTR, original)
39
+ return original
40
+
41
+
42
+ def _spangres_parse_property(self: Any) -> exp.Expr:
43
+ if _is_spangres_dialect(self) and self._match_text_seq("ROW", "DELETION", "POLICY"):
44
+ self._match(TokenType.L_PAREN)
45
+ self._match_text_seq("OLDER_THAN")
46
+ self._match(TokenType.L_PAREN)
47
+ column = cast("exp.Expr", self._parse_id_var())
48
+ self._match(TokenType.COMMA)
49
+ self._match_text_seq("INTERVAL")
50
+ interval = _normalize_interval_expression(cast("exp.Expr", self._parse_expression()))
51
+ self._match(TokenType.R_PAREN)
52
+ self._match(TokenType.R_PAREN)
53
+
54
+ return exp.Property(
55
+ this=exp.Literal.string(_ROW_DELETION_NAME), value=exp.Tuple(expressions=[column, interval])
56
+ )
57
+
58
+ return cast("exp.Expr", _original_postgres_parse_property()(self))
59
+
60
+
61
+ def _register_postgres_spangres_parser_hooks() -> None:
62
+ if getattr(PostgresParser, _HOOKS_REGISTERED_ATTR, False):
63
+ return
64
+
65
+ _original_postgres_parse_property()
66
+ setattr(PostgresParser, "_parse_property", _spangres_parse_property)
67
+ setattr(PostgresParser, _HOOKS_REGISTERED_ATTR, True)
68
+
69
+
70
+ _register_postgres_spangres_parser_hooks()
71
+
72
+
73
+ class Spangres(Postgres):
74
+ """Spanner PostgreSQL-compatible dialect."""
75
+
76
+ Parser = Postgres.Parser
77
+ Generator = SpangresGenerator
@@ -0,0 +1,179 @@
1
+ """Google Cloud Spanner SQL dialect (GoogleSQL variant).
2
+
3
+ Extends the BigQuery dialect with Spanner-only DDL features:
4
+ `INTERLEAVE IN PARENT` for interleaved tables and `ROW DELETION POLICY`
5
+ for row-level time-to-live policies (GoogleSQL).
6
+ """
7
+
8
+ import re
9
+ from typing import Any, Final, cast
10
+
11
+ from sqlglot import exp
12
+ from sqlglot.dialects.bigquery import BigQuery
13
+ from sqlglot.parsers.bigquery import BigQueryParser
14
+ from sqlglot.tokenizer_core import TokenType
15
+
16
+ from sqlspec.dialects.spanner._generators import SpannerGenerator
17
+
18
+ __all__ = ("Spanner",)
19
+
20
+ _SPANNER_KEYWORDS: "dict[str, TokenType]" = {}
21
+ interleave_token = cast("TokenType | None", TokenType.__dict__.get("INTERLEAVE"))
22
+ if interleave_token is not None:
23
+ _SPANNER_KEYWORDS["INTERLEAVE"] = interleave_token
24
+ ttl_token = cast("TokenType | None", TokenType.__dict__.get("TTL"))
25
+ if ttl_token is not None:
26
+ _SPANNER_KEYWORDS["TTL"] = ttl_token
27
+
28
+ _TTL_MIN_COMPONENTS = 2
29
+ _ROW_DELETION_NAME = "ROW_DELETION_POLICY"
30
+ _INTERLEAVE_NAME = "INTERLEAVE_IN_PARENT"
31
+ _ORIGINAL_PARSE_PROPERTY_ATTR: Final[str] = "_sqlspec_original_parse_property"
32
+ _HOOKS_REGISTERED_ATTR: Final[str] = "_sqlspec_spanner_hooks_registered"
33
+ _INTERLEAVE_PATTERN: Final[re.Pattern[str]] = re.compile(
34
+ r"""
35
+ \bINTERLEAVE\s+IN\s+PARENT\s+
36
+ (?P<parent>.+?)
37
+ (?:\s+ON\s+DELETE\s+(?P<on_delete>CASCADE|NO\s+ACTION))?
38
+ (?=\s+(?:ROW\s+DELETION\s+POLICY|TTL)\b|\s*$)
39
+ """,
40
+ re.IGNORECASE | re.DOTALL | re.VERBOSE,
41
+ )
42
+
43
+
44
+ def _normalize_on_delete_value(on_delete: str) -> str:
45
+ return " ".join(on_delete.upper().split())
46
+
47
+
48
+ def _build_interleave_property(parent: exp.Expr, on_delete: str | None = None) -> exp.Property:
49
+ values: list[exp.Expr] = [parent]
50
+ if on_delete is not None:
51
+ values.append(exp.Literal.string(_normalize_on_delete_value(on_delete)))
52
+ return exp.Property(this=exp.Literal.string(_INTERLEAVE_NAME), value=exp.Tuple(expressions=values))
53
+
54
+
55
+ def _normalize_interval_expression(expression: exp.Expr) -> exp.Expr:
56
+ if isinstance(expression, exp.Alias):
57
+ alias = expression.args.get("alias")
58
+ if isinstance(alias, exp.Identifier) and isinstance(expression.this, exp.Expr):
59
+ return exp.Interval(this=expression.this.copy(), unit=alias.copy())
60
+ return expression
61
+
62
+
63
+ def _extract_interleave_property(sql: str) -> tuple[str, exp.Property | None]:
64
+ match = _INTERLEAVE_PATTERN.search(sql)
65
+ if match is None:
66
+ return sql, None
67
+
68
+ parent = exp.to_table(match.group("parent").strip())
69
+ on_delete = match.group("on_delete")
70
+ interleave_property = _build_interleave_property(parent, on_delete)
71
+ repaired_sql = f"{sql[: match.start()]} {sql[match.end() :]}".strip()
72
+ return repaired_sql, interleave_property
73
+
74
+
75
+ def _attach_create_property(create: exp.Create, property_expression: exp.Property) -> exp.Create:
76
+ properties = create.args.get("properties")
77
+ if isinstance(properties, exp.Properties):
78
+ expressions = list(properties.expressions)
79
+ expressions.insert(0, property_expression)
80
+ properties.set("expressions", expressions)
81
+ else:
82
+ create.set("properties", exp.Properties(expressions=[property_expression]))
83
+ return create
84
+
85
+
86
+ def _is_spanner_dialect(parser: Any) -> bool:
87
+ dialect = getattr(parser, "dialect", None)
88
+ return dialect is not None and dialect.__class__.__name__ == "Spanner"
89
+
90
+
91
+ def _original_bigquery_parse_property() -> Any:
92
+ original = getattr(BigQueryParser, _ORIGINAL_PARSE_PROPERTY_ATTR, None)
93
+ if callable(original):
94
+ return original
95
+ original = BigQueryParser._parse_property
96
+ setattr(BigQueryParser, _ORIGINAL_PARSE_PROPERTY_ATTR, original)
97
+ return original
98
+
99
+
100
+ def _spanner_parse_property(self: Any) -> exp.Expr:
101
+ if _is_spanner_dialect(self):
102
+ if self._match_text_seq("INTERLEAVE", "IN", "PARENT"):
103
+ parent = cast("exp.Expr", self._parse_table(schema=True, is_db_reference=True))
104
+ on_delete: str | None = None
105
+
106
+ if self._match_text_seq("ON", "DELETE"):
107
+ if self._match_text_seq("CASCADE"):
108
+ on_delete = "CASCADE"
109
+ elif self._match_text_seq("NO", "ACTION"):
110
+ on_delete = "NO ACTION"
111
+
112
+ return _build_interleave_property(parent, on_delete)
113
+
114
+ if self._match_text_seq("ROW", "DELETION", "POLICY"):
115
+ self._match(TokenType.L_PAREN)
116
+ self._match_text_seq("OLDER_THAN")
117
+ self._match(TokenType.L_PAREN)
118
+ column = cast("exp.Expr", self._parse_id_var())
119
+ self._match(TokenType.COMMA)
120
+ self._match_text_seq("INTERVAL")
121
+ interval = _normalize_interval_expression(cast("exp.Expr", self._parse_expression()))
122
+ self._match(TokenType.R_PAREN)
123
+ self._match(TokenType.R_PAREN)
124
+
125
+ return exp.Property(
126
+ this=exp.Literal.string(_ROW_DELETION_NAME), value=exp.Tuple(expressions=[column, interval])
127
+ )
128
+
129
+ if self._match_text_seq("TTL"):
130
+ self._match_text_seq("INTERVAL")
131
+ interval = _normalize_interval_expression(cast("exp.Expr", self._parse_expression()))
132
+ self._match_text_seq("ON")
133
+ column = cast("exp.Expr", self._parse_id_var())
134
+
135
+ return exp.Property(this=exp.Literal.string("TTL"), value=exp.Tuple(expressions=[interval, column]))
136
+
137
+ return cast("exp.Expr", _original_bigquery_parse_property()(self))
138
+
139
+
140
+ def _register_bigquery_spanner_parser_hooks() -> None:
141
+ if getattr(BigQueryParser, _HOOKS_REGISTERED_ATTR, False):
142
+ return
143
+
144
+ _original_bigquery_parse_property()
145
+ setattr(BigQueryParser, "_parse_property", _spanner_parse_property)
146
+ setattr(BigQueryParser, _HOOKS_REGISTERED_ATTR, True)
147
+
148
+
149
+ class SpannerTokenizer(BigQuery.Tokenizer):
150
+ """Tokenizer adds Spanner-only keywords when supported by sqlglot."""
151
+
152
+ KEYWORDS = {**BigQuery.Tokenizer.KEYWORDS, **_SPANNER_KEYWORDS}
153
+
154
+
155
+ _register_bigquery_spanner_parser_hooks()
156
+
157
+
158
+ class Spanner(BigQuery):
159
+ """Google Cloud Spanner SQL dialect."""
160
+
161
+ Tokenizer = SpannerTokenizer
162
+ Parser = BigQuery.Parser
163
+ Generator = SpannerGenerator
164
+
165
+ def parse(self, sql: str, **opts: Any) -> list[exp.Expr | None]:
166
+ """Repair CREATE TABLE statements that sqlglot still falls back to Command for."""
167
+ expressions = super().parse(sql, **opts)
168
+ if len(expressions) != 1 or not isinstance(expressions[0], exp.Command):
169
+ return expressions
170
+
171
+ repaired_sql, interleave_property = _extract_interleave_property(sql)
172
+ if interleave_property is None:
173
+ return expressions
174
+
175
+ reparsed = BigQuery.parse(self, repaired_sql, **opts)
176
+ if len(reparsed) != 1 or not isinstance(reparsed[0], exp.Create):
177
+ return expressions
178
+
179
+ return [_attach_create_property(reparsed[0], interleave_property)]
@@ -0,0 +1,49 @@
1
+ """Driver protocols and base classes for database adapters."""
2
+
3
+ from sqlspec.driver._async import (
4
+ AsyncDataDictionaryBase,
5
+ AsyncDriverAdapterBase,
6
+ AsyncPoolConnectionContext,
7
+ AsyncPoolSessionFactory,
8
+ )
9
+ from sqlspec.driver._common import (
10
+ CommonDriverAttributesMixin,
11
+ DataDictionaryDialectMixin,
12
+ DataDictionaryMixin,
13
+ ExecutionResult,
14
+ StackExecutionObserver,
15
+ describe_stack_statement,
16
+ hash_stack_operations,
17
+ )
18
+ from sqlspec.driver._exception_handler import BaseAsyncExceptionHandler, BaseSyncExceptionHandler
19
+ from sqlspec.driver._sql_helpers import convert_to_dialect
20
+ from sqlspec.driver._sync import (
21
+ SyncDataDictionaryBase,
22
+ SyncDriverAdapterBase,
23
+ SyncPoolConnectionContext,
24
+ SyncPoolSessionFactory,
25
+ )
26
+
27
+ __all__ = (
28
+ "AsyncDataDictionaryBase",
29
+ "AsyncDriverAdapterBase",
30
+ "AsyncPoolConnectionContext",
31
+ "AsyncPoolSessionFactory",
32
+ "BaseAsyncExceptionHandler",
33
+ "BaseSyncExceptionHandler",
34
+ "CommonDriverAttributesMixin",
35
+ "DataDictionaryDialectMixin",
36
+ "DataDictionaryMixin",
37
+ "DriverAdapterProtocol",
38
+ "ExecutionResult",
39
+ "StackExecutionObserver",
40
+ "SyncDataDictionaryBase",
41
+ "SyncDriverAdapterBase",
42
+ "SyncPoolConnectionContext",
43
+ "SyncPoolSessionFactory",
44
+ "convert_to_dialect",
45
+ "describe_stack_statement",
46
+ "hash_stack_operations",
47
+ )
48
+
49
+ DriverAdapterProtocol = SyncDriverAdapterBase | AsyncDriverAdapterBase