@intentius/chant-lexicon-sql 0.0.0-stage → 0.112.1

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 (936) hide show
  1. package/README.md +39 -2
  2. package/dist/clickhouse/apply/apply.d.ts +82 -0
  3. package/dist/clickhouse/apply/apply.d.ts.map +1 -0
  4. package/dist/clickhouse/apply/mutations.d.ts +46 -0
  5. package/dist/clickhouse/apply/mutations.d.ts.map +1 -0
  6. package/dist/clickhouse/apply/statements.d.ts +99 -0
  7. package/dist/clickhouse/apply/statements.d.ts.map +1 -0
  8. package/dist/clickhouse/catalog-types.d.ts +76 -0
  9. package/dist/clickhouse/catalog-types.d.ts.map +1 -0
  10. package/dist/clickhouse/container.d.ts +63 -0
  11. package/dist/clickhouse/container.d.ts.map +1 -0
  12. package/dist/clickhouse/engine-syntax.d.ts +43 -0
  13. package/dist/clickhouse/engine-syntax.d.ts.map +1 -0
  14. package/dist/clickhouse/entities.d.ts +183 -0
  15. package/dist/clickhouse/entities.d.ts.map +1 -0
  16. package/dist/clickhouse/http.d.ts +40 -0
  17. package/dist/clickhouse/http.d.ts.map +1 -0
  18. package/dist/clickhouse/import/generator.d.ts +16 -0
  19. package/dist/clickhouse/import/generator.d.ts.map +1 -0
  20. package/dist/clickhouse/import/ir.d.ts +52 -0
  21. package/dist/clickhouse/import/ir.d.ts.map +1 -0
  22. package/dist/clickhouse/import/live-export.d.ts +28 -0
  23. package/dist/clickhouse/import/live-export.d.ts.map +1 -0
  24. package/dist/clickhouse/import/parser.d.ts +10 -0
  25. package/dist/clickhouse/import/parser.d.ts.map +1 -0
  26. package/dist/clickhouse/live/bind.d.ts +56 -0
  27. package/dist/clickhouse/live/bind.d.ts.map +1 -0
  28. package/dist/clickhouse/live/catalog.d.ts +39 -0
  29. package/dist/clickhouse/live/catalog.d.ts.map +1 -0
  30. package/dist/clickhouse/live/describe-resources.d.ts +34 -0
  31. package/dist/clickhouse/live/describe-resources.d.ts.map +1 -0
  32. package/dist/clickhouse/overlays/codecs.d.ts +28 -0
  33. package/dist/clickhouse/overlays/codecs.d.ts.map +1 -0
  34. package/dist/clickhouse/overlays/engines.d.ts +20 -0
  35. package/dist/clickhouse/overlays/engines.d.ts.map +1 -0
  36. package/dist/clickhouse/overlays/kinds.d.ts +38 -0
  37. package/dist/clickhouse/overlays/kinds.d.ts.map +1 -0
  38. package/dist/clickhouse/overlays/projections.d.ts +27 -0
  39. package/dist/clickhouse/overlays/projections.d.ts.map +1 -0
  40. package/dist/clickhouse/overlays/skip-indexes.d.ts +10 -0
  41. package/dist/clickhouse/overlays/skip-indexes.d.ts.map +1 -0
  42. package/dist/clickhouse/overlays/ttl.d.ts +35 -0
  43. package/dist/clickhouse/overlays/ttl.d.ts.map +1 -0
  44. package/dist/clickhouse/overlays/types.d.ts +21 -0
  45. package/dist/clickhouse/overlays/types.d.ts.map +1 -0
  46. package/dist/clickhouse/ownership.d.ts +71 -0
  47. package/dist/clickhouse/ownership.d.ts.map +1 -0
  48. package/dist/clickhouse/parser.d.ts +130 -0
  49. package/dist/clickhouse/parser.d.ts.map +1 -0
  50. package/dist/clickhouse/plan/commands.d.ts +26 -0
  51. package/dist/clickhouse/plan/commands.d.ts.map +1 -0
  52. package/dist/clickhouse/plan/deep.d.ts +32 -0
  53. package/dist/clickhouse/plan/deep.d.ts.map +1 -0
  54. package/dist/clickhouse/plan/diff.d.ts +37 -0
  55. package/dist/clickhouse/plan/diff.d.ts.map +1 -0
  56. package/dist/clickhouse/plan/disruption.d.ts +17 -0
  57. package/dist/clickhouse/plan/disruption.d.ts.map +1 -0
  58. package/dist/clickhouse/plan/normalize.d.ts +97 -0
  59. package/dist/clickhouse/plan/normalize.d.ts.map +1 -0
  60. package/dist/clickhouse/plan/rebuild-handoff.d.ts +38 -0
  61. package/dist/clickhouse/plan/rebuild-handoff.d.ts.map +1 -0
  62. package/dist/clickhouse/plan/report.d.ts +6 -0
  63. package/dist/clickhouse/plan/report.d.ts.map +1 -0
  64. package/dist/clickhouse/plan/rules.d.ts +60 -0
  65. package/dist/clickhouse/plan/rules.d.ts.map +1 -0
  66. package/dist/clickhouse/plan/schema.d.ts +23 -0
  67. package/dist/clickhouse/plan/schema.d.ts.map +1 -0
  68. package/dist/clickhouse/plan/server-format.d.ts +12 -0
  69. package/dist/clickhouse/plan/server-format.d.ts.map +1 -0
  70. package/dist/clickhouse/rebuild/backfill.d.ts +70 -0
  71. package/dist/clickhouse/rebuild/backfill.d.ts.map +1 -0
  72. package/dist/clickhouse/rebuild/observe.d.ts +157 -0
  73. package/dist/clickhouse/rebuild/observe.d.ts.map +1 -0
  74. package/dist/clickhouse/rebuild/op.d.ts +108 -0
  75. package/dist/clickhouse/rebuild/op.d.ts.map +1 -0
  76. package/dist/clickhouse/rebuild/partitions.d.ts +24 -0
  77. package/dist/clickhouse/rebuild/partitions.d.ts.map +1 -0
  78. package/dist/clickhouse/rebuild/receipts.d.ts +76 -0
  79. package/dist/clickhouse/rebuild/receipts.d.ts.map +1 -0
  80. package/dist/clickhouse/rebuild/replicas.d.ts +78 -0
  81. package/dist/clickhouse/rebuild/replicas.d.ts.map +1 -0
  82. package/dist/clickhouse/rebuild/steps.d.ts +151 -0
  83. package/dist/clickhouse/rebuild/steps.d.ts.map +1 -0
  84. package/dist/clickhouse/rebuild/verify.d.ts +51 -0
  85. package/dist/clickhouse/rebuild/verify.d.ts.map +1 -0
  86. package/dist/clickhouse/testing/fake-server.d.ts +27 -0
  87. package/dist/clickhouse/testing/fake-server.d.ts.map +1 -0
  88. package/dist/clickhouse/testing/roundtrip-schema.d.ts +3 -0
  89. package/dist/clickhouse/testing/roundtrip-schema.d.ts.map +1 -0
  90. package/dist/clickhouse/testing/writable-server.d.ts +35 -0
  91. package/dist/clickhouse/testing/writable-server.d.ts.map +1 -0
  92. package/dist/clickhouse/tokens.d.ts +15 -0
  93. package/dist/clickhouse/tokens.d.ts.map +1 -0
  94. package/dist/clickhouse.d.ts +24 -0
  95. package/dist/clickhouse.d.ts.map +1 -0
  96. package/dist/codegen/classifier-page.d.ts +6 -0
  97. package/dist/codegen/classifier-page.d.ts.map +1 -0
  98. package/dist/codegen/clickhouse-module.d.ts +23 -0
  99. package/dist/codegen/clickhouse-module.d.ts.map +1 -0
  100. package/dist/codegen/docs-cli.d.ts +3 -0
  101. package/dist/codegen/docs-cli.d.ts.map +1 -0
  102. package/dist/codegen/docs.d.ts +8 -0
  103. package/dist/codegen/docs.d.ts.map +1 -0
  104. package/dist/codegen/generate-cli.d.ts +3 -0
  105. package/dist/codegen/generate-cli.d.ts.map +1 -0
  106. package/dist/codegen/generate.d.ts +40 -0
  107. package/dist/codegen/generate.d.ts.map +1 -0
  108. package/dist/codegen/package.d.ts +7 -0
  109. package/dist/codegen/package.d.ts.map +1 -0
  110. package/dist/codegen/postgres-classifier-page.d.ts +7 -0
  111. package/dist/codegen/postgres-classifier-page.d.ts.map +1 -0
  112. package/dist/codegen/postgres-module.d.ts +30 -0
  113. package/dist/codegen/postgres-module.d.ts.map +1 -0
  114. package/dist/codegen/registry.d.ts +12 -0
  115. package/dist/codegen/registry.d.ts.map +1 -0
  116. package/dist/composites/audit-log-table.d.ts +31 -0
  117. package/dist/composites/audit-log-table.d.ts.map +1 -0
  118. package/dist/composites/catalog.d.ts +3 -0
  119. package/dist/composites/catalog.d.ts.map +1 -0
  120. package/dist/composites/cdc-mirror.d.ts +32 -0
  121. package/dist/composites/cdc-mirror.d.ts.map +1 -0
  122. package/dist/composites/clickhouse.d.ts +7 -0
  123. package/dist/composites/clickhouse.d.ts.map +1 -0
  124. package/dist/composites/events-table.d.ts +32 -0
  125. package/dist/composites/events-table.d.ts.map +1 -0
  126. package/dist/composites/index.d.ts +9 -0
  127. package/dist/composites/index.d.ts.map +1 -0
  128. package/dist/composites/join-table.d.ts +41 -0
  129. package/dist/composites/join-table.d.ts.map +1 -0
  130. package/dist/composites/postgres.d.ts +7 -0
  131. package/dist/composites/postgres.d.ts.map +1 -0
  132. package/dist/composites/refreshed-view.d.ts +32 -0
  133. package/dist/composites/refreshed-view.d.ts.map +1 -0
  134. package/dist/composites/replacing-table.d.ts +34 -0
  135. package/dist/composites/replacing-table.d.ts.map +1 -0
  136. package/dist/composites/rollup-view.d.ts +39 -0
  137. package/dist/composites/rollup-view.d.ts.map +1 -0
  138. package/dist/composites/sharded-table.d.ts +35 -0
  139. package/dist/composites/sharded-table.d.ts.map +1 -0
  140. package/dist/composites/soft-delete-table.d.ts +40 -0
  141. package/dist/composites/soft-delete-table.d.ts.map +1 -0
  142. package/dist/composites/tenant-table.d.ts +34 -0
  143. package/dist/composites/tenant-table.d.ts.map +1 -0
  144. package/dist/config.d.ts +213 -0
  145. package/dist/config.d.ts.map +1 -0
  146. package/dist/core/apply.d.ts +89 -0
  147. package/dist/core/apply.d.ts.map +1 -0
  148. package/dist/core/classifier.d.ts +88 -0
  149. package/dist/core/classifier.d.ts.map +1 -0
  150. package/dist/core/container.d.ts +45 -0
  151. package/dist/core/container.d.ts.map +1 -0
  152. package/dist/core/cursor.d.ts +67 -0
  153. package/dist/core/cursor.d.ts.map +1 -0
  154. package/dist/core/diff.d.ts +49 -0
  155. package/dist/core/diff.d.ts.map +1 -0
  156. package/dist/core/entity.d.ts +41 -0
  157. package/dist/core/entity.d.ts.map +1 -0
  158. package/dist/core/find-templates.d.ts +69 -0
  159. package/dist/core/find-templates.d.ts.map +1 -0
  160. package/dist/core/handoff.d.ts +36 -0
  161. package/dist/core/handoff.d.ts.map +1 -0
  162. package/dist/core/index.d.ts +61 -0
  163. package/dist/core/index.d.ts.map +1 -0
  164. package/dist/core/interpolation.d.ts +88 -0
  165. package/dist/core/interpolation.d.ts.map +1 -0
  166. package/dist/core/normalize.d.ts +18 -0
  167. package/dist/core/normalize.d.ts.map +1 -0
  168. package/dist/core/ownership.d.ts +60 -0
  169. package/dist/core/ownership.d.ts.map +1 -0
  170. package/dist/core/receipts.d.ts +28 -0
  171. package/dist/core/receipts.d.ts.map +1 -0
  172. package/dist/core/references.d.ts +37 -0
  173. package/dist/core/references.d.ts.map +1 -0
  174. package/dist/core/template.d.ts +41 -0
  175. package/dist/core/template.d.ts.map +1 -0
  176. package/dist/core/testing/http-stub.d.ts +17 -0
  177. package/dist/core/testing/http-stub.d.ts.map +1 -0
  178. package/dist/core/tokens.d.ts +102 -0
  179. package/dist/core/tokens.d.ts.map +1 -0
  180. package/dist/coverage.d.ts +25 -0
  181. package/dist/coverage.d.ts.map +1 -0
  182. package/dist/detect.d.ts +15 -0
  183. package/dist/detect.d.ts.map +1 -0
  184. package/dist/dialects.d.ts +20 -0
  185. package/dist/dialects.d.ts.map +1 -0
  186. package/dist/generated/clickhouse-types.d.ts +4380 -0
  187. package/dist/generated/clickhouse-types.d.ts.map +1 -0
  188. package/dist/generated/clickhouse.d.ts +11 -0
  189. package/dist/generated/clickhouse.d.ts.map +1 -0
  190. package/dist/generated/postgres-types.d.ts +1579 -0
  191. package/dist/generated/postgres-types.d.ts.map +1 -0
  192. package/dist/generated/postgres.d.ts +9 -0
  193. package/dist/generated/postgres.d.ts.map +1 -0
  194. package/dist/import-generator.d.ts +8 -0
  195. package/dist/import-generator.d.ts.map +1 -0
  196. package/dist/index.d.ts +7 -0
  197. package/dist/index.d.ts.map +1 -0
  198. package/dist/init-templates.d.ts +20 -0
  199. package/dist/init-templates.d.ts.map +1 -0
  200. package/dist/integrity.json +61 -0
  201. package/dist/lint/audit-catalog.d.ts +10 -0
  202. package/dist/lint/audit-catalog.d.ts.map +1 -0
  203. package/dist/lint/audit-lineage.d.ts +25 -0
  204. package/dist/lint/audit-lineage.d.ts.map +1 -0
  205. package/dist/lint/post-synth/audit-entries.d.ts +8 -0
  206. package/dist/lint/post-synth/audit-entries.d.ts.map +1 -0
  207. package/dist/lint/post-synth/clickhouse-helpers.d.ts +85 -0
  208. package/dist/lint/post-synth/clickhouse-helpers.d.ts.map +1 -0
  209. package/dist/lint/post-synth/index.d.ts +3 -0
  210. package/dist/lint/post-synth/index.d.ts.map +1 -0
  211. package/dist/lint/post-synth/postgres-audit-entries.d.ts +9 -0
  212. package/dist/lint/post-synth/postgres-audit-entries.d.ts.map +1 -0
  213. package/dist/lint/post-synth/postgres-helpers.d.ts +89 -0
  214. package/dist/lint/post-synth/postgres-helpers.d.ts.map +1 -0
  215. package/dist/lint/post-synth/sql-helpers.d.ts +27 -0
  216. package/dist/lint/post-synth/sql-helpers.d.ts.map +1 -0
  217. package/dist/lint/post-synth/sqlch101.d.ts +12 -0
  218. package/dist/lint/post-synth/sqlch101.d.ts.map +1 -0
  219. package/dist/lint/post-synth/sqlch102.d.ts +9 -0
  220. package/dist/lint/post-synth/sqlch102.d.ts.map +1 -0
  221. package/dist/lint/post-synth/sqlch103.d.ts +10 -0
  222. package/dist/lint/post-synth/sqlch103.d.ts.map +1 -0
  223. package/dist/lint/post-synth/sqlch104.d.ts +9 -0
  224. package/dist/lint/post-synth/sqlch104.d.ts.map +1 -0
  225. package/dist/lint/post-synth/sqlch105.d.ts +10 -0
  226. package/dist/lint/post-synth/sqlch105.d.ts.map +1 -0
  227. package/dist/lint/post-synth/sqlch106.d.ts +11 -0
  228. package/dist/lint/post-synth/sqlch106.d.ts.map +1 -0
  229. package/dist/lint/post-synth/sqlch107.d.ts +10 -0
  230. package/dist/lint/post-synth/sqlch107.d.ts.map +1 -0
  231. package/dist/lint/post-synth/sqlch108.d.ts +11 -0
  232. package/dist/lint/post-synth/sqlch108.d.ts.map +1 -0
  233. package/dist/lint/post-synth/sqlch109.d.ts +10 -0
  234. package/dist/lint/post-synth/sqlch109.d.ts.map +1 -0
  235. package/dist/lint/post-synth/sqlch110.d.ts +12 -0
  236. package/dist/lint/post-synth/sqlch110.d.ts.map +1 -0
  237. package/dist/lint/post-synth/sqlch111.d.ts +11 -0
  238. package/dist/lint/post-synth/sqlch111.d.ts.map +1 -0
  239. package/dist/lint/post-synth/sqlch112.d.ts +12 -0
  240. package/dist/lint/post-synth/sqlch112.d.ts.map +1 -0
  241. package/dist/lint/post-synth/sqlch113.d.ts +9 -0
  242. package/dist/lint/post-synth/sqlch113.d.ts.map +1 -0
  243. package/dist/lint/post-synth/sqlch114.d.ts +8 -0
  244. package/dist/lint/post-synth/sqlch114.d.ts.map +1 -0
  245. package/dist/lint/post-synth/sqlch115.d.ts +13 -0
  246. package/dist/lint/post-synth/sqlch115.d.ts.map +1 -0
  247. package/dist/lint/post-synth/sqlch116.d.ts +10 -0
  248. package/dist/lint/post-synth/sqlch116.d.ts.map +1 -0
  249. package/dist/lint/post-synth/sqlch117.d.ts +9 -0
  250. package/dist/lint/post-synth/sqlch117.d.ts.map +1 -0
  251. package/dist/lint/post-synth/sqlch118.d.ts +10 -0
  252. package/dist/lint/post-synth/sqlch118.d.ts.map +1 -0
  253. package/dist/lint/post-synth/sqlch119.d.ts +11 -0
  254. package/dist/lint/post-synth/sqlch119.d.ts.map +1 -0
  255. package/dist/lint/post-synth/sqlch120.d.ts +10 -0
  256. package/dist/lint/post-synth/sqlch120.d.ts.map +1 -0
  257. package/dist/lint/post-synth/sqlpg101.d.ts +12 -0
  258. package/dist/lint/post-synth/sqlpg101.d.ts.map +1 -0
  259. package/dist/lint/post-synth/sqlpg102.d.ts +11 -0
  260. package/dist/lint/post-synth/sqlpg102.d.ts.map +1 -0
  261. package/dist/lint/post-synth/sqlpg103.d.ts +11 -0
  262. package/dist/lint/post-synth/sqlpg103.d.ts.map +1 -0
  263. package/dist/lint/post-synth/sqlpg104.d.ts +10 -0
  264. package/dist/lint/post-synth/sqlpg104.d.ts.map +1 -0
  265. package/dist/lint/post-synth/sqlpg105.d.ts +10 -0
  266. package/dist/lint/post-synth/sqlpg105.d.ts.map +1 -0
  267. package/dist/lint/post-synth/sqlpg106.d.ts +9 -0
  268. package/dist/lint/post-synth/sqlpg106.d.ts.map +1 -0
  269. package/dist/lint/post-synth/sqlpg107.d.ts +10 -0
  270. package/dist/lint/post-synth/sqlpg107.d.ts.map +1 -0
  271. package/dist/lint/post-synth/sqlpg108.d.ts +11 -0
  272. package/dist/lint/post-synth/sqlpg108.d.ts.map +1 -0
  273. package/dist/lint/post-synth/sqlpg109.d.ts +11 -0
  274. package/dist/lint/post-synth/sqlpg109.d.ts.map +1 -0
  275. package/dist/lint/post-synth/sqlpg110.d.ts +12 -0
  276. package/dist/lint/post-synth/sqlpg110.d.ts.map +1 -0
  277. package/dist/lint/post-synth/sqlpg111.d.ts +10 -0
  278. package/dist/lint/post-synth/sqlpg111.d.ts.map +1 -0
  279. package/dist/lint/post-synth/sqlpg112.d.ts +10 -0
  280. package/dist/lint/post-synth/sqlpg112.d.ts.map +1 -0
  281. package/dist/lint/post-synth/sqlpg113.d.ts +11 -0
  282. package/dist/lint/post-synth/sqlpg113.d.ts.map +1 -0
  283. package/dist/lint/post-synth/sqlpg114.d.ts +13 -0
  284. package/dist/lint/post-synth/sqlpg114.d.ts.map +1 -0
  285. package/dist/lint/post-synth/sqlpg115.d.ts +13 -0
  286. package/dist/lint/post-synth/sqlpg115.d.ts.map +1 -0
  287. package/dist/lint/post-synth/sqlpg116.d.ts +11 -0
  288. package/dist/lint/post-synth/sqlpg116.d.ts.map +1 -0
  289. package/dist/lint/post-synth/sqlpg117.d.ts +12 -0
  290. package/dist/lint/post-synth/sqlpg117.d.ts.map +1 -0
  291. package/dist/lint/post-synth/sqlpg118.d.ts +12 -0
  292. package/dist/lint/post-synth/sqlpg118.d.ts.map +1 -0
  293. package/dist/lint/rules/index.d.ts +12 -0
  294. package/dist/lint/rules/index.d.ts.map +1 -0
  295. package/dist/lint/rules/postgres-templates.d.ts +18 -0
  296. package/dist/lint/rules/postgres-templates.d.ts.map +1 -0
  297. package/dist/lint/rules/sqlch001.d.ts +12 -0
  298. package/dist/lint/rules/sqlch001.d.ts.map +1 -0
  299. package/dist/lint/rules/sqlch002.d.ts +11 -0
  300. package/dist/lint/rules/sqlch002.d.ts.map +1 -0
  301. package/dist/lint/rules/sqlch003.d.ts +12 -0
  302. package/dist/lint/rules/sqlch003.d.ts.map +1 -0
  303. package/dist/lint/rules/sqlpg001.d.ts +16 -0
  304. package/dist/lint/rules/sqlpg001.d.ts.map +1 -0
  305. package/dist/lint/rules/sqlpg002.d.ts +12 -0
  306. package/dist/lint/rules/sqlpg002.d.ts.map +1 -0
  307. package/dist/lint/rules/sqlpg003.d.ts +16 -0
  308. package/dist/lint/rules/sqlpg003.d.ts.map +1 -0
  309. package/dist/lint/rules/sqlpg004.d.ts +21 -0
  310. package/dist/lint/rules/sqlpg004.d.ts.map +1 -0
  311. package/dist/lint/rules/templates.d.ts +23 -0
  312. package/dist/lint/rules/templates.d.ts.map +1 -0
  313. package/dist/live-dialect.d.ts +25 -0
  314. package/dist/live-dialect.d.ts.map +1 -0
  315. package/dist/lsp/catalog.d.ts +22 -0
  316. package/dist/lsp/catalog.d.ts.map +1 -0
  317. package/dist/lsp/completions.d.ts +13 -0
  318. package/dist/lsp/completions.d.ts.map +1 -0
  319. package/dist/lsp/hover.d.ts +12 -0
  320. package/dist/lsp/hover.d.ts.map +1 -0
  321. package/dist/lsp/postgres-catalog.d.ts +85 -0
  322. package/dist/lsp/postgres-catalog.d.ts.map +1 -0
  323. package/dist/lsp/postgres-template.d.ts +35 -0
  324. package/dist/lsp/postgres-template.d.ts.map +1 -0
  325. package/dist/lsp/postgres.d.ts +20 -0
  326. package/dist/lsp/postgres.d.ts.map +1 -0
  327. package/dist/lsp/refs.d.ts +8 -0
  328. package/dist/lsp/refs.d.ts.map +1 -0
  329. package/dist/lsp/registry.d.ts +4 -0
  330. package/dist/lsp/registry.d.ts.map +1 -0
  331. package/dist/lsp/template.d.ts +34 -0
  332. package/dist/lsp/template.d.ts.map +1 -0
  333. package/dist/manifest.json +8 -0
  334. package/dist/mcp/index.d.ts +13 -0
  335. package/dist/mcp/index.d.ts.map +1 -0
  336. package/dist/mcp/postgres.d.ts +32 -0
  337. package/dist/mcp/postgres.d.ts.map +1 -0
  338. package/dist/meta.json +67 -0
  339. package/dist/okf/index.md +67 -0
  340. package/dist/okf/rules/SQLCH001.md +11 -0
  341. package/dist/okf/rules/SQLCH002.md +11 -0
  342. package/dist/okf/rules/SQLCH003.md +11 -0
  343. package/dist/okf/rules/SQLCH101.md +15 -0
  344. package/dist/okf/rules/SQLCH102.md +11 -0
  345. package/dist/okf/rules/SQLCH103.md +11 -0
  346. package/dist/okf/rules/SQLCH104.md +11 -0
  347. package/dist/okf/rules/SQLCH105.md +11 -0
  348. package/dist/okf/rules/SQLCH106.md +11 -0
  349. package/dist/okf/rules/SQLCH107.md +11 -0
  350. package/dist/okf/rules/SQLCH108.md +15 -0
  351. package/dist/okf/rules/SQLCH109.md +11 -0
  352. package/dist/okf/rules/SQLCH110.md +11 -0
  353. package/dist/okf/rules/SQLCH111.md +11 -0
  354. package/dist/okf/rules/SQLCH112.md +11 -0
  355. package/dist/okf/rules/SQLCH113.md +11 -0
  356. package/dist/okf/rules/SQLCH114.md +11 -0
  357. package/dist/okf/rules/SQLCH115.md +11 -0
  358. package/dist/okf/rules/SQLCH116.md +11 -0
  359. package/dist/okf/rules/SQLCH117.md +15 -0
  360. package/dist/okf/rules/SQLCH118.md +15 -0
  361. package/dist/okf/rules/SQLCH119.md +15 -0
  362. package/dist/okf/rules/SQLCH120.md +15 -0
  363. package/dist/okf/rules/SQLPG001.md +11 -0
  364. package/dist/okf/rules/SQLPG002.md +11 -0
  365. package/dist/okf/rules/SQLPG003.md +11 -0
  366. package/dist/okf/rules/SQLPG004.md +11 -0
  367. package/dist/okf/rules/SQLPG101.md +11 -0
  368. package/dist/okf/rules/SQLPG102.md +11 -0
  369. package/dist/okf/rules/SQLPG103.md +11 -0
  370. package/dist/okf/rules/SQLPG104.md +11 -0
  371. package/dist/okf/rules/SQLPG105.md +11 -0
  372. package/dist/okf/rules/SQLPG106.md +11 -0
  373. package/dist/okf/rules/SQLPG107.md +11 -0
  374. package/dist/okf/rules/SQLPG108.md +11 -0
  375. package/dist/okf/rules/SQLPG109.md +11 -0
  376. package/dist/okf/rules/SQLPG110.md +11 -0
  377. package/dist/okf/rules/SQLPG111.md +11 -0
  378. package/dist/okf/rules/SQLPG112.md +11 -0
  379. package/dist/okf/rules/SQLPG113.md +24 -0
  380. package/dist/okf/rules/SQLPG114.md +11 -0
  381. package/dist/okf/rules/SQLPG115.md +11 -0
  382. package/dist/okf/rules/SQLPG116.md +15 -0
  383. package/dist/okf/rules/SQLPG117.md +11 -0
  384. package/dist/okf/rules/SQLPG118.md +11 -0
  385. package/dist/okf/types/Database.md +15 -0
  386. package/dist/okf/types/MaterializedView.md +14 -0
  387. package/dist/okf/types/PostgresDomain.md +13 -0
  388. package/dist/okf/types/PostgresEnum.md +13 -0
  389. package/dist/okf/types/PostgresExtension.md +13 -0
  390. package/dist/okf/types/PostgresIndex.md +9 -0
  391. package/dist/okf/types/PostgresMaterializedView.md +13 -0
  392. package/dist/okf/types/PostgresSchema.md +13 -0
  393. package/dist/okf/types/PostgresSequence.md +13 -0
  394. package/dist/okf/types/PostgresTable.md +13 -0
  395. package/dist/okf/types/PostgresView.md +13 -0
  396. package/dist/okf/types/Table.md +15 -0
  397. package/dist/okf/types/View.md +13 -0
  398. package/dist/op/activities/clickhouse-apply.d.ts +56 -0
  399. package/dist/op/activities/clickhouse-apply.d.ts.map +1 -0
  400. package/dist/op/activities/clickhouse-emulator.d.ts +26 -0
  401. package/dist/op/activities/clickhouse-emulator.d.ts.map +1 -0
  402. package/dist/op/activities/clickhouse-rebuild.d.ts +43 -0
  403. package/dist/op/activities/clickhouse-rebuild.d.ts.map +1 -0
  404. package/dist/op/activities/index.d.ts +19 -0
  405. package/dist/op/activities/index.d.ts.map +1 -0
  406. package/dist/op/activities/postgres-apply.d.ts +69 -0
  407. package/dist/op/activities/postgres-apply.d.ts.map +1 -0
  408. package/dist/op/activities/postgres-emulator.d.ts +33 -0
  409. package/dist/op/activities/postgres-emulator.d.ts.map +1 -0
  410. package/dist/op/activities/postgres-migration.d.ts +48 -0
  411. package/dist/op/activities/postgres-migration.d.ts.map +1 -0
  412. package/dist/op/activity-contracts.d.ts +464 -0
  413. package/dist/op/activity-contracts.d.ts.map +1 -0
  414. package/dist/package-cli.d.ts +3 -0
  415. package/dist/package-cli.d.ts.map +1 -0
  416. package/dist/plugin.d.ts +12 -0
  417. package/dist/plugin.d.ts.map +1 -0
  418. package/dist/postgres/apply/apply.d.ts +163 -0
  419. package/dist/postgres/apply/apply.d.ts.map +1 -0
  420. package/dist/postgres/apply/statements.d.ts +138 -0
  421. package/dist/postgres/apply/statements.d.ts.map +1 -0
  422. package/dist/postgres/catalog-types.d.ts +50 -0
  423. package/dist/postgres/catalog-types.d.ts.map +1 -0
  424. package/dist/postgres/container.d.ts +23 -0
  425. package/dist/postgres/container.d.ts.map +1 -0
  426. package/dist/postgres/entities.d.ts +322 -0
  427. package/dist/postgres/entities.d.ts.map +1 -0
  428. package/dist/postgres/entity-types.d.ts +17 -0
  429. package/dist/postgres/entity-types.d.ts.map +1 -0
  430. package/dist/postgres/import/generator.d.ts +28 -0
  431. package/dist/postgres/import/generator.d.ts.map +1 -0
  432. package/dist/postgres/import/ir.d.ts +24 -0
  433. package/dist/postgres/import/ir.d.ts.map +1 -0
  434. package/dist/postgres/import/live-export.d.ts +26 -0
  435. package/dist/postgres/import/live-export.d.ts.map +1 -0
  436. package/dist/postgres/keywords.d.ts +22 -0
  437. package/dist/postgres/keywords.d.ts.map +1 -0
  438. package/dist/postgres/live/bind.d.ts +76 -0
  439. package/dist/postgres/live/bind.d.ts.map +1 -0
  440. package/dist/postgres/live/catalog.d.ts +98 -0
  441. package/dist/postgres/live/catalog.d.ts.map +1 -0
  442. package/dist/postgres/live/client.d.ts +32 -0
  443. package/dist/postgres/live/client.d.ts.map +1 -0
  444. package/dist/postgres/live/describe-resources.d.ts +41 -0
  445. package/dist/postgres/live/describe-resources.d.ts.map +1 -0
  446. package/dist/postgres/migrate/backfill.d.ts +103 -0
  447. package/dist/postgres/migrate/backfill.d.ts.map +1 -0
  448. package/dist/postgres/migrate/batches.d.ts +90 -0
  449. package/dist/postgres/migrate/batches.d.ts.map +1 -0
  450. package/dist/postgres/migrate/carry.d.ts +196 -0
  451. package/dist/postgres/migrate/carry.d.ts.map +1 -0
  452. package/dist/postgres/migrate/handoff.d.ts +46 -0
  453. package/dist/postgres/migrate/handoff.d.ts.map +1 -0
  454. package/dist/postgres/migrate/names.d.ts +55 -0
  455. package/dist/postgres/migrate/names.d.ts.map +1 -0
  456. package/dist/postgres/migrate/observe.d.ts +139 -0
  457. package/dist/postgres/migrate/observe.d.ts.map +1 -0
  458. package/dist/postgres/migrate/op.d.ts +128 -0
  459. package/dist/postgres/migrate/op.d.ts.map +1 -0
  460. package/dist/postgres/migrate/receipts.d.ts +63 -0
  461. package/dist/postgres/migrate/receipts.d.ts.map +1 -0
  462. package/dist/postgres/migrate/replication.d.ts +80 -0
  463. package/dist/postgres/migrate/replication.d.ts.map +1 -0
  464. package/dist/postgres/migrate/steps.d.ts +225 -0
  465. package/dist/postgres/migrate/steps.d.ts.map +1 -0
  466. package/dist/postgres/overlays/columns.d.ts +6 -0
  467. package/dist/postgres/overlays/columns.d.ts.map +1 -0
  468. package/dist/postgres/overlays/constraints.d.ts +8 -0
  469. package/dist/postgres/overlays/constraints.d.ts.map +1 -0
  470. package/dist/postgres/overlays/indexes.d.ts +8 -0
  471. package/dist/postgres/overlays/indexes.d.ts.map +1 -0
  472. package/dist/postgres/overlays/kinds.d.ts +48 -0
  473. package/dist/postgres/overlays/kinds.d.ts.map +1 -0
  474. package/dist/postgres/overlays/partitioning.d.ts +5 -0
  475. package/dist/postgres/overlays/partitioning.d.ts.map +1 -0
  476. package/dist/postgres/overlays/relations.d.ts +6 -0
  477. package/dist/postgres/overlays/relations.d.ts.map +1 -0
  478. package/dist/postgres/overlays/storage.d.ts +28 -0
  479. package/dist/postgres/overlays/storage.d.ts.map +1 -0
  480. package/dist/postgres/overlays/type-ddl.d.ts +7 -0
  481. package/dist/postgres/overlays/type-ddl.d.ts.map +1 -0
  482. package/dist/postgres/overlays/types.d.ts +24 -0
  483. package/dist/postgres/overlays/types.d.ts.map +1 -0
  484. package/dist/postgres/parser.d.ts +216 -0
  485. package/dist/postgres/parser.d.ts.map +1 -0
  486. package/dist/postgres/plan/commands.d.ts +61 -0
  487. package/dist/postgres/plan/commands.d.ts.map +1 -0
  488. package/dist/postgres/plan/deep.d.ts +33 -0
  489. package/dist/postgres/plan/deep.d.ts.map +1 -0
  490. package/dist/postgres/plan/diff.d.ts +45 -0
  491. package/dist/postgres/plan/diff.d.ts.map +1 -0
  492. package/dist/postgres/plan/disruption.d.ts +14 -0
  493. package/dist/postgres/plan/disruption.d.ts.map +1 -0
  494. package/dist/postgres/plan/normalize.d.ts +108 -0
  495. package/dist/postgres/plan/normalize.d.ts.map +1 -0
  496. package/dist/postgres/plan/report.d.ts +6 -0
  497. package/dist/postgres/plan/report.d.ts.map +1 -0
  498. package/dist/postgres/plan/rules.d.ts +84 -0
  499. package/dist/postgres/plan/rules.d.ts.map +1 -0
  500. package/dist/postgres/plan/schema.d.ts +50 -0
  501. package/dist/postgres/plan/schema.d.ts.map +1 -0
  502. package/dist/postgres/plan/server-normalize.d.ts +26 -0
  503. package/dist/postgres/plan/server-normalize.d.ts.map +1 -0
  504. package/dist/postgres/providers/aurora.d.ts +12 -0
  505. package/dist/postgres/providers/aurora.d.ts.map +1 -0
  506. package/dist/postgres/providers/azure.d.ts +14 -0
  507. package/dist/postgres/providers/azure.d.ts.map +1 -0
  508. package/dist/postgres/providers/cloud-sql.d.ts +11 -0
  509. package/dist/postgres/providers/cloud-sql.d.ts.map +1 -0
  510. package/dist/postgres/providers/index.d.ts +35 -0
  511. package/dist/postgres/providers/index.d.ts.map +1 -0
  512. package/dist/postgres/providers/neon.d.ts +13 -0
  513. package/dist/postgres/providers/neon.d.ts.map +1 -0
  514. package/dist/postgres/providers/rds.d.ts +10 -0
  515. package/dist/postgres/providers/rds.d.ts.map +1 -0
  516. package/dist/postgres/providers/supabase.d.ts +12 -0
  517. package/dist/postgres/providers/supabase.d.ts.map +1 -0
  518. package/dist/postgres/providers/types.d.ts +59 -0
  519. package/dist/postgres/providers/types.d.ts.map +1 -0
  520. package/dist/postgres/testing/fake-client.d.ts +38 -0
  521. package/dist/postgres/testing/fake-client.d.ts.map +1 -0
  522. package/dist/postgres/testing/migration.d.ts +25 -0
  523. package/dist/postgres/testing/migration.d.ts.map +1 -0
  524. package/dist/postgres/testing/roundtrip-schema.d.ts +11 -0
  525. package/dist/postgres/testing/roundtrip-schema.d.ts.map +1 -0
  526. package/dist/postgres/testing/server.d.ts +17 -0
  527. package/dist/postgres/testing/server.d.ts.map +1 -0
  528. package/dist/postgres/testing/writable-server.d.ts +45 -0
  529. package/dist/postgres/testing/writable-server.d.ts.map +1 -0
  530. package/dist/postgres/tokens.d.ts +26 -0
  531. package/dist/postgres/tokens.d.ts.map +1 -0
  532. package/dist/postgres.d.ts +13 -0
  533. package/dist/postgres.d.ts.map +1 -0
  534. package/dist/rules/audit-entries.ts +29 -0
  535. package/dist/rules/clickhouse-helpers.ts +206 -0
  536. package/dist/rules/postgres-audit-entries.ts +29 -0
  537. package/dist/rules/postgres-helpers.ts +126 -0
  538. package/dist/rules/postgres-templates.ts +36 -0
  539. package/dist/rules/sql-helpers.ts +53 -0
  540. package/dist/rules/sqlch001.ts +53 -0
  541. package/dist/rules/sqlch002.ts +115 -0
  542. package/dist/rules/sqlch003.ts +68 -0
  543. package/dist/rules/sqlch101.ts +35 -0
  544. package/dist/rules/sqlch102.ts +23 -0
  545. package/dist/rules/sqlch103.ts +45 -0
  546. package/dist/rules/sqlch104.ts +42 -0
  547. package/dist/rules/sqlch105.ts +35 -0
  548. package/dist/rules/sqlch106.ts +27 -0
  549. package/dist/rules/sqlch107.ts +35 -0
  550. package/dist/rules/sqlch108.ts +27 -0
  551. package/dist/rules/sqlch109.ts +21 -0
  552. package/dist/rules/sqlch110.ts +29 -0
  553. package/dist/rules/sqlch111.ts +40 -0
  554. package/dist/rules/sqlch112.ts +30 -0
  555. package/dist/rules/sqlch113.ts +20 -0
  556. package/dist/rules/sqlch114.ts +26 -0
  557. package/dist/rules/sqlch115.ts +31 -0
  558. package/dist/rules/sqlch116.ts +22 -0
  559. package/dist/rules/sqlch117.ts +25 -0
  560. package/dist/rules/sqlch118.ts +26 -0
  561. package/dist/rules/sqlch119.ts +31 -0
  562. package/dist/rules/sqlch120.ts +21 -0
  563. package/dist/rules/sqlpg001.ts +88 -0
  564. package/dist/rules/sqlpg002.ts +68 -0
  565. package/dist/rules/sqlpg003.ts +59 -0
  566. package/dist/rules/sqlpg004.ts +73 -0
  567. package/dist/rules/sqlpg101.ts +24 -0
  568. package/dist/rules/sqlpg102.ts +30 -0
  569. package/dist/rules/sqlpg103.ts +23 -0
  570. package/dist/rules/sqlpg104.ts +23 -0
  571. package/dist/rules/sqlpg105.ts +22 -0
  572. package/dist/rules/sqlpg106.ts +22 -0
  573. package/dist/rules/sqlpg107.ts +22 -0
  574. package/dist/rules/sqlpg108.ts +27 -0
  575. package/dist/rules/sqlpg109.ts +37 -0
  576. package/dist/rules/sqlpg110.ts +33 -0
  577. package/dist/rules/sqlpg111.ts +23 -0
  578. package/dist/rules/sqlpg112.ts +25 -0
  579. package/dist/rules/sqlpg113.ts +28 -0
  580. package/dist/rules/sqlpg114.ts +37 -0
  581. package/dist/rules/sqlpg115.ts +38 -0
  582. package/dist/rules/sqlpg116.ts +25 -0
  583. package/dist/rules/sqlpg117.ts +24 -0
  584. package/dist/rules/sqlpg118.ts +22 -0
  585. package/dist/rules/templates.ts +35 -0
  586. package/dist/serializer.d.ts +37 -0
  587. package/dist/serializer.d.ts.map +1 -0
  588. package/dist/skill-defs.d.ts +3 -0
  589. package/dist/skill-defs.d.ts.map +1 -0
  590. package/dist/spec/catalog.d.ts +125 -0
  591. package/dist/spec/catalog.d.ts.map +1 -0
  592. package/dist/spec/fetch.d.ts +43 -0
  593. package/dist/spec/fetch.d.ts.map +1 -0
  594. package/dist/spec/pin.d.ts +39 -0
  595. package/dist/spec/pin.d.ts.map +1 -0
  596. package/dist/spec/postgres-catalog.d.ts +108 -0
  597. package/dist/spec/postgres-catalog.d.ts.map +1 -0
  598. package/dist/spec/postgres-fetch.d.ts +46 -0
  599. package/dist/spec/postgres-fetch.d.ts.map +1 -0
  600. package/dist/spec/postgres-pin.d.ts +67 -0
  601. package/dist/spec/postgres-pin.d.ts.map +1 -0
  602. package/dist/types/index.d.ts +4386 -0
  603. package/dist/validate-cli.d.ts +3 -0
  604. package/dist/validate-cli.d.ts.map +1 -0
  605. package/dist/validate.d.ts +15 -0
  606. package/dist/validate.d.ts.map +1 -0
  607. package/package.json +74 -4
  608. package/src/clickhouse/apply/apply.ts +288 -0
  609. package/src/clickhouse/apply/mutations.ts +90 -0
  610. package/src/clickhouse/apply/statements.ts +393 -0
  611. package/src/clickhouse/catalog-types.ts +84 -0
  612. package/src/clickhouse/container.ts +176 -0
  613. package/src/clickhouse/engine-syntax.test.ts +53 -0
  614. package/src/clickhouse/engine-syntax.ts +173 -0
  615. package/src/clickhouse/entities.test.ts +188 -0
  616. package/src/clickhouse/entities.ts +425 -0
  617. package/src/clickhouse/http.ts +76 -0
  618. package/src/clickhouse/import/generator.ts +153 -0
  619. package/src/clickhouse/import/import.test.ts +157 -0
  620. package/src/clickhouse/import/ir.ts +171 -0
  621. package/src/clickhouse/import/live-export.ts +53 -0
  622. package/src/clickhouse/import/parser.ts +27 -0
  623. package/src/clickhouse/import/roundtrip.test.ts +90 -0
  624. package/src/clickhouse/live/bind.ts +126 -0
  625. package/src/clickhouse/live/catalog.ts +96 -0
  626. package/src/clickhouse/live/describe-resources.ts +98 -0
  627. package/src/clickhouse/live/live.test.ts +143 -0
  628. package/src/clickhouse/live/roundtrip.e2e.test.ts +93 -0
  629. package/src/clickhouse/overlays/codecs.ts +68 -0
  630. package/src/clickhouse/overlays/engines.ts +108 -0
  631. package/src/clickhouse/overlays/kinds.ts +38 -0
  632. package/src/clickhouse/overlays/projections.ts +36 -0
  633. package/src/clickhouse/overlays/skip-indexes.ts +44 -0
  634. package/src/clickhouse/overlays/ttl.ts +55 -0
  635. package/src/clickhouse/overlays/types.ts +58 -0
  636. package/src/clickhouse/ownership.test.ts +20 -0
  637. package/src/clickhouse/ownership.ts +103 -0
  638. package/src/clickhouse/parser.test.ts +166 -0
  639. package/src/clickhouse/parser.ts +459 -0
  640. package/src/clickhouse/plan/commands.ts +101 -0
  641. package/src/clickhouse/plan/deep.ts +124 -0
  642. package/src/clickhouse/plan/diff.ts +203 -0
  643. package/src/clickhouse/plan/disruption.ts +61 -0
  644. package/src/clickhouse/plan/normalize.ts +352 -0
  645. package/src/clickhouse/plan/plan-wiring.test.ts +77 -0
  646. package/src/clickhouse/plan/plan.e2e.test.ts +77 -0
  647. package/src/clickhouse/plan/plan.test.ts +201 -0
  648. package/src/clickhouse/plan/rebuild-handoff.ts +59 -0
  649. package/src/clickhouse/plan/report.ts +19 -0
  650. package/src/clickhouse/plan/rules.ts +241 -0
  651. package/src/clickhouse/plan/schema.ts +56 -0
  652. package/src/clickhouse/plan/server-format.ts +39 -0
  653. package/src/clickhouse/rebuild/backfill.ts +186 -0
  654. package/src/clickhouse/rebuild/observe.ts +380 -0
  655. package/src/clickhouse/rebuild/op.ts +206 -0
  656. package/src/clickhouse/rebuild/partitions.ts +62 -0
  657. package/src/clickhouse/rebuild/rebuild-replicated.e2e.test.ts +513 -0
  658. package/src/clickhouse/rebuild/rebuild.e2e.test.ts +351 -0
  659. package/src/clickhouse/rebuild/rebuild.test.ts +190 -0
  660. package/src/clickhouse/rebuild/receipts.ts +143 -0
  661. package/src/clickhouse/rebuild/replicas.test.ts +70 -0
  662. package/src/clickhouse/rebuild/replicas.ts +148 -0
  663. package/src/clickhouse/rebuild/steps.ts +382 -0
  664. package/src/clickhouse/rebuild/verify.ts +124 -0
  665. package/src/clickhouse/testdata/NOTICE +5 -0
  666. package/src/clickhouse/testdata/clickhouse-tests-corpus.json +302 -0
  667. package/src/clickhouse/testing/fake-server.ts +65 -0
  668. package/src/clickhouse/testing/roundtrip-schema.ts +25 -0
  669. package/src/clickhouse/testing/writable-server.ts +141 -0
  670. package/src/clickhouse/tokens.ts +28 -0
  671. package/src/clickhouse.ts +63 -0
  672. package/src/codegen/classifier-page.test.ts +16 -0
  673. package/src/codegen/classifier-page.ts +76 -0
  674. package/src/codegen/clickhouse-module.test.ts +63 -0
  675. package/src/codegen/clickhouse-module.ts +269 -0
  676. package/src/codegen/docs-cli.ts +4 -0
  677. package/src/codegen/docs.ts +225 -0
  678. package/src/codegen/generate-cli.ts +13 -0
  679. package/src/codegen/generate.ts +126 -0
  680. package/src/codegen/package.ts +36 -0
  681. package/src/codegen/postgres-classifier-page.ts +81 -0
  682. package/src/codegen/postgres-module.test.ts +77 -0
  683. package/src/codegen/postgres-module.ts +434 -0
  684. package/src/codegen/registry.ts +36 -0
  685. package/src/composites/audit-log-table.ts +54 -0
  686. package/src/composites/catalog.test.ts +61 -0
  687. package/src/composites/catalog.ts +529 -0
  688. package/src/composites/cdc-mirror.ts +54 -0
  689. package/src/composites/clickhouse.ts +7 -0
  690. package/src/composites/composites.test.ts +758 -0
  691. package/src/composites/events-table.ts +49 -0
  692. package/src/composites/index.ts +9 -0
  693. package/src/composites/join-table.ts +57 -0
  694. package/src/composites/postgres.ts +7 -0
  695. package/src/composites/refreshed-view.ts +46 -0
  696. package/src/composites/replacing-table.ts +49 -0
  697. package/src/composites/rollup-view.ts +55 -0
  698. package/src/composites/sharded-table.ts +49 -0
  699. package/src/composites/soft-delete-table.ts +61 -0
  700. package/src/composites/tenant-table.ts +50 -0
  701. package/src/config.ts +157 -0
  702. package/src/core/apply.ts +153 -0
  703. package/src/core/classifier.ts +186 -0
  704. package/src/core/container.ts +93 -0
  705. package/src/core/core.test.ts +254 -0
  706. package/src/core/cursor.ts +189 -0
  707. package/src/core/diff.ts +72 -0
  708. package/src/core/entity.ts +85 -0
  709. package/src/core/find-templates.ts +158 -0
  710. package/src/core/handoff.ts +44 -0
  711. package/src/core/index.ts +61 -0
  712. package/src/core/interpolation.ts +225 -0
  713. package/src/core/normalize.ts +39 -0
  714. package/src/core/ownership.test.ts +36 -0
  715. package/src/core/ownership.ts +133 -0
  716. package/src/core/receipts.ts +29 -0
  717. package/src/core/references.ts +74 -0
  718. package/src/core/template.ts +83 -0
  719. package/src/core/testing/http-stub.ts +33 -0
  720. package/src/core/tokens.ts +252 -0
  721. package/src/coverage.ts +64 -0
  722. package/src/detect.ts +32 -0
  723. package/src/dialects.ts +21 -0
  724. package/src/generated/clickhouse-types.ts +4386 -0
  725. package/src/generated/clickhouse.ts +2476 -0
  726. package/src/generated/index.d.ts +4386 -0
  727. package/src/generated/lexicon-sql.json +67 -0
  728. package/src/generated/postgres-types.ts +1190 -0
  729. package/src/generated/postgres.ts +1039 -0
  730. package/src/import-generator.ts +18 -0
  731. package/src/index.ts +21 -0
  732. package/src/init-templates.test.ts +108 -0
  733. package/src/init-templates.ts +327 -0
  734. package/src/lint/audit-catalog.ts +73 -0
  735. package/src/lint/audit-lineage.ts +47 -0
  736. package/src/lint/post-synth/audit-entries.ts +29 -0
  737. package/src/lint/post-synth/clickhouse-checks.test.ts +278 -0
  738. package/src/lint/post-synth/clickhouse-helpers.ts +206 -0
  739. package/src/lint/post-synth/index.ts +81 -0
  740. package/src/lint/post-synth/post-synth.test.ts +33 -0
  741. package/src/lint/post-synth/postgres-audit-entries.ts +29 -0
  742. package/src/lint/post-synth/postgres-checks.test.ts +257 -0
  743. package/src/lint/post-synth/postgres-helpers.ts +126 -0
  744. package/src/lint/post-synth/sql-helpers.ts +53 -0
  745. package/src/lint/post-synth/sqlch101.ts +35 -0
  746. package/src/lint/post-synth/sqlch102.ts +23 -0
  747. package/src/lint/post-synth/sqlch103.ts +45 -0
  748. package/src/lint/post-synth/sqlch104.ts +42 -0
  749. package/src/lint/post-synth/sqlch105.ts +35 -0
  750. package/src/lint/post-synth/sqlch106.ts +27 -0
  751. package/src/lint/post-synth/sqlch107.ts +35 -0
  752. package/src/lint/post-synth/sqlch108.ts +27 -0
  753. package/src/lint/post-synth/sqlch109.ts +21 -0
  754. package/src/lint/post-synth/sqlch110.ts +29 -0
  755. package/src/lint/post-synth/sqlch111.ts +40 -0
  756. package/src/lint/post-synth/sqlch112.ts +30 -0
  757. package/src/lint/post-synth/sqlch113.ts +20 -0
  758. package/src/lint/post-synth/sqlch114.ts +26 -0
  759. package/src/lint/post-synth/sqlch115.ts +31 -0
  760. package/src/lint/post-synth/sqlch116.ts +22 -0
  761. package/src/lint/post-synth/sqlch117.ts +25 -0
  762. package/src/lint/post-synth/sqlch118.ts +26 -0
  763. package/src/lint/post-synth/sqlch119.ts +31 -0
  764. package/src/lint/post-synth/sqlch120.ts +21 -0
  765. package/src/lint/post-synth/sqlpg101.ts +24 -0
  766. package/src/lint/post-synth/sqlpg102.ts +30 -0
  767. package/src/lint/post-synth/sqlpg103.ts +23 -0
  768. package/src/lint/post-synth/sqlpg104.ts +23 -0
  769. package/src/lint/post-synth/sqlpg105.ts +22 -0
  770. package/src/lint/post-synth/sqlpg106.ts +22 -0
  771. package/src/lint/post-synth/sqlpg107.ts +22 -0
  772. package/src/lint/post-synth/sqlpg108.ts +27 -0
  773. package/src/lint/post-synth/sqlpg109.ts +37 -0
  774. package/src/lint/post-synth/sqlpg110.ts +33 -0
  775. package/src/lint/post-synth/sqlpg111.ts +23 -0
  776. package/src/lint/post-synth/sqlpg112.ts +25 -0
  777. package/src/lint/post-synth/sqlpg113.ts +28 -0
  778. package/src/lint/post-synth/sqlpg114.ts +37 -0
  779. package/src/lint/post-synth/sqlpg115.ts +38 -0
  780. package/src/lint/post-synth/sqlpg116.ts +25 -0
  781. package/src/lint/post-synth/sqlpg117.ts +24 -0
  782. package/src/lint/post-synth/sqlpg118.ts +22 -0
  783. package/src/lint/rules/index.ts +13 -0
  784. package/src/lint/rules/postgres-templates.ts +36 -0
  785. package/src/lint/rules/rules.test.ts +228 -0
  786. package/src/lint/rules/sqlch001.ts +53 -0
  787. package/src/lint/rules/sqlch002.ts +115 -0
  788. package/src/lint/rules/sqlch003.ts +68 -0
  789. package/src/lint/rules/sqlpg001.ts +88 -0
  790. package/src/lint/rules/sqlpg002.ts +68 -0
  791. package/src/lint/rules/sqlpg003.ts +59 -0
  792. package/src/lint/rules/sqlpg004.ts +73 -0
  793. package/src/lint/rules/templates.ts +35 -0
  794. package/src/live-dialect.ts +37 -0
  795. package/src/lsp/catalog.ts +60 -0
  796. package/src/lsp/completions.test.ts +111 -0
  797. package/src/lsp/completions.ts +128 -0
  798. package/src/lsp/diagnostics.test.ts +26 -0
  799. package/src/lsp/hover.test.ts +90 -0
  800. package/src/lsp/hover.ts +113 -0
  801. package/src/lsp/postgres-catalog.ts +234 -0
  802. package/src/lsp/postgres-template.ts +161 -0
  803. package/src/lsp/postgres.test.ts +150 -0
  804. package/src/lsp/postgres.ts +270 -0
  805. package/src/lsp/refs.ts +53 -0
  806. package/src/lsp/registry.ts +19 -0
  807. package/src/lsp/template.ts +166 -0
  808. package/src/mcp/index.ts +304 -0
  809. package/src/mcp/mcp.test.ts +184 -0
  810. package/src/mcp/postgres.ts +125 -0
  811. package/src/op/activities/clickhouse-apply.e2e.test.ts +150 -0
  812. package/src/op/activities/clickhouse-apply.test.ts +265 -0
  813. package/src/op/activities/clickhouse-apply.ts +113 -0
  814. package/src/op/activities/clickhouse-emulator.test.ts +23 -0
  815. package/src/op/activities/clickhouse-emulator.ts +37 -0
  816. package/src/op/activities/clickhouse-rebuild.ts +136 -0
  817. package/src/op/activities/index.ts +50 -0
  818. package/src/op/activities/postgres-apply.e2e.test.ts +184 -0
  819. package/src/op/activities/postgres-apply.test.ts +304 -0
  820. package/src/op/activities/postgres-apply.ts +170 -0
  821. package/src/op/activities/postgres-emulator.test.ts +26 -0
  822. package/src/op/activities/postgres-emulator.ts +44 -0
  823. package/src/op/activities/postgres-migration.ts +182 -0
  824. package/src/op/activity-contracts.ts +210 -0
  825. package/src/package-cli.ts +17 -0
  826. package/src/plugin.test.ts +74 -0
  827. package/src/plugin.ts +242 -0
  828. package/src/postgres/apply/apply.ts +582 -0
  829. package/src/postgres/apply/statements.test.ts +155 -0
  830. package/src/postgres/apply/statements.ts +603 -0
  831. package/src/postgres/catalog-types.ts +59 -0
  832. package/src/postgres/container.ts +72 -0
  833. package/src/postgres/entities.test.ts +170 -0
  834. package/src/postgres/entities.ts +1016 -0
  835. package/src/postgres/entity-types.ts +18 -0
  836. package/src/postgres/import/generator.ts +176 -0
  837. package/src/postgres/import/import.test.ts +71 -0
  838. package/src/postgres/import/ir.ts +67 -0
  839. package/src/postgres/import/live-export.ts +53 -0
  840. package/src/postgres/import/live-warnings.test.ts +45 -0
  841. package/src/postgres/keywords.ts +40 -0
  842. package/src/postgres/live/bind.ts +146 -0
  843. package/src/postgres/live/catalog.ts +581 -0
  844. package/src/postgres/live/client.ts +84 -0
  845. package/src/postgres/live/describe-resources.ts +111 -0
  846. package/src/postgres/live/live.test.ts +198 -0
  847. package/src/postgres/live/roundtrip.e2e.test.ts +111 -0
  848. package/src/postgres/migrate/backfill.ts +233 -0
  849. package/src/postgres/migrate/batches.e2e.test.ts +163 -0
  850. package/src/postgres/migrate/batches.test.ts +36 -0
  851. package/src/postgres/migrate/batches.ts +159 -0
  852. package/src/postgres/migrate/carry.e2e.test.ts +335 -0
  853. package/src/postgres/migrate/carry.test.ts +103 -0
  854. package/src/postgres/migrate/carry.ts +653 -0
  855. package/src/postgres/migrate/handoff.ts +73 -0
  856. package/src/postgres/migrate/kinds.e2e.test.ts +204 -0
  857. package/src/postgres/migrate/migrate.e2e.test.ts +362 -0
  858. package/src/postgres/migrate/migrate.test.ts +322 -0
  859. package/src/postgres/migrate/names.ts +93 -0
  860. package/src/postgres/migrate/observe.ts +521 -0
  861. package/src/postgres/migrate/op.ts +242 -0
  862. package/src/postgres/migrate/receipts.ts +135 -0
  863. package/src/postgres/migrate/replication.ts +151 -0
  864. package/src/postgres/migrate/steps.ts +657 -0
  865. package/src/postgres/overlays/columns.ts +34 -0
  866. package/src/postgres/overlays/constraints.ts +56 -0
  867. package/src/postgres/overlays/indexes.ts +27 -0
  868. package/src/postgres/overlays/kinds.ts +53 -0
  869. package/src/postgres/overlays/partitioning.ts +26 -0
  870. package/src/postgres/overlays/relations.ts +29 -0
  871. package/src/postgres/overlays/storage.ts +75 -0
  872. package/src/postgres/overlays/type-ddl.ts +38 -0
  873. package/src/postgres/overlays/types.ts +56 -0
  874. package/src/postgres/parser.test.ts +214 -0
  875. package/src/postgres/parser.ts +1062 -0
  876. package/src/postgres/plan/commands.ts +124 -0
  877. package/src/postgres/plan/deep.ts +177 -0
  878. package/src/postgres/plan/diff.ts +323 -0
  879. package/src/postgres/plan/disruption.ts +52 -0
  880. package/src/postgres/plan/normalize.test.ts +148 -0
  881. package/src/postgres/plan/normalize.ts +542 -0
  882. package/src/postgres/plan/plan.e2e.test.ts +117 -0
  883. package/src/postgres/plan/plan.test.ts +244 -0
  884. package/src/postgres/plan/report.ts +24 -0
  885. package/src/postgres/plan/rules.ts +276 -0
  886. package/src/postgres/plan/schema.ts +114 -0
  887. package/src/postgres/plan/server-normalize.ts +123 -0
  888. package/src/postgres/providers/aurora.ts +45 -0
  889. package/src/postgres/providers/azure.ts +54 -0
  890. package/src/postgres/providers/cloud-sql.ts +42 -0
  891. package/src/postgres/providers/index.ts +90 -0
  892. package/src/postgres/providers/neon.ts +45 -0
  893. package/src/postgres/providers/providers.test.ts +136 -0
  894. package/src/postgres/providers/rds.ts +48 -0
  895. package/src/postgres/providers/supabase.ts +46 -0
  896. package/src/postgres/providers/types.ts +70 -0
  897. package/src/postgres/testdata/NOTICE +31 -0
  898. package/src/postgres/testdata/postgres-regress-corpus.json +460 -0
  899. package/src/postgres/testing/fake-client.ts +42 -0
  900. package/src/postgres/testing/migration.ts +52 -0
  901. package/src/postgres/testing/roundtrip-schema.ts +46 -0
  902. package/src/postgres/testing/server.ts +58 -0
  903. package/src/postgres/testing/writable-server.ts +188 -0
  904. package/src/postgres/tokens.ts +46 -0
  905. package/src/postgres.ts +75 -0
  906. package/src/serializer.test.ts +128 -0
  907. package/src/serializer.ts +148 -0
  908. package/src/skill-defs.test.ts +81 -0
  909. package/src/skill-defs.ts +102 -0
  910. package/src/skills/chant-sql-plan.md +123 -0
  911. package/src/skills/chant-sql-postgres-migration.md +126 -0
  912. package/src/skills/chant-sql-postgres-plan.md +194 -0
  913. package/src/skills/chant-sql-postgres.md +165 -0
  914. package/src/skills/chant-sql-rebuild.md +68 -0
  915. package/src/skills/chant-sql.md +123 -0
  916. package/src/spec/catalog.e2e.test.ts +29 -0
  917. package/src/spec/catalog.test.ts +56 -0
  918. package/src/spec/catalog.ts +311 -0
  919. package/src/spec/clickhouse-catalog.snapshot.json +5246 -0
  920. package/src/spec/fetch.test.ts +77 -0
  921. package/src/spec/fetch.ts +112 -0
  922. package/src/spec/pin.ts +47 -0
  923. package/src/spec/postgres-catalog-14.snapshot.json +3494 -0
  924. package/src/spec/postgres-catalog-15.snapshot.json +3529 -0
  925. package/src/spec/postgres-catalog-16.snapshot.json +3597 -0
  926. package/src/spec/postgres-catalog-17.snapshot.json +3656 -0
  927. package/src/spec/postgres-catalog-18.snapshot.json +3747 -0
  928. package/src/spec/postgres-catalog.test.ts +43 -0
  929. package/src/spec/postgres-catalog.ts +301 -0
  930. package/src/spec/postgres-fetch.test.ts +75 -0
  931. package/src/spec/postgres-fetch.ts +112 -0
  932. package/src/spec/postgres-pin.test.ts +64 -0
  933. package/src/spec/postgres-pin.ts +101 -0
  934. package/src/typecheck.test.ts +104 -0
  935. package/src/validate-cli.ts +6 -0
  936. package/src/validate.ts +149 -0
@@ -0,0 +1,133 @@
1
+ /**
2
+ * chant's ownership marker as a trailer on an object's own comment, in every
3
+ * dialect that can comment on its objects (#3208).
4
+ *
5
+ * The marker never replaces the user's comment, which is a declared property.
6
+ * It is appended as a bracketed trailer,
7
+ *
8
+ * Raw events [chant managed-by=chant stack=shop env=prod]
9
+ *
10
+ * and taken off again wherever chant reads a definition, so planning, the deep
11
+ * diff and import compare and write the declared comment alone. Someone who
12
+ * edits the comment by hand and drops the trailer makes the object read as
13
+ * foreign, which is the safe direction: it is never pruned, and the next apply
14
+ * of its declaration stamps it again.
15
+ *
16
+ * Values are percent-encoded outside `[A-Za-z0-9._-]`, so the trailer never
17
+ * holds a quote, a backslash, a space or a bracket of its own.
18
+ *
19
+ * Where the comment lives in a statement, and so how a trailer comes off a
20
+ * printed `CREATE`, is the dialect's grammar and stays with the dialect.
21
+ */
22
+
23
+ import { OWNERSHIP_MANAGED_BY_VALUE, type ChannelKeys, type OwnershipMarker } from "@intentius/chant/ownership";
24
+
25
+ /** The keys inside the trailer. */
26
+ export const COMMENT_OWNERSHIP_KEYS: ChannelKeys = {
27
+ managedBy: "managed-by",
28
+ stack: "stack",
29
+ env: "env",
30
+ };
31
+
32
+ /**
33
+ * The trailer key on the objects that hold effect receipts. Like a
34
+ * migration's working objects, they are chant's own bookkeeping and never
35
+ * part of a declared schema.
36
+ */
37
+ export const RECEIPTS_TRAILER_KEY = "receipts";
38
+
39
+ const VALUE = "[A-Za-z0-9._%-]*";
40
+ /** One `key=value` pair of a trailer, as a regular expression source. */
41
+ export const TRAILER_PAIR = `[A-Za-z0-9._-]+=${VALUE}`;
42
+ /** The trailer at the end of a comment's text. */
43
+ const TRAILER = new RegExp(`(?:^|\\s+)\\[chant((?: ${TRAILER_PAIR})+)\\]$`);
44
+
45
+ const encode = (v: string) => v.replace(/[^A-Za-z0-9._-]/g, (c) => [...new TextEncoder().encode(c)].map((b) => `%${b.toString(16).toUpperCase().padStart(2, "0")}`).join(""));
46
+ const decode = (v: string) => {
47
+ try {
48
+ return decodeURIComponent(v);
49
+ } catch {
50
+ return v;
51
+ }
52
+ };
53
+
54
+ /** What a trailer says: the managed-by value and, when stamped, the stack and env. */
55
+ export interface CommentMarker {
56
+ managedBy: string;
57
+ stack?: string;
58
+ env?: string;
59
+ }
60
+
61
+ /**
62
+ * The trailer for a marker: `[chant managed-by=chant stack=<stack> env=<env>]`.
63
+ * `extra` appends more pairs after the marker's own; a migration Op uses them
64
+ * to say which migration an object it made belongs to.
65
+ * Keys are `[A-Za-z0-9._-]+`; values are encoded like the rest.
66
+ */
67
+ export function markerTrailer(marker: OwnershipMarker | undefined, extra: Readonly<Record<string, string>> = {}): string {
68
+ const k = COMMENT_OWNERSHIP_KEYS;
69
+ const pairs = [`${k.managedBy}=${OWNERSHIP_MANAGED_BY_VALUE}`];
70
+ if (marker?.stack) pairs.push(`${k.stack}=${encode(marker.stack)}`);
71
+ if (marker?.env) pairs.push(`${k.env}=${encode(marker.env)}`);
72
+ for (const [key, value] of Object.entries(extra)) {
73
+ if (!/^[A-Za-z0-9._-]+$/.test(key)) throw new Error(`ownership trailer key ${JSON.stringify(key)} is not [A-Za-z0-9._-]+`);
74
+ pairs.push(`${key}=${encode(value)}`);
75
+ }
76
+ return `[chant ${pairs.join(" ")}]`;
77
+ }
78
+
79
+ /** A comment's text with the trailer taken off. */
80
+ export function stripMarker(comment: string): string {
81
+ return comment.replace(TRAILER, "");
82
+ }
83
+
84
+ /** The comment to set: the declared comment, then the trailer (with `extra` pairs, see {@link markerTrailer}). */
85
+ export function stampedComment(declared: string | undefined, marker: OwnershipMarker | undefined, extra?: Readonly<Record<string, string>>): string {
86
+ const own = stripMarker(declared ?? "");
87
+ return own ? `${own} ${markerTrailer(marker, extra)}` : markerTrailer(marker, extra);
88
+ }
89
+
90
+ /** Every pair in a comment's trailer, decoded, or undefined when it has no trailer. */
91
+ export function readTrailerPairs(comment: string | undefined): Map<string, string> | undefined {
92
+ const m = TRAILER.exec(comment ?? "");
93
+ if (!m) return undefined;
94
+ return new Map(
95
+ m[1]!
96
+ .trim()
97
+ .split(" ")
98
+ .map((p) => {
99
+ const at = p.indexOf("=");
100
+ return [p.slice(0, at), decode(p.slice(at + 1))] as const;
101
+ }),
102
+ );
103
+ }
104
+
105
+ /** Whether a comment carries chant's managed-by marker and any of `keys` in its trailer. */
106
+ export function hasChantTrailerKey(comment: string | undefined, keys: readonly string[]): boolean {
107
+ const pairs = readTrailerPairs(comment);
108
+ return pairs?.get(COMMENT_OWNERSHIP_KEYS.managedBy) === OWNERSHIP_MANAGED_BY_VALUE && keys.some((k) => pairs!.has(k));
109
+ }
110
+
111
+ /** The marker a comment carries, or undefined when it carries none. */
112
+ export function readMarker(comment: string | undefined): CommentMarker | undefined {
113
+ const pairs = readTrailerPairs(comment);
114
+ if (!pairs) return undefined;
115
+ const k = COMMENT_OWNERSHIP_KEYS;
116
+ const managedBy = pairs.get(k.managedBy);
117
+ if (managedBy === undefined) return undefined;
118
+ const stack = pairs.get(k.stack);
119
+ const env = pairs.get(k.env);
120
+ return { managedBy, ...(stack ? { stack } : {}), ...(env ? { env } : {}) };
121
+ }
122
+
123
+ /** Whether a comment carries chant's managed-by marker. */
124
+ export function isChantManaged(comment: string | undefined): boolean {
125
+ return readMarker(comment)?.managedBy === OWNERSHIP_MANAGED_BY_VALUE;
126
+ }
127
+
128
+ /** Whether the comment's marker is exactly this project's: managed by chant, same stack, same env. */
129
+ export function carriesMarker(comment: string | undefined, marker: OwnershipMarker | undefined): boolean {
130
+ const m = readMarker(comment);
131
+ if (m?.managedBy !== OWNERSHIP_MANAGED_BY_VALUE) return false;
132
+ return (m.stack ?? undefined) === (marker?.stack || undefined) && (m.env ?? undefined) === (marker?.env || undefined);
133
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Effect receipts kept on the database server itself, in every dialect
3
+ * (concepts/effect-receipts.mdx).
4
+ *
5
+ * A receipt is the proof that one effect ran, kept where the effect happened.
6
+ * A migration Op's backfill copies data on the server, so its receipts are
7
+ * rows on the same server, bound to the object they witness, and read and
8
+ * written over the connection the copy already uses. They die with the data
9
+ * when the Op's onFailure drops it, which a receipt kept in git would not.
10
+ *
11
+ * A dialect's store implements this interface over its own client and keeps
12
+ * the receipts in a table whose comment carries the ownership trailer with
13
+ * the `receipts` key (`./ownership.ts`), so schema reads leave it out. It is
14
+ * not registered as the global `receiptRead` / `receiptWrite` activities,
15
+ * which would take over every other lexicon's `effect()` steps in the run.
16
+ */
17
+
18
+ import type { ReceiptStore } from "@intentius/chant/op/receipt-store";
19
+
20
+ /** The receipt's address: `<stack>/<env>/<effect>`, the same fields an ownership marker carries. */
21
+ export function receiptAddress(identity: { stack?: string; env?: string }, effect: string): string {
22
+ return `${identity.stack || "-"}/${identity.env || "-"}/${effect}`;
23
+ }
24
+
25
+ /** A receipt store on a database server. */
26
+ export interface SqlReceiptStore extends ReceiptStore {
27
+ /** Every receipt whose address starts with `prefix`, latest value each: one query for a whole backfill. */
28
+ readAll(prefix: string): Promise<Map<string, string>>;
29
+ }
@@ -0,0 +1,74 @@
1
+ /**
2
+ * References between schema objects, in every dialect: column lineage, the
3
+ * name a reference is written under in a build's output, and the order
4
+ * objects are created in.
5
+ */
6
+
7
+ import type { Declarable } from "@intentius/chant";
8
+ import type { AttrRef } from "@intentius/chant/attrref";
9
+ import { isAttrRefLike } from "@intentius/chant/utils";
10
+
11
+ /** One output column of a view and the columns it is computed from. */
12
+ export interface LineageEdge {
13
+ output: string;
14
+ /** The select-list expression, rendered. */
15
+ expr: string;
16
+ /** The column references inside it. */
17
+ from: AttrRef[];
18
+ }
19
+
20
+ /** What the dependency order needs of an object: the references its DDL makes. */
21
+ export interface Referencing {
22
+ readonly dependsOn: readonly unknown[];
23
+ }
24
+
25
+ /**
26
+ * A reference as a build's output writes it: an entity's export name, or
27
+ * `export.column` for a column. Undefined when the target is not exported.
28
+ */
29
+ export function referenceName(value: unknown, names: Map<Declarable, string>): string | undefined {
30
+ if (isAttrRefLike(value)) {
31
+ const parent = value.parent.deref() as Declarable | undefined;
32
+ const owner = parent ? names.get(parent) : undefined;
33
+ return owner ? `${owner}.${value.attribute}` : undefined;
34
+ }
35
+ return names.get(value as Declarable);
36
+ }
37
+
38
+ /** Lineage edges with their column references written as `export.column`. */
39
+ export function lineageJson(edges: readonly LineageEdge[], names: Map<Declarable, string>): Array<{ output: string; expr: string; from: Array<string | null> }> {
40
+ return edges.map((e) => ({
41
+ output: e.output,
42
+ expr: e.expr,
43
+ from: e.from.map((r) => referenceName(r, names) ?? null),
44
+ }));
45
+ }
46
+
47
+ /**
48
+ * Export names in creation order: an object after everything it references.
49
+ * Ties break by export name, so the order is the same however the files were
50
+ * discovered. A reference cycle is an error naming the cycle.
51
+ */
52
+ export function applyOrder(objects: Map<string, Referencing>, names: Map<Declarable, string>): string[] {
53
+ const deps = new Map<string, string[]>();
54
+ for (const [name, obj] of objects) {
55
+ const on = new Set<string>();
56
+ for (const ref of obj.dependsOn) {
57
+ const parent = isAttrRefLike(ref) ? (ref.parent.deref() as Declarable | undefined) : (ref as Declarable);
58
+ const dep = parent ? names.get(parent) : undefined;
59
+ if (dep !== undefined && dep !== name && objects.has(dep)) on.add(dep);
60
+ }
61
+ deps.set(name, [...on].sort());
62
+ }
63
+ const order: string[] = [];
64
+ const done = new Set<string>();
65
+ const visit = (n: string, stack: string[]) => {
66
+ if (done.has(n)) return;
67
+ if (stack.includes(n)) throw new Error(`sql: a reference cycle between schema objects: ${[...stack, n].join(" -> ")}`);
68
+ for (const d of deps.get(n) ?? []) visit(d, [...stack, n]);
69
+ done.add(n);
70
+ order.push(n);
71
+ };
72
+ for (const n of [...objects.keys()].sort()) visit(n, []);
73
+ return order;
74
+ }
@@ -0,0 +1,83 @@
1
+ /**
2
+ * The tagged-template plumbing every dialect's tags share: reading a
3
+ * template's raw parts, what a non-reference interpolation splices in, and
4
+ * the error a tag throws with the template line it happened on.
5
+ *
6
+ * Tokenizing and parsing the spliced statement is the dialect's own.
7
+ */
8
+
9
+ /** A spliced value meant as a string literal. A dialect's `literal()` makes one with its own quoting. */
10
+ export class SqlLiteral {
11
+ constructor(readonly sql: string) {
12
+ Object.freeze(this);
13
+ }
14
+ }
15
+
16
+ /** An error from a tag: the statement kind, the template line, and what went wrong. */
17
+ export class SqlTemplateError extends Error {
18
+ constructor(
19
+ tag: string,
20
+ message: string,
21
+ readonly part: number,
22
+ readonly offset: number,
23
+ ) {
24
+ super(`${tag}\`...\`: ${message}`);
25
+ this.name = "SqlTemplateError";
26
+ }
27
+ }
28
+
29
+ /**
30
+ * A template's parts as the SQL reads them: the raw text, so a backslash in a
31
+ * regex or an escape stays as written, with the two escapes a template
32
+ * literal forces undone. `` \` `` is a backquote and `\${` is `${`; neither
33
+ * can be written in a template any other way.
34
+ */
35
+ export function templateParts(strings: TemplateStringsArray | readonly string[]): string[] {
36
+ const raw = (strings as TemplateStringsArray).raw ?? strings;
37
+ return raw.map(unescapeTemplateDelimiters);
38
+ }
39
+
40
+ export function unescapeTemplateDelimiters(part: string): string {
41
+ return part.replace(/\\(`|\$\{)/g, "$1");
42
+ }
43
+
44
+ /** Where interpolation `index` sits in the template, for a message: the line of the template it is on. */
45
+ export function interpolationLine(parts: readonly string[], index: number): number {
46
+ return parts.slice(0, index + 1).join("${}").split("\n").length;
47
+ }
48
+
49
+ /** A value's kind, for a message. */
50
+ export function describeValue(value: unknown): string {
51
+ if (value === undefined) return "undefined";
52
+ if (value === null) return "null";
53
+ if (Array.isArray(value)) return "an array";
54
+ return typeof value === "object" ? `an object (${Object.prototype.toString.call(value)})` : `a ${typeof value}`;
55
+ }
56
+
57
+ /**
58
+ * The SQL text a non-reference value splices in, or an error message: a
59
+ * string is SQL text, a number, bigint or boolean its literal, `null` is
60
+ * `NULL`, a {@link SqlLiteral} its quoted form. Anything else has no SQL form.
61
+ */
62
+ export function spliceText(value: unknown): string | { error: string } {
63
+ if (typeof value === "string") return value;
64
+ if (typeof value === "number") {
65
+ return Number.isFinite(value) ? String(value) : { error: `the number ${value} has no SQL form` };
66
+ }
67
+ if (typeof value === "bigint") return value.toString();
68
+ if (typeof value === "boolean") return value ? "true" : "false";
69
+ if (value === null) return "NULL";
70
+ if (value instanceof SqlLiteral) return value.sql;
71
+ if (value === undefined) {
72
+ return {
73
+ error:
74
+ "undefined. A column is referenced through `.columns` (`${events.columns.user_id}`, not " +
75
+ "`${events.user_id}`), and a column name that does not exist is undefined too",
76
+ };
77
+ }
78
+ return { error: `${describeValue(value)}, which has no SQL form` };
79
+ }
80
+
81
+ /** `o` without its `undefined` and `false` fields, so props hold only what the DDL says. */
82
+ export const stripUnset = <T extends object>(o: T): T =>
83
+ Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined && v !== false)) as T;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * A stand-in HTTP server for tests, in every dialect: listens on a random
3
+ * loopback port and answers each request's body with what `answer` returns.
4
+ * A dialect's fake server (the ClickHouse HTTP interface answering its
5
+ * catalog reads) is built on it. Not a SQL engine.
6
+ */
7
+
8
+ import { createServer, type IncomingMessage, type Server } from "node:http";
9
+
10
+ export interface StubAnswer {
11
+ status: number;
12
+ text: string;
13
+ }
14
+
15
+ export interface HttpStub {
16
+ url: string;
17
+ close(): Promise<void>;
18
+ }
19
+
20
+ export async function startHttpStub(answer: (body: string, req: IncomingMessage) => StubAnswer): Promise<HttpStub> {
21
+ const server: Server = createServer((req, res) => {
22
+ let body = "";
23
+ req.on("data", (c) => (body += c));
24
+ req.on("end", () => {
25
+ const { status, text } = answer(body, req);
26
+ res.statusCode = status;
27
+ res.end(text);
28
+ });
29
+ });
30
+ await new Promise<void>((r) => server.listen(0, "127.0.0.1", () => r()));
31
+ const { port } = server.address() as { port: number };
32
+ return { url: `http://127.0.0.1:${port}`, close: () => new Promise((r) => server.close(() => r())) };
33
+ }
@@ -0,0 +1,252 @@
1
+ /**
2
+ * A lossless tokenizer over a tagged template's parts (chant #3196).
3
+ *
4
+ * The template is never joined into one string with placeholders. Each literal
5
+ * part is tokenized on its own and an interpolation is a `ref` token between
6
+ * two parts, so a token's offset is an offset into the part the author wrote:
7
+ * what a lint rule and the editor point at.
8
+ *
9
+ * Lossless: concatenating every token's `text`, with each `ref` written back as
10
+ * `${...}`, gives the raw template text back byte for byte. Whitespace and
11
+ * comments are tokens (`ws`, `comment`), not discarded.
12
+ *
13
+ * Shared by every dialect. What differs at the character level (which quotes
14
+ * make an identifier, whether a backslash escapes, the punctuation and
15
+ * operator characters) is a dialect's {@link LexicalRules}; ClickHouse's are
16
+ * `../clickhouse/tokens.ts`, Postgres's `../postgres/tokens.ts`. The rules
17
+ * Postgres adds (#3278: dollar quotes, `E'...'` strings, nested comments,
18
+ * `$1` parameters, its number syntax) are optional fields, off unless a
19
+ * dialect sets them, so ClickHouse tokenizes exactly as before.
20
+ */
21
+
22
+ export type TokenKind =
23
+ | "ws"
24
+ | "comment"
25
+ /** A bare identifier or keyword. */
26
+ | "ident"
27
+ /** A `backquoted` or "double-quoted" identifier. */
28
+ | "qident"
29
+ | "string"
30
+ | "number"
31
+ /** `( ) , ; . =` */
32
+ | "punct"
33
+ /** Any other run of operator characters. */
34
+ | "op"
35
+ /** An interpolation. */
36
+ | "ref"
37
+ /** A positional parameter, `$1` (Postgres). */
38
+ | "param";
39
+
40
+ export interface Token {
41
+ kind: TokenKind;
42
+ text: string;
43
+ /** The template part the token sits in. For a `ref`, the index of the interpolated value. */
44
+ part: number;
45
+ /** Offsets into that part. A `ref` has start = end = 0. */
46
+ start: number;
47
+ end: number;
48
+ /**
49
+ * Set on a token that came from a string the author interpolated, which is
50
+ * spliced into the statement as SQL text: the index of that interpolation.
51
+ * Its offsets are into the spliced string.
52
+ */
53
+ splice?: number;
54
+ }
55
+
56
+ /** A syntax error, located in the template: the part and the offset in it. */
57
+ export class SqlSyntaxError extends Error {
58
+ constructor(
59
+ message: string,
60
+ readonly part: number,
61
+ readonly offset: number,
62
+ /** The token the error is at, when there is one. A spliced token's position is the interpolation's. */
63
+ readonly token?: Token,
64
+ ) {
65
+ super(message);
66
+ this.name = "SqlSyntaxError";
67
+ }
68
+ }
69
+
70
+ /** What a dialect's tokenizer differs in, at the character level. */
71
+ export interface LexicalRules {
72
+ /** The characters that open a quoted identifier, each closed by itself. */
73
+ identQuotes: string;
74
+ /** Whether a backslash escapes the next character inside any quote. */
75
+ backslashEscapes: boolean;
76
+ /** The single-character punctuation tokens. */
77
+ punct: string;
78
+ /** The characters an operator run is made of. */
79
+ opChars: RegExp;
80
+ /**
81
+ * Prefixed string constants (Postgres): `E'...'`, where a backslash escapes,
82
+ * `B'...'` and `X'...'` bit strings, `N'...'`, and `U&'...'` / `U&"..."`
83
+ * with Unicode escapes. Each is one token, its prefix included.
84
+ */
85
+ prefixedStrings?: boolean;
86
+ /** `$$...$$` and `$tag$...$tag$` strings, and `$1` parameters (Postgres). */
87
+ dollarQuotes?: boolean;
88
+ /** Block comments nest: a comment opened inside a block comment needs its own close (Postgres). */
89
+ nestedComments?: boolean;
90
+ /**
91
+ * How a number reads. `digit-names` (the default): a number may run into
92
+ * letters, so `00662_events` is one token, which the ClickHouse parser
93
+ * accepts as a name. `sql`: `42`, `3.5`, `.5`, `1e-3`, `0x1F`, `0o17`,
94
+ * `0b101` and `1_000_000`, and a number never runs into a name (Postgres).
95
+ */
96
+ numbers?: "digit-names" | "sql";
97
+ /** Identifiers may hold letters outside ASCII, as Postgres's do. */
98
+ unicodeIdentifiers?: boolean;
99
+ /**
100
+ * A multi-character operator cannot end in `+` or `-` unless it also holds
101
+ * one of `~ ! @ # % ^ & | \` ?` (Postgres, "Lexical Structure"), so
102
+ * `=-30` is `=` then `-30`.
103
+ */
104
+ operatorsEndWithoutSign?: boolean;
105
+ }
106
+
107
+ const IDENT_START_ASCII = /[A-Za-z_$]/;
108
+ const IDENT_PART_ASCII = /[A-Za-z0-9_$]/;
109
+ const IDENT_START_UNICODE = /[A-Za-z_\u0080-\uffff]/;
110
+ const IDENT_PART_UNICODE = /[A-Za-z0-9_$\u0080-\uffff]/;
111
+
112
+ /** Tokenize one string. `part` is the part index recorded on each token and on an error. */
113
+ export function tokenizeText(src: string, part: number, rules: LexicalRules): Token[] {
114
+ const tokens: Token[] = [];
115
+ let i = 0;
116
+ const push = (kind: TokenKind, start: number, end: number) =>
117
+ tokens.push({ kind, text: src.slice(start, end), part, start, end });
118
+ const identStart = rules.unicodeIdentifiers ? IDENT_START_UNICODE : IDENT_START_ASCII;
119
+ const identPart = rules.unicodeIdentifiers ? IDENT_PART_UNICODE : IDENT_PART_ASCII;
120
+
121
+ /** The index after the quote that closes the one at `at`. A doubled quote is an escaped quote. */
122
+ const quoted = (at: number, q: string, backslash: boolean): number => {
123
+ let j = at + 1;
124
+ for (;;) {
125
+ if (j >= src.length) throw new SqlSyntaxError(`unterminated ${q} quote`, part, at);
126
+ if (backslash && src[j] === "\\") {
127
+ j += 2;
128
+ continue;
129
+ }
130
+ if (src[j] === q) {
131
+ if (src[j + 1] === q) {
132
+ j += 2;
133
+ continue;
134
+ }
135
+ return j + 1;
136
+ }
137
+ j++;
138
+ }
139
+ };
140
+
141
+ while (i < src.length) {
142
+ const c = src[i]!;
143
+ const start = i;
144
+ if (/\s/.test(c)) {
145
+ while (i < src.length && /\s/.test(src[i]!)) i++;
146
+ push("ws", start, i);
147
+ } else if (c === "-" && src[i + 1] === "-") {
148
+ while (i < src.length && src[i] !== "\n") i++;
149
+ push("comment", start, i);
150
+ } else if (c === "/" && src[i + 1] === "*") {
151
+ if (rules.nestedComments) {
152
+ let depth = 1;
153
+ i += 2;
154
+ while (depth > 0) {
155
+ if (i >= src.length) throw new SqlSyntaxError("unterminated /* comment", part, start);
156
+ if (src[i] === "*" && src[i + 1] === "/") {
157
+ depth--;
158
+ i += 2;
159
+ } else if (src[i] === "/" && src[i + 1] === "*") {
160
+ depth++;
161
+ i += 2;
162
+ } else i++;
163
+ }
164
+ } else {
165
+ const close = src.indexOf("*/", i + 2);
166
+ if (close < 0) throw new SqlSyntaxError("unterminated /* comment", part, start);
167
+ i = close + 2;
168
+ }
169
+ push("comment", start, i);
170
+ } else if (rules.prefixedStrings && /[EeBbXxNn]/.test(c) && src[i + 1] === "'" && !(start > 0 && identPart.test(src[start - 1]!))) {
171
+ i = quoted(i + 1, "'", c === "E" || c === "e");
172
+ push("string", start, i);
173
+ } else if (rules.prefixedStrings && /[Uu]/.test(c) && src[i + 1] === "&" && (src[i + 2] === "'" || src[i + 2] === '"') && !(start > 0 && identPart.test(src[start - 1]!))) {
174
+ const q = src[i + 2]!;
175
+ i = quoted(i + 2, q, false);
176
+ push(q === "'" ? "string" : "qident", start, i);
177
+ } else if (c === "'" || rules.identQuotes.includes(c)) {
178
+ i = quoted(i, c, rules.backslashEscapes);
179
+ push(c === "'" ? "string" : "qident", start, i);
180
+ } else if (rules.dollarQuotes && c === "$" && /[0-9]/.test(src[i + 1] ?? "")) {
181
+ i++;
182
+ while (i < src.length && /[0-9]/.test(src[i]!)) i++;
183
+ push("param", start, i);
184
+ } else if (rules.dollarQuotes && c === "$" && /^\$([A-Za-z_\u0080-\uffff][A-Za-z0-9_\u0080-\uffff]*)?\$/.test(src.slice(i))) {
185
+ const delimiter = /^\$([A-Za-z_\u0080-\uffff][A-Za-z0-9_\u0080-\uffff]*)?\$/.exec(src.slice(i))![0];
186
+ const close = src.indexOf(delimiter, i + delimiter.length);
187
+ if (close < 0) throw new SqlSyntaxError(`unterminated ${delimiter} string`, part, start);
188
+ i = close + delimiter.length;
189
+ push("string", start, i);
190
+ } else if (rules.numbers === "sql" && (/[0-9]/.test(c) || (c === "." && /[0-9]/.test(src[i + 1] ?? "")))) {
191
+ if (/^0[xXoObB]/.test(src.slice(i, i + 2))) {
192
+ i += 2;
193
+ while (i < src.length && /[0-9A-Fa-f_]/.test(src[i]!)) i++;
194
+ } else {
195
+ while (i < src.length && /[0-9_]/.test(src[i]!)) i++;
196
+ if (src[i] === "." && src[i + 1] !== ".") {
197
+ i++;
198
+ while (i < src.length && /[0-9_]/.test(src[i]!)) i++;
199
+ }
200
+ if (/[eE]/.test(src[i] ?? "") && /^([0-9]|[+-][0-9])/.test(src.slice(i + 1, i + 3))) {
201
+ i += 2;
202
+ while (i < src.length && /[0-9]/.test(src[i]!)) i++;
203
+ }
204
+ }
205
+ push("number", start, i);
206
+ } else if (rules.numbers !== "sql" && /[0-9]/.test(c)) {
207
+ // `1.5`, `1e3`, `0x1F`; and a name that starts with a digit (`00662_events`), which the parser accepts as a name.
208
+ while (i < src.length && /[0-9a-zA-Z_.]/.test(src[i]!)) {
209
+ if (src[i] === "." && !/[0-9]/.test(src[i + 1] ?? "")) break;
210
+ i++;
211
+ }
212
+ push("number", start, i);
213
+ } else if (identStart.test(c)) {
214
+ while (i < src.length && identPart.test(src[i]!)) i++;
215
+ push("ident", start, i);
216
+ } else if (rules.punct.includes(c)) {
217
+ i++;
218
+ push("punct", start, i);
219
+ } else {
220
+ while (
221
+ i < src.length &&
222
+ rules.opChars.test(src[i]!) &&
223
+ !(src[i] === "-" && src[i + 1] === "-") &&
224
+ !(rules.nestedComments && src[i] === "/" && src[i + 1] === "*")
225
+ )
226
+ i++;
227
+ if (i === start) i++;
228
+ if (rules.operatorsEndWithoutSign && i - start > 1 && !/[~!@#%^&|`?]/.test(src.slice(start, i))) {
229
+ while (i - start > 1 && /[+-]/.test(src[i - 1]!)) i--;
230
+ }
231
+ push("op", start, i);
232
+ }
233
+ }
234
+ return tokens;
235
+ }
236
+
237
+ /** Tokenize a template's parts, with a `ref` token for each interpolation between them. */
238
+ export function tokenize(parts: readonly string[], rules: LexicalRules): Token[] {
239
+ const tokens: Token[] = [];
240
+ parts.forEach((src, part) => {
241
+ tokens.push(...tokenizeText(src, part, rules));
242
+ if (part < parts.length - 1) tokens.push({ kind: "ref", text: "", part, start: 0, end: 0 });
243
+ });
244
+ return tokens;
245
+ }
246
+
247
+ export const isTrivia = (t: Token): boolean => t.kind === "ws" || t.kind === "comment";
248
+
249
+ /** Every token's text back in order, each `ref` written by `ref`. */
250
+ export function untokenize(tokens: readonly Token[], ref: (index: number) => string): string {
251
+ return tokens.map((t) => (t.kind === "ref" ? ref(t.part) : t.text)).join("");
252
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * How much of the pinned ClickHouse catalog the dialect types beyond its name.
3
+ *
4
+ * Every engine, type family, codec, skip index type and setting at the pin is
5
+ * generated as a name, so name coverage is total by construction. What varies
6
+ * is how far the overlays go: an engine whose arguments have kinds can be
7
+ * checked, one whose arguments are `unknown` can only be named. This reports
8
+ * that, per section, from the generated tables.
9
+ */
10
+
11
+ import { CODECS, SKIP_INDEX_TYPES, TABLE_ENGINES, CLICKHOUSE_VERSION } from "./generated/clickhouse";
12
+
13
+ export interface CoverageSection {
14
+ section: string;
15
+ total: number;
16
+ typed: number;
17
+ untyped: string[];
18
+ }
19
+
20
+ export interface CoverageReport {
21
+ version: string;
22
+ sections: CoverageSection[];
23
+ }
24
+
25
+ export function analyze(): CoverageReport {
26
+ const engines = Object.entries(TABLE_ENGINES).filter(([, e]) => e.args !== undefined);
27
+ const mergeTree = engines.filter(([, e]) => e.mergeTree);
28
+ const codecs = Object.entries(CODECS).filter(([, c]) => c.role !== "internal");
29
+ const indexes = Object.entries(SKIP_INDEX_TYPES);
30
+
31
+ const section = (name: string, rows: Array<[string, boolean]>): CoverageSection => ({
32
+ section: name,
33
+ total: rows.length,
34
+ typed: rows.filter(([, ok]) => ok).length,
35
+ untyped: rows.filter(([, ok]) => !ok).map(([n]) => n),
36
+ });
37
+
38
+ return {
39
+ version: CLICKHOUSE_VERSION,
40
+ sections: [
41
+ section("MergeTree engine arguments", mergeTree.map(([n, e]) => [n, e.typed])),
42
+ section("all engine arguments", engines.map(([n, e]) => [n, e.typed])),
43
+ section("codec parameters", codecs.map(([n, c]) => [n, c.parameters !== "unknown"])),
44
+ section(
45
+ "skip index parameters",
46
+ indexes.map(([n, i]) => [n, (i.args ?? []).every((a) => a.kind !== "unknown")]),
47
+ ),
48
+ ],
49
+ };
50
+ }
51
+
52
+ export function printCoverage(report: CoverageReport, opts: { verbose?: boolean; minOverall?: number } = {}): void {
53
+ console.error(`ClickHouse ${report.version}`);
54
+ for (const s of report.sections) {
55
+ const pct = s.total === 0 ? 100 : Math.round((s.typed / s.total) * 100);
56
+ console.error(` ${s.section}: ${s.typed}/${s.total} typed (${pct}%)`);
57
+ if (opts.verbose && s.untyped.length > 0) console.error(` untyped: ${s.untyped.join(", ")}`);
58
+ }
59
+ if (opts.minOverall !== undefined) {
60
+ const mergeTree = report.sections[0]!;
61
+ const pct = mergeTree.total === 0 ? 100 : (mergeTree.typed / mergeTree.total) * 100;
62
+ if (pct < opts.minOverall) throw new Error(`MergeTree argument coverage ${pct.toFixed(0)}% is below ${opts.minOverall}%`);
63
+ }
64
+ }