@intentius/chant-lexicon-sql 0.0.0-stage → 0.112.0
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.
- package/README.md +39 -2
- package/dist/clickhouse/apply/apply.d.ts +82 -0
- package/dist/clickhouse/apply/apply.d.ts.map +1 -0
- package/dist/clickhouse/apply/mutations.d.ts +46 -0
- package/dist/clickhouse/apply/mutations.d.ts.map +1 -0
- package/dist/clickhouse/apply/statements.d.ts +99 -0
- package/dist/clickhouse/apply/statements.d.ts.map +1 -0
- package/dist/clickhouse/catalog-types.d.ts +76 -0
- package/dist/clickhouse/catalog-types.d.ts.map +1 -0
- package/dist/clickhouse/container.d.ts +63 -0
- package/dist/clickhouse/container.d.ts.map +1 -0
- package/dist/clickhouse/engine-syntax.d.ts +43 -0
- package/dist/clickhouse/engine-syntax.d.ts.map +1 -0
- package/dist/clickhouse/entities.d.ts +183 -0
- package/dist/clickhouse/entities.d.ts.map +1 -0
- package/dist/clickhouse/http.d.ts +40 -0
- package/dist/clickhouse/http.d.ts.map +1 -0
- package/dist/clickhouse/import/generator.d.ts +16 -0
- package/dist/clickhouse/import/generator.d.ts.map +1 -0
- package/dist/clickhouse/import/ir.d.ts +52 -0
- package/dist/clickhouse/import/ir.d.ts.map +1 -0
- package/dist/clickhouse/import/live-export.d.ts +28 -0
- package/dist/clickhouse/import/live-export.d.ts.map +1 -0
- package/dist/clickhouse/import/parser.d.ts +10 -0
- package/dist/clickhouse/import/parser.d.ts.map +1 -0
- package/dist/clickhouse/live/bind.d.ts +56 -0
- package/dist/clickhouse/live/bind.d.ts.map +1 -0
- package/dist/clickhouse/live/catalog.d.ts +39 -0
- package/dist/clickhouse/live/catalog.d.ts.map +1 -0
- package/dist/clickhouse/live/describe-resources.d.ts +34 -0
- package/dist/clickhouse/live/describe-resources.d.ts.map +1 -0
- package/dist/clickhouse/overlays/codecs.d.ts +28 -0
- package/dist/clickhouse/overlays/codecs.d.ts.map +1 -0
- package/dist/clickhouse/overlays/engines.d.ts +20 -0
- package/dist/clickhouse/overlays/engines.d.ts.map +1 -0
- package/dist/clickhouse/overlays/kinds.d.ts +38 -0
- package/dist/clickhouse/overlays/kinds.d.ts.map +1 -0
- package/dist/clickhouse/overlays/projections.d.ts +27 -0
- package/dist/clickhouse/overlays/projections.d.ts.map +1 -0
- package/dist/clickhouse/overlays/skip-indexes.d.ts +10 -0
- package/dist/clickhouse/overlays/skip-indexes.d.ts.map +1 -0
- package/dist/clickhouse/overlays/ttl.d.ts +35 -0
- package/dist/clickhouse/overlays/ttl.d.ts.map +1 -0
- package/dist/clickhouse/overlays/types.d.ts +21 -0
- package/dist/clickhouse/overlays/types.d.ts.map +1 -0
- package/dist/clickhouse/ownership.d.ts +71 -0
- package/dist/clickhouse/ownership.d.ts.map +1 -0
- package/dist/clickhouse/parser.d.ts +130 -0
- package/dist/clickhouse/parser.d.ts.map +1 -0
- package/dist/clickhouse/plan/commands.d.ts +26 -0
- package/dist/clickhouse/plan/commands.d.ts.map +1 -0
- package/dist/clickhouse/plan/deep.d.ts +32 -0
- package/dist/clickhouse/plan/deep.d.ts.map +1 -0
- package/dist/clickhouse/plan/diff.d.ts +37 -0
- package/dist/clickhouse/plan/diff.d.ts.map +1 -0
- package/dist/clickhouse/plan/disruption.d.ts +17 -0
- package/dist/clickhouse/plan/disruption.d.ts.map +1 -0
- package/dist/clickhouse/plan/normalize.d.ts +97 -0
- package/dist/clickhouse/plan/normalize.d.ts.map +1 -0
- package/dist/clickhouse/plan/rebuild-handoff.d.ts +38 -0
- package/dist/clickhouse/plan/rebuild-handoff.d.ts.map +1 -0
- package/dist/clickhouse/plan/report.d.ts +6 -0
- package/dist/clickhouse/plan/report.d.ts.map +1 -0
- package/dist/clickhouse/plan/rules.d.ts +60 -0
- package/dist/clickhouse/plan/rules.d.ts.map +1 -0
- package/dist/clickhouse/plan/schema.d.ts +23 -0
- package/dist/clickhouse/plan/schema.d.ts.map +1 -0
- package/dist/clickhouse/plan/server-format.d.ts +12 -0
- package/dist/clickhouse/plan/server-format.d.ts.map +1 -0
- package/dist/clickhouse/rebuild/backfill.d.ts +70 -0
- package/dist/clickhouse/rebuild/backfill.d.ts.map +1 -0
- package/dist/clickhouse/rebuild/observe.d.ts +157 -0
- package/dist/clickhouse/rebuild/observe.d.ts.map +1 -0
- package/dist/clickhouse/rebuild/op.d.ts +108 -0
- package/dist/clickhouse/rebuild/op.d.ts.map +1 -0
- package/dist/clickhouse/rebuild/partitions.d.ts +24 -0
- package/dist/clickhouse/rebuild/partitions.d.ts.map +1 -0
- package/dist/clickhouse/rebuild/receipts.d.ts +76 -0
- package/dist/clickhouse/rebuild/receipts.d.ts.map +1 -0
- package/dist/clickhouse/rebuild/replicas.d.ts +78 -0
- package/dist/clickhouse/rebuild/replicas.d.ts.map +1 -0
- package/dist/clickhouse/rebuild/steps.d.ts +151 -0
- package/dist/clickhouse/rebuild/steps.d.ts.map +1 -0
- package/dist/clickhouse/rebuild/verify.d.ts +51 -0
- package/dist/clickhouse/rebuild/verify.d.ts.map +1 -0
- package/dist/clickhouse/testing/fake-server.d.ts +27 -0
- package/dist/clickhouse/testing/fake-server.d.ts.map +1 -0
- package/dist/clickhouse/testing/roundtrip-schema.d.ts +3 -0
- package/dist/clickhouse/testing/roundtrip-schema.d.ts.map +1 -0
- package/dist/clickhouse/testing/writable-server.d.ts +35 -0
- package/dist/clickhouse/testing/writable-server.d.ts.map +1 -0
- package/dist/clickhouse/tokens.d.ts +15 -0
- package/dist/clickhouse/tokens.d.ts.map +1 -0
- package/dist/clickhouse.d.ts +24 -0
- package/dist/clickhouse.d.ts.map +1 -0
- package/dist/codegen/classifier-page.d.ts +6 -0
- package/dist/codegen/classifier-page.d.ts.map +1 -0
- package/dist/codegen/clickhouse-module.d.ts +23 -0
- package/dist/codegen/clickhouse-module.d.ts.map +1 -0
- package/dist/codegen/docs-cli.d.ts +3 -0
- package/dist/codegen/docs-cli.d.ts.map +1 -0
- package/dist/codegen/docs.d.ts +8 -0
- package/dist/codegen/docs.d.ts.map +1 -0
- package/dist/codegen/generate-cli.d.ts +3 -0
- package/dist/codegen/generate-cli.d.ts.map +1 -0
- package/dist/codegen/generate.d.ts +40 -0
- package/dist/codegen/generate.d.ts.map +1 -0
- package/dist/codegen/package.d.ts +7 -0
- package/dist/codegen/package.d.ts.map +1 -0
- package/dist/codegen/postgres-classifier-page.d.ts +7 -0
- package/dist/codegen/postgres-classifier-page.d.ts.map +1 -0
- package/dist/codegen/postgres-module.d.ts +30 -0
- package/dist/codegen/postgres-module.d.ts.map +1 -0
- package/dist/codegen/registry.d.ts +12 -0
- package/dist/codegen/registry.d.ts.map +1 -0
- package/dist/composites/audit-log-table.d.ts +31 -0
- package/dist/composites/audit-log-table.d.ts.map +1 -0
- package/dist/composites/catalog.d.ts +3 -0
- package/dist/composites/catalog.d.ts.map +1 -0
- package/dist/composites/cdc-mirror.d.ts +32 -0
- package/dist/composites/cdc-mirror.d.ts.map +1 -0
- package/dist/composites/clickhouse.d.ts +7 -0
- package/dist/composites/clickhouse.d.ts.map +1 -0
- package/dist/composites/events-table.d.ts +32 -0
- package/dist/composites/events-table.d.ts.map +1 -0
- package/dist/composites/index.d.ts +9 -0
- package/dist/composites/index.d.ts.map +1 -0
- package/dist/composites/join-table.d.ts +41 -0
- package/dist/composites/join-table.d.ts.map +1 -0
- package/dist/composites/postgres.d.ts +7 -0
- package/dist/composites/postgres.d.ts.map +1 -0
- package/dist/composites/refreshed-view.d.ts +32 -0
- package/dist/composites/refreshed-view.d.ts.map +1 -0
- package/dist/composites/replacing-table.d.ts +34 -0
- package/dist/composites/replacing-table.d.ts.map +1 -0
- package/dist/composites/rollup-view.d.ts +39 -0
- package/dist/composites/rollup-view.d.ts.map +1 -0
- package/dist/composites/sharded-table.d.ts +35 -0
- package/dist/composites/sharded-table.d.ts.map +1 -0
- package/dist/composites/soft-delete-table.d.ts +40 -0
- package/dist/composites/soft-delete-table.d.ts.map +1 -0
- package/dist/composites/tenant-table.d.ts +34 -0
- package/dist/composites/tenant-table.d.ts.map +1 -0
- package/dist/config.d.ts +213 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/core/apply.d.ts +89 -0
- package/dist/core/apply.d.ts.map +1 -0
- package/dist/core/classifier.d.ts +88 -0
- package/dist/core/classifier.d.ts.map +1 -0
- package/dist/core/container.d.ts +45 -0
- package/dist/core/container.d.ts.map +1 -0
- package/dist/core/cursor.d.ts +67 -0
- package/dist/core/cursor.d.ts.map +1 -0
- package/dist/core/diff.d.ts +49 -0
- package/dist/core/diff.d.ts.map +1 -0
- package/dist/core/entity.d.ts +41 -0
- package/dist/core/entity.d.ts.map +1 -0
- package/dist/core/find-templates.d.ts +69 -0
- package/dist/core/find-templates.d.ts.map +1 -0
- package/dist/core/handoff.d.ts +36 -0
- package/dist/core/handoff.d.ts.map +1 -0
- package/dist/core/index.d.ts +61 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/interpolation.d.ts +88 -0
- package/dist/core/interpolation.d.ts.map +1 -0
- package/dist/core/normalize.d.ts +18 -0
- package/dist/core/normalize.d.ts.map +1 -0
- package/dist/core/ownership.d.ts +60 -0
- package/dist/core/ownership.d.ts.map +1 -0
- package/dist/core/receipts.d.ts +28 -0
- package/dist/core/receipts.d.ts.map +1 -0
- package/dist/core/references.d.ts +37 -0
- package/dist/core/references.d.ts.map +1 -0
- package/dist/core/template.d.ts +41 -0
- package/dist/core/template.d.ts.map +1 -0
- package/dist/core/testing/http-stub.d.ts +17 -0
- package/dist/core/testing/http-stub.d.ts.map +1 -0
- package/dist/core/tokens.d.ts +102 -0
- package/dist/core/tokens.d.ts.map +1 -0
- package/dist/coverage.d.ts +25 -0
- package/dist/coverage.d.ts.map +1 -0
- package/dist/detect.d.ts +15 -0
- package/dist/detect.d.ts.map +1 -0
- package/dist/dialects.d.ts +20 -0
- package/dist/dialects.d.ts.map +1 -0
- package/dist/generated/clickhouse-types.d.ts +4380 -0
- package/dist/generated/clickhouse-types.d.ts.map +1 -0
- package/dist/generated/clickhouse.d.ts +11 -0
- package/dist/generated/clickhouse.d.ts.map +1 -0
- package/dist/generated/postgres-types.d.ts +1579 -0
- package/dist/generated/postgres-types.d.ts.map +1 -0
- package/dist/generated/postgres.d.ts +9 -0
- package/dist/generated/postgres.d.ts.map +1 -0
- package/dist/import-generator.d.ts +8 -0
- package/dist/import-generator.d.ts.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/init-templates.d.ts +20 -0
- package/dist/init-templates.d.ts.map +1 -0
- package/dist/integrity.json +61 -0
- package/dist/lint/audit-catalog.d.ts +10 -0
- package/dist/lint/audit-catalog.d.ts.map +1 -0
- package/dist/lint/audit-lineage.d.ts +25 -0
- package/dist/lint/audit-lineage.d.ts.map +1 -0
- package/dist/lint/post-synth/audit-entries.d.ts +8 -0
- package/dist/lint/post-synth/audit-entries.d.ts.map +1 -0
- package/dist/lint/post-synth/clickhouse-helpers.d.ts +85 -0
- package/dist/lint/post-synth/clickhouse-helpers.d.ts.map +1 -0
- package/dist/lint/post-synth/index.d.ts +3 -0
- package/dist/lint/post-synth/index.d.ts.map +1 -0
- package/dist/lint/post-synth/postgres-audit-entries.d.ts +9 -0
- package/dist/lint/post-synth/postgres-audit-entries.d.ts.map +1 -0
- package/dist/lint/post-synth/postgres-helpers.d.ts +89 -0
- package/dist/lint/post-synth/postgres-helpers.d.ts.map +1 -0
- package/dist/lint/post-synth/sql-helpers.d.ts +27 -0
- package/dist/lint/post-synth/sql-helpers.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch101.d.ts +12 -0
- package/dist/lint/post-synth/sqlch101.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch102.d.ts +9 -0
- package/dist/lint/post-synth/sqlch102.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch103.d.ts +10 -0
- package/dist/lint/post-synth/sqlch103.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch104.d.ts +9 -0
- package/dist/lint/post-synth/sqlch104.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch105.d.ts +10 -0
- package/dist/lint/post-synth/sqlch105.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch106.d.ts +11 -0
- package/dist/lint/post-synth/sqlch106.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch107.d.ts +10 -0
- package/dist/lint/post-synth/sqlch107.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch108.d.ts +11 -0
- package/dist/lint/post-synth/sqlch108.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch109.d.ts +10 -0
- package/dist/lint/post-synth/sqlch109.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch110.d.ts +12 -0
- package/dist/lint/post-synth/sqlch110.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch111.d.ts +11 -0
- package/dist/lint/post-synth/sqlch111.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch112.d.ts +12 -0
- package/dist/lint/post-synth/sqlch112.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch113.d.ts +9 -0
- package/dist/lint/post-synth/sqlch113.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch114.d.ts +8 -0
- package/dist/lint/post-synth/sqlch114.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch115.d.ts +13 -0
- package/dist/lint/post-synth/sqlch115.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch116.d.ts +10 -0
- package/dist/lint/post-synth/sqlch116.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch117.d.ts +9 -0
- package/dist/lint/post-synth/sqlch117.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch118.d.ts +10 -0
- package/dist/lint/post-synth/sqlch118.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch119.d.ts +11 -0
- package/dist/lint/post-synth/sqlch119.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlch120.d.ts +10 -0
- package/dist/lint/post-synth/sqlch120.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlpg101.d.ts +12 -0
- package/dist/lint/post-synth/sqlpg101.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlpg102.d.ts +11 -0
- package/dist/lint/post-synth/sqlpg102.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlpg103.d.ts +11 -0
- package/dist/lint/post-synth/sqlpg103.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlpg104.d.ts +10 -0
- package/dist/lint/post-synth/sqlpg104.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlpg105.d.ts +10 -0
- package/dist/lint/post-synth/sqlpg105.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlpg106.d.ts +9 -0
- package/dist/lint/post-synth/sqlpg106.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlpg107.d.ts +10 -0
- package/dist/lint/post-synth/sqlpg107.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlpg108.d.ts +11 -0
- package/dist/lint/post-synth/sqlpg108.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlpg109.d.ts +11 -0
- package/dist/lint/post-synth/sqlpg109.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlpg110.d.ts +12 -0
- package/dist/lint/post-synth/sqlpg110.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlpg111.d.ts +10 -0
- package/dist/lint/post-synth/sqlpg111.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlpg112.d.ts +10 -0
- package/dist/lint/post-synth/sqlpg112.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlpg113.d.ts +11 -0
- package/dist/lint/post-synth/sqlpg113.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlpg114.d.ts +13 -0
- package/dist/lint/post-synth/sqlpg114.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlpg115.d.ts +13 -0
- package/dist/lint/post-synth/sqlpg115.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlpg116.d.ts +11 -0
- package/dist/lint/post-synth/sqlpg116.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlpg117.d.ts +12 -0
- package/dist/lint/post-synth/sqlpg117.d.ts.map +1 -0
- package/dist/lint/post-synth/sqlpg118.d.ts +12 -0
- package/dist/lint/post-synth/sqlpg118.d.ts.map +1 -0
- package/dist/lint/rules/index.d.ts +12 -0
- package/dist/lint/rules/index.d.ts.map +1 -0
- package/dist/lint/rules/postgres-templates.d.ts +18 -0
- package/dist/lint/rules/postgres-templates.d.ts.map +1 -0
- package/dist/lint/rules/sqlch001.d.ts +12 -0
- package/dist/lint/rules/sqlch001.d.ts.map +1 -0
- package/dist/lint/rules/sqlch002.d.ts +11 -0
- package/dist/lint/rules/sqlch002.d.ts.map +1 -0
- package/dist/lint/rules/sqlch003.d.ts +12 -0
- package/dist/lint/rules/sqlch003.d.ts.map +1 -0
- package/dist/lint/rules/sqlpg001.d.ts +16 -0
- package/dist/lint/rules/sqlpg001.d.ts.map +1 -0
- package/dist/lint/rules/sqlpg002.d.ts +12 -0
- package/dist/lint/rules/sqlpg002.d.ts.map +1 -0
- package/dist/lint/rules/sqlpg003.d.ts +16 -0
- package/dist/lint/rules/sqlpg003.d.ts.map +1 -0
- package/dist/lint/rules/sqlpg004.d.ts +21 -0
- package/dist/lint/rules/sqlpg004.d.ts.map +1 -0
- package/dist/lint/rules/templates.d.ts +23 -0
- package/dist/lint/rules/templates.d.ts.map +1 -0
- package/dist/live-dialect.d.ts +25 -0
- package/dist/live-dialect.d.ts.map +1 -0
- package/dist/lsp/catalog.d.ts +22 -0
- package/dist/lsp/catalog.d.ts.map +1 -0
- package/dist/lsp/completions.d.ts +13 -0
- package/dist/lsp/completions.d.ts.map +1 -0
- package/dist/lsp/hover.d.ts +12 -0
- package/dist/lsp/hover.d.ts.map +1 -0
- package/dist/lsp/postgres-catalog.d.ts +85 -0
- package/dist/lsp/postgres-catalog.d.ts.map +1 -0
- package/dist/lsp/postgres-template.d.ts +35 -0
- package/dist/lsp/postgres-template.d.ts.map +1 -0
- package/dist/lsp/postgres.d.ts +20 -0
- package/dist/lsp/postgres.d.ts.map +1 -0
- package/dist/lsp/refs.d.ts +8 -0
- package/dist/lsp/refs.d.ts.map +1 -0
- package/dist/lsp/registry.d.ts +4 -0
- package/dist/lsp/registry.d.ts.map +1 -0
- package/dist/lsp/template.d.ts +34 -0
- package/dist/lsp/template.d.ts.map +1 -0
- package/dist/manifest.json +8 -0
- package/dist/mcp/index.d.ts +13 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/postgres.d.ts +32 -0
- package/dist/mcp/postgres.d.ts.map +1 -0
- package/dist/meta.json +67 -0
- package/dist/okf/index.md +67 -0
- package/dist/okf/rules/SQLCH001.md +11 -0
- package/dist/okf/rules/SQLCH002.md +11 -0
- package/dist/okf/rules/SQLCH003.md +11 -0
- package/dist/okf/rules/SQLCH101.md +15 -0
- package/dist/okf/rules/SQLCH102.md +11 -0
- package/dist/okf/rules/SQLCH103.md +11 -0
- package/dist/okf/rules/SQLCH104.md +11 -0
- package/dist/okf/rules/SQLCH105.md +11 -0
- package/dist/okf/rules/SQLCH106.md +11 -0
- package/dist/okf/rules/SQLCH107.md +11 -0
- package/dist/okf/rules/SQLCH108.md +15 -0
- package/dist/okf/rules/SQLCH109.md +11 -0
- package/dist/okf/rules/SQLCH110.md +11 -0
- package/dist/okf/rules/SQLCH111.md +11 -0
- package/dist/okf/rules/SQLCH112.md +11 -0
- package/dist/okf/rules/SQLCH113.md +11 -0
- package/dist/okf/rules/SQLCH114.md +11 -0
- package/dist/okf/rules/SQLCH115.md +11 -0
- package/dist/okf/rules/SQLCH116.md +11 -0
- package/dist/okf/rules/SQLCH117.md +15 -0
- package/dist/okf/rules/SQLCH118.md +15 -0
- package/dist/okf/rules/SQLCH119.md +15 -0
- package/dist/okf/rules/SQLCH120.md +15 -0
- package/dist/okf/rules/SQLPG001.md +11 -0
- package/dist/okf/rules/SQLPG002.md +11 -0
- package/dist/okf/rules/SQLPG003.md +11 -0
- package/dist/okf/rules/SQLPG004.md +11 -0
- package/dist/okf/rules/SQLPG101.md +11 -0
- package/dist/okf/rules/SQLPG102.md +11 -0
- package/dist/okf/rules/SQLPG103.md +11 -0
- package/dist/okf/rules/SQLPG104.md +11 -0
- package/dist/okf/rules/SQLPG105.md +11 -0
- package/dist/okf/rules/SQLPG106.md +11 -0
- package/dist/okf/rules/SQLPG107.md +11 -0
- package/dist/okf/rules/SQLPG108.md +11 -0
- package/dist/okf/rules/SQLPG109.md +11 -0
- package/dist/okf/rules/SQLPG110.md +11 -0
- package/dist/okf/rules/SQLPG111.md +11 -0
- package/dist/okf/rules/SQLPG112.md +11 -0
- package/dist/okf/rules/SQLPG113.md +24 -0
- package/dist/okf/rules/SQLPG114.md +11 -0
- package/dist/okf/rules/SQLPG115.md +11 -0
- package/dist/okf/rules/SQLPG116.md +15 -0
- package/dist/okf/rules/SQLPG117.md +11 -0
- package/dist/okf/rules/SQLPG118.md +11 -0
- package/dist/okf/types/Database.md +15 -0
- package/dist/okf/types/MaterializedView.md +14 -0
- package/dist/okf/types/PostgresDomain.md +13 -0
- package/dist/okf/types/PostgresEnum.md +13 -0
- package/dist/okf/types/PostgresExtension.md +13 -0
- package/dist/okf/types/PostgresIndex.md +9 -0
- package/dist/okf/types/PostgresMaterializedView.md +13 -0
- package/dist/okf/types/PostgresSchema.md +13 -0
- package/dist/okf/types/PostgresSequence.md +13 -0
- package/dist/okf/types/PostgresTable.md +13 -0
- package/dist/okf/types/PostgresView.md +13 -0
- package/dist/okf/types/Table.md +15 -0
- package/dist/okf/types/View.md +13 -0
- package/dist/op/activities/clickhouse-apply.d.ts +56 -0
- package/dist/op/activities/clickhouse-apply.d.ts.map +1 -0
- package/dist/op/activities/clickhouse-emulator.d.ts +26 -0
- package/dist/op/activities/clickhouse-emulator.d.ts.map +1 -0
- package/dist/op/activities/clickhouse-rebuild.d.ts +43 -0
- package/dist/op/activities/clickhouse-rebuild.d.ts.map +1 -0
- package/dist/op/activities/index.d.ts +19 -0
- package/dist/op/activities/index.d.ts.map +1 -0
- package/dist/op/activities/postgres-apply.d.ts +69 -0
- package/dist/op/activities/postgres-apply.d.ts.map +1 -0
- package/dist/op/activities/postgres-emulator.d.ts +33 -0
- package/dist/op/activities/postgres-emulator.d.ts.map +1 -0
- package/dist/op/activities/postgres-migration.d.ts +48 -0
- package/dist/op/activities/postgres-migration.d.ts.map +1 -0
- package/dist/op/activity-contracts.d.ts +464 -0
- package/dist/op/activity-contracts.d.ts.map +1 -0
- package/dist/package-cli.d.ts +3 -0
- package/dist/package-cli.d.ts.map +1 -0
- package/dist/plugin.d.ts +12 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/postgres/apply/apply.d.ts +163 -0
- package/dist/postgres/apply/apply.d.ts.map +1 -0
- package/dist/postgres/apply/statements.d.ts +138 -0
- package/dist/postgres/apply/statements.d.ts.map +1 -0
- package/dist/postgres/catalog-types.d.ts +50 -0
- package/dist/postgres/catalog-types.d.ts.map +1 -0
- package/dist/postgres/container.d.ts +23 -0
- package/dist/postgres/container.d.ts.map +1 -0
- package/dist/postgres/entities.d.ts +322 -0
- package/dist/postgres/entities.d.ts.map +1 -0
- package/dist/postgres/entity-types.d.ts +17 -0
- package/dist/postgres/entity-types.d.ts.map +1 -0
- package/dist/postgres/import/generator.d.ts +28 -0
- package/dist/postgres/import/generator.d.ts.map +1 -0
- package/dist/postgres/import/ir.d.ts +24 -0
- package/dist/postgres/import/ir.d.ts.map +1 -0
- package/dist/postgres/import/live-export.d.ts +26 -0
- package/dist/postgres/import/live-export.d.ts.map +1 -0
- package/dist/postgres/keywords.d.ts +22 -0
- package/dist/postgres/keywords.d.ts.map +1 -0
- package/dist/postgres/live/bind.d.ts +76 -0
- package/dist/postgres/live/bind.d.ts.map +1 -0
- package/dist/postgres/live/catalog.d.ts +98 -0
- package/dist/postgres/live/catalog.d.ts.map +1 -0
- package/dist/postgres/live/client.d.ts +32 -0
- package/dist/postgres/live/client.d.ts.map +1 -0
- package/dist/postgres/live/describe-resources.d.ts +41 -0
- package/dist/postgres/live/describe-resources.d.ts.map +1 -0
- package/dist/postgres/migrate/backfill.d.ts +103 -0
- package/dist/postgres/migrate/backfill.d.ts.map +1 -0
- package/dist/postgres/migrate/batches.d.ts +90 -0
- package/dist/postgres/migrate/batches.d.ts.map +1 -0
- package/dist/postgres/migrate/carry.d.ts +196 -0
- package/dist/postgres/migrate/carry.d.ts.map +1 -0
- package/dist/postgres/migrate/handoff.d.ts +46 -0
- package/dist/postgres/migrate/handoff.d.ts.map +1 -0
- package/dist/postgres/migrate/names.d.ts +55 -0
- package/dist/postgres/migrate/names.d.ts.map +1 -0
- package/dist/postgres/migrate/observe.d.ts +139 -0
- package/dist/postgres/migrate/observe.d.ts.map +1 -0
- package/dist/postgres/migrate/op.d.ts +128 -0
- package/dist/postgres/migrate/op.d.ts.map +1 -0
- package/dist/postgres/migrate/receipts.d.ts +63 -0
- package/dist/postgres/migrate/receipts.d.ts.map +1 -0
- package/dist/postgres/migrate/replication.d.ts +80 -0
- package/dist/postgres/migrate/replication.d.ts.map +1 -0
- package/dist/postgres/migrate/steps.d.ts +225 -0
- package/dist/postgres/migrate/steps.d.ts.map +1 -0
- package/dist/postgres/overlays/columns.d.ts +6 -0
- package/dist/postgres/overlays/columns.d.ts.map +1 -0
- package/dist/postgres/overlays/constraints.d.ts +8 -0
- package/dist/postgres/overlays/constraints.d.ts.map +1 -0
- package/dist/postgres/overlays/indexes.d.ts +8 -0
- package/dist/postgres/overlays/indexes.d.ts.map +1 -0
- package/dist/postgres/overlays/kinds.d.ts +48 -0
- package/dist/postgres/overlays/kinds.d.ts.map +1 -0
- package/dist/postgres/overlays/partitioning.d.ts +5 -0
- package/dist/postgres/overlays/partitioning.d.ts.map +1 -0
- package/dist/postgres/overlays/relations.d.ts +6 -0
- package/dist/postgres/overlays/relations.d.ts.map +1 -0
- package/dist/postgres/overlays/storage.d.ts +28 -0
- package/dist/postgres/overlays/storage.d.ts.map +1 -0
- package/dist/postgres/overlays/type-ddl.d.ts +7 -0
- package/dist/postgres/overlays/type-ddl.d.ts.map +1 -0
- package/dist/postgres/overlays/types.d.ts +24 -0
- package/dist/postgres/overlays/types.d.ts.map +1 -0
- package/dist/postgres/parser.d.ts +216 -0
- package/dist/postgres/parser.d.ts.map +1 -0
- package/dist/postgres/plan/commands.d.ts +61 -0
- package/dist/postgres/plan/commands.d.ts.map +1 -0
- package/dist/postgres/plan/deep.d.ts +33 -0
- package/dist/postgres/plan/deep.d.ts.map +1 -0
- package/dist/postgres/plan/diff.d.ts +45 -0
- package/dist/postgres/plan/diff.d.ts.map +1 -0
- package/dist/postgres/plan/disruption.d.ts +14 -0
- package/dist/postgres/plan/disruption.d.ts.map +1 -0
- package/dist/postgres/plan/normalize.d.ts +108 -0
- package/dist/postgres/plan/normalize.d.ts.map +1 -0
- package/dist/postgres/plan/report.d.ts +6 -0
- package/dist/postgres/plan/report.d.ts.map +1 -0
- package/dist/postgres/plan/rules.d.ts +84 -0
- package/dist/postgres/plan/rules.d.ts.map +1 -0
- package/dist/postgres/plan/schema.d.ts +50 -0
- package/dist/postgres/plan/schema.d.ts.map +1 -0
- package/dist/postgres/plan/server-normalize.d.ts +26 -0
- package/dist/postgres/plan/server-normalize.d.ts.map +1 -0
- package/dist/postgres/providers/aurora.d.ts +12 -0
- package/dist/postgres/providers/aurora.d.ts.map +1 -0
- package/dist/postgres/providers/azure.d.ts +14 -0
- package/dist/postgres/providers/azure.d.ts.map +1 -0
- package/dist/postgres/providers/cloud-sql.d.ts +11 -0
- package/dist/postgres/providers/cloud-sql.d.ts.map +1 -0
- package/dist/postgres/providers/index.d.ts +35 -0
- package/dist/postgres/providers/index.d.ts.map +1 -0
- package/dist/postgres/providers/neon.d.ts +13 -0
- package/dist/postgres/providers/neon.d.ts.map +1 -0
- package/dist/postgres/providers/rds.d.ts +10 -0
- package/dist/postgres/providers/rds.d.ts.map +1 -0
- package/dist/postgres/providers/supabase.d.ts +12 -0
- package/dist/postgres/providers/supabase.d.ts.map +1 -0
- package/dist/postgres/providers/types.d.ts +59 -0
- package/dist/postgres/providers/types.d.ts.map +1 -0
- package/dist/postgres/testing/fake-client.d.ts +38 -0
- package/dist/postgres/testing/fake-client.d.ts.map +1 -0
- package/dist/postgres/testing/migration.d.ts +25 -0
- package/dist/postgres/testing/migration.d.ts.map +1 -0
- package/dist/postgres/testing/roundtrip-schema.d.ts +11 -0
- package/dist/postgres/testing/roundtrip-schema.d.ts.map +1 -0
- package/dist/postgres/testing/server.d.ts +17 -0
- package/dist/postgres/testing/server.d.ts.map +1 -0
- package/dist/postgres/testing/writable-server.d.ts +45 -0
- package/dist/postgres/testing/writable-server.d.ts.map +1 -0
- package/dist/postgres/tokens.d.ts +26 -0
- package/dist/postgres/tokens.d.ts.map +1 -0
- package/dist/postgres.d.ts +13 -0
- package/dist/postgres.d.ts.map +1 -0
- package/dist/rules/audit-entries.ts +29 -0
- package/dist/rules/clickhouse-helpers.ts +206 -0
- package/dist/rules/postgres-audit-entries.ts +29 -0
- package/dist/rules/postgres-helpers.ts +126 -0
- package/dist/rules/postgres-templates.ts +36 -0
- package/dist/rules/sql-helpers.ts +53 -0
- package/dist/rules/sqlch001.ts +53 -0
- package/dist/rules/sqlch002.ts +115 -0
- package/dist/rules/sqlch003.ts +68 -0
- package/dist/rules/sqlch101.ts +35 -0
- package/dist/rules/sqlch102.ts +23 -0
- package/dist/rules/sqlch103.ts +45 -0
- package/dist/rules/sqlch104.ts +42 -0
- package/dist/rules/sqlch105.ts +35 -0
- package/dist/rules/sqlch106.ts +27 -0
- package/dist/rules/sqlch107.ts +35 -0
- package/dist/rules/sqlch108.ts +27 -0
- package/dist/rules/sqlch109.ts +21 -0
- package/dist/rules/sqlch110.ts +29 -0
- package/dist/rules/sqlch111.ts +40 -0
- package/dist/rules/sqlch112.ts +30 -0
- package/dist/rules/sqlch113.ts +20 -0
- package/dist/rules/sqlch114.ts +26 -0
- package/dist/rules/sqlch115.ts +31 -0
- package/dist/rules/sqlch116.ts +22 -0
- package/dist/rules/sqlch117.ts +25 -0
- package/dist/rules/sqlch118.ts +26 -0
- package/dist/rules/sqlch119.ts +31 -0
- package/dist/rules/sqlch120.ts +21 -0
- package/dist/rules/sqlpg001.ts +88 -0
- package/dist/rules/sqlpg002.ts +68 -0
- package/dist/rules/sqlpg003.ts +59 -0
- package/dist/rules/sqlpg004.ts +73 -0
- package/dist/rules/sqlpg101.ts +24 -0
- package/dist/rules/sqlpg102.ts +30 -0
- package/dist/rules/sqlpg103.ts +23 -0
- package/dist/rules/sqlpg104.ts +23 -0
- package/dist/rules/sqlpg105.ts +22 -0
- package/dist/rules/sqlpg106.ts +22 -0
- package/dist/rules/sqlpg107.ts +22 -0
- package/dist/rules/sqlpg108.ts +27 -0
- package/dist/rules/sqlpg109.ts +37 -0
- package/dist/rules/sqlpg110.ts +33 -0
- package/dist/rules/sqlpg111.ts +23 -0
- package/dist/rules/sqlpg112.ts +25 -0
- package/dist/rules/sqlpg113.ts +28 -0
- package/dist/rules/sqlpg114.ts +37 -0
- package/dist/rules/sqlpg115.ts +38 -0
- package/dist/rules/sqlpg116.ts +25 -0
- package/dist/rules/sqlpg117.ts +24 -0
- package/dist/rules/sqlpg118.ts +22 -0
- package/dist/rules/templates.ts +35 -0
- package/dist/serializer.d.ts +37 -0
- package/dist/serializer.d.ts.map +1 -0
- package/dist/skill-defs.d.ts +3 -0
- package/dist/skill-defs.d.ts.map +1 -0
- package/dist/spec/catalog.d.ts +125 -0
- package/dist/spec/catalog.d.ts.map +1 -0
- package/dist/spec/fetch.d.ts +43 -0
- package/dist/spec/fetch.d.ts.map +1 -0
- package/dist/spec/pin.d.ts +39 -0
- package/dist/spec/pin.d.ts.map +1 -0
- package/dist/spec/postgres-catalog.d.ts +108 -0
- package/dist/spec/postgres-catalog.d.ts.map +1 -0
- package/dist/spec/postgres-fetch.d.ts +46 -0
- package/dist/spec/postgres-fetch.d.ts.map +1 -0
- package/dist/spec/postgres-pin.d.ts +67 -0
- package/dist/spec/postgres-pin.d.ts.map +1 -0
- package/dist/types/index.d.ts +4386 -0
- package/dist/validate-cli.d.ts +3 -0
- package/dist/validate-cli.d.ts.map +1 -0
- package/dist/validate.d.ts +15 -0
- package/dist/validate.d.ts.map +1 -0
- package/package.json +74 -4
- package/src/clickhouse/apply/apply.ts +288 -0
- package/src/clickhouse/apply/mutations.ts +90 -0
- package/src/clickhouse/apply/statements.ts +393 -0
- package/src/clickhouse/catalog-types.ts +84 -0
- package/src/clickhouse/container.ts +176 -0
- package/src/clickhouse/engine-syntax.test.ts +53 -0
- package/src/clickhouse/engine-syntax.ts +173 -0
- package/src/clickhouse/entities.test.ts +188 -0
- package/src/clickhouse/entities.ts +425 -0
- package/src/clickhouse/http.ts +76 -0
- package/src/clickhouse/import/generator.ts +153 -0
- package/src/clickhouse/import/import.test.ts +157 -0
- package/src/clickhouse/import/ir.ts +171 -0
- package/src/clickhouse/import/live-export.ts +53 -0
- package/src/clickhouse/import/parser.ts +27 -0
- package/src/clickhouse/import/roundtrip.test.ts +90 -0
- package/src/clickhouse/live/bind.ts +126 -0
- package/src/clickhouse/live/catalog.ts +96 -0
- package/src/clickhouse/live/describe-resources.ts +98 -0
- package/src/clickhouse/live/live.test.ts +143 -0
- package/src/clickhouse/live/roundtrip.e2e.test.ts +93 -0
- package/src/clickhouse/overlays/codecs.ts +68 -0
- package/src/clickhouse/overlays/engines.ts +108 -0
- package/src/clickhouse/overlays/kinds.ts +38 -0
- package/src/clickhouse/overlays/projections.ts +36 -0
- package/src/clickhouse/overlays/skip-indexes.ts +44 -0
- package/src/clickhouse/overlays/ttl.ts +55 -0
- package/src/clickhouse/overlays/types.ts +58 -0
- package/src/clickhouse/ownership.test.ts +20 -0
- package/src/clickhouse/ownership.ts +103 -0
- package/src/clickhouse/parser.test.ts +166 -0
- package/src/clickhouse/parser.ts +459 -0
- package/src/clickhouse/plan/commands.ts +101 -0
- package/src/clickhouse/plan/deep.ts +124 -0
- package/src/clickhouse/plan/diff.ts +203 -0
- package/src/clickhouse/plan/disruption.ts +61 -0
- package/src/clickhouse/plan/normalize.ts +352 -0
- package/src/clickhouse/plan/plan-wiring.test.ts +77 -0
- package/src/clickhouse/plan/plan.e2e.test.ts +77 -0
- package/src/clickhouse/plan/plan.test.ts +201 -0
- package/src/clickhouse/plan/rebuild-handoff.ts +59 -0
- package/src/clickhouse/plan/report.ts +19 -0
- package/src/clickhouse/plan/rules.ts +241 -0
- package/src/clickhouse/plan/schema.ts +56 -0
- package/src/clickhouse/plan/server-format.ts +39 -0
- package/src/clickhouse/rebuild/backfill.ts +186 -0
- package/src/clickhouse/rebuild/observe.ts +380 -0
- package/src/clickhouse/rebuild/op.ts +206 -0
- package/src/clickhouse/rebuild/partitions.ts +62 -0
- package/src/clickhouse/rebuild/rebuild-replicated.e2e.test.ts +513 -0
- package/src/clickhouse/rebuild/rebuild.e2e.test.ts +351 -0
- package/src/clickhouse/rebuild/rebuild.test.ts +190 -0
- package/src/clickhouse/rebuild/receipts.ts +143 -0
- package/src/clickhouse/rebuild/replicas.test.ts +70 -0
- package/src/clickhouse/rebuild/replicas.ts +148 -0
- package/src/clickhouse/rebuild/steps.ts +382 -0
- package/src/clickhouse/rebuild/verify.ts +124 -0
- package/src/clickhouse/testdata/NOTICE +5 -0
- package/src/clickhouse/testdata/clickhouse-tests-corpus.json +302 -0
- package/src/clickhouse/testing/fake-server.ts +65 -0
- package/src/clickhouse/testing/roundtrip-schema.ts +25 -0
- package/src/clickhouse/testing/writable-server.ts +141 -0
- package/src/clickhouse/tokens.ts +28 -0
- package/src/clickhouse.ts +63 -0
- package/src/codegen/classifier-page.test.ts +16 -0
- package/src/codegen/classifier-page.ts +76 -0
- package/src/codegen/clickhouse-module.test.ts +63 -0
- package/src/codegen/clickhouse-module.ts +269 -0
- package/src/codegen/docs-cli.ts +4 -0
- package/src/codegen/docs.ts +225 -0
- package/src/codegen/generate-cli.ts +13 -0
- package/src/codegen/generate.ts +126 -0
- package/src/codegen/package.ts +36 -0
- package/src/codegen/postgres-classifier-page.ts +81 -0
- package/src/codegen/postgres-module.test.ts +77 -0
- package/src/codegen/postgres-module.ts +434 -0
- package/src/codegen/registry.ts +36 -0
- package/src/composites/audit-log-table.ts +54 -0
- package/src/composites/catalog.test.ts +61 -0
- package/src/composites/catalog.ts +529 -0
- package/src/composites/cdc-mirror.ts +54 -0
- package/src/composites/clickhouse.ts +7 -0
- package/src/composites/composites.test.ts +758 -0
- package/src/composites/events-table.ts +49 -0
- package/src/composites/index.ts +9 -0
- package/src/composites/join-table.ts +57 -0
- package/src/composites/postgres.ts +7 -0
- package/src/composites/refreshed-view.ts +46 -0
- package/src/composites/replacing-table.ts +49 -0
- package/src/composites/rollup-view.ts +55 -0
- package/src/composites/sharded-table.ts +49 -0
- package/src/composites/soft-delete-table.ts +61 -0
- package/src/composites/tenant-table.ts +50 -0
- package/src/config.ts +157 -0
- package/src/core/apply.ts +153 -0
- package/src/core/classifier.ts +186 -0
- package/src/core/container.ts +93 -0
- package/src/core/core.test.ts +254 -0
- package/src/core/cursor.ts +189 -0
- package/src/core/diff.ts +72 -0
- package/src/core/entity.ts +85 -0
- package/src/core/find-templates.ts +158 -0
- package/src/core/handoff.ts +44 -0
- package/src/core/index.ts +61 -0
- package/src/core/interpolation.ts +225 -0
- package/src/core/normalize.ts +39 -0
- package/src/core/ownership.test.ts +36 -0
- package/src/core/ownership.ts +133 -0
- package/src/core/receipts.ts +29 -0
- package/src/core/references.ts +74 -0
- package/src/core/template.ts +83 -0
- package/src/core/testing/http-stub.ts +33 -0
- package/src/core/tokens.ts +252 -0
- package/src/coverage.ts +64 -0
- package/src/detect.ts +32 -0
- package/src/dialects.ts +21 -0
- package/src/generated/clickhouse-types.ts +4386 -0
- package/src/generated/clickhouse.ts +2476 -0
- package/src/generated/index.d.ts +4386 -0
- package/src/generated/lexicon-sql.json +67 -0
- package/src/generated/postgres-types.ts +1190 -0
- package/src/generated/postgres.ts +1039 -0
- package/src/import-generator.ts +18 -0
- package/src/index.ts +21 -0
- package/src/init-templates.test.ts +108 -0
- package/src/init-templates.ts +327 -0
- package/src/lint/audit-catalog.ts +73 -0
- package/src/lint/audit-lineage.ts +47 -0
- package/src/lint/post-synth/audit-entries.ts +29 -0
- package/src/lint/post-synth/clickhouse-checks.test.ts +278 -0
- package/src/lint/post-synth/clickhouse-helpers.ts +206 -0
- package/src/lint/post-synth/index.ts +81 -0
- package/src/lint/post-synth/post-synth.test.ts +33 -0
- package/src/lint/post-synth/postgres-audit-entries.ts +29 -0
- package/src/lint/post-synth/postgres-checks.test.ts +257 -0
- package/src/lint/post-synth/postgres-helpers.ts +126 -0
- package/src/lint/post-synth/sql-helpers.ts +53 -0
- package/src/lint/post-synth/sqlch101.ts +35 -0
- package/src/lint/post-synth/sqlch102.ts +23 -0
- package/src/lint/post-synth/sqlch103.ts +45 -0
- package/src/lint/post-synth/sqlch104.ts +42 -0
- package/src/lint/post-synth/sqlch105.ts +35 -0
- package/src/lint/post-synth/sqlch106.ts +27 -0
- package/src/lint/post-synth/sqlch107.ts +35 -0
- package/src/lint/post-synth/sqlch108.ts +27 -0
- package/src/lint/post-synth/sqlch109.ts +21 -0
- package/src/lint/post-synth/sqlch110.ts +29 -0
- package/src/lint/post-synth/sqlch111.ts +40 -0
- package/src/lint/post-synth/sqlch112.ts +30 -0
- package/src/lint/post-synth/sqlch113.ts +20 -0
- package/src/lint/post-synth/sqlch114.ts +26 -0
- package/src/lint/post-synth/sqlch115.ts +31 -0
- package/src/lint/post-synth/sqlch116.ts +22 -0
- package/src/lint/post-synth/sqlch117.ts +25 -0
- package/src/lint/post-synth/sqlch118.ts +26 -0
- package/src/lint/post-synth/sqlch119.ts +31 -0
- package/src/lint/post-synth/sqlch120.ts +21 -0
- package/src/lint/post-synth/sqlpg101.ts +24 -0
- package/src/lint/post-synth/sqlpg102.ts +30 -0
- package/src/lint/post-synth/sqlpg103.ts +23 -0
- package/src/lint/post-synth/sqlpg104.ts +23 -0
- package/src/lint/post-synth/sqlpg105.ts +22 -0
- package/src/lint/post-synth/sqlpg106.ts +22 -0
- package/src/lint/post-synth/sqlpg107.ts +22 -0
- package/src/lint/post-synth/sqlpg108.ts +27 -0
- package/src/lint/post-synth/sqlpg109.ts +37 -0
- package/src/lint/post-synth/sqlpg110.ts +33 -0
- package/src/lint/post-synth/sqlpg111.ts +23 -0
- package/src/lint/post-synth/sqlpg112.ts +25 -0
- package/src/lint/post-synth/sqlpg113.ts +28 -0
- package/src/lint/post-synth/sqlpg114.ts +37 -0
- package/src/lint/post-synth/sqlpg115.ts +38 -0
- package/src/lint/post-synth/sqlpg116.ts +25 -0
- package/src/lint/post-synth/sqlpg117.ts +24 -0
- package/src/lint/post-synth/sqlpg118.ts +22 -0
- package/src/lint/rules/index.ts +13 -0
- package/src/lint/rules/postgres-templates.ts +36 -0
- package/src/lint/rules/rules.test.ts +228 -0
- package/src/lint/rules/sqlch001.ts +53 -0
- package/src/lint/rules/sqlch002.ts +115 -0
- package/src/lint/rules/sqlch003.ts +68 -0
- package/src/lint/rules/sqlpg001.ts +88 -0
- package/src/lint/rules/sqlpg002.ts +68 -0
- package/src/lint/rules/sqlpg003.ts +59 -0
- package/src/lint/rules/sqlpg004.ts +73 -0
- package/src/lint/rules/templates.ts +35 -0
- package/src/live-dialect.ts +37 -0
- package/src/lsp/catalog.ts +60 -0
- package/src/lsp/completions.test.ts +111 -0
- package/src/lsp/completions.ts +128 -0
- package/src/lsp/diagnostics.test.ts +26 -0
- package/src/lsp/hover.test.ts +90 -0
- package/src/lsp/hover.ts +113 -0
- package/src/lsp/postgres-catalog.ts +234 -0
- package/src/lsp/postgres-template.ts +161 -0
- package/src/lsp/postgres.test.ts +150 -0
- package/src/lsp/postgres.ts +270 -0
- package/src/lsp/refs.ts +53 -0
- package/src/lsp/registry.ts +19 -0
- package/src/lsp/template.ts +166 -0
- package/src/mcp/index.ts +304 -0
- package/src/mcp/mcp.test.ts +184 -0
- package/src/mcp/postgres.ts +125 -0
- package/src/op/activities/clickhouse-apply.e2e.test.ts +150 -0
- package/src/op/activities/clickhouse-apply.test.ts +265 -0
- package/src/op/activities/clickhouse-apply.ts +113 -0
- package/src/op/activities/clickhouse-emulator.test.ts +23 -0
- package/src/op/activities/clickhouse-emulator.ts +37 -0
- package/src/op/activities/clickhouse-rebuild.ts +136 -0
- package/src/op/activities/index.ts +50 -0
- package/src/op/activities/postgres-apply.e2e.test.ts +184 -0
- package/src/op/activities/postgres-apply.test.ts +304 -0
- package/src/op/activities/postgres-apply.ts +170 -0
- package/src/op/activities/postgres-emulator.test.ts +26 -0
- package/src/op/activities/postgres-emulator.ts +44 -0
- package/src/op/activities/postgres-migration.ts +182 -0
- package/src/op/activity-contracts.ts +210 -0
- package/src/package-cli.ts +17 -0
- package/src/plugin.test.ts +74 -0
- package/src/plugin.ts +242 -0
- package/src/postgres/apply/apply.ts +582 -0
- package/src/postgres/apply/statements.test.ts +155 -0
- package/src/postgres/apply/statements.ts +603 -0
- package/src/postgres/catalog-types.ts +59 -0
- package/src/postgres/container.ts +72 -0
- package/src/postgres/entities.test.ts +170 -0
- package/src/postgres/entities.ts +1016 -0
- package/src/postgres/entity-types.ts +18 -0
- package/src/postgres/import/generator.ts +176 -0
- package/src/postgres/import/import.test.ts +71 -0
- package/src/postgres/import/ir.ts +67 -0
- package/src/postgres/import/live-export.ts +53 -0
- package/src/postgres/import/live-warnings.test.ts +45 -0
- package/src/postgres/keywords.ts +40 -0
- package/src/postgres/live/bind.ts +146 -0
- package/src/postgres/live/catalog.ts +581 -0
- package/src/postgres/live/client.ts +84 -0
- package/src/postgres/live/describe-resources.ts +111 -0
- package/src/postgres/live/live.test.ts +198 -0
- package/src/postgres/live/roundtrip.e2e.test.ts +111 -0
- package/src/postgres/migrate/backfill.ts +233 -0
- package/src/postgres/migrate/batches.e2e.test.ts +163 -0
- package/src/postgres/migrate/batches.test.ts +36 -0
- package/src/postgres/migrate/batches.ts +159 -0
- package/src/postgres/migrate/carry.e2e.test.ts +335 -0
- package/src/postgres/migrate/carry.test.ts +103 -0
- package/src/postgres/migrate/carry.ts +653 -0
- package/src/postgres/migrate/handoff.ts +73 -0
- package/src/postgres/migrate/kinds.e2e.test.ts +204 -0
- package/src/postgres/migrate/migrate.e2e.test.ts +362 -0
- package/src/postgres/migrate/migrate.test.ts +322 -0
- package/src/postgres/migrate/names.ts +93 -0
- package/src/postgres/migrate/observe.ts +521 -0
- package/src/postgres/migrate/op.ts +242 -0
- package/src/postgres/migrate/receipts.ts +135 -0
- package/src/postgres/migrate/replication.ts +151 -0
- package/src/postgres/migrate/steps.ts +657 -0
- package/src/postgres/overlays/columns.ts +34 -0
- package/src/postgres/overlays/constraints.ts +56 -0
- package/src/postgres/overlays/indexes.ts +27 -0
- package/src/postgres/overlays/kinds.ts +53 -0
- package/src/postgres/overlays/partitioning.ts +26 -0
- package/src/postgres/overlays/relations.ts +29 -0
- package/src/postgres/overlays/storage.ts +75 -0
- package/src/postgres/overlays/type-ddl.ts +38 -0
- package/src/postgres/overlays/types.ts +56 -0
- package/src/postgres/parser.test.ts +214 -0
- package/src/postgres/parser.ts +1062 -0
- package/src/postgres/plan/commands.ts +124 -0
- package/src/postgres/plan/deep.ts +177 -0
- package/src/postgres/plan/diff.ts +323 -0
- package/src/postgres/plan/disruption.ts +52 -0
- package/src/postgres/plan/normalize.test.ts +148 -0
- package/src/postgres/plan/normalize.ts +542 -0
- package/src/postgres/plan/plan.e2e.test.ts +117 -0
- package/src/postgres/plan/plan.test.ts +244 -0
- package/src/postgres/plan/report.ts +24 -0
- package/src/postgres/plan/rules.ts +276 -0
- package/src/postgres/plan/schema.ts +114 -0
- package/src/postgres/plan/server-normalize.ts +123 -0
- package/src/postgres/providers/aurora.ts +45 -0
- package/src/postgres/providers/azure.ts +54 -0
- package/src/postgres/providers/cloud-sql.ts +42 -0
- package/src/postgres/providers/index.ts +90 -0
- package/src/postgres/providers/neon.ts +45 -0
- package/src/postgres/providers/providers.test.ts +136 -0
- package/src/postgres/providers/rds.ts +48 -0
- package/src/postgres/providers/supabase.ts +46 -0
- package/src/postgres/providers/types.ts +70 -0
- package/src/postgres/testdata/NOTICE +31 -0
- package/src/postgres/testdata/postgres-regress-corpus.json +460 -0
- package/src/postgres/testing/fake-client.ts +42 -0
- package/src/postgres/testing/migration.ts +52 -0
- package/src/postgres/testing/roundtrip-schema.ts +46 -0
- package/src/postgres/testing/server.ts +58 -0
- package/src/postgres/testing/writable-server.ts +188 -0
- package/src/postgres/tokens.ts +46 -0
- package/src/postgres.ts +75 -0
- package/src/serializer.test.ts +128 -0
- package/src/serializer.ts +148 -0
- package/src/skill-defs.test.ts +81 -0
- package/src/skill-defs.ts +102 -0
- package/src/skills/chant-sql-plan.md +123 -0
- package/src/skills/chant-sql-postgres-migration.md +126 -0
- package/src/skills/chant-sql-postgres-plan.md +194 -0
- package/src/skills/chant-sql-postgres.md +165 -0
- package/src/skills/chant-sql-rebuild.md +68 -0
- package/src/skills/chant-sql.md +123 -0
- package/src/spec/catalog.e2e.test.ts +29 -0
- package/src/spec/catalog.test.ts +56 -0
- package/src/spec/catalog.ts +311 -0
- package/src/spec/clickhouse-catalog.snapshot.json +5246 -0
- package/src/spec/fetch.test.ts +77 -0
- package/src/spec/fetch.ts +112 -0
- package/src/spec/pin.ts +47 -0
- package/src/spec/postgres-catalog-14.snapshot.json +3494 -0
- package/src/spec/postgres-catalog-15.snapshot.json +3529 -0
- package/src/spec/postgres-catalog-16.snapshot.json +3597 -0
- package/src/spec/postgres-catalog-17.snapshot.json +3656 -0
- package/src/spec/postgres-catalog-18.snapshot.json +3747 -0
- package/src/spec/postgres-catalog.test.ts +43 -0
- package/src/spec/postgres-catalog.ts +301 -0
- package/src/spec/postgres-fetch.test.ts +75 -0
- package/src/spec/postgres-fetch.ts +112 -0
- package/src/spec/postgres-pin.test.ts +64 -0
- package/src/spec/postgres-pin.ts +101 -0
- package/src/typecheck.test.ts +104 -0
- package/src/validate-cli.ts +6 -0
- package/src/validate.ts +149 -0
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Documentation generation for the sql lexicon: the generated reference pages
|
|
3
|
+
* from the core docs pipeline, plus the authored pages in docs/pages/.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { dirname, join } from "path";
|
|
7
|
+
import { fileURLToPath } from "url";
|
|
8
|
+
import { writeFileSync } from "fs";
|
|
9
|
+
import { docsPipeline, writeDocsSite, type DocsConfig } from "@intentius/chant/codegen/docs";
|
|
10
|
+
import { renderClassifierPage } from "./classifier-page";
|
|
11
|
+
import { renderPostgresClassifierPage } from "./postgres-classifier-page";
|
|
12
|
+
|
|
13
|
+
const overview = `The sql lexicon declares database schema in TypeScript. It has two dialects,
|
|
14
|
+
each a subpath of the one package: ClickHouse at
|
|
15
|
+
\`@intentius/chant-lexicon-sql/clickhouse\` and Postgres at
|
|
16
|
+
\`@intentius/chant-lexicon-sql/postgres\`. A declaration is the database's own
|
|
17
|
+
\`CREATE\` statement in a tagged template, and an interpolated object or
|
|
18
|
+
column stays a reference. Install it with
|
|
19
|
+
\`npm install --save-dev @intentius/chant @intentius/chant-lexicon-sql\`; each
|
|
20
|
+
dialect's Getting Started page runs the example the lexicon ships.
|
|
21
|
+
|
|
22
|
+
\`\`\`ts
|
|
23
|
+
import { database, table, view } from "@intentius/chant-lexicon-sql/clickhouse";
|
|
24
|
+
|
|
25
|
+
export const analytics = database\`CREATE DATABASE analytics ENGINE = Atomic\`;
|
|
26
|
+
|
|
27
|
+
export const events = table\`
|
|
28
|
+
CREATE TABLE \${analytics}.events (
|
|
29
|
+
user_id UUID,
|
|
30
|
+
kind LowCardinality(String),
|
|
31
|
+
ts DateTime
|
|
32
|
+
)
|
|
33
|
+
ENGINE = MergeTree
|
|
34
|
+
ORDER BY (user_id, kind, ts)\`;
|
|
35
|
+
\`\`\`
|
|
36
|
+
|
|
37
|
+
\`\`\`ts
|
|
38
|
+
import { schema, table, index } from "@intentius/chant-lexicon-sql/postgres";
|
|
39
|
+
|
|
40
|
+
export const app = schema\`CREATE SCHEMA app\`;
|
|
41
|
+
|
|
42
|
+
export const users = table\`
|
|
43
|
+
CREATE TABLE \${app}.users (
|
|
44
|
+
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
45
|
+
email text NOT NULL UNIQUE
|
|
46
|
+
)\`;
|
|
47
|
+
|
|
48
|
+
export const usersEmail = index\`
|
|
49
|
+
CREATE INDEX CONCURRENTLY users_email_lower_idx ON \${users} (lower(\${users.columns.email}))\`;
|
|
50
|
+
\`\`\`
|
|
51
|
+
|
|
52
|
+
## Spec-true per dialect
|
|
53
|
+
|
|
54
|
+
Each dialect is true to its own database. For SQL the spec is the database's
|
|
55
|
+
own DDL, so a ClickHouse declaration is a ClickHouse \`CREATE\` statement and a
|
|
56
|
+
Postgres declaration a Postgres one. The names a declaration can use (engines,
|
|
57
|
+
codecs and settings for ClickHouse; types, access methods, storage parameters
|
|
58
|
+
and extensions for Postgres) are generated from a pinned server's own catalog:
|
|
59
|
+
ClickHouse's \`system.*\` tables, and Postgres's \`pg_catalog\` at one pinned
|
|
60
|
+
release of each supported major. There is no neutral schema model that the
|
|
61
|
+
dialects are translated from.
|
|
62
|
+
|
|
63
|
+
The reason is that the databases differ exactly where a schema tool does its
|
|
64
|
+
work. ClickHouse has no foreign keys and no transactional DDL, and it cannot
|
|
65
|
+
change a table's sort key, partition key or engine in place: the rows have to
|
|
66
|
+
be copied into a new table. Postgres makes most changes in place and inside a
|
|
67
|
+
transaction, and what a change costs there is the lock it takes: adding a
|
|
68
|
+
column with a constant default is a catalog change, a type change that
|
|
69
|
+
rewrites the table blocks every reader until it finishes, and an index built
|
|
70
|
+
without \`CONCURRENTLY\` blocks every writer. A neutral model would have to hide
|
|
71
|
+
those differences, so a plan could not say what a change will cost, or carry
|
|
72
|
+
every dialect's features and check each one against the target anyway.
|
|
73
|
+
|
|
74
|
+
So each dialect has its own types, parser, lint rules and post-synth checks,
|
|
75
|
+
change classifier, applier, migration Op, composites and skills. What the two
|
|
76
|
+
share is the way of working:
|
|
77
|
+
|
|
78
|
+
| | ClickHouse | Postgres |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| Declaring | \`database\`, \`table\`, \`view\` | \`schema\`, \`table\`, \`index\`, \`view\`, \`sequence\`, \`type\`, \`domain\`, \`extension\` |
|
|
81
|
+
| Types from | one pinned \`clickhouse-server\` release | one pinned \`postgres\` release per major, 14 to 18 |
|
|
82
|
+
| Rule ids | SQLCH001-003, SQLCH101-120, SQLCH200-250 | SQLPG001-004, SQLPG101-118, SQLPG200-270 |
|
|
83
|
+
| Change classes | metadata only, background rewrite, rebuild | metadata only, validates under a weaker lock, needs \`CONCURRENTLY\`, \`ACCESS EXCLUSIVE\` rewrite or scan, expand and contract |
|
|
84
|
+
| Applier (\`ApplyOp\` target) | \`clickhouseApply\` (\`clickhouse\`) | \`postgresApply\` (\`postgres\`) |
|
|
85
|
+
| What a plan refuses runs as | \`ClickHouseRebuildOp\` | \`PostgresMigrationOp\` |
|
|
86
|
+
| Ownership marker | a trailer on the object's comment | a trailer on the object's comment |
|
|
87
|
+
|
|
88
|
+
References, dependency order and column lineage work the same way in both, as
|
|
89
|
+
do \`chant sql diff\` and \`chant sql plan\` (they read the build's
|
|
90
|
+
\`dialect\`), import with \`chant import --from <env>\`, the \`-- previously:\`
|
|
91
|
+
rename hint, and the comment trailer that marks what chant owns.
|
|
92
|
+
|
|
93
|
+
One build holds one dialect. A project that declares both ClickHouse and
|
|
94
|
+
Postgres objects fails the build naming one of each; a Postgres database and
|
|
95
|
+
a ClickHouse database are two projects, which a workspace can hold as two
|
|
96
|
+
members. \`sql.dialect\` in \`chant.config.ts\` says which dialect a project is
|
|
97
|
+
when nothing declared says so, as for an import into an empty project.
|
|
98
|
+
|
|
99
|
+
## Pages
|
|
100
|
+
|
|
101
|
+
ClickHouse:
|
|
102
|
+
|
|
103
|
+
- [Getting Started with ClickHouse](./getting-started/): declare a schema,
|
|
104
|
+
build it, apply it to a local server and plan a change against it.
|
|
105
|
+
- [Declaring ClickHouse Tables and Views](./clickhouse-ddl/): databases,
|
|
106
|
+
tables, views and materialized views, and what each kind of interpolation
|
|
107
|
+
means.
|
|
108
|
+
- [Importing a ClickHouse Server](./importing/): \`chant import --from <env>\`
|
|
109
|
+
from \`SHOW CREATE\`.
|
|
110
|
+
- [Planning and the Change Classifier](./change-classifier/): every change
|
|
111
|
+
classified as metadata only, a background rewrite or a rebuild.
|
|
112
|
+
- [Applying to a ClickHouse Server](./applying/): \`clickhouseApply\`, the
|
|
113
|
+
ownership marker, prune and the local server.
|
|
114
|
+
- [Rebuilding a Table](./rebuild/): \`ClickHouseRebuildOp\` for the changes
|
|
115
|
+
ClickHouse cannot make in place.
|
|
116
|
+
- [Where the ClickHouse Types Come From](./clickhouse-catalog/): the pinned
|
|
117
|
+
server and how to move the pin.
|
|
118
|
+
|
|
119
|
+
Postgres:
|
|
120
|
+
|
|
121
|
+
- [Getting Started with Postgres](./postgres-getting-started/): declare a
|
|
122
|
+
schema, apply it to a local server, add a column and an index, and see a
|
|
123
|
+
rename refused.
|
|
124
|
+
- [Declaring Postgres Objects](./postgres-ddl/): the eight tags,
|
|
125
|
+
constraints, \`nextval(\${seq})\`, \`COMMENT ON\` and \`literal()\`.
|
|
126
|
+
- [Importing a Postgres Server](./postgres-importing/): canonical text from
|
|
127
|
+
the catalog's printers, and the objects that belong to someone else.
|
|
128
|
+
- [Postgres Locks and the Change Classifier](./postgres-change-classifier/):
|
|
129
|
+
every change classified by the lock it takes.
|
|
130
|
+
- [Applying to a Postgres Server](./postgres-applying/): transactions,
|
|
131
|
+
\`CONCURRENTLY\`, timeouts, ownership, prune and the local server.
|
|
132
|
+
- [Migrating a Column](./postgres-migration/): \`PostgresMigrationOp\`, the
|
|
133
|
+
expand-and-contract Op for a column rename or type change.
|
|
134
|
+
- [Managed Providers](./postgres-providers/): \`sql.provider\`, SQLPG004, and
|
|
135
|
+
what each provider's data has not verified.
|
|
136
|
+
- [The Postgres Pin and Supported Majors](./postgres-majors/): one pin per
|
|
137
|
+
major, \`sql.postgresMajor\`, and moving a pin.
|
|
138
|
+
|
|
139
|
+
Both dialects:
|
|
140
|
+
|
|
141
|
+
- [References and Lineage](./references-and-lineage/): how references become
|
|
142
|
+
dependency order and column-level lineage.
|
|
143
|
+
- [Composites](./composites/): five ClickHouse and five Postgres composites.
|
|
144
|
+
- [Lint Rules and Checks](./lint-rules/): every lint rule and post-synth
|
|
145
|
+
check.
|
|
146
|
+
|
|
147
|
+
## Schema changes and \`chant migrate\`
|
|
148
|
+
|
|
149
|
+
\`chant migrate\` translates a file from one lexicon's format into another's,
|
|
150
|
+
such as a GitHub Actions workflow into GitLab CI. It does not run schema
|
|
151
|
+
migrations, and the sql lexicon registers nothing for it. A schema change is a
|
|
152
|
+
change to the declarations: \`chant sql diff\` or \`chant sql plan\` classifies
|
|
153
|
+
it, the dialect's applier makes the changes it can make in place, and a change
|
|
154
|
+
it cannot make runs as a gated migration Op: \`ClickHouseRebuildOp\` (see
|
|
155
|
+
[Rebuilding a Table](./rebuild/)) or \`PostgresMigrationOp\` (see
|
|
156
|
+
[Migrating a Column](./postgres-migration/)).
|
|
157
|
+
`;
|
|
158
|
+
|
|
159
|
+
const outputFormat = `A build writes two files, beside each other. Which pair depends on the
|
|
160
|
+
dialect the project declares.
|
|
161
|
+
|
|
162
|
+
- The primary output (the \`-o\` file, \`dist/schema.json\` by convention), one
|
|
163
|
+
JSON document. \`dialect\` is \`clickhouse\` or \`postgres\`. \`applyOrder\`
|
|
164
|
+
lists the export names in the order the objects have to be created.
|
|
165
|
+
\`objects\` holds one entry per declared object, in that order: its export
|
|
166
|
+
name (\`export\`), its type, its SQL name (\`sqlName\`), its parsed
|
|
167
|
+
definition, \`dependsOn\`, and its \`ddl\`. References are written as export
|
|
168
|
+
names and lineage as \`export.column\`.
|
|
169
|
+
- ClickHouse: the types are \`ClickHouse::Database\`, \`::Table\`, \`::View\`
|
|
170
|
+
and \`::MaterializedView\`, and the definition holds columns, engine, keys,
|
|
171
|
+
TTL, settings, indexes, projections and constraints, and for a view its
|
|
172
|
+
\`select\`, \`reads\`, \`to\` and \`lineage\`.
|
|
173
|
+
- Postgres: the document also carries \`postgresMajor\`, the major the
|
|
174
|
+
project targets (\`sql.postgresMajor\`, else 18, the newest pinned). The
|
|
175
|
+
types are \`Postgres::Schema\`, \`::Table\`, \`::Index\`, \`::View\`,
|
|
176
|
+
\`::MaterializedView\`, \`::Sequence\`, \`::Enum\`, \`::Domain\` and
|
|
177
|
+
\`::Extension\`. A table's definition holds its columns, primary key,
|
|
178
|
+
uniques, checks, foreign keys, exclusions and the rest of its clauses; a
|
|
179
|
+
view's its \`query\`, \`reads\` and \`lineage\`; an index's its table,
|
|
180
|
+
method and elements. \`dependsOn\` names the objects and the columns the
|
|
181
|
+
statement references.
|
|
182
|
+
- \`clickhouse.sql\` or \`postgres.sql\`: every statement in \`applyOrder\`, each
|
|
183
|
+
ending in \`;\`, written byte for byte as declared, with a Postgres
|
|
184
|
+
template's \`COMMENT ON\` statements after its \`CREATE\`.
|
|
185
|
+
|
|
186
|
+
The order follows the references: a table after its database or schema and the
|
|
187
|
+
types and sequences it uses, a view after the tables it reads, an index after
|
|
188
|
+
its table, a materialized view after its \`TO\` target. Ties go by export name,
|
|
189
|
+
so the output does not depend on the order files were found in. A reference
|
|
190
|
+
cycle fails the build and names the cycle.
|
|
191
|
+
|
|
192
|
+
\`chant sql diff\`, \`chant sql plan\`, the post-synth checks and the appliers
|
|
193
|
+
read the JSON document. Neither file carries chant's ownership marker: the
|
|
194
|
+
applier adds it to each object's comment when it creates the object (see
|
|
195
|
+
[Applying to a ClickHouse Server](../applying/) and
|
|
196
|
+
[Applying to a Postgres Server](../postgres-applying/)).
|
|
197
|
+
`;
|
|
198
|
+
|
|
199
|
+
export async function generateDocs(opts?: { verbose?: boolean }): Promise<void> {
|
|
200
|
+
const pkgDir = dirname(dirname(dirname(fileURLToPath(import.meta.url))));
|
|
201
|
+
|
|
202
|
+
writeFileSync(join(pkgDir, "docs", "pages", "change-classifier.mdx"), renderClassifierPage());
|
|
203
|
+
writeFileSync(join(pkgDir, "docs", "pages", "postgres-change-classifier.mdx"), renderPostgresClassifierPage());
|
|
204
|
+
|
|
205
|
+
const config: DocsConfig = {
|
|
206
|
+
name: "sql",
|
|
207
|
+
displayName: "SQL",
|
|
208
|
+
description: "Database schema as typed declarations in each database's own DDL: ClickHouse and Postgres",
|
|
209
|
+
distDir: join(pkgDir, "dist"),
|
|
210
|
+
outDir: join(pkgDir, "docs"),
|
|
211
|
+
basePath: process.env.DOCS_BASE_PATH ?? "/chant/lexicons/sql/",
|
|
212
|
+
overview,
|
|
213
|
+
outputFormat,
|
|
214
|
+
serviceFromType: (type) => type.split("::")[0] ?? "SQL",
|
|
215
|
+
srcDir: join(pkgDir, "src"),
|
|
216
|
+
examplesDir: join(pkgDir, "examples"),
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
const result = docsPipeline(config);
|
|
220
|
+
writeDocsSite(config, result);
|
|
221
|
+
|
|
222
|
+
if (opts?.verbose) {
|
|
223
|
+
console.error(`Generated ${result.pages.size} documentation pages`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { generate, generatePostgres, writeGeneratedFiles } from "./generate";
|
|
3
|
+
|
|
4
|
+
// `npm run generate -- --force` reads the pinned servers even when the snapshots match the pins;
|
|
5
|
+
// `--major=18` limits the Postgres read to one major.
|
|
6
|
+
const force = process.argv.includes("--force");
|
|
7
|
+
const majors = process.argv
|
|
8
|
+
.filter((a) => a.startsWith("--major="))
|
|
9
|
+
.map((a) => Number.parseInt(a.slice("--major=".length), 10));
|
|
10
|
+
const result = await generate({ verbose: true, force });
|
|
11
|
+
const postgres = await generatePostgres({ force, ...(majors.length > 0 ? { majors } : {}) });
|
|
12
|
+
for (const note of postgres.notes) console.error(`[sql] ${note}`);
|
|
13
|
+
writeGeneratedFiles(result, undefined, postgres);
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The sql lexicon's generation pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Two dialects. ClickHouse's "schema" is the catalog a pinned
|
|
5
|
+
* `clickhouse-server` reports from `system.*`, committed as
|
|
6
|
+
* `src/spec/clickhouse-catalog.snapshot.json` (chant #3195). `fetchSchemas`
|
|
7
|
+
* reads that snapshot, and starts the pinned server only on a pin move; see
|
|
8
|
+
* `src/spec/fetch.ts`.
|
|
9
|
+
*
|
|
10
|
+
* Outputs, under `src/generated/`:
|
|
11
|
+
*
|
|
12
|
+
* - `clickhouse-types.ts` (and `index.d.ts`, the packaged copy): unions of every
|
|
13
|
+
* engine, type family, codec, skip index type, format and function name, and
|
|
14
|
+
* the `MergeTreeSettings` / `QuerySettings` interfaces.
|
|
15
|
+
* - `clickhouse.ts`: the tables lint and the LSP read, with the hand-written
|
|
16
|
+
* overlays (engine argument kinds, codec parameters) merged in.
|
|
17
|
+
* - `lexicon-sql.json`: the entity registry.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import {
|
|
21
|
+
generatePipeline,
|
|
22
|
+
writeGeneratedArtifacts,
|
|
23
|
+
type GenerateOptions,
|
|
24
|
+
type GenerateResult,
|
|
25
|
+
type ParsedResult,
|
|
26
|
+
} from "@intentius/chant/codegen/generate";
|
|
27
|
+
import { NamingStrategy } from "@intentius/chant/codegen/naming";
|
|
28
|
+
import { dirname } from "path";
|
|
29
|
+
import { fileURLToPath } from "url";
|
|
30
|
+
import { CATALOG_KEY, fetchSchemas } from "../spec/fetch";
|
|
31
|
+
import { parseCatalog, type ClickHouseCatalog } from "../spec/catalog";
|
|
32
|
+
import { renderClickHouseModule } from "./clickhouse-module";
|
|
33
|
+
import { buildRegistry } from "./registry";
|
|
34
|
+
import { fetchCatalogs, type FetchCatalogsOptions } from "../spec/postgres-fetch";
|
|
35
|
+
import { renderPostgresModule, type RenderedPostgresModule } from "./postgres-module";
|
|
36
|
+
|
|
37
|
+
export type { GenerateResult };
|
|
38
|
+
|
|
39
|
+
export interface ClickHouseParsed extends ParsedResult {
|
|
40
|
+
typeName: string;
|
|
41
|
+
catalog: ClickHouseCatalog;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export async function generate(opts: GenerateOptions = {}): Promise<GenerateResult> {
|
|
45
|
+
let notes: string[] = [];
|
|
46
|
+
let tables = "";
|
|
47
|
+
|
|
48
|
+
const result = await generatePipeline<ClickHouseParsed>(
|
|
49
|
+
{
|
|
50
|
+
fetchSchemas: (fetchOpts) => fetchSchemas({ force: fetchOpts.force }),
|
|
51
|
+
|
|
52
|
+
parseSchema: (typeName, data) => {
|
|
53
|
+
if (typeName !== CATALOG_KEY) return null;
|
|
54
|
+
const catalog = parseCatalog(data.toString("utf-8"));
|
|
55
|
+
return {
|
|
56
|
+
typeName,
|
|
57
|
+
catalog,
|
|
58
|
+
propertyTypes: [{ name: "MergeTreeSettings" }, { name: "QuerySettings" }],
|
|
59
|
+
enums: [],
|
|
60
|
+
};
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
createNaming: (results) =>
|
|
64
|
+
new NamingStrategy(
|
|
65
|
+
results.map((r) => ({ typeName: r.typeName, propertyTypes: r.propertyTypes })),
|
|
66
|
+
{
|
|
67
|
+
priorityNames: {},
|
|
68
|
+
priorityAliases: {},
|
|
69
|
+
priorityPropertyAliases: {},
|
|
70
|
+
serviceAbbreviations: {},
|
|
71
|
+
shortName: (t) => t.split("::").pop()!,
|
|
72
|
+
serviceName: (t) => t.split("::")[0] ?? t,
|
|
73
|
+
},
|
|
74
|
+
),
|
|
75
|
+
|
|
76
|
+
generateRegistry: () => buildRegistry(),
|
|
77
|
+
|
|
78
|
+
generateTypes: (results) => {
|
|
79
|
+
const catalog = results.find((r) => r.typeName === CATALOG_KEY)?.catalog;
|
|
80
|
+
if (!catalog) throw new Error("no ClickHouse catalog was parsed");
|
|
81
|
+
const rendered = renderClickHouseModule(catalog);
|
|
82
|
+
notes = rendered.notes;
|
|
83
|
+
tables = rendered.tables;
|
|
84
|
+
return rendered.declarations;
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
generateRuntimeIndex: () => tables,
|
|
88
|
+
},
|
|
89
|
+
opts,
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
if (result.warnings.length > 0) {
|
|
93
|
+
throw new Error(`sql generation failed:\n ${result.warnings.map((w) => `${w.file}: ${w.error}`).join("\n ")}`);
|
|
94
|
+
}
|
|
95
|
+
if (opts.verbose) for (const note of notes) console.error(`[sql] ${note}`);
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export type PostgresGenerateOptions = Pick<FetchCatalogsOptions, "force" | "majors" | "log">;
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Generate the Postgres types: the union of the catalogs of every supported
|
|
103
|
+
* major (`src/spec/postgres-catalog-<major>.snapshot.json`), rendered with the
|
|
104
|
+
* overlays. A server is started only for a major whose pin moved, or with
|
|
105
|
+
* `force`; see `src/spec/postgres-fetch.ts`. The types stay internal to the
|
|
106
|
+
* package until the `/postgres` subpath has entities to export with them.
|
|
107
|
+
*/
|
|
108
|
+
export async function generatePostgres(opts: PostgresGenerateOptions = {}): Promise<RenderedPostgresModule> {
|
|
109
|
+
const catalogs = await fetchCatalogs(opts);
|
|
110
|
+
return renderPostgresModule(catalogs);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** Write the generated files under `src/generated/`. */
|
|
114
|
+
export function writeGeneratedFiles(result: GenerateResult, pkgDir?: string, postgres?: RenderedPostgresModule): void {
|
|
115
|
+
const baseDir = pkgDir ?? dirname(dirname(dirname(fileURLToPath(import.meta.url))));
|
|
116
|
+
writeGeneratedArtifacts({
|
|
117
|
+
baseDir,
|
|
118
|
+
files: {
|
|
119
|
+
"lexicon-sql.json": result.lexiconJSON,
|
|
120
|
+
"index.d.ts": result.typesDTS,
|
|
121
|
+
"clickhouse-types.ts": result.typesDTS,
|
|
122
|
+
"clickhouse.ts": result.indexTS,
|
|
123
|
+
...(postgres ? { "postgres-types.ts": postgres.declarations, "postgres.ts": postgres.tables } : {}),
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sql lexicon packaging, delegating to core's packagePipeline.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { readFileSync } from "fs";
|
|
6
|
+
import { join, dirname } from "path";
|
|
7
|
+
import { fileURLToPath } from "url";
|
|
8
|
+
import { packagePipeline, type PackageOptions, type PackageResult } from "@intentius/chant/codegen/package";
|
|
9
|
+
import { generate } from "./generate";
|
|
10
|
+
|
|
11
|
+
export type { PackageOptions, PackageResult };
|
|
12
|
+
|
|
13
|
+
// src/codegen/package.ts -> src/
|
|
14
|
+
const srcDir = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
15
|
+
|
|
16
|
+
export async function packageLexicon(opts: PackageOptions = {}): Promise<PackageResult> {
|
|
17
|
+
const pkgJson = JSON.parse(readFileSync(join(srcDir, "..", "package.json"), "utf-8"));
|
|
18
|
+
return packagePipeline(
|
|
19
|
+
{
|
|
20
|
+
generate: (genOpts) => generate({ verbose: genOpts.verbose, force: genOpts.force }),
|
|
21
|
+
buildManifest: () => ({
|
|
22
|
+
name: "sql",
|
|
23
|
+
version: pkgJson.version ?? "0.0.1",
|
|
24
|
+
chantVersion: ">=0.1.0",
|
|
25
|
+
namespace: "SQL",
|
|
26
|
+
intrinsics: [],
|
|
27
|
+
pseudoParameters: {},
|
|
28
|
+
}),
|
|
29
|
+
srcDir,
|
|
30
|
+
// No skills yet; they arrive with chant #3211.
|
|
31
|
+
collectSkills: () => new Map(),
|
|
32
|
+
version: pkgJson.version ?? "0.0.1",
|
|
33
|
+
},
|
|
34
|
+
opts,
|
|
35
|
+
);
|
|
36
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `docs/pages/postgres-change-classifier.mdx`, written from the Postgres
|
|
3
|
+
* classifier's own rule table by `npm run docs`, so the page cannot disagree
|
|
4
|
+
* with the rules.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { PG_CHANGE_CLASSES, PG_CLASSIFIER_RULES } from "../postgres/plan/rules";
|
|
8
|
+
|
|
9
|
+
const cell = (s: string) => s.replace(/\|/g, "\\|");
|
|
10
|
+
|
|
11
|
+
export function renderPostgresClassifierPage(): string {
|
|
12
|
+
const rows = Object.values(PG_CLASSIFIER_RULES).map(
|
|
13
|
+
(r) => `| ${r.id} | ${PG_CHANGE_CLASSES.label[r.class]} | ${cell(r.title)} | ${cell(r.restriction)} [Postgres 18 docs](${r.cite}) |`,
|
|
14
|
+
);
|
|
15
|
+
return `---
|
|
16
|
+
title: "Postgres Locks and the Change Classifier"
|
|
17
|
+
label: "Locks and the Change Classifier"
|
|
18
|
+
description: "How a Postgres schema change is classified by the lock it takes and whether it reads or rewrites the table, each with the documentation behind it"
|
|
19
|
+
diataxis: reference
|
|
20
|
+
group: "Postgres"
|
|
21
|
+
order: 11
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
{/* Written by src/codegen/postgres-classifier-page.ts from src/postgres/plan/rules.ts. Edit the rules, then run npm run docs. */}
|
|
25
|
+
|
|
26
|
+
Every change between two Postgres schemas is classified before anything runs, by the lock it takes and whether it reads or rewrites the table, as the Postgres 18 reference states them. Where 14 to 17 differ, the rule says so.
|
|
27
|
+
|
|
28
|
+
| Class | Means | Disruption |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| create | a new object; nothing that exists changes | \`in-place\` |
|
|
31
|
+
| metadata only | a catalog change under a brief lock; no row is read or written | \`in-place\` |
|
|
32
|
+
| validates under a weaker lock | every row is read to check a constraint, under a lock weaker than ACCESS EXCLUSIVE | \`rolling\` |
|
|
33
|
+
| needs CONCURRENTLY | an index build or drop that blocks writes unless it is CONCURRENTLY, which cannot run in a transaction block | \`rolling\` |
|
|
34
|
+
| ACCESS EXCLUSIVE rewrite or scan | the table is rewritten or read in full while reads and writes wait | \`rolling\` |
|
|
35
|
+
| expand and contract | no in-place change keeps old readers working; a plan refuses it | \`replace\` |
|
|
36
|
+
| drop | the object, and a table's or sequence's data, is gone | \`destroy\` |
|
|
37
|
+
|
|
38
|
+
The disruption column is what \`chant lifecycle plan\` reports for each update. A changed path alone cannot always say which rule applies (a column's type, a constraint, a view's query, an enum's labels), and those report \`unknown\` there; \`chant sql plan\` has both definitions and classifies them.
|
|
39
|
+
|
|
40
|
+
\`\`\`bash
|
|
41
|
+
chant sql diff base.json head.json # two chant build outputs, offline
|
|
42
|
+
chant sql plan prod schema.json # a build output against the prod server
|
|
43
|
+
\`\`\`
|
|
44
|
+
|
|
45
|
+
Both read the build's \`dialect\` and exit 2 when a change can only be made as expand and contract. \`--json\` prints the changes, the hints, the refused changes and the migration Op suggestions as one document. \`chant sql diff\` compares a pull request's base and head builds with no server. \`chant sql plan\` reads the server \`sql.profiles.<env>\` binds (else \`POSTGRES_URL\`), in the profile's \`schemas\` when it lists them, otherwise in the default schema and every schema the build declares an object in. Where the normalization rules leave an expression different, it asks that server: the declared view, or the table's column types, defaults, generated expressions and checks, are created as temporary objects in a transaction that is always rolled back, and read back with the same printers, so a view's \`SELECT *\` and the server's added parentheses are not reported as changes.
|
|
46
|
+
|
|
47
|
+
## Which major
|
|
48
|
+
|
|
49
|
+
Two rules change class across the supported majors: a STORED generated column's expression (SQLPG212) is a rewrite from 17 and expand and contract before it, and a table's access method (SQLPG226) is a rewrite from 15 and expand and contract before it.
|
|
50
|
+
|
|
51
|
+
- \`chant sql diff\` classifies for the major the builds recorded (\`postgresMajor\` in the build output): the newer build's, else the older build's, else \`sql.postgresMajor\`, else 18. A diff between two revisions does not depend on today's config.
|
|
52
|
+
- \`chant sql plan\` classifies for the major the server runs (\`server_version_num\`), since the server is what takes the locks. When the build targets another major, the plan says so in a hint.
|
|
53
|
+
|
|
54
|
+
## Identity and renames
|
|
55
|
+
|
|
56
|
+
An object is identified by its export name between two builds, and by its schema-qualified name against a server, which has no export names. Tables, views, materialized views, sequences and indexes share one namespace per schema, types and domains another, and schemas and extensions are matched by name.
|
|
57
|
+
|
|
58
|
+
A rename is declared where it happens. Before a CREATE, \`-- previously: <old name>\` says the object had another name; on a column's line, it says the column did:
|
|
59
|
+
|
|
60
|
+
\`\`\`sql
|
|
61
|
+
CREATE TABLE app.orders (
|
|
62
|
+
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
63
|
+
memo text -- previously: note
|
|
64
|
+
)
|
|
65
|
+
\`\`\`
|
|
66
|
+
|
|
67
|
+
Without the hint, a column dropped and another added with the same type in the same place are reported as a drop and an add, with a hint asking whether it is a rename. A constraint left unnamed is matched by what it says, not by the name Postgres gave it, and an index on a table the same plan creates is part of the create.
|
|
68
|
+
|
|
69
|
+
An object another tool keeps is never proposed for a drop: an ORM's or migration runner's revision table with its sequence and indexes, and, with \`sql.provider\` set, the provider's own schemas and extensions. The plan names each in a hint and leaves it alone. Any other object in the schemas the plan reads that the build does not declare is a drop (SQLPG270); the applier drops it only when told to prune and only when it carries this project's marker.
|
|
70
|
+
|
|
71
|
+
## After the plan
|
|
72
|
+
|
|
73
|
+
The plan only reports. [\`postgresApply\`](../postgres-applying/) makes every change that is not expand and contract, grouping the statements into transactions by class and running \`CONCURRENTLY\` builds outside them. A column rename (SQLPG205) or a type change across kinds (SQLPG208) runs as \`PostgresMigrationOp\`, and both commands print the declaration to start from for each such column (\`migrationOps\` in \`--json\`): see [Migrating a Column](../postgres-migration/). The other expand-and-contract changes (a NOT NULL column with no default, a view losing or reordering columns, partitioning, a rename of a table, an enum label removed) have no Op yet and are made by hand.
|
|
74
|
+
|
|
75
|
+
## The rules
|
|
76
|
+
|
|
77
|
+
| Id | Class | Change | Restriction |
|
|
78
|
+
|---|---|---|---|
|
|
79
|
+
${rows.join("\n")}
|
|
80
|
+
`;
|
|
81
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { describe, expect, test } from "vitest";
|
|
3
|
+
import { renderPostgresModule } from "./postgres-module";
|
|
4
|
+
import { parseCatalog, type PostgresCatalog } from "../spec/postgres-catalog";
|
|
5
|
+
import { snapshotFile } from "../spec/postgres-fetch";
|
|
6
|
+
import { POSTGRES_MAJORS } from "../spec/postgres-pin";
|
|
7
|
+
import { availableAt } from "../postgres/catalog-types";
|
|
8
|
+
|
|
9
|
+
const load = (): PostgresCatalog[] => POSTGRES_MAJORS.map((m) => parseCatalog(readFileSync(snapshotFile(m), "utf-8")));
|
|
10
|
+
const rendered = renderPostgresModule(load());
|
|
11
|
+
|
|
12
|
+
describe("the Postgres union", () => {
|
|
13
|
+
test("is byte-identical across runs", () => {
|
|
14
|
+
const again = renderPostgresModule(load());
|
|
15
|
+
expect(again.declarations).toBe(rendered.declarations);
|
|
16
|
+
expect(again.tables).toBe(rendered.tables);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test("lists the majors and the exact release each was read from", () => {
|
|
20
|
+
expect(rendered.declarations).toContain("export const POSTGRES_MAJORS = [14,15,16,17,18] as const;");
|
|
21
|
+
expect(rendered.declarations).toContain('"18":"18.6"');
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
test("marks what arrived in a later major with since", () => {
|
|
25
|
+
expect(rendered.declarations).toContain('"io_method": { since: 18 }');
|
|
26
|
+
expect(rendered.declarations).toContain('"regexp_count": { since: 15 }');
|
|
27
|
+
expect(rendered.declarations).toMatch(/\/\*\*[^\n]*@since 18 \*\/\n {2}io_method\?: /);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test("marks what a later major dropped with until, the last major that has it", () => {
|
|
31
|
+
expect(rendered.declarations).toContain('"close_lb": { until: 14 }');
|
|
32
|
+
expect(rendered.declarations).toContain('"old_snapshot_threshold": { until: 16 }');
|
|
33
|
+
expect(rendered.declarations).toMatch(/\/\*\*[^\n]*@until 16 \*\/\n {2}old_snapshot_threshold\?: /);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test("keeps an entry in every major free of a range", () => {
|
|
37
|
+
const ranges = rendered.declarations.slice(rendered.declarations.indexOf("export const VERSION_RANGES"));
|
|
38
|
+
expect(ranges).not.toContain('"btree"');
|
|
39
|
+
expect(ranges).not.toContain('"index:btree.fillfactor"');
|
|
40
|
+
expect(ranges).toContain('"view.security_invoker": { since: 15 }');
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test("marks the enum members a setting gained", () => {
|
|
44
|
+
expect(rendered.declarations).toMatch(/"wal_compression": \{\n\s+"lz4": \{ since: 15 \}/);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test("types storage parameters from the overlay, with the major they arrived in", () => {
|
|
48
|
+
expect(rendered.declarations).toMatch(/export interface StorageParams_table \{[^}]*fillfactor\?: number;/);
|
|
49
|
+
expect(rendered.declarations).toMatch(/@since 15 \*\/\n {2}security_invoker\?: boolean;/);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
test("merges the overlay into the column type table", () => {
|
|
53
|
+
expect(rendered.tables).toMatch(/"character varying": \{[^\n]*"parameters":\[\{"name":"length"/);
|
|
54
|
+
expect(rendered.tables).toContain('"aliases":["int","int4"]');
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test("availableAt reads a range", () => {
|
|
58
|
+
expect(availableAt({ since: 15 }, 14)).toBe(false);
|
|
59
|
+
expect(availableAt({ since: 15, until: 16 }, 16)).toBe(true);
|
|
60
|
+
expect(availableAt({ until: 14 }, 15)).toBe(false);
|
|
61
|
+
expect(availableAt(undefined, 14)).toBe(true);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
describe("the overlays are checked against the catalogs", () => {
|
|
66
|
+
test("a storage parameter the probe found with no overlay entry fails generation", () => {
|
|
67
|
+
const catalogs = load();
|
|
68
|
+
catalogs[4]!.storageParameters.table = [...catalogs[4]!.storageParameters.table!, "brand_new_parameter"];
|
|
69
|
+
expect(() => renderPostgresModule(catalogs)).toThrow(/storage parameter brand_new_parameter has no entry/);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
test("a name in two majors but not the one between them cannot be a range", () => {
|
|
73
|
+
const catalogs = load();
|
|
74
|
+
catalogs[1]!.extensions = catalogs[1]!.extensions.filter((e) => e.name !== "pgcrypto");
|
|
75
|
+
expect(() => renderPostgresModule(catalogs)).toThrow(/extension pgcrypto is present in non-adjacent majors/);
|
|
76
|
+
});
|
|
77
|
+
});
|