@intentius/chant-lexicon-sql 0.0.0-stage → 0.112.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,434 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render the Postgres dialect's generated surface from the catalogs of every
|
|
3
|
+
* supported major:
|
|
4
|
+
*
|
|
5
|
+
* - `src/generated/postgres-types.ts`: string-literal unions of every named
|
|
6
|
+
* thing in any major's catalog, the `Settings` and `StorageParams_*`
|
|
7
|
+
* interfaces, and the `VERSION_RANGES` table saying which entries are not in
|
|
8
|
+
* all majors.
|
|
9
|
+
* - `src/generated/postgres.ts`: the tables lint and the LSP read (settings,
|
|
10
|
+
* storage parameters, column types), with the overlays merged in.
|
|
11
|
+
*
|
|
12
|
+
* The overlays are checked against the catalogs in both directions. An overlay
|
|
13
|
+
* key no major has, or a storage parameter the probe found with no overlay
|
|
14
|
+
* entry, is an error: a pin move that changes the grammar has to change the
|
|
15
|
+
* overlay in the same commit.
|
|
16
|
+
*
|
|
17
|
+
* Output depends only on the catalogs and the overlays: every map is walked
|
|
18
|
+
* in sorted order (by code unit, not locale), so two runs are byte-identical.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import type {
|
|
22
|
+
AccessMethodRow,
|
|
23
|
+
ExtensionRow,
|
|
24
|
+
FunctionRow,
|
|
25
|
+
KeywordRow,
|
|
26
|
+
OpClassRow,
|
|
27
|
+
PostgresCatalog,
|
|
28
|
+
SettingRow,
|
|
29
|
+
TypeRow,
|
|
30
|
+
} from "../spec/postgres-catalog";
|
|
31
|
+
import { COLUMN_TYPE_PARAMETERS, SERIAL_TYPES, TYPE_SPELLINGS } from "../postgres/overlays/types";
|
|
32
|
+
import { STORAGE_PARAMETER_TYPES, type StorageParameterType } from "../postgres/overlays/storage";
|
|
33
|
+
import { CONSTRAINTS } from "../postgres/overlays/constraints";
|
|
34
|
+
import { COLUMN_CLAUSES } from "../postgres/overlays/columns";
|
|
35
|
+
import { PARTITIONING } from "../postgres/overlays/partitioning";
|
|
36
|
+
import { INDEX_CLAUSES } from "../postgres/overlays/indexes";
|
|
37
|
+
import { RELATION_CLAUSES, SEQUENCE_CLAUSES, VIEW_CLAUSES } from "../postgres/overlays/relations";
|
|
38
|
+
import { TYPE_DDL } from "../postgres/overlays/type-ddl";
|
|
39
|
+
import type { Clause } from "../postgres/overlays/kinds";
|
|
40
|
+
import type { VersionRange } from "../postgres/catalog-types";
|
|
41
|
+
|
|
42
|
+
const compare = (a: string, b: string): number => (a < b ? -1 : a > b ? 1 : 0);
|
|
43
|
+
const sorted = (xs: Iterable<string>): string[] => [...new Set(xs)].sort(compare);
|
|
44
|
+
const lit = (names: readonly string[]): string =>
|
|
45
|
+
names.length > 0 ? names.map((n) => JSON.stringify(n)).join(" | ") : "never";
|
|
46
|
+
const key = (name: string): string => (/^[A-Za-z_$][\w$]*$/.test(name) ? name : JSON.stringify(name));
|
|
47
|
+
const doc = (text: string): string => text.replace(/\*\//g, "*\\/");
|
|
48
|
+
const identifier = (name: string): string => name.replace(/[^A-Za-z0-9]+/g, "_");
|
|
49
|
+
|
|
50
|
+
/** One name across the majors: the row at the newest major that has it, and the majors that have it. */
|
|
51
|
+
interface Entry<T> {
|
|
52
|
+
name: string;
|
|
53
|
+
latest: T;
|
|
54
|
+
/** Every row, oldest major first. */
|
|
55
|
+
rows: T[];
|
|
56
|
+
range: VersionRange;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Merge `pick(catalog)` across the majors by `keyOf`. `since` and `until` are
|
|
61
|
+
* set when the name is missing from the oldest or the newest major. A name
|
|
62
|
+
* with a gap (in 14, gone in 15, back in 16) is an error: a range cannot say it.
|
|
63
|
+
*/
|
|
64
|
+
function union<T>(
|
|
65
|
+
what: string,
|
|
66
|
+
catalogs: readonly PostgresCatalog[],
|
|
67
|
+
pick: (c: PostgresCatalog) => readonly T[],
|
|
68
|
+
keyOf: (row: T) => string,
|
|
69
|
+
errors: string[],
|
|
70
|
+
): Entry<T>[] {
|
|
71
|
+
const byName = new Map<string, Array<{ index: number; row: T }>>();
|
|
72
|
+
catalogs.forEach((c, index) => {
|
|
73
|
+
for (const row of pick(c)) {
|
|
74
|
+
const k = keyOf(row);
|
|
75
|
+
const list = byName.get(k);
|
|
76
|
+
if (list) list.push({ index, row });
|
|
77
|
+
else byName.set(k, [{ index, row }]);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
const last = catalogs.length - 1;
|
|
81
|
+
const out: Entry<T>[] = [];
|
|
82
|
+
for (const name of sorted(byName.keys())) {
|
|
83
|
+
const present = byName.get(name)!;
|
|
84
|
+
const first = present[0]!.index;
|
|
85
|
+
const end = present[present.length - 1]!.index;
|
|
86
|
+
if (end - first + 1 !== present.length) {
|
|
87
|
+
errors.push(`${what} ${name} is present in non-adjacent majors (${present.map((p) => majorOfIndex(catalogs, p.index)).join(", ")})`);
|
|
88
|
+
}
|
|
89
|
+
out.push({
|
|
90
|
+
name,
|
|
91
|
+
latest: present[present.length - 1]!.row,
|
|
92
|
+
rows: present.map((p) => p.row),
|
|
93
|
+
range: {
|
|
94
|
+
...(first > 0 ? { since: majorOfIndex(catalogs, first) } : {}),
|
|
95
|
+
...(end < last ? { until: majorOfIndex(catalogs, end) } : {}),
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return out;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const majorOfIndex = (catalogs: readonly PostgresCatalog[], i: number): number => Number.parseInt(catalogs[i]!.version, 10);
|
|
103
|
+
|
|
104
|
+
const bounded = (r: VersionRange): boolean => r.since !== undefined || r.until !== undefined;
|
|
105
|
+
|
|
106
|
+
/** ` | @since 15 | @until 17` */
|
|
107
|
+
function rangeTags(r: VersionRange): string[] {
|
|
108
|
+
return [...(r.since !== undefined ? [`@since ${r.since}`] : []), ...(r.until !== undefined ? [`@until ${r.until}`] : [])];
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function settingTsType(rows: readonly SettingRow[]): string {
|
|
112
|
+
const parts = new Set<string>();
|
|
113
|
+
for (const s of rows) {
|
|
114
|
+
if (s.enumvals) for (const v of s.enumvals) parts.add(JSON.stringify(v));
|
|
115
|
+
else parts.add({ bool: "boolean", integer: "number", real: "number", string: "string" }[s.type] ?? "string");
|
|
116
|
+
}
|
|
117
|
+
// `string` absorbs literals; a union of the two is the same type and noisier.
|
|
118
|
+
return parts.has("string") ? "string" : [...parts].sort(compare).join(" | ");
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function storageTsType(t: StorageParameterType): string {
|
|
122
|
+
if (t.kind === "boolean") return "boolean";
|
|
123
|
+
if (t.kind === "enum") return lit(t.values);
|
|
124
|
+
return "number";
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function checkClauses(file: string, table: Record<string, Clause>, majors: readonly number[], errors: string[]): void {
|
|
128
|
+
const lo = majors[0]!;
|
|
129
|
+
const hi = majors[majors.length - 1]!;
|
|
130
|
+
for (const [name, clause] of Object.entries(table)) {
|
|
131
|
+
for (const bound of [clause.since, clause.until]) {
|
|
132
|
+
if (bound !== undefined && (bound < lo || bound > hi)) {
|
|
133
|
+
errors.push(`overlays/${file}: ${name} has a bound ${bound} outside the supported majors ${lo}..${hi}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export interface RenderedPostgresModule {
|
|
140
|
+
/** `postgres-types.ts`: types, and the range table; compiles on its own. */
|
|
141
|
+
declarations: string;
|
|
142
|
+
/** `postgres.ts`: the runtime tables, re-exporting the declarations. */
|
|
143
|
+
tables: string;
|
|
144
|
+
/** Things worth a log line. */
|
|
145
|
+
notes: string[];
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export function renderPostgresModule(catalogs: readonly PostgresCatalog[]): RenderedPostgresModule {
|
|
149
|
+
if (catalogs.length === 0) throw new Error("no Postgres catalog was read");
|
|
150
|
+
const errors: string[] = [];
|
|
151
|
+
const notes: string[] = [];
|
|
152
|
+
const majors = catalogs.map((c) => Number.parseInt(c.version, 10));
|
|
153
|
+
|
|
154
|
+
// ── Union of every section ─────────────────────────────────────────
|
|
155
|
+
const types = union<TypeRow>("type", catalogs, (c) => c.types.filter((t) => t.kind !== "p"), (t) => t.name, errors);
|
|
156
|
+
const accessMethods = union<AccessMethodRow>("access method", catalogs, (c) => c.accessMethods, (a) => a.name, errors);
|
|
157
|
+
const opclasses = union<OpClassRow>("operator class", catalogs, (c) => c.opclasses, (o) => `${o.am}.${o.name}`, errors);
|
|
158
|
+
const functions = union<FunctionRow>("function", catalogs, (c) => c.functions.filter((f) => !f.internal), (f) => f.name, errors);
|
|
159
|
+
const settings = union<SettingRow>("setting", catalogs, (c) => c.settings, (s) => s.name, errors);
|
|
160
|
+
const keywords = union<KeywordRow>("keyword", catalogs, (c) => c.keywords, (k) => `${k.code}:${k.word}`, errors);
|
|
161
|
+
const extensions = union<ExtensionRow>("extension", catalogs, (c) => c.extensions, (e) => e.name, errors);
|
|
162
|
+
const storage = union<{ target: string; name: string }>(
|
|
163
|
+
"storage parameter",
|
|
164
|
+
catalogs,
|
|
165
|
+
(c) => Object.entries(c.storageParameters).flatMap(([target, names]) => names.map((name) => ({ target, name }))),
|
|
166
|
+
(p) => `${p.target}.${p.name}`,
|
|
167
|
+
errors,
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
// ── Cross-checks of the overlays against the catalogs ──────────────
|
|
171
|
+
const sqlNames = new Set(types.map((t) => t.latest.sqlName));
|
|
172
|
+
for (const name of Object.keys(COLUMN_TYPE_PARAMETERS)) {
|
|
173
|
+
if (!sqlNames.has(name)) errors.push(`overlays/types.ts: type ${name} is not in any catalog`);
|
|
174
|
+
}
|
|
175
|
+
for (const [spelling, canonical] of [...Object.entries(TYPE_SPELLINGS), ...Object.entries(SERIAL_TYPES)]) {
|
|
176
|
+
if (!sqlNames.has(canonical)) errors.push(`overlays/types.ts: ${spelling} stands for ${canonical}, which is not in any catalog`);
|
|
177
|
+
}
|
|
178
|
+
const probed = new Set(storage.map((p) => p.latest.name));
|
|
179
|
+
for (const name of Object.keys(STORAGE_PARAMETER_TYPES)) {
|
|
180
|
+
if (!probed.has(name)) errors.push(`overlays/storage.ts: storage parameter ${name} was not accepted by any server`);
|
|
181
|
+
}
|
|
182
|
+
for (const name of probed) {
|
|
183
|
+
if (!STORAGE_PARAMETER_TYPES[name]) errors.push(`overlays/storage.ts: storage parameter ${name} has no entry`);
|
|
184
|
+
}
|
|
185
|
+
const indexMethods = new Set(accessMethods.filter((a) => a.latest.type === "i").map((a) => a.name));
|
|
186
|
+
for (const v of CONSTRAINTS.exclude!.args.find((a) => a.name === "using")?.values ?? []) {
|
|
187
|
+
if (!indexMethods.has(v)) errors.push(`overlays/constraints.ts: exclusion method ${v} is not an index access method`);
|
|
188
|
+
}
|
|
189
|
+
for (const [file, table] of [
|
|
190
|
+
["constraints.ts", CONSTRAINTS],
|
|
191
|
+
["columns.ts", COLUMN_CLAUSES],
|
|
192
|
+
["partitioning.ts", PARTITIONING],
|
|
193
|
+
["indexes.ts", INDEX_CLAUSES],
|
|
194
|
+
["relations.ts", { ...RELATION_CLAUSES, ...VIEW_CLAUSES, ...SEQUENCE_CLAUSES }],
|
|
195
|
+
["type-ddl.ts", TYPE_DDL],
|
|
196
|
+
] as const) {
|
|
197
|
+
checkClauses(file, table, majors, errors);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
if (errors.length > 0) {
|
|
201
|
+
throw new Error(
|
|
202
|
+
`The Postgres overlays disagree with the catalogs at ${catalogs.map((c) => c.version).join(", ")}:\n ${errors.join("\n ")}\n` +
|
|
203
|
+
"Update src/postgres/overlays/ for these pins.",
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// ── Ranges ─────────────────────────────────────────────────────────
|
|
208
|
+
const ranges: Record<string, Record<string, VersionRange>> = {};
|
|
209
|
+
const addRanges = (section: string, entries: ReadonlyArray<{ name: string; range: VersionRange }>) => {
|
|
210
|
+
const out: Record<string, VersionRange> = {};
|
|
211
|
+
for (const e of entries) if (bounded(e.range)) out[e.name] = e.range;
|
|
212
|
+
ranges[section] = out;
|
|
213
|
+
};
|
|
214
|
+
addRanges("types", types);
|
|
215
|
+
addRanges("accessMethods", accessMethods);
|
|
216
|
+
addRanges("opclasses", opclasses);
|
|
217
|
+
addRanges("functions", functions);
|
|
218
|
+
addRanges("settings", settings);
|
|
219
|
+
addRanges("extensions", extensions);
|
|
220
|
+
addRanges("storageParameters", storage);
|
|
221
|
+
for (const code of ["R", "T", "C", "U"]) {
|
|
222
|
+
addRanges(`keywords${code}`, keywords.filter((k) => k.latest.code === code).map((k) => ({ name: k.latest.word, range: k.range })));
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// Enum members that are not in every major a setting is in: `wal_compression` gains `lz4` in 15.
|
|
226
|
+
const settingValues: Record<string, Record<string, VersionRange>> = {};
|
|
227
|
+
for (const s of settings) {
|
|
228
|
+
const members = union<string>(
|
|
229
|
+
`setting ${s.name} value`,
|
|
230
|
+
catalogs,
|
|
231
|
+
(c) => c.settings.find((x) => x.name === s.name)?.enumvals ?? [],
|
|
232
|
+
(v) => v,
|
|
233
|
+
errors,
|
|
234
|
+
);
|
|
235
|
+
const own: Record<string, VersionRange> = {};
|
|
236
|
+
for (const m of members) {
|
|
237
|
+
// Relative to the majors that have the setting at all, not to all majors.
|
|
238
|
+
const since = m.range.since !== undefined && m.range.since > (s.range.since ?? majors[0]!) ? m.range.since : undefined;
|
|
239
|
+
const lastOfSetting = s.range.until ?? majors[majors.length - 1]!;
|
|
240
|
+
const until = m.range.until !== undefined && m.range.until < lastOfSetting ? m.range.until : undefined;
|
|
241
|
+
if (since !== undefined || until !== undefined) {
|
|
242
|
+
own[m.name] = { ...(since !== undefined ? { since } : {}), ...(until !== undefined ? { until } : {}) };
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
if (Object.keys(own).length > 0) settingValues[s.name] = own;
|
|
246
|
+
}
|
|
247
|
+
if (errors.length > 0) throw new Error(`Postgres setting values: ${errors.join("; ")}`);
|
|
248
|
+
|
|
249
|
+
const rangeLiteral = (r: VersionRange): string =>
|
|
250
|
+
`{ ${[...(r.since !== undefined ? [`since: ${r.since}`] : []), ...(r.until !== undefined ? [`until: ${r.until}`] : [])].join(", ")} }`;
|
|
251
|
+
const rangesTable = [
|
|
252
|
+
`export const VERSION_RANGES = {`,
|
|
253
|
+
...Object.entries(ranges).flatMap(([section, entries]) =>
|
|
254
|
+
Object.keys(entries).length === 0
|
|
255
|
+
? [` ${section}: {},`]
|
|
256
|
+
: [
|
|
257
|
+
` ${section}: {`,
|
|
258
|
+
...Object.entries(entries).map(([name, r]) => ` ${JSON.stringify(name)}: ${rangeLiteral(r)},`),
|
|
259
|
+
` },`,
|
|
260
|
+
],
|
|
261
|
+
),
|
|
262
|
+
` settingValues: {`,
|
|
263
|
+
...Object.entries(settingValues).flatMap(([name, members]) => [
|
|
264
|
+
` ${JSON.stringify(name)}: {`,
|
|
265
|
+
...Object.entries(members).map(([m, r]) => ` ${JSON.stringify(m)}: ${rangeLiteral(r)},`),
|
|
266
|
+
` },`,
|
|
267
|
+
]),
|
|
268
|
+
` },`,
|
|
269
|
+
`} as const satisfies Record<string, Record<string, VersionRange | Record<string, VersionRange>>>;`,
|
|
270
|
+
];
|
|
271
|
+
|
|
272
|
+
// ── Declarations ───────────────────────────────────────────────────
|
|
273
|
+
const aliases = types.filter((t) => t.latest.sqlName !== t.latest.name).map((t) => [t.latest.name, t.latest.sqlName] as const);
|
|
274
|
+
const keywordNames = (code: string) => keywords.filter((k) => k.latest.code === code).map((k) => k.latest.word);
|
|
275
|
+
const byAm = new Map<string, string[]>();
|
|
276
|
+
for (const o of opclasses) {
|
|
277
|
+
const list = byAm.get(o.latest.am);
|
|
278
|
+
if (list) list.push(o.latest.name);
|
|
279
|
+
else byAm.set(o.latest.am, [o.latest.name]);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
const settingLines: string[] = [];
|
|
283
|
+
for (const s of settings) {
|
|
284
|
+
const tags = [doc(s.latest.category), `@context ${s.latest.context}`];
|
|
285
|
+
if (s.latest.unit) tags.push(`@unit ${s.latest.unit}`);
|
|
286
|
+
if (s.latest.default !== null) tags.push(`@default ${doc(JSON.stringify(s.latest.default))}`);
|
|
287
|
+
tags.push(...rangeTags(s.range));
|
|
288
|
+
settingLines.push(` /** ${tags.join(" | ")} */`, ` ${key(s.name)}?: ${settingTsType(s.rows)};`);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
const storageTargets = sorted(storage.map((p) => p.latest.target));
|
|
292
|
+
const storageInterfaces = storageTargets.flatMap((target) => [
|
|
293
|
+
`export interface StorageParams_${identifier(target)} {`,
|
|
294
|
+
...storage
|
|
295
|
+
.filter((p) => p.latest.target === target)
|
|
296
|
+
.flatMap((p) => {
|
|
297
|
+
const tags = rangeTags(p.range);
|
|
298
|
+
return [
|
|
299
|
+
...(tags.length > 0 ? [` /** ${tags.join(" | ")} */`] : []),
|
|
300
|
+
` ${key(p.latest.name)}?: ${storageTsType(STORAGE_PARAMETER_TYPES[p.latest.name]!)};`,
|
|
301
|
+
];
|
|
302
|
+
}),
|
|
303
|
+
"}",
|
|
304
|
+
"",
|
|
305
|
+
]);
|
|
306
|
+
|
|
307
|
+
const header = (what: string) => [
|
|
308
|
+
`// Generated by \`npm run generate\` from the Postgres catalogs at ${catalogs.map((c) => c.version).join(", ")}`,
|
|
309
|
+
`// (src/spec/postgres-catalog-<major>.snapshot.json) and the overlays in src/postgres/overlays/. Do not edit.`,
|
|
310
|
+
`// ${what}`,
|
|
311
|
+
"",
|
|
312
|
+
];
|
|
313
|
+
|
|
314
|
+
const declarations = [
|
|
315
|
+
...header("The type surface: the union of every supported major, with a range on each name that is not in all of them."),
|
|
316
|
+
`import type { VersionRange } from "../postgres/catalog-types";`,
|
|
317
|
+
"",
|
|
318
|
+
`/** The supported majors, oldest first. */`,
|
|
319
|
+
`export const POSTGRES_MAJORS = ${JSON.stringify(majors)} as const;`,
|
|
320
|
+
`export type PostgresMajor = (typeof POSTGRES_MAJORS)[number];`,
|
|
321
|
+
`/** The exact release each major's catalog was read from. */`,
|
|
322
|
+
`export const POSTGRES_VERSIONS = ${JSON.stringify(Object.fromEntries(catalogs.map((c, i) => [majors[i], c.version])))} as const;`,
|
|
323
|
+
"",
|
|
324
|
+
`export type TypeName = ${lit(types.map((t) => t.name))};`,
|
|
325
|
+
`export type TypeSqlName = ${lit(sorted(types.map((t) => t.latest.sqlName)))};`,
|
|
326
|
+
`export const TYPE_ALIASES = ${JSON.stringify(Object.fromEntries(aliases))} as const;`,
|
|
327
|
+
"",
|
|
328
|
+
`export type IndexAccessMethod = ${lit(accessMethods.filter((a) => a.latest.type === "i").map((a) => a.name))};`,
|
|
329
|
+
`export type TableAccessMethod = ${lit(accessMethods.filter((a) => a.latest.type === "t").map((a) => a.name))};`,
|
|
330
|
+
...[...byAm].map(([am, names]) => `export type OpClass_${identifier(am)} = ${lit(names)};`),
|
|
331
|
+
"",
|
|
332
|
+
`export type ReservedKeyword = ${lit(keywordNames("R"))};`,
|
|
333
|
+
`export type ReservedAsFunctionKeyword = ${lit(keywordNames("T"))};`,
|
|
334
|
+
`export type ColumnNameKeyword = ${lit(keywordNames("C"))};`,
|
|
335
|
+
`export type UnreservedKeyword = ${lit(keywordNames("U"))};`,
|
|
336
|
+
"",
|
|
337
|
+
`export type AggregateFunctionName = ${lit(functions.filter((f) => f.latest.kinds.includes("a")).map((f) => f.name))};`,
|
|
338
|
+
`export type ScalarFunctionName = ${lit(functions.filter((f) => f.latest.kinds.includes("f")).map((f) => f.name))};`,
|
|
339
|
+
`export type ExtensionName = ${lit(extensions.map((e) => e.name))};`,
|
|
340
|
+
"",
|
|
341
|
+
`/** Server settings, \`SET\` and \`postgresql.conf\` names, from \`pg_settings\`. */`,
|
|
342
|
+
`export interface Settings {`,
|
|
343
|
+
...settingLines,
|
|
344
|
+
`}`,
|
|
345
|
+
"",
|
|
346
|
+
...storageInterfaces,
|
|
347
|
+
`/** The names that are not in every supported major, with the major they arrived in and the last that has them. */`,
|
|
348
|
+
...rangesTable,
|
|
349
|
+
"",
|
|
350
|
+
].join("\n");
|
|
351
|
+
|
|
352
|
+
const settingTable = [
|
|
353
|
+
`export const SETTINGS: Readonly<Record<keyof Settings, SettingSpec>> = {`,
|
|
354
|
+
...settings.map((s) => {
|
|
355
|
+
const r = s.latest;
|
|
356
|
+
const spec = {
|
|
357
|
+
type: r.type,
|
|
358
|
+
context: r.context,
|
|
359
|
+
category: r.category,
|
|
360
|
+
...(r.unit ? { unit: r.unit } : {}),
|
|
361
|
+
...(r.default !== null ? { default: r.default } : {}),
|
|
362
|
+
...(r.min !== null ? { min: r.min } : {}),
|
|
363
|
+
...(r.max !== null ? { max: r.max } : {}),
|
|
364
|
+
};
|
|
365
|
+
return ` ${key(s.name)}: ${JSON.stringify(spec)},`;
|
|
366
|
+
}),
|
|
367
|
+
"};",
|
|
368
|
+
];
|
|
369
|
+
|
|
370
|
+
const storageNames = sorted(storage.map((p) => p.latest.name));
|
|
371
|
+
const storageTable = [
|
|
372
|
+
`export const STORAGE_PARAMETERS: Readonly<Record<string, StorageParameterSpec>> = {`,
|
|
373
|
+
...storageNames.map((name) => {
|
|
374
|
+
const targets = sorted(storage.filter((p) => p.latest.name === name).map((p) => p.latest.target));
|
|
375
|
+
return ` ${key(name)}: ${JSON.stringify({ type: STORAGE_PARAMETER_TYPES[name], targets })},`;
|
|
376
|
+
}),
|
|
377
|
+
"};",
|
|
378
|
+
];
|
|
379
|
+
|
|
380
|
+
const spellingsOf = new Map<string, string[]>();
|
|
381
|
+
const spell = (canonical: string, alias: string) => spellingsOf.set(canonical, [...(spellingsOf.get(canonical) ?? []), alias]);
|
|
382
|
+
for (const [a, canonical] of Object.entries(TYPE_SPELLINGS)) spell(canonical, a);
|
|
383
|
+
for (const t of types) if (t.latest.sqlName !== t.latest.name) spell(t.latest.sqlName, t.latest.name);
|
|
384
|
+
const canonicalTypes = new Map<string, TypeRow>();
|
|
385
|
+
for (const t of types) canonicalTypes.set(t.latest.sqlName, t.latest);
|
|
386
|
+
const typeTable = [
|
|
387
|
+
`export const COLUMN_TYPES: Readonly<Record<TypeSqlName, ColumnTypeSpec>> = {`,
|
|
388
|
+
...[...canonicalTypes.keys()].sort(compare).map((name) => {
|
|
389
|
+
const t = canonicalTypes.get(name)!;
|
|
390
|
+
const spec = {
|
|
391
|
+
...(t.name !== name ? { catalogName: t.name } : {}),
|
|
392
|
+
category: t.category,
|
|
393
|
+
aliases: sorted(spellingsOf.get(name) ?? []),
|
|
394
|
+
parameters: COLUMN_TYPE_PARAMETERS[name] ?? [],
|
|
395
|
+
};
|
|
396
|
+
return ` ${key(name)}: ${JSON.stringify(spec)},`;
|
|
397
|
+
}),
|
|
398
|
+
"};",
|
|
399
|
+
];
|
|
400
|
+
|
|
401
|
+
// The parser's ColId rule and identifier quoting read the latest major's key words (#3279).
|
|
402
|
+
const keywordTable = [
|
|
403
|
+
`/** Every key word at the latest pinned major, by its \`pg_get_keywords()\` category: U unreserved, C column name, T type or function name, R reserved. */`,
|
|
404
|
+
`export const KEYWORDS: Readonly<Record<string, "U" | "C" | "T" | "R">> = {`,
|
|
405
|
+
...keywords
|
|
406
|
+
.filter((k) => k.range.until === undefined)
|
|
407
|
+
.map((k) => k.latest)
|
|
408
|
+
.sort((a, b) => compare(a.word, b.word))
|
|
409
|
+
.map((k) => ` ${key(k.word)}: ${JSON.stringify(k.code)},`),
|
|
410
|
+
"};",
|
|
411
|
+
];
|
|
412
|
+
|
|
413
|
+
const tables = [
|
|
414
|
+
...header("The tables lint and the LSP read, typed by ./postgres-types."),
|
|
415
|
+
`import type { ColumnTypeSpec, SettingSpec, StorageParameterSpec } from "../postgres/catalog-types";`,
|
|
416
|
+
`import type { Settings, TypeSqlName } from "./postgres-types";`,
|
|
417
|
+
"",
|
|
418
|
+
`export * from "./postgres-types";`,
|
|
419
|
+
"",
|
|
420
|
+
...settingTable,
|
|
421
|
+
"",
|
|
422
|
+
...storageTable,
|
|
423
|
+
"",
|
|
424
|
+
...typeTable,
|
|
425
|
+
"",
|
|
426
|
+
...keywordTable,
|
|
427
|
+
"",
|
|
428
|
+
].join("\n");
|
|
429
|
+
|
|
430
|
+
notes.push(
|
|
431
|
+
`postgres: ${types.length} types, ${functions.length} functions, ${settings.length} settings, ${storage.length} storage parameters across ${catalogs.length} majors`,
|
|
432
|
+
);
|
|
433
|
+
return { declarations, tables, notes };
|
|
434
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The entity registry, `lexicon-sql.json`: one entry per entity kind, which the
|
|
3
|
+
* LSP completes and hovers from and `dist/meta.json` packages.
|
|
4
|
+
*
|
|
5
|
+
* The entities are hand-written: their shape is the DDL a tag parses, not a
|
|
6
|
+
* schema document. Each is keyed by the kind's name and points at the entity
|
|
7
|
+
* type the tag gives it. ClickHouse's kinds came first and keep their bare
|
|
8
|
+
* names; Postgres's carry the dialect in the name, since both have a table
|
|
9
|
+
* and a view.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { CLICKHOUSE_ENTITY_TYPES } from "../clickhouse/entities";
|
|
13
|
+
import { POSTGRES_ENTITY_TYPES } from "../postgres/entity-types";
|
|
14
|
+
|
|
15
|
+
const KINDS: Record<string, string> = {
|
|
16
|
+
Database: CLICKHOUSE_ENTITY_TYPES.database,
|
|
17
|
+
Table: CLICKHOUSE_ENTITY_TYPES.table,
|
|
18
|
+
View: CLICKHOUSE_ENTITY_TYPES.view,
|
|
19
|
+
MaterializedView: CLICKHOUSE_ENTITY_TYPES.materializedView,
|
|
20
|
+
PostgresSchema: POSTGRES_ENTITY_TYPES.schema,
|
|
21
|
+
PostgresTable: POSTGRES_ENTITY_TYPES.table,
|
|
22
|
+
PostgresIndex: POSTGRES_ENTITY_TYPES.index,
|
|
23
|
+
PostgresView: POSTGRES_ENTITY_TYPES.view,
|
|
24
|
+
PostgresMaterializedView: POSTGRES_ENTITY_TYPES.materializedView,
|
|
25
|
+
PostgresSequence: POSTGRES_ENTITY_TYPES.sequence,
|
|
26
|
+
PostgresEnum: POSTGRES_ENTITY_TYPES.enum,
|
|
27
|
+
PostgresDomain: POSTGRES_ENTITY_TYPES.domain,
|
|
28
|
+
PostgresExtension: POSTGRES_ENTITY_TYPES.extension,
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export function buildRegistry(): string {
|
|
32
|
+
const registry = Object.fromEntries(
|
|
33
|
+
Object.entries(KINDS).map(([name, resourceType]) => [name, { resourceType, kind: "resource", lexicon: "sql" }]),
|
|
34
|
+
);
|
|
35
|
+
return `${JSON.stringify(registry, null, 2)}\n`;
|
|
36
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `AuditLogTable`: an append-only audit log partitioned by month.
|
|
3
|
+
*
|
|
4
|
+
* The parent is `PARTITION BY RANGE (<timestamp>)`, and its primary key
|
|
5
|
+
* includes the timestamp, which Postgres requires of every unique key on a
|
|
6
|
+
* partitioned table. The composite declares a default partition so no insert
|
|
7
|
+
* is refused before a month's partition exists; a partition per month is
|
|
8
|
+
* created ahead of time by whatever the project uses for partition upkeep (a
|
|
9
|
+
* `FOR VALUES FROM ('2026-10-01') TO ('2026-11-01')` partition of the parent
|
|
10
|
+
* is one more `table` call). An index on `(<actor>, <timestamp>)` serves the
|
|
11
|
+
* question an audit log is asked most: what did this actor do, and when.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { Composite } from "@intentius/chant/composite";
|
|
15
|
+
import { index, table, type PostgresIndex, type PostgresSchema, type PostgresTable } from "../postgres/entities";
|
|
16
|
+
|
|
17
|
+
export interface AuditLogTableProps {
|
|
18
|
+
/** The table's name, unqualified. The default partition is `<name>_default`. */
|
|
19
|
+
name: string;
|
|
20
|
+
/** The schema the table and its partitions live in: the entity, or its name (default `public`). */
|
|
21
|
+
schema?: PostgresSchema | string;
|
|
22
|
+
/** The event time column, the partition key (default `occurred_at`). */
|
|
23
|
+
timestamp?: string;
|
|
24
|
+
/** The column naming who acted (default `actor`). */
|
|
25
|
+
actor?: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export type AuditLogTableMembers = {
|
|
29
|
+
table: PostgresTable;
|
|
30
|
+
defaultPartition: PostgresTable;
|
|
31
|
+
actorIndex: PostgresIndex;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/** An append-only audit log partitioned by month on its timestamp, with a default partition and an index by actor. */
|
|
35
|
+
export const AuditLogTable = Composite<AuditLogTableProps, AuditLogTableMembers>((props) => {
|
|
36
|
+
const schema = props.schema ?? "public";
|
|
37
|
+
const ts = props.timestamp ?? "occurred_at";
|
|
38
|
+
const actor = props.actor ?? "actor";
|
|
39
|
+
const log = table`
|
|
40
|
+
CREATE TABLE ${schema}.${props.name} (
|
|
41
|
+
id bigint GENERATED ALWAYS AS IDENTITY,
|
|
42
|
+
${ts} timestamptz NOT NULL DEFAULT now(),
|
|
43
|
+
${actor} text NOT NULL,
|
|
44
|
+
action text NOT NULL,
|
|
45
|
+
subject text,
|
|
46
|
+
details jsonb NOT NULL DEFAULT '{}',
|
|
47
|
+
PRIMARY KEY (id, ${ts})
|
|
48
|
+
) PARTITION BY RANGE (${ts})`;
|
|
49
|
+
const fallback = table`
|
|
50
|
+
CREATE TABLE ${schema}.${`${props.name}_default`} PARTITION OF ${log} DEFAULT`;
|
|
51
|
+
const byActor = index`
|
|
52
|
+
CREATE INDEX ${`${props.name}_actor_idx`} ON ${log} (${actor}, ${ts} DESC)`;
|
|
53
|
+
return { table: log, defaultPartition: fallback, actorIndex: byActor };
|
|
54
|
+
}, "AuditLogTable");
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The composite catalog matches what this lexicon exports (#2662, #3104).
|
|
3
|
+
*
|
|
4
|
+
* `catalog.ts` is generated by `npm run generate:composite-catalogs -- sql` and
|
|
5
|
+
* is what `chant serve mcp` lists and check-lexicon counts.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { describe, expect, test } from "vitest";
|
|
9
|
+
import { isCompositeDefinition } from "@intentius/chant/composite";
|
|
10
|
+
import * as composites from "./index";
|
|
11
|
+
import { compositeCatalog } from "./catalog";
|
|
12
|
+
import { sqlPlugin } from "../plugin";
|
|
13
|
+
|
|
14
|
+
const exported = Object.entries(composites)
|
|
15
|
+
.filter(([, value]) => isCompositeDefinition(value))
|
|
16
|
+
.map(([name]) => name)
|
|
17
|
+
.sort();
|
|
18
|
+
const catalogued = compositeCatalog.map((entry) => entry.name).sort();
|
|
19
|
+
|
|
20
|
+
describe("the sql composite catalog", () => {
|
|
21
|
+
test("every exported composite has an entry, and every entry names an exported composite", () => {
|
|
22
|
+
expect(exported).toEqual([
|
|
23
|
+
"AuditLogTable",
|
|
24
|
+
"CdcMirror",
|
|
25
|
+
"EventsTable",
|
|
26
|
+
"JoinTable",
|
|
27
|
+
"RefreshedView",
|
|
28
|
+
"ReplacingTable",
|
|
29
|
+
"RollupView",
|
|
30
|
+
"ShardedTable",
|
|
31
|
+
"SoftDeleteTable",
|
|
32
|
+
"TenantTable",
|
|
33
|
+
]);
|
|
34
|
+
expect(catalogued, "regenerate with `npm run generate:composite-catalogs -- sql`").toEqual(exported);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test("every entry says what it is and what it bundles", () => {
|
|
38
|
+
const bundles = Object.fromEntries(compositeCatalog.map((entry) => [entry.name, entry.bundles]));
|
|
39
|
+
expect(bundles).toEqual({
|
|
40
|
+
AuditLogTable: ["PostgresIndex", "PostgresTable"],
|
|
41
|
+
JoinTable: ["PostgresIndex", "PostgresTable"],
|
|
42
|
+
RefreshedView: ["PostgresIndex", "PostgresView"],
|
|
43
|
+
SoftDeleteTable: ["PostgresIndex", "PostgresTable", "PostgresView"],
|
|
44
|
+
TenantTable: ["PostgresIndex", "PostgresTable"],
|
|
45
|
+
CdcMirror: ["ClickHouseTable", "ClickHouseView"],
|
|
46
|
+
EventsTable: ["ClickHouseTable"],
|
|
47
|
+
ReplacingTable: ["ClickHouseTable"],
|
|
48
|
+
RollupView: ["ClickHouseTable", "ClickHouseView"],
|
|
49
|
+
ShardedTable: ["ClickHouseTable"],
|
|
50
|
+
});
|
|
51
|
+
for (const entry of compositeCatalog) {
|
|
52
|
+
expect(entry.lexicon, entry.name).toBe("sql");
|
|
53
|
+
expect(entry.description.length, entry.name).toBeGreaterThan(0);
|
|
54
|
+
expect(entry.params.find((p) => p.name === "name")?.required, entry.name).toBe(true);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
test("the plugin contributes it", () => {
|
|
59
|
+
expect(sqlPlugin.composites?.()).toBe(compositeCatalog);
|
|
60
|
+
});
|
|
61
|
+
});
|