@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
@@ -1 +1 @@
1
- {"version":3,"file":"clickhouse.d.ts","sourceRoot":"","sources":["../../src/files/clickhouse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAO9D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAA8F,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvJ,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,UAAU,CAAC;AA2D/E,4CAA4C;AAC5C,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAG3D;AAED,sHAAsH;AACtH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,cAAc,GAAG,QAAQ,CAAC,CAwCtH"}
1
+ {"version":3,"file":"clickhouse.d.ts","sourceRoot":"","sources":["../../src/files/clickhouse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAO9D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAmH,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAI5K,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,UAAU,CAAC;AA2D/E,4CAA4C;AAC5C,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAG3D;AAED,sHAAsH;AACtH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,cAAc,GAAG,QAAQ,CAAC,CA8CtH"}
@@ -18,7 +18,8 @@ import { CLICKHOUSE_ENTITY_TYPES, database, dictionary, func, grant, policy, quo
18
18
  import { isAccessStatement, parseAccess } from "../clickhouse/access.js";
19
19
  import { CLICKHOUSE_TAG_OF } from "../clickhouse/import/generator.js";
20
20
  import { describeStatement } from "../clickhouse/import/ir.js";
21
- import { fileUnparsed, firstLine, lineAt, quoteBare, splitTokens, tokensText, undeclarableStatement } from "./common.js";
21
+ import { fileUnparsed, firstLine, lineAt, quoteBare, referencedStatement, splitTokens, tokensText, undeclarableStatement } from "./common.js";
22
+ import { createdCollectionName } from "../clickhouse/named-collections.js";
22
23
  import { templateSafe, templateStrings } from "./postgres.js";
23
24
  const TAGS = { database, table, view, dictionary, func, user, role, policy, quota, settingsProfile, grant };
24
25
  /** The tag an access statement's words name: `CREATE USER`, `CREATE SETTINGS PROFILE`, `GRANT`. */
@@ -96,6 +97,12 @@ export function readClickHouse(ddl, options, problems) {
96
97
  for (const stmt of splitTokens(tokenizeText(ddl, 0), isTrivia)) {
97
98
  let sql = tokensText(stmt);
98
99
  const line = lineAt(ddl, stmt[0].start);
100
+ const referenced = options.prerequisites ? referencedStatement("clickhouse", sql) : undefined;
101
+ const collection = referenced ? createdCollectionName(sql) : undefined;
102
+ if (referenced && collection !== undefined) {
103
+ options.prerequisites.push({ kind: referenced.kind, name: collection });
104
+ continue;
105
+ }
99
106
  const undeclarable = undeclarableStatement("clickhouse", sql);
100
107
  if (undeclarable) {
101
108
  (options.undeclarable ?? problems).push(undeclarable);
@@ -2,6 +2,7 @@
2
2
  import type { Token } from "../core/tokens.js";
3
3
  import type { UnknownClause } from "../core/cursor.js";
4
4
  import type { SqlDialect } from "../dialects.js";
5
+ import { type KindRow } from "../coverage.js";
5
6
  export interface ReadOptions {
6
7
  /** Names the DDL in errors: a file's path, a command. */
7
8
  origin: string;
@@ -16,7 +17,19 @@ export interface ReadOptions {
16
17
  * --parser-option skipUndeclarable` lists them as warnings.
17
18
  */
18
19
  undeclarable?: string[];
20
+ /**
21
+ * Where a statement of a referenced kind goes (#4395), as the name it
22
+ * creates: `chant import` lists a named collection's `CREATE` as an
23
+ * environment prerequisite. Without it, such a statement is a problem, as
24
+ * in a build's `.sql` file, which never declares one.
25
+ */
26
+ prerequisites?: Array<{
27
+ kind: string;
28
+ name: string;
29
+ }>;
19
30
  }
31
+ /** The coverage row of a `CREATE` of a referenced kind (#4395), or undefined for any other statement. */
32
+ export declare function referencedStatement(dialect: SqlDialect, sql: string): KindRow | undefined;
20
33
  /**
21
34
  * A `CREATE` of a kind the coverage table does not mark declared, as the line
22
35
  * that names it with why, or undefined for any other statement.
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/files/common.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAEzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI1F;AAED,2GAA2G;AAC3G,qBAAa,YAAa,SAAQ,KAAK;IAEnC,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE;gBAD3B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,MAAM,EAAE;CAOvC;AAED,sHAAsH;AACtH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,OAAO,GAAG,KAAK,EAAE,EAAE,CAiBhG;AAED,eAAO,MAAM,UAAU,GAAI,QAAQ,SAAS,KAAK,EAAE,KAAG,MAA4C,CAAC;AAEnG,yGAAyG;AACzG,MAAM,WAAW,QAAQ;IACvB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yGAAyG;IACzG,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrE;AAED,kIAAkI;AAClI,wBAAgB,YAAY,CAC1B,OAAO,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS,EAC7C,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX,QAAQ,CAAC,UAAU,CAAC,CAGtB;AAED,0DAA0D;AAC1D,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,EAAE,IAAI,MAAM,KAAG,MAA8C,CAAC;AAEjG,+CAA+C;AAC/C,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,KAAG,MAAgD,CAAC;AAEvF,6FAA6F;AAC7F,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAAoF,CAAC"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/files/common.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAEzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvD;AAED,yGAAyG;AACzG,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAGzF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI1F;AAED,2GAA2G;AAC3G,qBAAa,YAAa,SAAQ,KAAK;IAEnC,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE;gBAD3B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,MAAM,EAAE;CAOvC;AAED,sHAAsH;AACtH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,OAAO,GAAG,KAAK,EAAE,EAAE,CAiBhG;AAED,eAAO,MAAM,UAAU,GAAI,QAAQ,SAAS,KAAK,EAAE,KAAG,MAA4C,CAAC;AAEnG,yGAAyG;AACzG,MAAM,WAAW,QAAQ;IACvB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yGAAyG;IACzG,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrE;AAED,kIAAkI;AAClI,wBAAgB,YAAY,CAC1B,OAAO,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS,EAC7C,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX,QAAQ,CAAC,UAAU,CAAC,CAGtB;AAED,0DAA0D;AAC1D,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,EAAE,IAAI,MAAM,KAAG,MAA8C,CAAC;AAEjG,+CAA+C;AAC/C,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,KAAG,MAAgD,CAAC;AAEvF,6FAA6F;AAC7F,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAAoF,CAAC"}
@@ -1,5 +1,10 @@
1
1
  /** What reading a file of DDL shares across dialects. */
2
2
  import { statementKind } from "../coverage.js";
3
+ /** The coverage row of a `CREATE` of a referenced kind (#4395), or undefined for any other statement. */
4
+ export function referencedStatement(dialect, sql) {
5
+ const row = statementKind(dialect, sql);
6
+ return row?.status === "referenced" ? row : undefined;
7
+ }
3
8
  /**
4
9
  * A `CREATE` of a kind the coverage table does not mark declared, as the line
5
10
  * that names it with why, or undefined for any other statement.
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/files/postgres.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAM9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAA8F,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvJ,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,UAAU,CAAC;AAE/E,4CAA4C;AAC5C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAGzD;AAED,0GAA0G;AAC1G,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,oBAAoB,CAE9E;AAKD,8EAA8E;AAC9E,8EAA8E;AAC9E,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,WAAqF,CAAC;AAsB5H;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,gBAAgB,GAAG,QAAQ,CAAC,CAgJtH"}
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/files/postgres.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAM9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAA8F,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvJ,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,UAAU,CAAC;AAE/E,4CAA4C;AAC5C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAGzD;AAED,0GAA0G;AAC1G,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,oBAAoB,CAE9E;AAKD,8EAA8E;AAC9E,8EAA8E;AAC9E,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,WAAqF,CAAC;AAsB5H;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,gBAAgB,GAAG,QAAQ,CAAC,CAoJtH"}
@@ -118,7 +118,7 @@ export function readPostgres(ddl, options, problems) {
118
118
  };
119
119
  switch (node.statement) {
120
120
  case "comment":
121
- if (!["SCHEMA", "EXTENSION", "ROLE", "TRIGGER", "POLICY", "CONSTRAINT", "COLUMN", "CAST", "EVENT TRIGGER"].includes(node.objectType))
121
+ if (!["SCHEMA", "EXTENSION", "ROLE", "TRIGGER", "POLICY", "CONSTRAINT", "COLUMN", "CAST", "EVENT TRIGGER", "FOREIGN DATA WRAPPER", "SERVER", "PUBLICATION"].includes(node.objectType))
122
122
  mark(node.target);
123
123
  if (node.objectType === "COLUMN" && nameOf(tokens, node.target).length === 2 && options.schema) {
124
124
  const first = tokens.slice(node.target.span.from, node.target.span.to).find((t) => !isTrivia(t));
@@ -132,6 +132,10 @@ export function readPostgres(ddl, options, problems) {
132
132
  mark(node.table);
133
133
  followOns.push({ tokens, node, inserts });
134
134
  continue;
135
+ case "textSearchMapping":
136
+ mark(node.name);
137
+ followOns.push({ tokens, node, inserts });
138
+ continue;
135
139
  case "index":
136
140
  case "trigger":
137
141
  case "policy":
@@ -162,7 +166,7 @@ export function readPostgres(ddl, options, problems) {
162
166
  problems.push(`an index with no name (its declaration needs one): ${firstLine(tokensText(tokens))}`);
163
167
  continue;
164
168
  }
165
- const ownName = !["schema", "extension", "index", "trigger", "policy", "role", "grant", "cast", "eventTrigger"].includes(node.statement);
169
+ const ownName = !["schema", "extension", "index", "trigger", "policy", "role", "grant", "cast", "eventTrigger", "foreignDataWrapper", "foreignServer", "publication"].includes(node.statement);
166
170
  if (ownName && "name" in node)
167
171
  mark(node.name);
168
172
  const object = { node, statements: [rewrite(tokens, inserts, options.schema)], constraints: [], line, unparsed: fileUnparsed("unknown" in node ? node.unknown : undefined, tokens, tokensText(tokens), line) };
@@ -175,7 +179,7 @@ export function readPostgres(ddl, options, problems) {
175
179
  const k = followOnOwner(f.node, f.tokens, nameOf, qualify);
176
180
  const owner = k ? owners.get(k) : undefined;
177
181
  if (!owner) {
178
- const what = f.node.statement === "comment" ? `COMMENT ON ${f.node.objectType}` : "ALTER TABLE ... ROW LEVEL SECURITY";
182
+ const what = f.node.statement === "comment" ? `COMMENT ON ${f.node.objectType}` : f.node.statement === "textSearchMapping" ? "ALTER TEXT SEARCH CONFIGURATION ... ADD MAPPING" : "ALTER TABLE ... ROW LEVEL SECURITY";
179
183
  problems.push(`${what} for an object the file does not create: ${firstLine(tokensText(f.tokens))}`);
180
184
  continue;
181
185
  }
@@ -260,11 +264,23 @@ function ownerKey(node, tokens, nameOf, qualify) {
260
264
  return `${node.statement} ${nameOf(tokens, node.name).at(-1) ?? ""} ON ${qkey(qualify(nameOf(tokens, node.table)))}`;
261
265
  case "eventTrigger":
262
266
  return `eventTrigger ${nameOf(tokens, node.name).at(-1) ?? ""}`;
267
+ case "foreignDataWrapper":
268
+ case "foreignServer":
269
+ case "publication":
270
+ return `${node.statement} ${nameOf(tokens, node.name).at(-1) ?? ""}`;
271
+ // A class or family is named by its index method too, and a configuration and a dictionary are different namespaces.
272
+ case "operatorClass":
273
+ case "operatorFamily":
274
+ return `${node.statement} ${qkey(qualify(nameOf(tokens, node.name)))} USING ${node.method}`;
275
+ case "textSearchConfiguration":
276
+ case "textSearchDictionary":
277
+ return `${node.statement} ${qkey(qualify(nameOf(tokens, node.name)))}`;
263
278
  case "cast":
264
279
  return `cast ${castKey(tokens, node.source, node.target)}`;
265
280
  case "grant":
266
281
  case "comment":
267
282
  case "rowSecurity":
283
+ case "textSearchMapping":
268
284
  return undefined;
269
285
  default:
270
286
  return `rel ${qkey(qualify(nameOf(tokens, node.name)))}`;
@@ -274,6 +290,8 @@ function ownerKey(node, tokens, nameOf, qualify) {
274
290
  function followOnOwner(node, tokens, nameOf, qualify) {
275
291
  if (node.statement === "rowSecurity")
276
292
  return `rel ${qkey(qualify(nameOf(tokens, node.table)))}`;
293
+ if (node.statement === "textSearchMapping")
294
+ return `textSearchConfiguration ${qkey(qualify(nameOf(tokens, node.name)))}`;
277
295
  if (node.statement !== "comment")
278
296
  return undefined;
279
297
  const target = nameOf(tokens, node.target);
@@ -293,6 +311,20 @@ function followOnOwner(node, tokens, nameOf, qualify) {
293
311
  return node.on ? `${node.objectType.toLowerCase()} ${target.at(-1) ?? ""} ON ${qkey(qualify(nameOf(tokens, node.on)))}` : undefined;
294
312
  case "EVENT TRIGGER":
295
313
  return `eventTrigger ${target.at(-1) ?? ""}`;
314
+ case "FOREIGN DATA WRAPPER":
315
+ return `foreignDataWrapper ${target.at(-1) ?? ""}`;
316
+ case "SERVER":
317
+ return `foreignServer ${target.at(-1) ?? ""}`;
318
+ case "PUBLICATION":
319
+ return `publication ${target.at(-1) ?? ""}`;
320
+ case "OPERATOR CLASS":
321
+ return `operatorClass ${qkey(qualify(target))} USING ${node.using ?? ""}`;
322
+ case "OPERATOR FAMILY":
323
+ return `operatorFamily ${qkey(qualify(target))} USING ${node.using ?? ""}`;
324
+ case "TEXT SEARCH CONFIGURATION":
325
+ return `textSearchConfiguration ${qkey(qualify(target))}`;
326
+ case "TEXT SEARCH DICTIONARY":
327
+ return `textSearchDictionary ${qkey(qualify(target))}`;
296
328
  case "CAST":
297
329
  return node.cast ? `cast ${castKey(tokens, node.cast.source, node.cast.target)}` : undefined;
298
330
  case "CONSTRAINT":
@@ -11,6 +11,8 @@ export declare const FUNCTIONS: Readonly<Record<string, FunctionSpec>>;
11
11
  export declare const AGGREGATE_COMBINATORS: readonly string[];
12
12
  /** The table functions (`system.table_functions`): `numbers`, `remote`, `s3`. */
13
13
  export declare const TABLE_FUNCTIONS: readonly string[];
14
+ /** The input and output formats (`system.formats`): `Parquet`, `JSONEachRow`. */
15
+ export declare const FORMATS: readonly string[];
14
16
  export declare const SKIP_INDEX_TYPES: Readonly<Record<SkipIndexType, SkipIndexSpec>>;
15
17
  export declare const MERGE_TREE_SETTINGS: Readonly<Record<keyof MergeTreeSettings, SettingSpec>>;
16
18
  export declare const QUERY_SETTINGS: Readonly<Record<keyof QuerySettings, SettingSpec>>;
@@ -1 +1 @@
1
- {"version":3,"file":"clickhouse.d.ts","sourceRoot":"","sources":["../../src/generated/clickhouse.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC5J,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1J,cAAc,oBAAoB,CAAC;AAEnC,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,CAqF5E,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAkBrF,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,CA8I1E,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAkBzD,CAAC;AAEF,2FAA2F;AAC3F,eAAO,MAAM,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAk2D5D,CAAC;AAEF,2HAA2H;AAC3H,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAA6I,CAAC;AAEjM,iFAAiF;AACjF,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAAizC,CAAC;AAE/1C,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAU3E,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,iBAAiB,EAAE,WAAW,CAAC,CA4WtF,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,aAAa,EAAE,WAAW,CAAC,CAyxD7E,CAAC"}
1
+ {"version":3,"file":"clickhouse.d.ts","sourceRoot":"","sources":["../../src/generated/clickhouse.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC5J,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1J,cAAc,oBAAoB,CAAC;AAEnC,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,CAqF5E,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAkBrF,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,CA8I1E,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAkBzD,CAAC;AAEF,2FAA2F;AAC3F,eAAO,MAAM,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAk2D5D,CAAC;AAEF,2HAA2H;AAC3H,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAA6I,CAAC;AAEjM,iFAAiF;AACjF,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAAizC,CAAC;AAE/1C,iFAAiF;AACjF,eAAO,MAAM,OAAO,EAAE,SAAS,MAAM,EAAmhE,CAAC;AAEzjE,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAU3E,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,iBAAiB,EAAE,WAAW,CAAC,CA4WtF,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,aAAa,EAAE,WAAW,CAAC,CAyxD7E,CAAC"}
@@ -2165,6 +2165,8 @@ export const FUNCTIONS = {
2165
2165
  export const AGGREGATE_COMBINATORS = ["ArgMax", "ArgMin", "Array", "Distinct", "ForEach", "If", "Map", "Merge", "Null", "OrDefault", "OrNull", "Resample", "SimpleState", "State", "Tuple"];
2166
2166
  /** The table functions (`system.table_functions`): `numbers`, `remote`, `s3`. */
2167
2167
  export const TABLE_FUNCTIONS = ["SQLStandardValues", "arrowFlight", "arrowflight", "azureBlobStorage", "azureBlobStorageCluster", "bigquery", "cluster", "clusterAllReplicas", "cosn", "deltaLake", "deltaLakeAzure", "deltaLakeAzureCluster", "deltaLakeCluster", "deltaLakeLocal", "deltaLakeS3", "deltaLakeS3Cluster", "dictionary", "eval", "executable", "file", "fileCluster", "filesystem", "format", "fuzzJSON", "fuzzQuery", "gcs", "generateRandom", "generateSeries", "generate_series", "hdfs", "hdfsCluster", "hive", "hudi", "hudiCluster", "iceberg", "icebergAzure", "icebergAzureCluster", "icebergCluster", "icebergHDFS", "icebergHDFSCluster", "icebergLocal", "icebergLocalCluster", "icebergS3", "icebergS3Cluster", "input", "jdbc", "loop", "merge", "mergeTreeAnalyzeIndexes", "mergeTreeAnalyzeIndexesUUID", "mergeTreeCodecBlockCounts", "mergeTreeIndex", "mergeTreeProjection", "mergeTreeTextIndex", "mongodb", "mysql", "null", "numbers", "numbers_mt", "odbc", "oss", "paimon", "paimonAzure", "paimonAzureCluster", "paimonCluster", "paimonHDFS", "paimonHDFSCluster", "paimonLocal", "paimonS3", "paimonS3Cluster", "postgresql", "primes", "prometheusQuery", "prometheusQueryRange", "redis", "remote", "remoteSecure", "s3", "s3Cluster", "sqlite", "timeSeriesData", "timeSeriesMetrics", "timeSeriesSamples", "timeSeriesSelector", "timeSeriesTags", "url", "urlCluster", "values", "view", "viewExplain", "viewIfPermitted", "ytsaurus", "zeros", "zeros_mt"];
2168
+ /** The input and output formats (`system.formats`): `Parquet`, `JSONEachRow`. */
2169
+ export const FORMATS = ["Arrow", "ArrowStream", "Avro", "AvroConfluent", "BSONEachRow", "Buffers", "CSV", "CSVWithNames", "CSVWithNamesAndTypes", "CapnProto", "CustomSeparated", "CustomSeparatedIgnoreSpaces", "CustomSeparatedIgnoreSpacesWithNames", "CustomSeparatedIgnoreSpacesWithNamesAndTypes", "CustomSeparatedWithNames", "CustomSeparatedWithNamesAndTypes", "DWARF", "Form", "GeoJSON", "Hash", "HiveText", "JSON", "JSONAsObject", "JSONAsString", "JSONColumns", "JSONColumnsWithMetadata", "JSONCompact", "JSONCompactColumns", "JSONCompactEachRow", "JSONCompactEachRowWithNames", "JSONCompactEachRowWithNamesAndTypes", "JSONCompactEachRowWithProgress", "JSONCompactStrings", "JSONCompactStringsEachRow", "JSONCompactStringsEachRowWithNames", "JSONCompactStringsEachRowWithNamesAndTypes", "JSONCompactStringsEachRowWithProgress", "JSONEachRow", "JSONEachRowWithProgress", "JSONL", "JSONLines", "JSONObjectEachRow", "JSONStrings", "JSONStringsEachRow", "JSONStringsEachRowWithProgress", "LineAsString", "LineAsStringWithNames", "LineAsStringWithNamesAndTypes", "MD", "Markdown", "MsgPack", "MySQLDump", "MySQLWire", "NDJSON", "Native", "Npy", "Null", "ODBCDriver2", "ORC", "One", "PNG", "Parquet", "ParquetMetadata", "PostgreSQLWire", "Pretty", "PrettyCompact", "PrettyCompactMonoBlock", "PrettyCompactNoEscapes", "PrettyCompactNoEscapesMonoBlock", "PrettyJSONEachRow", "PrettyJSONLines", "PrettyMonoBlock", "PrettyNDJSON", "PrettyNoEscapes", "PrettyNoEscapesMonoBlock", "PrettySpace", "PrettySpaceMonoBlock", "PrettySpaceNoEscapes", "PrettySpaceNoEscapesMonoBlock", "Prometheus", "Protobuf", "ProtobufList", "ProtobufSingle", "Puffin", "PuffinMetadata", "Raw", "RawBLOB", "RawWithNames", "RawWithNamesAndTypes", "Regexp", "RowBinary", "RowBinaryWithDefaults", "RowBinaryWithNames", "RowBinaryWithNamesAndTypes", "RowBinaryWithNamesAndTypesAndDefaults", "SQLInsert", "TSKV", "TSV", "TSVRaw", "TSVRawWithNames", "TSVRawWithNamesAndTypes", "TSVWithNames", "TSVWithNamesAndTypes", "TabSeparated", "TabSeparatedRaw", "TabSeparatedRawWithNames", "TabSeparatedRawWithNamesAndTypes", "TabSeparatedWithNames", "TabSeparatedWithNamesAndTypes", "Template", "TemplateIgnoreSpaces", "Values", "Vertical", "XML"];
2168
2170
  export const SKIP_INDEX_TYPES = {
2169
2171
  bloom_filter: { "syntax": "INDEX name expr TYPE bloom_filter([false_positive_rate]) GRANULARITY g", "args": [{ "name": "false_positive_rate", "position": 0, "optional": true, "repeated": false, "named": false, "kind": "number", "range": [0, 1], "note": "Exclusive of 0 and 1; 0.025 when omitted." }], "summary": "A Bloom filter over the values of the index expression, for speeding up equality and IN conditions on columns, including Array and Map elements." },
2170
2172
  hypothesis: { "syntax": "INDEX name expr TYPE hypothesis GRANULARITY g", "args": [], "summary": "Deprecated and no longer supported. It is retained only so that tables which still reference it can be attached." },
@@ -1,6 +1,16 @@
1
1
  /**
2
2
  * `chant import schema.sql`: a file of DDL into the import IR, in either
3
- * dialect. `--parser-option dialect=postgres` (or `clickhouse`) names it;
3
+ * dialect, or a SQL Server (T-SQL) schema into ClickHouse declarations.
4
+ *
5
+ * `--parser-option from=sqlserver` (#4398) reads the file as T-SQL and
6
+ * translates it to ClickHouse (`./sqlserver/translate.ts`). SQL Server is an
7
+ * import source, not a dialect: nothing is declared in it, and a build never
8
+ * holds one. A file with T-SQL's own markers (`[bracketed]` names, a `GO`
9
+ * line, `CLUSTERED` or `COLUMNSTORE`, `nvarchar`, `IDENTITY(1,1)`) is read
10
+ * the same way without the option, so it is not taken for Postgres.
11
+ * `from=sqlserver` with `dialect=...` is refused: the target is ClickHouse.
12
+ *
13
+ * `--parser-option dialect=postgres` (or `clickhouse`) names the dialect;
4
14
  * without one it is read off the statements: an `ENGINE =` clause, a
5
15
  * `CREATE DATABASE`, a `CREATE DICTIONARY` or a lambda `CREATE FUNCTION f AS
6
16
  * (x) -> ...` is ClickHouse, a statement
@@ -16,16 +26,26 @@
16
26
  */
17
27
  import type { ParserOptions, TemplateIR, TemplateParser } from "@intentius/chant/import/parser";
18
28
  import { type SqlDialect } from "./dialects.js";
29
+ /** True when the DDL has a marker only T-SQL has and no ClickHouse-only clause. */
30
+ export declare function looksLikeTSql(content: string): boolean;
19
31
  /** The dialect a file of DDL is written in, read off its statements. */
20
32
  export declare function guessDialect(content: string): SqlDialect;
21
33
  /** The `dialect` parser option, checked. */
22
34
  export declare function dialectOption(options: ParserOptions | undefined): SqlDialect | undefined;
35
+ /** Sources other than a dialect that `--parser-option from=` names. */
36
+ export declare const IMPORT_SOURCES: readonly ["sqlserver"];
37
+ export type ImportSource = (typeof IMPORT_SOURCES)[number];
38
+ /** The `from` parser option, checked. */
39
+ export declare function sourceOption(options: ParserOptions | undefined): ImportSource | undefined;
23
40
  export declare class SqlFileParser implements TemplateParser {
24
41
  private readonly dialect?;
25
42
  private readonly options;
26
43
  constructor(dialect?: SqlDialect | undefined, options?: {
27
44
  skipUndeclarable?: boolean;
45
+ from?: ImportSource;
28
46
  });
29
47
  parse(content: string): TemplateIR;
48
+ /** A T-SQL schema as ClickHouse objects, with a finding for each judgment call (#4398). */
49
+ private parseSqlServer;
30
50
  }
31
51
  //# sourceMappingURL=import-parser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"import-parser.d.ts","sourceRoot":"","sources":["../src/import-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChG,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAqB3D,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAKxD;AAED,4CAA4C;AAC5C,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAKxF;AAED,qBAAa,aAAc,YAAW,cAAc;IAEhD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,OAAO,CAAC,EAAE,UAAU,YAAA,EACpB,OAAO,GAAE;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAO;IAG/D,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;CAUnC"}
1
+ {"version":3,"file":"import-parser.d.ts","sourceRoot":"","sources":["../src/import-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChG,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AA0C3D,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAItD;AAED,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAKxD;AAED,4CAA4C;AAC5C,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAKxF;AAED,uEAAuE;AACvE,eAAO,MAAM,cAAc,wBAAyB,CAAC;AACrD,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,yCAAyC;AACzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAMzF;AAED,qBAAa,aAAc,YAAW,cAAc;IAEhD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,OAAO,CAAC,EAAE,UAAU,YAAA,EACpB,OAAO,GAAE;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,YAAY,CAAA;KAAO;IAGpF,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;IAoBlC,2FAA2F;IAC3F,OAAO,CAAC,cAAc;CAYvB"}
@@ -1,6 +1,16 @@
1
1
  /**
2
2
  * `chant import schema.sql`: a file of DDL into the import IR, in either
3
- * dialect. `--parser-option dialect=postgres` (or `clickhouse`) names it;
3
+ * dialect, or a SQL Server (T-SQL) schema into ClickHouse declarations.
4
+ *
5
+ * `--parser-option from=sqlserver` (#4398) reads the file as T-SQL and
6
+ * translates it to ClickHouse (`./sqlserver/translate.ts`). SQL Server is an
7
+ * import source, not a dialect: nothing is declared in it, and a build never
8
+ * holds one. A file with T-SQL's own markers (`[bracketed]` names, a `GO`
9
+ * line, `CLUSTERED` or `COLUMNSTORE`, `nvarchar`, `IDENTITY(1,1)`) is read
10
+ * the same way without the option, so it is not taken for Postgres.
11
+ * `from=sqlserver` with `dialect=...` is refused: the target is ClickHouse.
12
+ *
13
+ * `--parser-option dialect=postgres` (or `clickhouse`) names the dialect;
4
14
  * without one it is read off the statements: an `ENGINE =` clause, a
5
15
  * `CREATE DATABASE`, a `CREATE DICTIONARY` or a lambda `CREATE FUNCTION f AS
6
16
  * (x) -> ...` is ClickHouse, a statement
@@ -20,6 +30,9 @@ import { readPostgres } from "./files/postgres.js";
20
30
  import { SqlFileError } from "./files/common.js";
21
31
  import { objectsToIR as chObjectsToIR } from "./clickhouse/import/ir.js";
22
32
  import { objectsToIR as pgObjectsToIR } from "./postgres/import/ir.js";
33
+ import { namedCollectionPrerequisites } from "./clickhouse/named-collections.js";
34
+ import { translateSqlServer } from "./sqlserver/translate.js";
35
+ import { TsqlLexError } from "./sqlserver/lexer.js";
23
36
  const CLICKHOUSE_ONLY = [
24
37
  /\bENGINE\s*=/i,
25
38
  /^\s*CREATE\s+(?:DATABASE|(?:OR\s+REPLACE\s+)?DICTIONARY)\b/im,
@@ -33,6 +46,30 @@ const POSTGRES_ONLY = [
33
46
  /^\s*(?:COMMENT\s+ON|ALTER\s+TABLE|ALTER\s+DEFAULT\s+PRIVILEGES|GRANT|REVOKE|BEGIN)\b/im,
34
47
  /^\s*CREATE\s+TABLE\b/im,
35
48
  ];
49
+ /**
50
+ * Markers only T-SQL has. Each is rare enough in Postgres and ClickHouse DDL
51
+ * that one is enough: a bracketed name after CREATE TABLE or ON, a `GO`
52
+ * batch line, `CLUSTERED`/`COLUMNSTORE`, T-SQL type names, `IDENTITY(n, n)`,
53
+ * the `SET ANSI_NULLS` preamble of an SSMS script.
54
+ */
55
+ const TSQL_MARKERS = [
56
+ /^\s*GO\s*$/im,
57
+ /\bCREATE\s+(?:UNIQUE\s+)?(?:NONCLUSTERED\s+|CLUSTERED\s+)(?:COLUMNSTORE\s+)?INDEX\b/i,
58
+ /\bCREATE\s+(?:NONCLUSTERED\s+|CLUSTERED\s+)?COLUMNSTORE\s+INDEX\b/i,
59
+ /\bPRIMARY\s+KEY\s+(?:NON)?CLUSTERED\b/i,
60
+ /\b(?:CREATE\s+TABLE|ALTER\s+TABLE|\bON|REFERENCES)\s+\[[^\]\n]+\]/i,
61
+ /\b(?:NVARCHAR|NCHAR|UNIQUEIDENTIFIER|DATETIME2|DATETIMEOFFSET|SMALLDATETIME|SMALLMONEY|ROWVERSION)\b/i,
62
+ /\bIDENTITY\s*\(\s*\d+\s*,\s*\d+\s*\)/i,
63
+ /^\s*SET\s+(?:ANSI_NULLS|QUOTED_IDENTIFIER|NOCOUNT|ANSI_PADDING)\b/im,
64
+ /\bEXEC(?:UTE)?\s+sp_addextendedproperty\b/i,
65
+ ];
66
+ /** True when the DDL has a marker only T-SQL has and no ClickHouse-only clause. */
67
+ export function looksLikeTSql(content) {
68
+ const text = content.replace(/--[^\n]*/g, "");
69
+ if (CLICKHOUSE_ONLY.some((re) => re.test(text)))
70
+ return false;
71
+ return TSQL_MARKERS.some((re) => re.test(text));
72
+ }
36
73
  /** The dialect a file of DDL is written in, read off its statements. */
37
74
  export function guessDialect(content) {
38
75
  const text = content.replace(/--[^\n]*/g, "");
@@ -51,21 +88,58 @@ export function dialectOption(options) {
51
88
  throw new Error(`--parser-option dialect: expected ${SQL_DIALECTS.join(" or ")}, got ${String(d)}`);
52
89
  return d;
53
90
  }
91
+ /** Sources other than a dialect that `--parser-option from=` names. */
92
+ export const IMPORT_SOURCES = ["sqlserver"];
93
+ /** The `from` parser option, checked. */
94
+ export function sourceOption(options) {
95
+ const f = options?.from;
96
+ if (f === undefined)
97
+ return undefined;
98
+ if (typeof f !== "string" || !IMPORT_SOURCES.includes(f))
99
+ throw new Error(`--parser-option from: expected ${IMPORT_SOURCES.join(" or ")}, got ${String(f)}`);
100
+ if (options?.dialect !== undefined)
101
+ throw new Error(`--parser-option from=${f} cannot be combined with dialect: a ${f} schema is translated to ClickHouse`);
102
+ return f;
103
+ }
54
104
  export class SqlFileParser {
55
105
  constructor(dialect, options = {}) {
56
106
  this.dialect = dialect;
57
107
  this.options = options;
58
108
  }
59
109
  parse(content) {
110
+ if (this.options.from === "sqlserver" || (this.dialect === undefined && looksLikeTSql(content)))
111
+ return this.parseSqlServer(content);
60
112
  const dialect = this.dialect ?? guessDialect(content);
61
113
  const problems = [];
62
114
  const skipped = [];
63
- const read = { origin: "the DDL", ...(this.options.skipUndeclarable ? { undeclarable: skipped } : {}) };
115
+ const prerequisites = [];
116
+ const read = { origin: "the DDL", prerequisites, ...(this.options.skipUndeclarable ? { undeclarable: skipped } : {}) };
64
117
  const ir = dialect === "postgres" ? pgObjectsToIR(readPostgres(content, read, problems)) : chObjectsToIR(readClickHouse(content, read, problems));
65
118
  if (problems.length > 0)
66
119
  throw new SqlFileError(`the ${dialect === "postgres" ? "Postgres" : "ClickHouse"} DDL`, problems);
67
- if (skipped.length === 0)
68
- return ir;
69
- return { ...ir, warnings: [...(ir.warnings ?? []), ...skipped.map((s) => `left out (skipUndeclarable): ${s}`)] };
120
+ // A named collection is the environment's (#4395): its CREATE, or a declaration naming one, is a prerequisite, its values never imported.
121
+ const objects = ir.resources.map((r) => r.properties);
122
+ const prereq = dialect === "clickhouse"
123
+ ? namedCollectionPrerequisites(prerequisites, objects, { found: "the DDL creates it", unseen: "the DDL does not create it" })
124
+ : { prerequisites: [], warnings: [] };
125
+ const warnings = [...(ir.warnings ?? []), ...prereq.warnings, ...skipped.map((s) => `left out (skipUndeclarable): ${s}`)];
126
+ const out = prereq.prerequisites.length > 0 ? { ...ir, metadata: { ...ir.metadata, prerequisites: prereq.prerequisites } } : ir;
127
+ return warnings.length > 0 ? { ...out, warnings } : out;
128
+ }
129
+ /** A T-SQL schema as ClickHouse objects, with a finding for each judgment call (#4398). */
130
+ parseSqlServer(content) {
131
+ let t;
132
+ try {
133
+ t = translateSqlServer(content, { skipUnreadable: this.options.skipUndeclarable === true });
134
+ }
135
+ catch (e) {
136
+ if (e instanceof TsqlLexError)
137
+ throw new SqlFileError("the SQL Server DDL", [e.message]);
138
+ throw e;
139
+ }
140
+ if (t.problems.length > 0)
141
+ throw new SqlFileError("the SQL Server DDL", t.problems);
142
+ const ir = chObjectsToIR(t.objects);
143
+ return { ...ir, diagnostics: t.diagnostics, metadata: { ...ir.metadata, source: "sqlserver" } };
70
144
  }
71
145
  }
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ export { sqlSerializer } from "./serializer.js";
3
3
  export { SQL_DIALECTS, type SqlDialect } from "./dialects.js";
4
4
  export { sqlConfigSchema, type SqlConfig } from "./config.js";
5
5
  export { database, table, view, dictionary, user, role, policy, quota, settingsProfile, grant, literal } from "./clickhouse/entities.js";
6
- export { schema, index, sequence, type, domain, extension, func, procedure, aggregate, trigger, eventTrigger, collation, cast } from "./postgres/entities.js";
6
+ export { schema, index, sequence, type, domain, extension, func, procedure, aggregate, trigger, eventTrigger, operator, operatorClass, operatorFamily, foreignTable, textSearchConfiguration, textSearchDictionary, statistics, foreignDataWrapper, foreignServer, publication, collation, cast } from "./postgres/entities.js";
7
7
  export { diffStatements, renderStatements, type DiffStatementsOptions, type ManualStep, type MigrationStep, type OpStep, type SchemaStatements, type StatementChange, type StatementStep, type StepObject, } from "./migration-statements.js";
8
8
  export { readSqlFile, sqlFileDeclarations, sqlFileEntities, sqlFileOf, SqlFileError, type SqlFileObject, type SqlFileOptions, type SqlFileSource, } from "./sql-files.js";
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAM3D,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAMtI,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAI3J,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,SAAS,EACT,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAM3D,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAMtI,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,UAAU,EAAE,kBAAkB,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAI7T,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,SAAS,EACT,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ export { database, table, view, dictionary, user, role, policy, quota, settingsP
15
15
  // A tag folds as the function its file imports, so `table` imported from
16
16
  // `@intentius/chant-lexicon-sql/postgres` is Postgres's. Declarations import
17
17
  // them from the dialect subpath.
18
- export { schema, index, sequence, type, domain, extension, func, procedure, aggregate, trigger, eventTrigger, collation, cast } from "./postgres/entities.js";
18
+ export { schema, index, sequence, type, domain, extension, func, procedure, aggregate, trigger, eventTrigger, operator, operatorClass, operatorFamily, foreignTable, textSearchConfiguration, textSearchDictionary, statistics, foreignDataWrapper, foreignServer, publication, collation, cast } from "./postgres/entities.js";
19
19
  // A schema change's statements between two builds, rendered offline for a
20
20
  // migration file (#3644); also at `@intentius/chant-lexicon-sql/migration-statements`.
21
21
  export { diffStatements, renderStatements, } from "./migration-statements.js";
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "algorithm": "sha256",
3
3
  "artifacts": {
4
- "manifest.json": "bab0f261aafde7e3fc8037cbd3a540f500e2b9fe0f7f9d7bdb2914dbfa57024f",
5
- "meta.json": "59ca03876cce0d293e15a7f0a90ef7f250d133e46773c73fedede4a2ec792119",
4
+ "manifest.json": "6a3f55a036b2c2bdea25fae55db7eeeddf6cf14d7ac886375bfc279edfeb0071",
5
+ "meta.json": "2a75a38ea0fb186f27a59d6b8401d7af0809db5e471769f0259f7c1a4292b858",
6
6
  "types/index.d.ts": "0286ebb367773e84c76818b0f69cb14cff8328fd2f8c65ed87563c8d5815458c",
7
- "rules/postgres-templates.ts": "082da542239ab9f9627026972281102a61ca269cb79e2514f402dfc400ccdcde",
7
+ "rules/postgres-templates.ts": "cbbe8b3c3531300ef5f17d596bf9403343d9fde019961436b6af0cdc66e4064a",
8
8
  "rules/sqlch001.ts": "b6dcf779edc596a953e3b4eb2dda5f6e70c1ac56b262f7499f9cb6876ecc1cf9",
9
9
  "rules/sqlch002.ts": "d866298167d3f2f7b39bddd28cfbb4a761281a2816d6c21db19b86b32434737a",
10
10
  "rules/sqlch003.ts": "955bd6331af0cf7b4f7cd1656d809b9697a8cc91bb179c38a4bbd086c232354e",
@@ -16,12 +16,12 @@
16
16
  "rules/sqlpg005.ts": "14bdd081d73826f94e358e52e672776aae81533b98fe09ce7ee4cbb86e241df9",
17
17
  "rules/templates.ts": "9e6b434694231c3275ca23b491bfdc207b8dbc80b30ffe119fe89d1fb6b12389",
18
18
  "rules/typed-names.ts": "fbd5037dc10987611ad4dfb71ae97102b2bb8916c693033b923c6c0201280419",
19
- "rules/audit-entries.ts": "2339bc445687a4037652ffd300e3a230866b8abfd91f08a2ba831179cf646424",
19
+ "rules/audit-entries.ts": "210817495b072b2b42908085ae282901537f097127d06d0932b8761b3b951606",
20
20
  "rules/clickhouse-helpers.ts": "7c635d10cd2049b72a88596a60e5ba188eab69e233fb74f77dde100f08fba1ca",
21
21
  "rules/clickhouse-type-check.ts": "75396cd5aef4ae09d6f7dea92924b0867e5c9182bbf918ade4d9b42823e54538",
22
22
  "rules/postgres-audit-entries.ts": "30887efb76971b6db629807e583576e875d939c906eada0f260b90a5eec646b8",
23
23
  "rules/postgres-helpers.ts": "b7a246cbb42161691aea52dda6fffd41da293892812023f0ffcfa4f722e596bd",
24
- "rules/postgres-names.ts": "1003c61a99b06284df65f93158f6a43a55b7e6401ad9a2cd5059c7564344254f",
24
+ "rules/postgres-names.ts": "82d70a452de9a778b7046a6b2fa49fdd90f18884e61435c191f11361149f98c0",
25
25
  "rules/sql-helpers.ts": "36b2d8ff9d5ecc741a9edcea055829137cb66e1e73fd2ff8918a7f56c5413574",
26
26
  "rules/sql101.ts": "6d8405355fb3f679ecd729c9fb020d3fa9820b2e2f7e83c4850c266f37ed5165",
27
27
  "rules/sql102.ts": "7898a292ef801316ba1232001fcaa2f9a11d62d21cf25a176f0af19e409bb4fa",
@@ -52,6 +52,7 @@
52
52
  "rules/sqlch125.ts": "d5cb80e2daa00a92364fe73bf2b9f8b75da8efd3c4f665af278357e63047806d",
53
53
  "rules/sqlch126.ts": "58f45e5bd29f445d30b45876fed5a4a53a2de0cf63eaa5472202b36d0bcf7b2e",
54
54
  "rules/sqlch127.ts": "6662ecaa0f0c45538e9461c27c00d4f20438dc0355ca485d41d8b5fb9451c6a9",
55
+ "rules/sqlch128.ts": "6fe99d2477e0fa31b777db2ecad795884eebfe46f1d5d3dda5949bad3a94b995",
55
56
  "rules/sqlpg101.ts": "34bd3032af0a1054f2ee90b6e66dd2c159406196e86159545b1d18874fb3ce4b",
56
57
  "rules/sqlpg102.ts": "0a4f30a46fc1af3a251fd60ba8fee28f853605629cc93a2881c5bf8664dfd68e",
57
58
  "rules/sqlpg103.ts": "d172dbb711917a50dcb4e894d554730386cfdc056c10338733083dbf344f6f86",
@@ -79,5 +80,5 @@
79
80
  "rules/sqlpg125.ts": "cc7411c57c525613dc720ba00e986bbc4e5a84b8b0bcfa7a6ce0d058f039f025",
80
81
  "rules/sqlpg126.ts": "d57b82a5842273876510131d67bf4418cbd61eff821e245edebc644dafd502bb"
81
82
  },
82
- "composite": "8017b55c88371db99ad588d80a20bc182bd453a8831a2ef49365938faf1ca1ab"
83
+ "composite": "fa697f9dc480deebdb37cbb0a3bbcdd0213c114cc9cb4bfab4cb5b026ea835ab"
83
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"audit-entries.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/audit-entries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE1E,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CA2B7D,CAAC"}
1
+ {"version":3,"file":"audit-entries.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/audit-entries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE1E,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CA4B7D,CAAC"}
@@ -31,4 +31,5 @@ export const sqlPostSynthAuditEntries = {
31
31
  SQLCH125: auditRule("SQLCH125", "merge-worthy", "guidance", "A codec parameter is outside what the codec takes", "Give the codec a parameter within its range or set, or drop the parameter for the default.", { category: "correctness" }),
32
32
  SQLCH126: auditRule("SQLCH126", "merge-worthy", "guidance", "A GRANT column list names a column the table does not declare", "Fix the column name, or declare the column on the table.", { category: "correctness" }),
33
33
  SQLCH127: auditRule("SQLCH127", "merge-worthy", "guidance", "An expression calls a function the pinned server does not have", "Fix the function name, use one from the pinned server's system.functions, or declare it with func.", { category: "correctness" }),
34
+ SQLCH128: auditRule("SQLCH128", "merge-worthy", "guidance", "An integration engine or table function argument holds a literal credential", "Create a named collection with the credentials on the server and name it in place of the arguments: ENGINE = S3(lake_creds, format = 'Parquet').", { category: "security" }),
34
35
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAyDvE,eAAO,MAAM,eAAe,EAAE,cAAc,EAwD3C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AA0DvE,eAAO,MAAM,eAAe,EAAE,cAAc,EAyD3C,CAAC"}
@@ -27,6 +27,7 @@ import { sqlch124 } from "./sqlch124.js";
27
27
  import { sqlch125 } from "./sqlch125.js";
28
28
  import { sqlch126 } from "./sqlch126.js";
29
29
  import { sqlch127 } from "./sqlch127.js";
30
+ import { sqlch128 } from "./sqlch128.js";
30
31
  import { sqlpg101 } from "./sqlpg101.js";
31
32
  import { sqlpg102 } from "./sqlpg102.js";
32
33
  import { sqlpg103 } from "./sqlpg103.js";
@@ -83,6 +84,7 @@ export const postSynthChecks = [
83
84
  sqlch125,
84
85
  sqlch126,
85
86
  sqlch127,
87
+ sqlch128,
86
88
  sqlpg101,
87
89
  sqlpg102,
88
90
  sqlpg103,
@@ -1 +1 @@
1
- {"version":3,"file":"postgres-names.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/postgres-names.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"postgres-names.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/postgres-names.ts"],"names":[],"mappings":"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"}
@@ -448,6 +448,9 @@ export function resolveMethod(p, method) {
448
448
  export function resolveOpClass(p, method, opclass) {
449
449
  if (opclass.schema !== undefined && outsideProject(p, opclass.schema))
450
450
  return { ok: true };
451
+ // A class the project declares (an `operatorClass` tag), for this method.
452
+ if (p.objects.some((o) => o.type === "Postgres::OperatorClass" && o.name === opclass.name && o.method === method && (opclass.schema === undefined || o.schema === opclass.schema)))
453
+ return { ok: true };
451
454
  const classes = OPERATOR_CLASSES;
452
455
  if (presentAt(classes[method]?.[opclass.name], p.major))
453
456
  return { ok: true };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * SQLCH128: an integration engine's or table function's argument holds a
3
+ * literal credential (#4395): `ENGINE = S3('https://...', 'AKIA...', 'secret')`,
4
+ * `mysql('db:3306', 'shop', 'orders', 'app', 'secret')`, a Kafka table's
5
+ * `kafka_sasl_password` setting, a dictionary source's `PASSWORD`.
6
+ *
7
+ * A credential is the environment's, so it does not belong in a declaration,
8
+ * the build output or `clickhouse.sql`, as `IDENTIFIED BY` does not on a
9
+ * user (`../../clickhouse/access.ts`). The secret arguments are found by name
10
+ * from each engine's syntax line in the pinned catalog (`password`,
11
+ * `secret_access_key`, `account_key`, `session_token`, `oauth_token`), as
12
+ * `key = value` overrides and settings by the same names, and inside a URL
13
+ * (`user:password@`) or an Azure connection string (`AccountKey=`). The fix
14
+ * is a named collection the environment creates, named in place of the
15
+ * arguments: `ENGINE = S3(lake_creds, format = 'Parquet')`.
16
+ */
17
+ export declare const sqlch128: import("@intentius/chant").PostSynthCheck;
18
+ //# sourceMappingURL=sqlch128.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlch128.d.ts","sourceRoot":"","sources":["../../../src/lint/post-synth/sqlch128.ts"],"names":[],"mappings":"AAiMA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,QAAQ,2CAoBnB,CAAC"}