@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,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Projections: the overlay half.
|
|
3
|
+
*
|
|
4
|
+
* `system.table_engines.supports_projections` says which engines accept a
|
|
5
|
+
* projection, and is generated. The projection's own grammar is fixed and in
|
|
6
|
+
* no table: a name and a parenthesised query over the table, either a
|
|
7
|
+
* reordering (`SELECT * ORDER BY x`) or an aggregation (`SELECT k, sum(v)
|
|
8
|
+
* GROUP BY k`). `system.projections` is runtime state, not grammar.
|
|
9
|
+
*
|
|
10
|
+
* PROJECTION name (SELECT <columns or *> [GROUP BY ...] [ORDER BY ...])
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export interface ProjectionForm {
|
|
14
|
+
form: "normal" | "aggregate";
|
|
15
|
+
/** The clause that makes a projection this form. */
|
|
16
|
+
marker: "ORDER BY" | "GROUP BY";
|
|
17
|
+
summary: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const PROJECTION_FORMS: readonly ProjectionForm[] = [
|
|
21
|
+
{ form: "normal", marker: "ORDER BY", summary: "A copy of the selected columns in another sort order." },
|
|
22
|
+
{ form: "aggregate", marker: "GROUP BY", summary: "Pre-aggregated rows, kept current by merges like an AggregatingMergeTree." },
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* MergeTree settings that decide what a mutation or deduplicating merge does to
|
|
27
|
+
* a table with projections. Changing either is metadata only; leaving them at
|
|
28
|
+
* their defaults makes `ALTER ... UPDATE` on such a table an error.
|
|
29
|
+
*/
|
|
30
|
+
export const PROJECTION_SETTINGS: readonly string[] = [
|
|
31
|
+
"deduplicate_merge_projection_mode",
|
|
32
|
+
"lightweight_mutation_projection_mode",
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
/** Clauses a projection's query may not carry. */
|
|
36
|
+
export const PROJECTION_FORBIDDEN_CLAUSES: readonly string[] = ["WHERE", "JOIN", "LIMIT", "HAVING", "ARRAY JOIN"];
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skip index parameters: the overlay half.
|
|
3
|
+
*
|
|
4
|
+
* `system.data_skipping_index_types` names each type and gives a syntax line,
|
|
5
|
+
* from which the generator reads parameter names and optionality. This adds
|
|
6
|
+
* their kinds and ranges. `GRANULARITY` is fixed grammar the parser owns.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { ArgumentOverlay } from "./kinds";
|
|
10
|
+
|
|
11
|
+
const HASHES: ArgumentOverlay = { kind: "number", range: [1, 1_000_000], note: "Hash functions per value." };
|
|
12
|
+
const BYTES: ArgumentOverlay = { kind: "number", note: "Bloom filter size in bytes." };
|
|
13
|
+
const SEED: ArgumentOverlay = { kind: "number", note: "Seed for the hash functions." };
|
|
14
|
+
|
|
15
|
+
export const SKIP_INDEX_PARAMETERS: Record<string, Record<string, ArgumentOverlay>> = {
|
|
16
|
+
bloom_filter: {
|
|
17
|
+
false_positive_rate: { kind: "number", range: [0, 1], note: "Exclusive of 0 and 1; 0.025 when omitted." },
|
|
18
|
+
},
|
|
19
|
+
set: { max_rows: { kind: "number", note: "0 keeps every distinct value." } },
|
|
20
|
+
ngrambf_v1: {
|
|
21
|
+
n: { kind: "number", range: [1, 256], note: "N-gram size." },
|
|
22
|
+
size_in_bytes: BYTES,
|
|
23
|
+
num_hash_functions: HASHES,
|
|
24
|
+
seed: SEED,
|
|
25
|
+
},
|
|
26
|
+
tokenbf_v1: { size_in_bytes: BYTES, num_hash_functions: HASHES, seed: SEED },
|
|
27
|
+
sparse_grams: {
|
|
28
|
+
min_ngram_length: { kind: "number" },
|
|
29
|
+
max_ngram_length: { kind: "number" },
|
|
30
|
+
min_cutoff_length: { kind: "number" },
|
|
31
|
+
size_in_bytes: BYTES,
|
|
32
|
+
num_hash_functions: HASHES,
|
|
33
|
+
seed: SEED,
|
|
34
|
+
},
|
|
35
|
+
text: { tokenizer: { kind: "expression", note: "A tokenizer such as splitByNonAlpha, ngrams(N) or array." } },
|
|
36
|
+
vector_similarity: {
|
|
37
|
+
hnsw: { kind: "keyword", values: ["hnsw"], note: "The only method." },
|
|
38
|
+
distance_function: { kind: "keyword", values: ["L2Distance", "cosineDistance"] },
|
|
39
|
+
dimensions: { kind: "number" },
|
|
40
|
+
quantization: { kind: "keyword", values: ["f64", "f32", "f16", "bf16", "i8", "b1"] },
|
|
41
|
+
hnsw_max_connections_per_layer: { kind: "number" },
|
|
42
|
+
hnsw_candidate_list_size_for_construction: { kind: "number" },
|
|
43
|
+
},
|
|
44
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TTL clauses: the whole grammar is overlay.
|
|
3
|
+
*
|
|
4
|
+
* No system table describes TTL. A table TTL is a list of rules, each an
|
|
5
|
+
* expression evaluating to a `Date` or `DateTime` and an action; a column TTL
|
|
6
|
+
* is a single expression with no action, after which the column resets to its
|
|
7
|
+
* default. Which engines accept TTL at all is generated
|
|
8
|
+
* (`capabilities.ttl` from `system.table_engines.supports_ttl`).
|
|
9
|
+
*
|
|
10
|
+
* TTL expr [DELETE | RECOMPRESS codec | TO DISK 'd' | TO VOLUME 'v'] [WHERE cond]
|
|
11
|
+
* [, expr GROUP BY key_columns SET col = agg(col), ...]
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import type { ArgumentOverlay } from "./kinds";
|
|
15
|
+
|
|
16
|
+
export interface TtlAction {
|
|
17
|
+
/** The keywords that open the action, as written. */
|
|
18
|
+
keywords: string;
|
|
19
|
+
/** What follows the keywords. */
|
|
20
|
+
argument?: ArgumentOverlay;
|
|
21
|
+
/** Whether a trailing `WHERE cond` may filter the rows it applies to. */
|
|
22
|
+
where: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* What the server's `SHOW CREATE` prints when the action is written as the
|
|
25
|
+
* default. A declared `TTL ts + INTERVAL 1 DAY DELETE` reads back with
|
|
26
|
+
* `DELETE` dropped, so a comparison must treat the two as one.
|
|
27
|
+
*/
|
|
28
|
+
impliedWhenOmitted?: boolean;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const TTL_ACTIONS: readonly TtlAction[] = [
|
|
32
|
+
{ keywords: "DELETE", where: true, impliedWhenOmitted: true },
|
|
33
|
+
{ keywords: "RECOMPRESS", argument: { kind: "codec", note: "A CODEC(...) expression." }, where: true },
|
|
34
|
+
{ keywords: "TO DISK", argument: { kind: "string", note: "A disk of the table's storage policy." }, where: true },
|
|
35
|
+
{ keywords: "TO VOLUME", argument: { kind: "string", note: "A volume of the table's storage policy." }, where: true },
|
|
36
|
+
{
|
|
37
|
+
keywords: "GROUP BY",
|
|
38
|
+
argument: { kind: "columns", note: "A prefix of the sort key, then SET col = aggregate(col), ..." },
|
|
39
|
+
where: true,
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
/** A column TTL takes an expression and nothing else. */
|
|
44
|
+
export const COLUMN_TTL_ACTIONS: readonly TtlAction[] = [];
|
|
45
|
+
|
|
46
|
+
/** The types a TTL expression must evaluate to. */
|
|
47
|
+
export const TTL_RESULT_TYPES: readonly string[] = ["Date", "Date32", "DateTime", "DateTime64"];
|
|
48
|
+
|
|
49
|
+
/** MergeTree settings that change how TTL runs, for lint and hover to point at. */
|
|
50
|
+
export const TTL_SETTINGS: readonly string[] = [
|
|
51
|
+
"merge_with_ttl_timeout",
|
|
52
|
+
"merge_with_recompression_ttl_timeout",
|
|
53
|
+
"ttl_only_drop_parts",
|
|
54
|
+
"materialize_ttl_recalculate_only",
|
|
55
|
+
];
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Column type parameters: the overlay half.
|
|
3
|
+
*
|
|
4
|
+
* `system.data_type_families` lists the families and their aliases. The
|
|
5
|
+
* parameter grammar (`Decimal(P, S)`, `DateTime64(precision[, tz])`,
|
|
6
|
+
* `Enum8('a' = 1)`) is in no system table. A family missing here takes no
|
|
7
|
+
* parameters; generation fails when a key here is not a family at the pin.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { ArgumentKind } from "./kinds";
|
|
11
|
+
|
|
12
|
+
export interface TypeParameter {
|
|
13
|
+
name: string;
|
|
14
|
+
kind: ArgumentKind | "enum-member" | "named-type";
|
|
15
|
+
optional?: boolean;
|
|
16
|
+
/** The parameter repeats (`Tuple(T, ...)`). */
|
|
17
|
+
repeated?: boolean;
|
|
18
|
+
range?: readonly [number, number];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const P = (name: string, kind: TypeParameter["kind"], extra: Partial<TypeParameter> = {}): TypeParameter => ({
|
|
22
|
+
name,
|
|
23
|
+
kind,
|
|
24
|
+
...extra,
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const TZ = P("timezone", "string", { optional: true });
|
|
28
|
+
|
|
29
|
+
export const TYPE_PARAMETERS: Record<string, readonly TypeParameter[]> = {
|
|
30
|
+
Decimal: [P("precision", "number", { range: [1, 76] }), P("scale", "number", { optional: true })],
|
|
31
|
+
Decimal32: [P("scale", "number", { range: [0, 9] })],
|
|
32
|
+
Decimal64: [P("scale", "number", { range: [0, 18] })],
|
|
33
|
+
Decimal128: [P("scale", "number", { range: [0, 38] })],
|
|
34
|
+
Decimal256: [P("scale", "number", { range: [0, 76] })],
|
|
35
|
+
DateTime: [TZ],
|
|
36
|
+
DateTime32: [TZ],
|
|
37
|
+
DateTime64: [P("precision", "number", { range: [0, 9] }), TZ],
|
|
38
|
+
Time64: [P("precision", "number", { range: [0, 9] })],
|
|
39
|
+
FixedString: [P("length", "number", { range: [1, Number.MAX_SAFE_INTEGER] })],
|
|
40
|
+
Enum: [P("member", "enum-member", { repeated: true })],
|
|
41
|
+
Enum8: [P("member", "enum-member", { repeated: true })],
|
|
42
|
+
Enum16: [P("member", "enum-member", { repeated: true })],
|
|
43
|
+
Nullable: [P("type", "type")],
|
|
44
|
+
LowCardinality: [P("type", "type")],
|
|
45
|
+
Array: [P("type", "type")],
|
|
46
|
+
Map: [P("key", "type"), P("value", "type")],
|
|
47
|
+
Tuple: [P("element", "named-type", { repeated: true })],
|
|
48
|
+
Nested: [P("field", "named-type", { repeated: true })],
|
|
49
|
+
Variant: [P("type", "type", { repeated: true })],
|
|
50
|
+
AggregateFunction: [P("function", "function"), P("argument", "type", { repeated: true })],
|
|
51
|
+
SimpleAggregateFunction: [P("function", "function"), P("argument", "type")],
|
|
52
|
+
JSON: [P("setting", "expression", { optional: true, repeated: true })],
|
|
53
|
+
Dynamic: [P("max_types", "expression", { optional: true })],
|
|
54
|
+
QBit: [P("element", "type"), P("dimension", "number")],
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
/** Families that wrap another type and pass its nullability and sort-key rules through. */
|
|
58
|
+
export const WRAPPER_TYPES: readonly string[] = ["LowCardinality"];
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { describe, expect, test } from "vitest";
|
|
2
|
+
import { isChantWorkingObject, isRebuildObject, stampedComment, stripMarkerFromStatement } from "./ownership";
|
|
3
|
+
|
|
4
|
+
describe("the comment marker on ClickHouse (#3208)", () => {
|
|
5
|
+
test("comes off a printed statement, the whole clause when the comment was the marker alone", () => {
|
|
6
|
+
expect(stripMarkerFromStatement("CREATE TABLE a.t\n(\n `id` UInt64\n)\nENGINE = Log\nCOMMENT 'Raw [chant managed-by=chant stack=s]'")).toBe(
|
|
7
|
+
"CREATE TABLE a.t\n(\n `id` UInt64\n)\nENGINE = Log\nCOMMENT 'Raw'",
|
|
8
|
+
);
|
|
9
|
+
expect(stripMarkerFromStatement("CREATE VIEW a.v\n(\n `id` UInt64\n)\nCOMMENT '[chant managed-by=chant]'\nAS SELECT id\nFROM a.t")).toBe(
|
|
10
|
+
"CREATE VIEW a.v\n(\n `id` UInt64\n)\nAS SELECT id\nFROM a.t",
|
|
11
|
+
);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
test("marks a rebuild's working objects and the receipts table as chant's own", () => {
|
|
15
|
+
expect(isRebuildObject(stampedComment("", { stack: "s" }, { rebuild: "db.t", role: "new" }))).toBe(true);
|
|
16
|
+
expect(isChantWorkingObject(stampedComment("", { stack: "s" }, { receipts: "effects" }))).toBe(true);
|
|
17
|
+
expect(isChantWorkingObject(stampedComment("Raw", { stack: "s" }))).toBe(false);
|
|
18
|
+
expect(isChantWorkingObject("Raw [chant managed-by=someone-else rebuild=db.t]")).toBe(false);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* chant's ownership marker on ClickHouse objects (#3208): a trailer on the
|
|
3
|
+
* object's own `COMMENT`.
|
|
4
|
+
*
|
|
5
|
+
* ClickHouse objects carry no tags or labels. The channels considered:
|
|
6
|
+
*
|
|
7
|
+
* - The object `COMMENT`. Every object kind has one (a table of any engine, a
|
|
8
|
+
* view, a materialized view, a database), it is set in the `CREATE` itself
|
|
9
|
+
* so an object is never created unmarked, `MODIFY COMMENT` restamps it, and
|
|
10
|
+
* `system.tables` / `system.databases` return it with the catalog read
|
|
11
|
+
* observation already makes. The #3046 candidate.
|
|
12
|
+
* - Table `SETTINGS`: a MergeTree table refuses a setting it does not know.
|
|
13
|
+
* - A registry table on the server naming the objects chant created: a record
|
|
14
|
+
* apart from the object, which is the state file chant does not keep, and
|
|
15
|
+
* one that goes on claiming a table someone dropped and created again.
|
|
16
|
+
*
|
|
17
|
+
* So the comment, and the question is the user's own comment, which is a
|
|
18
|
+
* declared property (`COMMENT 'Raw events'`, classified by SQLCH203). The
|
|
19
|
+
* marker never replaces it: it is appended as a bracketed trailer,
|
|
20
|
+
*
|
|
21
|
+
* COMMENT 'Raw events [chant managed-by=chant stack=shop env=prod]'
|
|
22
|
+
*
|
|
23
|
+
* and taken off again wherever chant reads a definition (`readLiveSchema`
|
|
24
|
+
* strips it from `SHOW CREATE`), so planning, the deep diff and import compare
|
|
25
|
+
* and write the declared comment alone. Someone who edits the comment by hand
|
|
26
|
+
* and drops the trailer makes the object read as foreign, which is the safe
|
|
27
|
+
* direction: it is never pruned, and the next apply of its declaration
|
|
28
|
+
* stamps it again.
|
|
29
|
+
*
|
|
30
|
+
* Values are percent-encoded outside `[A-Za-z0-9._-]`, so the trailer never
|
|
31
|
+
* holds a quote, a backslash, a space or a bracket of its own.
|
|
32
|
+
*
|
|
33
|
+
* The trailer itself is the shared core's (`../core/ownership.ts`), the same in
|
|
34
|
+
* every dialect. What is ClickHouse's here: the channel the plugin declares,
|
|
35
|
+
* taking the trailer off a printed `COMMENT '...'` clause, and the trailer keys
|
|
36
|
+
* of the rebuild migration's working objects.
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
import type { ChannelKeys, OwnershipChannel } from "@intentius/chant/ownership";
|
|
40
|
+
import { COMMENT_OWNERSHIP_KEYS, RECEIPTS_TRAILER_KEY, TRAILER_PAIR, hasChantTrailerKey } from "../core/ownership";
|
|
41
|
+
|
|
42
|
+
export {
|
|
43
|
+
carriesMarker,
|
|
44
|
+
isChantManaged,
|
|
45
|
+
markerTrailer,
|
|
46
|
+
readMarker,
|
|
47
|
+
readTrailerPairs,
|
|
48
|
+
RECEIPTS_TRAILER_KEY,
|
|
49
|
+
stampedComment,
|
|
50
|
+
stripMarker,
|
|
51
|
+
type CommentMarker,
|
|
52
|
+
} from "../core/ownership";
|
|
53
|
+
|
|
54
|
+
/** The keys inside the trailer. */
|
|
55
|
+
export const CLICKHOUSE_COMMENT_OWNERSHIP_KEYS: ChannelKeys = COMMENT_OWNERSHIP_KEYS;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Where the marker is read back (#1348): `describeResources` and
|
|
59
|
+
* `exportResources` read the comment from `system.tables` and
|
|
60
|
+
* `system.databases`. The deep read takes it off with the rest of `SHOW CREATE`
|
|
61
|
+
* and reports no verdict.
|
|
62
|
+
*/
|
|
63
|
+
export const SQL_OWNERSHIP_CHANNEL: OwnershipChannel = {
|
|
64
|
+
keys: CLICKHOUSE_COMMENT_OWNERSHIP_KEYS,
|
|
65
|
+
reads: ["describeResources", "exportResources"],
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/** A comment that is the trailer alone, in a printed statement: the whole `COMMENT '...'` clause. */
|
|
69
|
+
const ONLY_TRAILER_CLAUSE = new RegExp(`\\s*\\bCOMMENT\\s+'\\[chant(?: ${TRAILER_PAIR})+\\]'`, "g");
|
|
70
|
+
/** The trailer inside a printed comment literal, just before its closing quote. */
|
|
71
|
+
const TRAILER_IN_LITERAL = new RegExp(`\\s+\\[chant(?: ${TRAILER_PAIR})+\\]'`, "g");
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* The trailer key naming the table a rebuild migration object belongs to
|
|
75
|
+
* (`./rebuild/`). An object carrying it is the rebuild's own working object,
|
|
76
|
+
* not a declaration: a new table being filled, the dual-write view, an old
|
|
77
|
+
* table being retained. Reading a schema leaves those out
|
|
78
|
+
* (`./live/catalog.ts`), so a plan, an import or a prune never sees them.
|
|
79
|
+
*/
|
|
80
|
+
export const REBUILD_TRAILER_KEY = "rebuild";
|
|
81
|
+
|
|
82
|
+
/** Whether a comment marks a rebuild migration's working object. */
|
|
83
|
+
export function isRebuildObject(comment: string | undefined): boolean {
|
|
84
|
+
return hasChantTrailerKey(comment, [REBUILD_TRAILER_KEY]);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Whether a comment marks one of chant's own working objects: a rebuild's
|
|
89
|
+
* new, dual-write or retained table, or the receipts database and table.
|
|
90
|
+
* Schema reads leave them out.
|
|
91
|
+
*/
|
|
92
|
+
export function isChantWorkingObject(comment: string | undefined): boolean {
|
|
93
|
+
return hasChantTrailerKey(comment, [REBUILD_TRAILER_KEY, RECEIPTS_TRAILER_KEY]);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* A `SHOW CREATE` statement with the trailer taken off its object comment, so
|
|
98
|
+
* the statement reads as the declaration it came from. A comment that was the
|
|
99
|
+
* trailer alone loses its whole `COMMENT` clause.
|
|
100
|
+
*/
|
|
101
|
+
export function stripMarkerFromStatement(statement: string): string {
|
|
102
|
+
return statement.replace(ONLY_TRAILER_CLAUSE, "").replace(TRAILER_IN_LITERAL, "'");
|
|
103
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { describe, expect, test } from "vitest";
|
|
4
|
+
import { parseCreate, type TableNode, type ViewNode } from "./parser";
|
|
5
|
+
import { SqlSyntaxError, tokenize, tokenizeText, untokenize } from "./tokens";
|
|
6
|
+
|
|
7
|
+
const parse = (sql: string) => parseCreate(tokenizeText(sql, 0));
|
|
8
|
+
const text = (sql: string, span?: { from: number; to: number }) =>
|
|
9
|
+
span ? untokenize(tokenizeText(sql, 0).slice(span.from, span.to), () => "?").trim() : undefined;
|
|
10
|
+
|
|
11
|
+
describe("tokenizing a template", () => {
|
|
12
|
+
test("is lossless: tokens give the raw text back, comments and spacing included", () => {
|
|
13
|
+
const parts = ["CREATE TABLE t (\n id UInt64, -- the key\n /* block */ x ", " DEFAULT 'a''b'\n) ENGINE = Log"];
|
|
14
|
+
expect(untokenize(tokenize(parts), (i) => "${" + i + "}")).toBe(parts.join("${0}"));
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test("a name may start with a digit", () => {
|
|
18
|
+
const node = parse("CREATE TABLE 00662_has_nullable (a UInt8) ENGINE = Memory") as TableNode;
|
|
19
|
+
expect(node.columns[0]!.name).toBe("a");
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
test("an unterminated quote is located", () => {
|
|
23
|
+
expect(() => tokenizeText("CREATE TABLE t (a String DEFAULT 'x) ENGINE = Log", 0)).toThrow(SqlSyntaxError);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
describe("parsing CREATE TABLE", () => {
|
|
28
|
+
const sql = `CREATE TABLE IF NOT EXISTS db.events ON CLUSTER main (
|
|
29
|
+
user_id UUID,
|
|
30
|
+
kind LowCardinality(String) DEFAULT 'click' COMMENT 'what happened',
|
|
31
|
+
ts DateTime64(3, 'UTC') CODEC(Delta, ZSTD(3)) TTL ts + INTERVAL 1 DAY,
|
|
32
|
+
tags Array(String) DEFAULT ['a', 'b'],
|
|
33
|
+
n Nullable(UInt32),
|
|
34
|
+
total UInt64 MATERIALIZED n * 2,
|
|
35
|
+
INDEX k kind TYPE bloom_filter(0.01) GRANULARITY 4,
|
|
36
|
+
PROJECTION by_kind (SELECT kind, count() GROUP BY kind),
|
|
37
|
+
CONSTRAINT c CHECK n > 0,
|
|
38
|
+
)
|
|
39
|
+
ENGINE = ReplicatedReplacingMergeTree('/t/{shard}', '{replica}', ts)
|
|
40
|
+
PARTITION BY toYYYYMM(ts)
|
|
41
|
+
ORDER BY (user_id, kind)
|
|
42
|
+
SAMPLE BY user_id
|
|
43
|
+
TTL ts + INTERVAL 30 DAY DELETE
|
|
44
|
+
SETTINGS index_granularity = 8192, allow_nullable_key = 0
|
|
45
|
+
COMMENT 'events'`;
|
|
46
|
+
const node = parse(sql) as TableNode;
|
|
47
|
+
|
|
48
|
+
test("reads the statement's structure", () => {
|
|
49
|
+
expect(node.statement).toBe("table");
|
|
50
|
+
expect(node.ifNotExists).toBe(true);
|
|
51
|
+
expect(text(sql, node.name)).toBe("db.events");
|
|
52
|
+
expect(text(sql, node.onCluster)).toBe("main");
|
|
53
|
+
expect(node.columns.map((c) => c.name)).toEqual(["user_id", "kind", "ts", "tags", "n", "total"]);
|
|
54
|
+
expect(node.indexes.map((i) => i.name)).toEqual(["k"]);
|
|
55
|
+
expect(node.projections.map((p) => p.name)).toEqual(["by_kind"]);
|
|
56
|
+
expect(node.constraints.map((c) => [c.name, c.kind])).toEqual([["c", "CHECK"]]);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test("keeps each expression as its source text", () => {
|
|
60
|
+
const ts = node.columns[2]!;
|
|
61
|
+
expect(text(sql, ts.type)).toBe("DateTime64(3, 'UTC')");
|
|
62
|
+
expect(text(sql, ts.codec)).toBe("Delta, ZSTD(3)");
|
|
63
|
+
expect(text(sql, ts.ttl)).toBe("ts + INTERVAL 1 DAY");
|
|
64
|
+
expect(text(sql, node.columns[3]!.default!.expr)).toBe("['a', 'b']");
|
|
65
|
+
expect(node.columns[5]!.default!.kind).toBe("MATERIALIZED");
|
|
66
|
+
expect(node.engine!.name).toBe("ReplicatedReplacingMergeTree");
|
|
67
|
+
expect(node.engine!.args!.map((a) => text(sql, a))).toEqual(["'/t/{shard}'", "'{replica}'", "ts"]);
|
|
68
|
+
expect(text(sql, node.orderBy)).toBe("(user_id, kind)");
|
|
69
|
+
expect(text(sql, node.ttl)).toBe("ts + INTERVAL 30 DAY DELETE");
|
|
70
|
+
expect(node.settings!.map((s) => [s.key, text(sql, s.value)])).toEqual([
|
|
71
|
+
["index_granularity", "8192"],
|
|
72
|
+
["allow_nullable_key", "0"],
|
|
73
|
+
]);
|
|
74
|
+
expect(text(sql, node.comment)).toBe("'events'");
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
test("a column named like a keyword is a column", () => {
|
|
78
|
+
const t = parse("CREATE TABLE t (index UInt8, projection String, constraint UInt8) ENGINE = Log") as TableNode;
|
|
79
|
+
expect(t.columns.map((c) => c.name)).toEqual(["index", "projection", "constraint"]);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
test("the clauses may come in any order", () => {
|
|
83
|
+
const t = parse("CREATE TABLE t (a UInt8) ORDER BY a ENGINE = MergeTree PARTITION BY a") as TableNode;
|
|
84
|
+
expect(t.engine!.name).toBe("MergeTree");
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
test("CREATE TABLE ... AS is refused, since it declares no columns", () => {
|
|
88
|
+
expect(() => parse("CREATE TABLE t AS other")).toThrow(/column list/);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
describe("parsing views and databases", () => {
|
|
93
|
+
test("a materialized view with a target, a column list and a refresh", () => {
|
|
94
|
+
const sql =
|
|
95
|
+
"CREATE MATERIALIZED VIEW mv REFRESH EVERY 1 HOUR APPEND TO dst (a UInt8, b) DEFINER = alice SQL SECURITY DEFINER AS SELECT a, b FROM src COMMENT 'x'";
|
|
96
|
+
const v = parse(sql) as ViewNode;
|
|
97
|
+
expect(v.materialized).toBe(true);
|
|
98
|
+
expect(text(sql, v.refresh)).toBe("EVERY 1 HOUR");
|
|
99
|
+
expect(v.append).toBe(true);
|
|
100
|
+
expect(text(sql, v.to)).toBe("dst");
|
|
101
|
+
expect(v.columns.map((c) => c.name)).toEqual(["a", "b"]);
|
|
102
|
+
expect(text(sql, v.security)).toBe("DEFINER = alice SQL SECURITY DEFINER");
|
|
103
|
+
expect(text(sql, v.select)).toBe("SELECT a, b FROM src");
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
test("a view the server printed back, with its UUID", () => {
|
|
107
|
+
const v = parse("CREATE VIEW default.v UUID '6a1b' (`x` UInt8) AS SELECT 1 AS x") as ViewNode;
|
|
108
|
+
expect(v.columns[0]!.name).toBe("x");
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
test("a database with an engine and a comment", () => {
|
|
112
|
+
const sql = "CREATE DATABASE IF NOT EXISTS analytics ENGINE = Replicated('/db', '{shard}', '{replica}') COMMENT 'a'";
|
|
113
|
+
const d = parseCreate(tokenizeText(sql, 0));
|
|
114
|
+
expect(d.statement).toBe("database");
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
describe("interpolations", () => {
|
|
119
|
+
test("stand where a name, a type, an engine or an expression goes", () => {
|
|
120
|
+
const parts = ["CREATE TABLE ", " (", " ", ", b UInt8 DEFAULT ", ") ENGINE = ", " ORDER BY ", ""];
|
|
121
|
+
const node = parseCreate(tokenize(parts)) as TableNode;
|
|
122
|
+
expect(node.name.refs).toEqual([0]);
|
|
123
|
+
expect(node.columns[0]!.nameSpan.refs).toEqual([1]);
|
|
124
|
+
expect(node.columns[0]!.type!.refs).toEqual([2]);
|
|
125
|
+
expect(node.columns[1]!.default!.expr!.refs).toEqual([3]);
|
|
126
|
+
expect(node.engine!.nameSpan.refs).toEqual([4]);
|
|
127
|
+
expect(node.orderBy!.refs).toEqual([5]);
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
describe("syntax errors", () => {
|
|
132
|
+
test("are located at the token, in the part it sits in", () => {
|
|
133
|
+
const parts = ["CREATE TABLE t (\n a UInt8,\n b Strin g\n) ENGINE = Log"];
|
|
134
|
+
try {
|
|
135
|
+
parseCreate(tokenize(parts));
|
|
136
|
+
expect.unreachable();
|
|
137
|
+
} catch (err) {
|
|
138
|
+
expect(err).toBeInstanceOf(SqlSyntaxError);
|
|
139
|
+
const e = err as SqlSyntaxError;
|
|
140
|
+
expect(parts[0]!.slice(e.offset, e.offset + 1)).toBe("g");
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
test("a truncated statement says so", () => {
|
|
145
|
+
expect(() => parse("CREATE TABLE t (a UInt8")).toThrow(/expected '\)'|unexpected end/);
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
describe("the ClickHouse test corpus", () => {
|
|
150
|
+
// 300 statements from ClickHouse's own SQL tests (see testdata/NOTICE). A
|
|
151
|
+
// statement the parser accepted when the fixture was cut must keep parsing.
|
|
152
|
+
const corpus = JSON.parse(readFileSync(join(import.meta.dirname, "testdata", "clickhouse-tests-corpus.json"), "utf-8")) as string[];
|
|
153
|
+
|
|
154
|
+
test("every statement parses", () => {
|
|
155
|
+
const failed: string[] = [];
|
|
156
|
+
for (const sql of corpus) {
|
|
157
|
+
try {
|
|
158
|
+
parse(sql);
|
|
159
|
+
} catch (err) {
|
|
160
|
+
failed.push(`${(err as Error).message}: ${sql.slice(0, 120)}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
expect(failed).toEqual([]);
|
|
164
|
+
expect(corpus.length).toBe(300);
|
|
165
|
+
});
|
|
166
|
+
});
|