@intentius/chant-lexicon-sql 0.124.46 → 0.124.49

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 (402) hide show
  1. package/dist/change-set.d.ts +1 -1
  2. package/dist/change-set.d.ts.map +1 -1
  3. package/dist/change-set.js +2 -1
  4. package/dist/clickhouse/apply/statements.d.ts +9 -0
  5. package/dist/clickhouse/apply/statements.d.ts.map +1 -1
  6. package/dist/clickhouse/apply/statements.js +24 -0
  7. package/dist/clickhouse/import/live-export.d.ts +7 -3
  8. package/dist/clickhouse/import/live-export.d.ts.map +1 -1
  9. package/dist/clickhouse/import/live-export.js +21 -5
  10. package/dist/clickhouse/live/named-collections.d.ts +27 -0
  11. package/dist/clickhouse/live/named-collections.d.ts.map +1 -0
  12. package/dist/clickhouse/live/named-collections.js +53 -0
  13. package/dist/clickhouse/live/undeclarable.d.ts +15 -3
  14. package/dist/clickhouse/live/undeclarable.d.ts.map +1 -1
  15. package/dist/clickhouse/live/undeclarable.js +18 -4
  16. package/dist/clickhouse/named-collections.d.ts +83 -0
  17. package/dist/clickhouse/named-collections.d.ts.map +1 -0
  18. package/dist/clickhouse/named-collections.js +203 -0
  19. package/dist/clickhouse/parser.d.ts.map +1 -1
  20. package/dist/clickhouse/parser.js +1 -1
  21. package/dist/clickhouse/plan/commands.d.ts +2 -1
  22. package/dist/clickhouse/plan/commands.d.ts.map +1 -1
  23. package/dist/clickhouse/plan/commands.js +17 -2
  24. package/dist/clickhouse/plan/diff.d.ts +15 -0
  25. package/dist/clickhouse/plan/diff.d.ts.map +1 -1
  26. package/dist/clickhouse/plan/diff.js +43 -1
  27. package/dist/clickhouse/plan/disruption.d.ts.map +1 -1
  28. package/dist/clickhouse/plan/disruption.js +5 -0
  29. package/dist/clickhouse/plan/rebuild-handoff.d.ts.map +1 -1
  30. package/dist/clickhouse/plan/rebuild-handoff.js +4 -0
  31. package/dist/clickhouse/plan/report.d.ts.map +1 -1
  32. package/dist/clickhouse/plan/report.js +6 -1
  33. package/dist/clickhouse/plan/rules.d.ts +5 -1
  34. package/dist/clickhouse/plan/rules.d.ts.map +1 -1
  35. package/dist/clickhouse/plan/rules.js +7 -3
  36. package/dist/clickhouse/plan/statements.d.ts +29 -0
  37. package/dist/clickhouse/plan/statements.d.ts.map +1 -0
  38. package/dist/clickhouse/plan/statements.js +334 -0
  39. package/dist/clickhouse/plan/stream.d.ts +40 -0
  40. package/dist/clickhouse/plan/stream.d.ts.map +1 -0
  41. package/dist/clickhouse/plan/stream.js +107 -0
  42. package/dist/clickhouse/rebuild/observe.d.ts +3 -1
  43. package/dist/clickhouse/rebuild/observe.d.ts.map +1 -1
  44. package/dist/clickhouse/rebuild/observe.js +14 -1
  45. package/dist/clickhouse/review-catalog.d.ts +213 -0
  46. package/dist/clickhouse/review-catalog.d.ts.map +1 -0
  47. package/dist/clickhouse/review-catalog.js +330 -0
  48. package/dist/codegen/classifier-page.d.ts.map +1 -1
  49. package/dist/codegen/classifier-page.js +44 -4
  50. package/dist/codegen/clickhouse-module.d.ts.map +1 -1
  51. package/dist/codegen/clickhouse-module.js +3 -0
  52. package/dist/codegen/coverage-page.d.ts.map +1 -1
  53. package/dist/codegen/coverage-page.js +5 -3
  54. package/dist/codegen/docs.js +1 -1
  55. package/dist/codegen/postgres-classifier-page.js +2 -2
  56. package/dist/codegen/registry.d.ts.map +1 -1
  57. package/dist/codegen/registry.js +10 -0
  58. package/dist/composites/catalog.d.ts.map +1 -1
  59. package/dist/composites/catalog.js +100 -0
  60. package/dist/composites/clickhouse.d.ts +2 -0
  61. package/dist/composites/clickhouse.d.ts.map +1 -1
  62. package/dist/composites/clickhouse.js +2 -0
  63. package/dist/composites/otel-tables.d.ts +100 -0
  64. package/dist/composites/otel-tables.d.ts.map +1 -0
  65. package/dist/composites/otel-tables.js +282 -0
  66. package/dist/composites/stream-ingest.d.ts +63 -0
  67. package/dist/composites/stream-ingest.d.ts.map +1 -0
  68. package/dist/composites/stream-ingest.js +39 -0
  69. package/dist/core/statement-class.d.ts +55 -0
  70. package/dist/core/statement-class.d.ts.map +1 -0
  71. package/dist/core/statement-class.js +43 -0
  72. package/dist/coverage/clickhouse.json +1 -1
  73. package/dist/coverage/postgres.json +12 -12
  74. package/dist/coverage.d.ts +16 -6
  75. package/dist/coverage.d.ts.map +1 -1
  76. package/dist/coverage.js +10 -5
  77. package/dist/drizzle-command.d.ts +17 -0
  78. package/dist/drizzle-command.d.ts.map +1 -0
  79. package/dist/drizzle-command.js +91 -0
  80. package/dist/drizzle.d.ts +70 -0
  81. package/dist/drizzle.d.ts.map +1 -0
  82. package/dist/drizzle.js +689 -0
  83. package/dist/files/clickhouse.d.ts.map +1 -1
  84. package/dist/files/clickhouse.js +8 -1
  85. package/dist/files/common.d.ts +13 -0
  86. package/dist/files/common.d.ts.map +1 -1
  87. package/dist/files/common.js +5 -0
  88. package/dist/files/postgres.d.ts.map +1 -1
  89. package/dist/files/postgres.js +35 -3
  90. package/dist/generated/clickhouse.d.ts +2 -0
  91. package/dist/generated/clickhouse.d.ts.map +1 -1
  92. package/dist/generated/clickhouse.js +2 -0
  93. package/dist/import-parser.d.ts +21 -1
  94. package/dist/import-parser.d.ts.map +1 -1
  95. package/dist/import-parser.js +79 -5
  96. package/dist/index.d.ts +1 -1
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +1 -1
  99. package/dist/integrity.json +7 -6
  100. package/dist/lint/post-synth/audit-entries.d.ts.map +1 -1
  101. package/dist/lint/post-synth/audit-entries.js +1 -0
  102. package/dist/lint/post-synth/index.d.ts.map +1 -1
  103. package/dist/lint/post-synth/index.js +2 -0
  104. package/dist/lint/post-synth/postgres-names.d.ts.map +1 -1
  105. package/dist/lint/post-synth/postgres-names.js +3 -0
  106. package/dist/lint/post-synth/sqlch128.d.ts +18 -0
  107. package/dist/lint/post-synth/sqlch128.d.ts.map +1 -0
  108. package/dist/lint/post-synth/sqlch128.js +222 -0
  109. package/dist/lint/rules/postgres-templates.js +2 -2
  110. package/dist/lsp/postgres-template.d.ts.map +1 -1
  111. package/dist/lsp/postgres-template.js +21 -0
  112. package/dist/manifest.json +1 -1
  113. package/dist/mcp/postgres.js +1 -1
  114. package/dist/meta.json +50 -0
  115. package/dist/migrate/from-postgres/detect.d.ts +4 -0
  116. package/dist/migrate/from-postgres/detect.d.ts.map +1 -0
  117. package/dist/migrate/from-postgres/detect.js +7 -0
  118. package/dist/migrate/from-postgres/emit.d.ts +26 -0
  119. package/dist/migrate/from-postgres/emit.d.ts.map +1 -0
  120. package/dist/migrate/from-postgres/emit.js +86 -0
  121. package/dist/migrate/from-postgres/index.d.ts +51 -0
  122. package/dist/migrate/from-postgres/index.d.ts.map +1 -0
  123. package/dist/migrate/from-postgres/index.js +115 -0
  124. package/dist/migrate/from-postgres/translate.d.ts +73 -0
  125. package/dist/migrate/from-postgres/translate.d.ts.map +1 -0
  126. package/dist/migrate/from-postgres/translate.js +261 -0
  127. package/dist/migrate/from-postgres/types.d.ts +51 -0
  128. package/dist/migrate/from-postgres/types.d.ts.map +1 -0
  129. package/dist/migrate/from-postgres/types.js +211 -0
  130. package/dist/migration-classify.d.ts +23 -0
  131. package/dist/migration-classify.d.ts.map +1 -0
  132. package/dist/migration-classify.js +44 -0
  133. package/dist/migration-replay.d.ts +73 -0
  134. package/dist/migration-replay.d.ts.map +1 -0
  135. package/dist/migration-replay.js +294 -0
  136. package/dist/okf/index.md +11 -0
  137. package/dist/okf/rules/SQLCH128.md +11 -0
  138. package/dist/okf/types/PostgresForeignDataWrapper.md +9 -0
  139. package/dist/okf/types/PostgresForeignServer.md +9 -0
  140. package/dist/okf/types/PostgresForeignTable.md +9 -0
  141. package/dist/okf/types/PostgresOperator.md +9 -0
  142. package/dist/okf/types/PostgresOperatorClass.md +9 -0
  143. package/dist/okf/types/PostgresOperatorFamily.md +9 -0
  144. package/dist/okf/types/PostgresPublication.md +9 -0
  145. package/dist/okf/types/PostgresStatistics.md +9 -0
  146. package/dist/okf/types/PostgresTextSearchConfiguration.md +9 -0
  147. package/dist/okf/types/PostgresTextSearchDictionary.md +9 -0
  148. package/dist/op/activities/postgres-migration.d.ts.map +1 -1
  149. package/dist/op/activities/postgres-migration.js +4 -0
  150. package/dist/op/activity-contracts.d.ts +20 -0
  151. package/dist/op/activity-contracts.d.ts.map +1 -1
  152. package/dist/op/activity-contracts.js +2 -0
  153. package/dist/plugin.d.ts.map +1 -1
  154. package/dist/plugin.js +49 -2
  155. package/dist/postgres/access/acl.js +1 -1
  156. package/dist/postgres/access/import.js +1 -1
  157. package/dist/postgres/apply/apply.js +13 -1
  158. package/dist/postgres/apply/statements.d.ts.map +1 -1
  159. package/dist/postgres/apply/statements.js +243 -4
  160. package/dist/postgres/constraint-names.d.ts +30 -0
  161. package/dist/postgres/constraint-names.d.ts.map +1 -0
  162. package/dist/postgres/constraint-names.js +72 -0
  163. package/dist/postgres/entities.d.ts +229 -2
  164. package/dist/postgres/entities.d.ts.map +1 -1
  165. package/dist/postgres/entities.js +326 -5
  166. package/dist/postgres/entity-types.d.ts +10 -0
  167. package/dist/postgres/entity-types.d.ts.map +1 -1
  168. package/dist/postgres/entity-types.js +10 -0
  169. package/dist/postgres/import/generator.d.ts.map +1 -1
  170. package/dist/postgres/import/generator.js +65 -2
  171. package/dist/postgres/import/live-export.d.ts.map +1 -1
  172. package/dist/postgres/import/live-export.js +2 -0
  173. package/dist/postgres/live/catalog-kinds.d.ts +20 -0
  174. package/dist/postgres/live/catalog-kinds.d.ts.map +1 -1
  175. package/dist/postgres/live/catalog-kinds.js +452 -0
  176. package/dist/postgres/live/catalog.d.ts +2 -0
  177. package/dist/postgres/live/catalog.d.ts.map +1 -1
  178. package/dist/postgres/live/catalog.js +3 -1
  179. package/dist/postgres/live/describe-resources.d.ts.map +1 -1
  180. package/dist/postgres/live/describe-resources.js +12 -2
  181. package/dist/postgres/migrate/backfill.d.ts +2 -0
  182. package/dist/postgres/migrate/backfill.d.ts.map +1 -1
  183. package/dist/postgres/migrate/backfill.js +7 -1
  184. package/dist/postgres/migrate/carry.d.ts +45 -1
  185. package/dist/postgres/migrate/carry.d.ts.map +1 -1
  186. package/dist/postgres/migrate/carry.js +72 -8
  187. package/dist/postgres/migrate/observe.d.ts +28 -4
  188. package/dist/postgres/migrate/observe.d.ts.map +1 -1
  189. package/dist/postgres/migrate/observe.js +45 -13
  190. package/dist/postgres/migrate/op.d.ts +26 -1
  191. package/dist/postgres/migrate/op.d.ts.map +1 -1
  192. package/dist/postgres/migrate/op.js +3 -1
  193. package/dist/postgres/migrate/replication.d.ts +42 -0
  194. package/dist/postgres/migrate/replication.d.ts.map +1 -1
  195. package/dist/postgres/migrate/replication.js +53 -0
  196. package/dist/postgres/migrate/steps.d.ts +35 -2
  197. package/dist/postgres/migrate/steps.d.ts.map +1 -1
  198. package/dist/postgres/migrate/steps.js +158 -12
  199. package/dist/postgres/parser.d.ts +144 -1
  200. package/dist/postgres/parser.d.ts.map +1 -1
  201. package/dist/postgres/parser.js +370 -4
  202. package/dist/postgres/plan/deep.d.ts.map +1 -1
  203. package/dist/postgres/plan/deep.js +43 -4
  204. package/dist/postgres/plan/diff.d.ts.map +1 -1
  205. package/dist/postgres/plan/diff.js +154 -1
  206. package/dist/postgres/plan/normalize.d.ts +28 -2
  207. package/dist/postgres/plan/normalize.d.ts.map +1 -1
  208. package/dist/postgres/plan/normalize.js +260 -1
  209. package/dist/postgres/plan/rules.d.ts +4 -0
  210. package/dist/postgres/plan/rules.d.ts.map +1 -1
  211. package/dist/postgres/plan/rules.js +6 -2
  212. package/dist/postgres/plan/schema.js +1 -1
  213. package/dist/postgres/plan/statements.d.ts +26 -0
  214. package/dist/postgres/plan/statements.d.ts.map +1 -0
  215. package/dist/postgres/plan/statements.js +364 -0
  216. package/dist/postgres/secret-options.d.ts +10 -0
  217. package/dist/postgres/secret-options.d.ts.map +1 -0
  218. package/dist/postgres/secret-options.js +9 -0
  219. package/dist/postgres/testing/roundtrip-schema.d.ts +4 -2
  220. package/dist/postgres/testing/roundtrip-schema.d.ts.map +1 -1
  221. package/dist/postgres/testing/roundtrip-schema.js +24 -1
  222. package/dist/postgres.d.ts +1 -1
  223. package/dist/postgres.d.ts.map +1 -1
  224. package/dist/postgres.js +1 -1
  225. package/dist/rules/audit-entries.ts +1 -0
  226. package/dist/rules/postgres-names.ts +2 -0
  227. package/dist/rules/postgres-templates.ts +2 -2
  228. package/dist/rules/sqlch128.ts +230 -0
  229. package/dist/serializer.d.ts +5 -0
  230. package/dist/serializer.d.ts.map +1 -1
  231. package/dist/serializer.js +13 -2
  232. package/dist/sql-types-command.d.ts +13 -0
  233. package/dist/sql-types-command.d.ts.map +1 -1
  234. package/dist/sql-types-command.js +31 -16
  235. package/dist/sql-types.d.ts +22 -0
  236. package/dist/sql-types.d.ts.map +1 -1
  237. package/dist/sql-types.js +10 -6
  238. package/dist/sqlserver/lexer.d.ts +37 -0
  239. package/dist/sqlserver/lexer.d.ts.map +1 -0
  240. package/dist/sqlserver/lexer.js +254 -0
  241. package/dist/sqlserver/parse.d.ts +185 -0
  242. package/dist/sqlserver/parse.d.ts.map +1 -0
  243. package/dist/sqlserver/parse.js +767 -0
  244. package/dist/sqlserver/translate.d.ts +34 -0
  245. package/dist/sqlserver/translate.d.ts.map +1 -0
  246. package/dist/sqlserver/translate.js +495 -0
  247. package/dist/sqlserver/types.d.ts +44 -0
  248. package/dist/sqlserver/types.d.ts.map +1 -0
  249. package/dist/sqlserver/types.js +133 -0
  250. package/dist/sqlserver/validate.d.ts +31 -0
  251. package/dist/sqlserver/validate.d.ts.map +1 -0
  252. package/dist/sqlserver/validate.js +67 -0
  253. package/dist/validate.d.ts.map +1 -1
  254. package/dist/validate.js +10 -0
  255. package/package.json +2 -2
  256. package/src/change-set.ts +2 -1
  257. package/src/clickhouse/apply/statements.ts +25 -0
  258. package/src/clickhouse/import/live-export.ts +20 -5
  259. package/src/clickhouse/live/named-collections.e2e.test.ts +88 -0
  260. package/src/clickhouse/live/named-collections.ts +61 -0
  261. package/src/clickhouse/live/undeclarable.e2e.test.ts +5 -3
  262. package/src/clickhouse/live/undeclarable.ts +20 -4
  263. package/src/clickhouse/named-collections.test.ts +187 -0
  264. package/src/clickhouse/named-collections.ts +224 -0
  265. package/src/clickhouse/parser.ts +2 -1
  266. package/src/clickhouse/plan/commands.ts +17 -2
  267. package/src/clickhouse/plan/diff.ts +57 -1
  268. package/src/clickhouse/plan/disruption.ts +5 -0
  269. package/src/clickhouse/plan/rebuild-handoff.ts +3 -0
  270. package/src/clickhouse/plan/report.ts +6 -1
  271. package/src/clickhouse/plan/rules.ts +14 -4
  272. package/src/clickhouse/plan/statements.test.ts +61 -0
  273. package/src/clickhouse/plan/statements.ts +306 -0
  274. package/src/clickhouse/plan/stream-s3queue.e2e.test.ts +148 -0
  275. package/src/clickhouse/plan/stream.test.ts +237 -0
  276. package/src/clickhouse/plan/stream.ts +111 -0
  277. package/src/clickhouse/rebuild/observe.ts +15 -1
  278. package/src/clickhouse/review-catalog.test.ts +181 -0
  279. package/src/clickhouse/review-catalog.ts +489 -0
  280. package/src/codegen/classifier-page.ts +44 -4
  281. package/src/codegen/clickhouse-module.ts +3 -0
  282. package/src/codegen/coverage-page.ts +5 -3
  283. package/src/codegen/docs.ts +1 -1
  284. package/src/codegen/postgres-classifier-page.ts +2 -2
  285. package/src/codegen/registry.ts +10 -0
  286. package/src/composites/catalog.test.ts +6 -1
  287. package/src/composites/catalog.ts +100 -0
  288. package/src/composites/clickhouse.ts +2 -0
  289. package/src/composites/composites.test.ts +1 -1
  290. package/src/composites/otel-tables.test.ts +118 -0
  291. package/src/composites/otel-tables.ts +339 -0
  292. package/src/composites/stream-ingest.test.ts +114 -0
  293. package/src/composites/stream-ingest.ts +82 -0
  294. package/src/core/statement-class.ts +88 -0
  295. package/src/core/undeclarable.test.ts +6 -5
  296. package/src/coverage/clickhouse.json +1 -1
  297. package/src/coverage/postgres.json +12 -12
  298. package/src/coverage.test.ts +27 -2
  299. package/src/coverage.ts +18 -7
  300. package/src/drizzle-command.ts +94 -0
  301. package/src/drizzle-kit.e2e.test.ts +89 -0
  302. package/src/drizzle-types.e2e.test.ts +67 -0
  303. package/src/drizzle.test.ts +358 -0
  304. package/src/drizzle.ts +742 -0
  305. package/src/files/clickhouse.ts +8 -1
  306. package/src/files/common.ts +14 -1
  307. package/src/files/postgres.ts +34 -3
  308. package/src/generated/clickhouse.ts +3 -0
  309. package/src/generated/lexicon-sql.json +50 -0
  310. package/src/import-parser.sqlserver.test.ts +92 -0
  311. package/src/import-parser.ts +79 -5
  312. package/src/index.ts +1 -1
  313. package/src/lint/post-synth/audit-entries.ts +1 -0
  314. package/src/lint/post-synth/index.ts +2 -0
  315. package/src/lint/post-synth/postgres-checks.test.ts +8 -1
  316. package/src/lint/post-synth/postgres-names.ts +2 -0
  317. package/src/lint/post-synth/sqlch128.test.ts +107 -0
  318. package/src/lint/post-synth/sqlch128.ts +230 -0
  319. package/src/lint/rules/postgres-templates.ts +2 -2
  320. package/src/lsp/postgres-template.ts +20 -0
  321. package/src/mcp/postgres.ts +1 -1
  322. package/src/migrate/from-postgres/cli.test.ts +165 -0
  323. package/src/migrate/from-postgres/detect.ts +7 -0
  324. package/src/migrate/from-postgres/emit.ts +96 -0
  325. package/src/migrate/from-postgres/example.test.ts +205 -0
  326. package/src/migrate/from-postgres/index.ts +122 -0
  327. package/src/migrate/from-postgres/translate.test.ts +242 -0
  328. package/src/migrate/from-postgres/translate.ts +359 -0
  329. package/src/migrate/from-postgres/types.test.ts +116 -0
  330. package/src/migrate/from-postgres/types.ts +236 -0
  331. package/src/migrate/from-postgres/validate.e2e.test.ts +44 -0
  332. package/src/migrate/from-postgres/workspace.e2e.test.ts +114 -0
  333. package/src/migration-classify.test.ts +150 -0
  334. package/src/migration-classify.ts +45 -0
  335. package/src/migration-replay.e2e.test.ts +155 -0
  336. package/src/migration-replay.test.ts +173 -0
  337. package/src/migration-replay.ts +289 -0
  338. package/src/op/__snapshots__/watch-pipeline.test.ts.snap +2 -2
  339. package/src/op/activities/postgres-migration.ts +4 -0
  340. package/src/op/activity-contracts.ts +2 -0
  341. package/src/op/watch-pipeline.test.ts +8 -1
  342. package/src/plugin.ts +51 -2
  343. package/src/postgres/access/acl.ts +1 -1
  344. package/src/postgres/access/import.ts +1 -1
  345. package/src/postgres/apply/apply.ts +14 -1
  346. package/src/postgres/apply/statements.ts +225 -4
  347. package/src/postgres/constraint-names.ts +71 -0
  348. package/src/postgres/database-kinds.test.ts +865 -0
  349. package/src/postgres/entities.ts +541 -5
  350. package/src/postgres/entity-types.ts +10 -0
  351. package/src/postgres/import/generator.ts +54 -2
  352. package/src/postgres/import/live-export.ts +1 -0
  353. package/src/postgres/live/catalog-kinds.ts +494 -0
  354. package/src/postgres/live/catalog.ts +6 -1
  355. package/src/postgres/live/database-kinds.e2e.test.ts +164 -0
  356. package/src/postgres/live/describe-resources.ts +13 -2
  357. package/src/postgres/live/undeclarable.e2e.test.ts +13 -6
  358. package/src/postgres/migrate/backfill.ts +13 -1
  359. package/src/postgres/migrate/carry.ts +103 -8
  360. package/src/postgres/migrate/followups.e2e.test.ts +218 -0
  361. package/src/postgres/migrate/followups.test.ts +199 -0
  362. package/src/postgres/migrate/kinds.e2e.test.ts +5 -5
  363. package/src/postgres/migrate/observe.ts +56 -15
  364. package/src/postgres/migrate/op.ts +28 -1
  365. package/src/postgres/migrate/partition.e2e.test.ts +129 -0
  366. package/src/postgres/migrate/partition.test.ts +206 -0
  367. package/src/postgres/migrate/replication.ts +66 -0
  368. package/src/postgres/migrate/steps.ts +157 -12
  369. package/src/postgres/migrate/subscriber.e2e.test.ts +141 -0
  370. package/src/postgres/migrate/subscriber.test.ts +59 -0
  371. package/src/postgres/parser.ts +455 -4
  372. package/src/postgres/plan/deep.ts +42 -4
  373. package/src/postgres/plan/diff.ts +137 -1
  374. package/src/postgres/plan/normalize.ts +277 -1
  375. package/src/postgres/plan/rules.ts +32 -4
  376. package/src/postgres/plan/schema.ts +1 -1
  377. package/src/postgres/plan/statements.test.ts +78 -0
  378. package/src/postgres/plan/statements.ts +299 -0
  379. package/src/postgres/secret-options.ts +10 -0
  380. package/src/postgres/testing/roundtrip-schema.ts +24 -1
  381. package/src/postgres.ts +33 -0
  382. package/src/serializer.ts +13 -2
  383. package/src/skills/chant-sql-postgres-migration.md +4 -3
  384. package/src/skills/chant-sql-postgres.md +11 -1
  385. package/src/skills/chant-sql.md +2 -1
  386. package/src/sql-files.test.ts +33 -0
  387. package/src/sql-types-command.ts +38 -16
  388. package/src/sql-types.ts +11 -6
  389. package/src/sqlserver/fixture.test.ts +186 -0
  390. package/src/sqlserver/import-cli.test.ts +61 -0
  391. package/src/sqlserver/lexer.ts +260 -0
  392. package/src/sqlserver/parse.ts +865 -0
  393. package/src/sqlserver/translate.test.ts +396 -0
  394. package/src/sqlserver/translate.ts +558 -0
  395. package/src/sqlserver/types.test.ts +102 -0
  396. package/src/sqlserver/types.ts +154 -0
  397. package/src/sqlserver/validate.e2e.test.ts +32 -0
  398. package/src/sqlserver/validate.test.ts +49 -0
  399. package/src/sqlserver/validate.ts +76 -0
  400. package/src/validate.ts +10 -0
  401. package/src/workspace-kinds.test.ts +11 -0
  402. package/workspace-kinds.json +100 -2
@@ -25,7 +25,7 @@
25
25
  * dialects' `CHANGE_CLASSES` and `PG_CHANGE_CLASSES` price them:
26
26
  *
27
27
  * - a `drop` class is a `delete` (`destroy`); a `create` class a `create`;
28
- * - a `rebuild` or `expand` class, or a step a migration Op makes, is a
28
+ * - a `rebuild`, `replace` or `expand` class, or a step a migration Op makes, is a
29
29
  * `replace` (`replace`): the object, or a column of it, is built again;
30
30
  * - anything else is an `update`, its disruption the worst class's
31
31
  * (`metadata` in-place; `validate`, `concurrently` and `rewrite` rolling).
@@ -1 +1 @@
1
- {"version":3,"file":"change-set.d.ts","sourceRoot":"","sources":["../src/change-set.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"change-set.d.ts","sourceRoot":"","sources":["../src/change-set.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@
25
25
  * dialects' `CHANGE_CLASSES` and `PG_CHANGE_CLASSES` price them:
26
26
  *
27
27
  * - a `drop` class is a `delete` (`destroy`); a `create` class a `create`;
28
- * - a `rebuild` or `expand` class, or a step a migration Op makes, is a
28
+ * - a `rebuild`, `replace` or `expand` class, or a step a migration Op makes, is a
29
29
  * `replace` (`replace`): the object, or a column of it, is built again;
30
30
  * - anything else is an `update`, its disruption the worst class's
31
31
  * (`metadata` in-place; `validate`, `concurrently` and `rewrite` rolling).
@@ -55,6 +55,7 @@ export const SQL_CLASS_DISRUPTION = {
55
55
  validate: "rolling",
56
56
  concurrently: "rolling",
57
57
  rewrite: "rolling",
58
+ replace: "replace",
58
59
  rebuild: "replace",
59
60
  expand: "replace",
60
61
  drop: "destroy",
@@ -190,4 +190,13 @@ export interface StatementPlan {
190
190
  export declare function planStatements(input: StatementPlanInput): StatementPlan;
191
191
  /** The entity types of access control (`../access.ts`): no comment, no marker, never dropped. */
192
192
  export declare const ACCESS_TYPES: ReadonlySet<string>;
193
+ /**
194
+ * The statements that replace a stream table (#4396), in the order they run:
195
+ * detach each materialized view that reads it (`readers`, as the server has
196
+ * them), drop the table, create it as declared, attach the views. The table
197
+ * holds no rows, so nothing is copied; a view that stays detached for the
198
+ * length of the replacement reads nothing, and the messages wait in the
199
+ * broker (or the files in the bucket) for the new table.
200
+ */
201
+ export declare function replaceStreamSteps(obj: DeclaredObject, live: CanonicalObject, readers: readonly CanonicalObject[], marker: OwnershipMarker | undefined): Step[];
193
202
  //# sourceMappingURL=statements.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"statements.d.ts","sourceRoot":"","sources":["../../../src/clickhouse/apply/statements.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGlE,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAoB,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE1F,OAAO,EAA2B,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvD,+BAA+B;AAC/B,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,KAAG,MAA2C,CAAC;AAEjF,6DAA6D;AAC7D,eAAO,MAAM,cAAc,GAAI,UAAU,MAAM,GAAG,SAAS,EAAE,MAAM,MAAM,KAAG,MACA,CAAC;AAE7E,sCAAsC;AACtC,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAAkE,CAAC;AAE7G,wCAAwC;AACxC,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAGhF;AAED,8EAA8E;AAC9E,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,oBAAoB,CAAC;IAC3B,gGAAgG;IAChG,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,eAAe,CAAC;IAC3B,+CAA+C;IAC/C,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,yGAAyG;AACzG,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,yFAAyF;IACzF,OAAO,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,IAAI,EAAE,gBAAgB,CAAC;IACvB,yBAAyB;IACzB,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,6GAA6G;AAC7G,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAGjE;AA4BD,+CAA+C;AAC/C,eAAO,MAAM,WAAW,GAAI,KAAK,cAAc,KAAG,MAAoE,CAAC;AAYvH;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,eAAe,GAAG,SAAS,EACnC,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAAO,GAC7E,MAAM,CAwBR;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,GAAG,SAAS,GAAG,MAAM,CAKjG;AAED,4FAA4F;AAC5F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAK9F;AAED,0FAA0F;AAC1F,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,KAAG,OAAgC,CAAC;AAEvE,8GAA8G;AAC9G,eAAO,MAAM,kBAAkB,GAAI,GAAG,MAAM,KAAG,OAAgC,CAAC;AAEhF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAa7F;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,SAAY,GAAG,cAAc,CAejH;AA2KD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,eAAe,CAAC;IAAC,MAAM,CAAC,EAAE,eAAe,CAAA;CAAO,GAAG,IAAI,EAAE,CAqBnJ;AAED,0GAA0G;AAC1G,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAMxF;AAID;;;;;;;;;;GAUG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC;IAAC,GAAG,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,GACtF;IAAE,OAAO,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjG;IAAE,OAAO,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExG,oEAAoE;AACpE,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,oBAAoB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,0EAA0E;IAC1E,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,iEAAiE;IACjE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC9C,iIAAiI;IACjI,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,MAAM,CAAC;IACxC,+DAA+D;IAC/D,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,yIAAyI;IACzI,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;IAChD;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,wDAAwD;IACxD,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,kHAAkH;IAClH,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAKD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CASvE;AAID,iGAAiG;AACjG,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,MAAM,CAO3C,CAAC"}
1
+ {"version":3,"file":"statements.d.ts","sourceRoot":"","sources":["../../../src/clickhouse/apply/statements.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,7 @@ import { CLASSIFIER_RULES } from "../plan/rules.js";
21
21
  import { stampedComment } from "../ownership.js";
22
22
  import { CLICKHOUSE_ENTITY_TYPES } from "../entities.js";
23
23
  import { renderFor } from "../topology.js";
24
+ import { readsTable } from "../plan/stream.js";
24
25
  import { accessClauseText, alterAccessField, alterQuotaOrProfileField, grantStatement, revokeStatement, SECRETLESS } from "../access.js";
25
26
  /** A backquoted identifier. */
26
27
  export const ident = (name) => `\`${name.replace(/`/g, "``")}\``;
@@ -488,6 +489,23 @@ function deferredDefaultRoles(declared, byObject, keyOf, environmentCreatesUsers
488
489
  }
489
490
  return out;
490
491
  }
492
+ /**
493
+ * The statements that replace a stream table (#4396), in the order they run:
494
+ * detach each materialized view that reads it (`readers`, as the server has
495
+ * them), drop the table, create it as declared, attach the views. The table
496
+ * holds no rows, so nothing is copied; a view that stays detached for the
497
+ * length of the replacement reads nothing, and the messages wait in the
498
+ * broker (or the files in the bucket) for the new table.
499
+ */
500
+ export function replaceStreamSteps(obj, live, readers, marker) {
501
+ const view = (r) => qualifiedIdent(r.database, r.name);
502
+ return [
503
+ ...readers.map((r) => stepFor(`DETACH TABLE ${view(r)}`, "SQLCH225")),
504
+ stepFor(`DROP TABLE ${qualifiedIdent(live.database, live.name)} SYNC`, "SQLCH225"),
505
+ stepFor(createStatement(obj, marker), "SQLCH225"),
506
+ ...readers.map((r) => stepFor(`ATTACH TABLE ${view(r)}`, "SQLCH225")),
507
+ ];
508
+ }
491
509
  function planDeclared(input) {
492
510
  const keyOf = input.keyOf ?? ((o) => o.key);
493
511
  const byObject = new Map();
@@ -517,6 +535,12 @@ function planDeclared(input) {
517
535
  const renamedFrom = mine.find((c) => c.rule === "SQLCH230" || c.rule === "SQLCH231")?.before;
518
536
  const currentKey = renamedFrom !== undefined && input.current.has(renamedFrom) ? renamedFrom : key;
519
537
  const live = input.current.get(currentKey);
538
+ // A stream table (#4396): the views that read it are detached, it is dropped and created, and they are attached again.
539
+ if (live && mine.some((c) => c.rule === "SQLCH225")) {
540
+ const dropped = new Set(input.changes.filter((c) => c.rule === "SQLCH250").map((c) => c.object));
541
+ const readers = [...input.current].filter(([k, o]) => !dropped.has(k) && readsTable(o, live)).map(([, o]) => o);
542
+ return { verdict: "alter", obj, changes: mine, steps: replaceStreamSteps(obj, live, readers, input.marker) };
543
+ }
520
544
  // A function has no comment, so nothing to restamp: it never carries the marker.
521
545
  const restamp = obj.type !== CLICKHOUSE_ENTITY_TYPES.function && !stepsSetComment(obj, mine) && (mine.some((c) => c.field === "comment") || !(input.carriesMarker?.(currentKey) ?? true));
522
546
  const steps = [
@@ -23,12 +23,16 @@
23
23
  * (#3745), so a use is found by that body (`./inlined.ts`) as well as by
24
24
  * the name. A function carries no comment, so `owned` does
25
25
  * not apply to it.
26
- * - An object of a kind no declaration holds (a window view, a quota, a
27
- * settings profile, a named collection, ...; `../live/undeclarable.ts`)
28
- * fails the import, which names every one of them (#3911).
26
+ * - An object of a kind no declaration holds (a window view, a workload,
27
+ * an HTTP handler, ...; `../live/undeclarable.ts`) fails the import, which
28
+ * names every one of them (#3911).
29
29
  * `skipUndeclarable` (`--skip-undeclarable`) imports the rest and lists
30
30
  * them as warnings. A selector or `owned` import asks for objects chant can
31
31
  * hold, so it does not look.
32
+ * - A SQL-defined named collection is the environment's (#4395): the import
33
+ * reads its name only, never its values, and lists it as a prerequisite
34
+ * (a warning, and `metadata.prerequisites` with the imported objects that
35
+ * name it) instead of refusing the server.
32
36
  */
33
37
  import type { ExportedTemplate, ResourceSelector } from "@intentius/chant/lexicon";
34
38
  import { type BindOptions } from "../live/bind.js";
@@ -1 +1 @@
1
- {"version":3,"file":"live-export.d.ts","sourceRoot":"","sources":["../../../src/clickhouse/import/live-export.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAOhE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKlD,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAWjF;AAKD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,EAAE,SAAS,EAAE,SAAS,UAAU,EAAE,EAAE,QAAQ,GAAE,SAAS,MAAM,EAAO,GAAG;IAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAgBhL;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8HAA8H;IAC9H,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA2CvF"}
1
+ {"version":3,"file":"live-export.d.ts","sourceRoot":"","sources":["../../../src/clickhouse/import/live-export.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAOhE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAMlD,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAWjF;AAKD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,EAAE,SAAS,EAAE,SAAS,UAAU,EAAE,EAAE,QAAQ,GAAE,SAAS,MAAM,EAAO,GAAG;IAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAgBhL;AAED,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8HAA8H;IAC9H,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAqDvF"}
@@ -23,12 +23,16 @@
23
23
  * (#3745), so a use is found by that body (`./inlined.ts`) as well as by
24
24
  * the name. A function carries no comment, so `owned` does
25
25
  * not apply to it.
26
- * - An object of a kind no declaration holds (a window view, a quota, a
27
- * settings profile, a named collection, ...; `../live/undeclarable.ts`)
28
- * fails the import, which names every one of them (#3911).
26
+ * - An object of a kind no declaration holds (a window view, a workload,
27
+ * an HTTP handler, ...; `../live/undeclarable.ts`) fails the import, which
28
+ * names every one of them (#3911).
29
29
  * `skipUndeclarable` (`--skip-undeclarable`) imports the rest and lists
30
30
  * them as warnings. A selector or `owned` import asks for objects chant can
31
31
  * hold, so it does not look.
32
+ * - A SQL-defined named collection is the environment's (#4395): the import
33
+ * reads its name only, never its values, and lists it as a prerequisite
34
+ * (a warning, and `metadata.prerequisites` with the imported objects that
35
+ * name it) instead of refusing the server.
32
36
  */
33
37
  import { bindClickHouse } from "../live/bind.js";
34
38
  import { readLiveSchema } from "../live/catalog.js";
@@ -38,8 +42,9 @@ import { CLICKHOUSE_ENTITY_TYPES } from "../entities.js";
38
42
  import { isTrivia, tokenizeText } from "../tokens.js";
39
43
  import { unquote } from "../parser.js";
40
44
  import { inlinedFunctions } from "./inlined.js";
41
- import { readUndeclarable } from "../live/undeclarable.js";
45
+ import { readReferenced, readUndeclarable } from "../live/undeclarable.js";
42
46
  import { refuseUndeclarable } from "../../core/undeclarable.js";
47
+ import { namedCollectionPrerequisites } from "../named-collections.js";
43
48
  /** The functions among `names` a statement calls: a name followed by `(`. */
44
49
  export function calledFunctions(ddl, names) {
45
50
  const tokens = tokenizeText(ddl, 0).filter((t) => !isTrivia(t));
@@ -127,5 +132,16 @@ export async function exportResources(options) {
127
132
  name: o.name,
128
133
  ddl: options.verbatim ? o.statement : stripServerDefaults(o.statement),
129
134
  }));
130
- return objectsToIR(objects, warnings);
135
+ // Named collections are the environment's (#4395): listed as prerequisites, never imported.
136
+ const referenced = await readReferenced(target);
137
+ for (const u of referenced.unread)
138
+ warnings.push(`the server's named collections were not read, so the import cannot list them as prerequisites: ${u}`);
139
+ const { prerequisites, warnings: prereq } = namedCollectionPrerequisites(referenced.objects, objects, {
140
+ of: options.environment,
141
+ found: "the server holds it",
142
+ unseen: "the reader did not see it on the server (it needs SHOW NAMED COLLECTIONS)",
143
+ });
144
+ warnings.push(...prereq);
145
+ const ir = objectsToIR(objects, warnings);
146
+ return (prerequisites.length > 0 ? { ...ir, metadata: { ...ir.metadata, prerequisites } } : ir);
131
147
  }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * The plan's existence check for the named collections a build references
3
+ * (#4395): by name, in `system.named_collections`, never the `collection`
4
+ * or `create_query` columns, which hold the values.
5
+ *
6
+ * Checked against the pinned server (26.8.15.10): the table's columns are
7
+ * `name`, `collection` (a `Map(String, String)`), `source` (`SQL` or
8
+ * `Config`) and `create_query`. A user with `SHOW NAMED COLLECTIONS` and
9
+ * without `SHOW NAMED COLLECTIONS SECRETS` sees every key, with each value as
10
+ * `'[HIDDEN]'`, so keys could be compared without the secrets grant. A user
11
+ * without `SHOW NAMED COLLECTIONS` reads the table without an error and sees
12
+ * no rows; a collection that user cannot see is reported missing, with the
13
+ * grant named.
14
+ */
15
+ import { type ClickHouseEndpoint } from "../http.js";
16
+ import type { NamedCollectionCheck } from "../plan/diff.js";
17
+ /** The named collections a build output references (its document's `namedCollections`). */
18
+ export declare function referencedCollections(buildJson: string): string[];
19
+ /** {@link referencedCollections} of a build output file. */
20
+ export declare const referencedCollectionsOf: (buildFile: string) => string[];
21
+ /** Which of `names` the server has, by name. Undefined when nothing is referenced. */
22
+ export declare function checkNamedCollections(endpoint: ClickHouseEndpoint, names: readonly string[]): Promise<NamedCollectionCheck | undefined>;
23
+ /** Whether the check fails the plan. */
24
+ export declare const namedCollectionsFail: (c: NamedCollectionCheck | undefined) => boolean;
25
+ /** The report's lines for a failed check; none when it passed. */
26
+ export declare function renderNamedCollections(c: NamedCollectionCheck | undefined): string[];
27
+ //# sourceMappingURL=named-collections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"named-collections.d.ts","sourceRoot":"","sources":["../../../src/clickhouse/live/named-collections.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAmB,KAAK,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAIzD,2FAA2F;AAC3F,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAGjE;AAED,4DAA4D;AAC5D,eAAO,MAAM,uBAAuB,GAAI,WAAW,MAAM,KAAG,MAAM,EAA6D,CAAC;AAEhI,sFAAsF;AACtF,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAa7I;AAED,wCAAwC;AACxC,eAAO,MAAM,oBAAoB,GAAI,GAAG,oBAAoB,GAAG,SAAS,KAAG,OAAkD,CAAC;AAE9H,kEAAkE;AAClE,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,oBAAoB,GAAG,SAAS,GAAG,MAAM,EAAE,CAUpF"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * The plan's existence check for the named collections a build references
3
+ * (#4395): by name, in `system.named_collections`, never the `collection`
4
+ * or `create_query` columns, which hold the values.
5
+ *
6
+ * Checked against the pinned server (26.8.15.10): the table's columns are
7
+ * `name`, `collection` (a `Map(String, String)`), `source` (`SQL` or
8
+ * `Config`) and `create_query`. A user with `SHOW NAMED COLLECTIONS` and
9
+ * without `SHOW NAMED COLLECTIONS SECRETS` sees every key, with each value as
10
+ * `'[HIDDEN]'`, so keys could be compared without the secrets grant. A user
11
+ * without `SHOW NAMED COLLECTIONS` reads the table without an error and sees
12
+ * no rows; a collection that user cannot see is reported missing, with the
13
+ * grant named.
14
+ */
15
+ import { readFileSync } from "node:fs";
16
+ import { clickhouseQuery } from "../http.js";
17
+ const quote = (s) => `'${s.replace(/\\/g, "\\\\").replace(/'/g, "\\'")}'`;
18
+ /** The named collections a build output references (its document's `namedCollections`). */
19
+ export function referencedCollections(buildJson) {
20
+ const doc = JSON.parse(buildJson);
21
+ return Array.isArray(doc.namedCollections) ? doc.namedCollections.filter((n) => typeof n === "string") : [];
22
+ }
23
+ /** {@link referencedCollections} of a build output file. */
24
+ export const referencedCollectionsOf = (buildFile) => referencedCollections(readFileSync(buildFile, "utf-8"));
25
+ /** Which of `names` the server has, by name. Undefined when nothing is referenced. */
26
+ export async function checkNamedCollections(endpoint, names) {
27
+ if (names.length === 0)
28
+ return undefined;
29
+ const referenced = [...new Set(names)].sort();
30
+ try {
31
+ const rows = await clickhouseQuery(endpoint, `/* chant plan: named collections */ SELECT name FROM system.named_collections WHERE name IN (${referenced.map(quote).join(", ")})`);
32
+ const have = new Set(rows.map((r) => r.name));
33
+ return { referenced, missing: referenced.filter((n) => !have.has(n)) };
34
+ }
35
+ catch (err) {
36
+ return { referenced, missing: referenced, unread: err instanceof Error ? err.message.split("\n")[0] : String(err) };
37
+ }
38
+ }
39
+ /** Whether the check fails the plan. */
40
+ export const namedCollectionsFail = (c) => c !== undefined && c.missing.length > 0;
41
+ /** The report's lines for a failed check; none when it passed. */
42
+ export function renderNamedCollections(c) {
43
+ if (!c || c.missing.length === 0)
44
+ return [];
45
+ if (c.unread !== undefined) {
46
+ return ["", `Refused: the build references named collection(s) ${c.missing.join(", ")}, and the server's could not be read to check them: ${c.unread}`];
47
+ }
48
+ return [
49
+ "",
50
+ `Refused: the build references ${c.missing.length === 1 ? "a named collection" : "named collections"} the server does not have: ${c.missing.join(", ")}. ` +
51
+ "Create each on the server (chant never declares one), or grant the plan's user SHOW NAMED COLLECTIONS if it is there and hidden from that user.",
52
+ ];
53
+ }
@@ -3,9 +3,11 @@
3
3
  * (#3911), found so import can refuse them by name instead of leaving them
4
4
  * out (`../../core/undeclarable.ts`).
5
5
  *
6
- * One `system.*` query per kind the coverage table marks refused
7
- * (`../../coverage/clickhouse.json`), keyed by the row's `kind`. A kind whose
8
- * row is flipped to declared is no longer asked about.
6
+ * One `system.*` query per kind the coverage table marks refused or
7
+ * referenced (`../../coverage/clickhouse.json`), keyed by the row's `kind`. A
8
+ * kind whose row is flipped to declared is no longer asked about. A
9
+ * referenced kind (a named collection, #4395) is read by name only, as a
10
+ * prerequisite the import lists, never as a refusal.
9
11
  *
10
12
  * What the server's configuration files define (`storage = 'users_xml'`, a
11
13
  * named collection whose source is the config, an executable function) is
@@ -28,5 +30,15 @@ export declare function readUndeclarable(target: ClickHouseTarget): Promise<{
28
30
  objects: UndeclarableObject[];
29
31
  unread: string[];
30
32
  }>;
33
+ /**
34
+ * Every object of a kind the coverage table marks referenced (#4395): the
35
+ * server's SQL-defined named collections, by name. Their values are never
36
+ * read. A reader without `SHOW NAMED COLLECTIONS` sees none, and the server
37
+ * says nothing about that, so an empty list is not proof there are none.
38
+ */
39
+ export declare function readReferenced(target: ClickHouseTarget): Promise<{
40
+ objects: UndeclarableObject[];
41
+ unread: string[];
42
+ }>;
31
43
  export {};
32
44
  //# sourceMappingURL=undeclarable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"undeclarable.d.ts","sourceRoot":"","sources":["../../../src/clickhouse/live/undeclarable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAG/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE,+HAA+H;AAC/H,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,KAAK,MAAM,CAAC;AAK3D,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAU7D,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAiB7H"}
1
+ {"version":3,"file":"undeclarable.d.ts","sourceRoot":"","sources":["../../../src/clickhouse/live/undeclarable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAG/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE,+HAA+H;AAC/H,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,KAAK,MAAM,CAAC;AAK3D,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAU7D,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAE7H;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAE3H"}
@@ -3,9 +3,11 @@
3
3
  * (#3911), found so import can refuse them by name instead of leaving them
4
4
  * out (`../../core/undeclarable.ts`).
5
5
  *
6
- * One `system.*` query per kind the coverage table marks refused
7
- * (`../../coverage/clickhouse.json`), keyed by the row's `kind`. A kind whose
8
- * row is flipped to declared is no longer asked about.
6
+ * One `system.*` query per kind the coverage table marks refused or
7
+ * referenced (`../../coverage/clickhouse.json`), keyed by the row's `kind`. A
8
+ * kind whose row is flipped to declared is no longer asked about. A
9
+ * referenced kind (a named collection, #4395) is read by name only, as a
10
+ * prerequisite the import lists, never as a refusal.
9
11
  *
10
12
  * What the server's configuration files define (`storage = 'users_xml'`, a
11
13
  * named collection whose source is the config, an executable function) is
@@ -37,11 +39,23 @@ export const CLICKHOUSE_PROBES = {
37
39
  * pass.
38
40
  */
39
41
  export async function readUndeclarable(target) {
42
+ return readKinds(target, "refused");
43
+ }
44
+ /**
45
+ * Every object of a kind the coverage table marks referenced (#4395): the
46
+ * server's SQL-defined named collections, by name. Their values are never
47
+ * read. A reader without `SHOW NAMED COLLECTIONS` sees none, and the server
48
+ * says nothing about that, so an empty list is not proof there are none.
49
+ */
50
+ export async function readReferenced(target) {
51
+ return readKinds(target, "referenced");
52
+ }
53
+ async function readKinds(target, status) {
40
54
  const scope = (column) => target.databases ? `${column} IN (${target.databases.map(quote).join(", ")})` : `${column} NOT IN (${[...SYSTEM_DATABASES].map(quote).join(", ")})`;
41
55
  const objects = [];
42
56
  const unread = [];
43
57
  for (const row of KIND_COVERAGE.clickhouse) {
44
- if (row.status !== "refused")
58
+ if (row.status !== status)
45
59
  continue;
46
60
  const probe = CLICKHOUSE_PROBES[row.kind];
47
61
  if (!probe)
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Named collections, referenced by name (#4395).
3
+ *
4
+ * A named collection holds an integration's connection settings and its
5
+ * credentials. Those are the environment's, so chant never declares one and
6
+ * never reads its values (the coverage table's `referenced` status,
7
+ * `../coverage/clickhouse.json`). A declaration may name one where the server
8
+ * takes a collection in place of inline arguments:
9
+ *
10
+ * - an integration engine's first argument: `ENGINE = S3(lake_creds, format = 'Parquet')`,
11
+ * `ENGINE = Kafka(kafka_creds)`, a database's `ENGINE = PostgreSQL(pg_creds)`;
12
+ * - a table function's first argument: `AS s3(lake_creds)`, `SELECT ... FROM mysql(mysql_creds, table = 't')`;
13
+ * - a dictionary source's `NAME`: `SOURCE(MYSQL(NAME mysql_creds))`.
14
+ *
15
+ * The build records each reference (`namedCollections` on the object and on
16
+ * the document, `../serializer.ts`), and `chant sql plan` checks that every
17
+ * one exists on the server by name (`./plan/commands.ts`).
18
+ */
19
+ /** The engines a named collection may be the first argument of. */
20
+ export declare const COLLECTION_ENGINES: ReadonlySet<string>;
21
+ /**
22
+ * The table functions a named collection may be the first argument of, lower
23
+ * case. A `...Cluster` function's first argument is the cluster, so those are
24
+ * left out.
25
+ */
26
+ export declare const COLLECTION_FUNCTIONS: ReadonlySet<string>;
27
+ /** The collection an engine names in its first argument, when it is one of the engines that take one. */
28
+ export declare function engineCollection(engine: {
29
+ name: string;
30
+ args?: readonly string[];
31
+ } | undefined): string | undefined;
32
+ /** The collections a SQL text's table function calls name: `s3(lake_creds, ...)`, `mysql(mysql_creds)`. */
33
+ export declare function functionCollections(text: string): string[];
34
+ /** The collection a dictionary source names: `MYSQL(NAME mysql_creds)`. */
35
+ export declare function sourceCollections(dataSource: string): string[];
36
+ /** What a declaration's props hold that can name a collection. */
37
+ export interface CollectionReferrer {
38
+ engine?: {
39
+ name: string;
40
+ args?: readonly string[];
41
+ };
42
+ asFunction?: string;
43
+ select?: string;
44
+ dataSource?: string;
45
+ }
46
+ /** Every named collection an object names, once each, in the order written. */
47
+ export declare function namedCollectionReferences(o: CollectionReferrer): string[];
48
+ /** `CREATE NAMED COLLECTION [IF NOT EXISTS] name ...`: the name, or undefined for another statement. */
49
+ export declare function createdCollectionName(sql: string): string | undefined;
50
+ /**
51
+ * The collections a whole statement names, read off its tokens: what
52
+ * {@link namedCollectionReferences} reads from a parsed declaration, for a
53
+ * statement import has only as text (`SHOW CREATE`).
54
+ */
55
+ export declare function statementCollections(ddl: string): string[];
56
+ /** One environment prerequisite an import found: a named collection (#4395). */
57
+ export interface Prerequisite {
58
+ kind: "named collection";
59
+ name: string;
60
+ /** The imported objects that name it, `database.name`. */
61
+ referencedBy: string[];
62
+ }
63
+ /**
64
+ * The named collections an import found as prerequisites (#4395), each with
65
+ * the imported objects that name it, and a warning for each. A collection an
66
+ * imported object names that was not found is listed too: a live reader
67
+ * without `SHOW NAMED COLLECTIONS` sees none.
68
+ */
69
+ export declare function namedCollectionPrerequisites(found: ReadonlyArray<{
70
+ name: string;
71
+ }>, objects: ReadonlyArray<{
72
+ database?: string;
73
+ name: string;
74
+ ddl: string;
75
+ }>, wording: {
76
+ of?: string;
77
+ found: string;
78
+ unseen: string;
79
+ }): {
80
+ prerequisites: Prerequisite[];
81
+ warnings: string[];
82
+ };
83
+ //# sourceMappingURL=named-collections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"named-collections.d.ts","sourceRoot":"","sources":["../../src/clickhouse/named-collections.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA0CH,mEAAmE;AACnE,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAgE,CAAC;AAEpH;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAIpD,CAAC;AAUF,yGAAyG;AACzG,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAGnH;AAUD,2GAA2G;AAC3G,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAc1D;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAU9D;AAED,kEAAkE;AAClE,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,+EAA+E;AAC/E,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAQzE;AAED,wGAAwG;AACxG,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGrE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CA4B1D;AAED,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EACtC,OAAO,EAAE,aAAa,CAAC;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,EACxE,OAAO,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,aAAa,EAAE,YAAY,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAoBvD"}