@supabase/pg-delta 1.0.0-alpha.2 → 1.0.0-alpha.20
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 +48 -3
- package/dist/cli/app.js +26 -3
- package/dist/cli/bin/cli.js +5 -0
- package/dist/cli/commands/catalog-export.d.ts +5 -0
- package/dist/cli/commands/catalog-export.js +64 -0
- package/dist/cli/commands/declarative-apply.d.ts +6 -0
- package/dist/cli/commands/declarative-apply.js +288 -0
- package/dist/cli/commands/declarative-export.d.ts +5 -0
- package/dist/cli/commands/declarative-export.js +240 -0
- package/dist/cli/commands/plan.js +47 -16
- package/dist/cli/commands/sync.js +8 -12
- package/dist/cli/exit-code.d.ts +2 -0
- package/dist/cli/exit-code.js +7 -0
- package/dist/cli/formatters/tree/tree.js +3 -2
- package/dist/cli/utils/apply-display.d.ts +52 -0
- package/dist/cli/utils/apply-display.js +183 -0
- package/dist/cli/utils/export-display.d.ts +43 -0
- package/dist/cli/utils/export-display.js +202 -0
- package/dist/cli/utils/integrations.d.ts +30 -6
- package/dist/cli/utils/integrations.js +98 -6
- package/dist/cli/utils/resolve-input.d.ts +7 -0
- package/dist/cli/utils/resolve-input.js +13 -0
- package/dist/cli/utils.d.ts +2 -0
- package/dist/cli/utils.js +1 -1
- package/dist/core/catalog-export/index.d.ts +11 -0
- package/dist/core/catalog-export/index.js +10 -0
- package/dist/core/catalog.diff.d.ts +1 -0
- package/dist/core/catalog.diff.js +71 -49
- package/dist/core/catalog.model.d.ts +14 -1
- package/dist/core/catalog.model.js +103 -1
- package/dist/core/catalog.snapshot.d.ts +66 -0
- package/dist/core/catalog.snapshot.js +206 -0
- package/dist/core/change-utils.d.ts +9 -0
- package/dist/core/change-utils.js +71 -0
- package/dist/core/change.types.d.ts +22 -0
- package/dist/core/change.types.js +37 -1
- package/dist/core/connection-url.d.ts +32 -0
- package/dist/core/connection-url.js +77 -0
- package/dist/core/declarative-apply/discover-sql.d.ts +18 -0
- package/dist/core/declarative-apply/discover-sql.js +86 -0
- package/dist/core/declarative-apply/extract-catalog-providers.d.ts +23 -0
- package/dist/core/declarative-apply/extract-catalog-providers.js +159 -0
- package/dist/core/declarative-apply/index.d.ts +49 -0
- package/dist/core/declarative-apply/index.js +134 -0
- package/dist/core/declarative-apply/round-apply.d.ts +100 -0
- package/dist/core/declarative-apply/round-apply.js +378 -0
- package/dist/core/depend.js +25 -0
- package/dist/core/expand-replace-dependencies.d.ts +8 -2
- package/dist/core/expand-replace-dependencies.js +116 -10
- package/dist/core/export/file-mapper.d.ts +71 -0
- package/dist/core/export/file-mapper.js +474 -0
- package/dist/core/export/grouper.d.ts +13 -0
- package/dist/core/export/grouper.js +76 -0
- package/dist/core/export/index.d.ts +45 -0
- package/dist/core/export/index.js +66 -0
- package/dist/core/export/types.d.ts +84 -0
- package/dist/core/export/types.js +25 -0
- package/dist/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
- package/dist/core/integrations/filter/dsl.d.ts +82 -41
- package/dist/core/integrations/filter/dsl.js +127 -61
- package/dist/core/integrations/filter/flatten.d.ts +51 -0
- package/dist/core/integrations/filter/flatten.js +116 -0
- package/dist/core/integrations/integration-dsl.d.ts +27 -1
- package/dist/core/integrations/integration.types.d.ts +26 -1
- package/dist/core/integrations/integration.types.js +31 -1
- package/dist/core/integrations/merge.d.ts +20 -0
- package/dist/core/integrations/merge.js +60 -0
- package/dist/core/integrations/serialize/dsl.d.ts +8 -12
- package/dist/core/integrations/serialize/dsl.js +2 -2
- package/dist/core/integrations/serialize/serialize.types.d.ts +31 -0
- package/dist/core/integrations/supabase.d.ts +8 -0
- package/dist/core/integrations/supabase.js +69 -8
- package/dist/core/objects/aggregate/aggregate.diff.d.ts +2 -8
- package/dist/core/objects/aggregate/aggregate.diff.js +16 -70
- package/dist/core/objects/aggregate/aggregate.model.d.ts +8 -8
- package/dist/core/objects/aggregate/aggregate.model.js +1 -1
- package/dist/core/objects/aggregate/changes/aggregate.alter.d.ts +2 -1
- package/dist/core/objects/aggregate/changes/aggregate.alter.js +1 -1
- package/dist/core/objects/aggregate/changes/aggregate.comment.d.ts +3 -2
- package/dist/core/objects/aggregate/changes/aggregate.comment.js +2 -2
- package/dist/core/objects/aggregate/changes/aggregate.create.d.ts +2 -1
- package/dist/core/objects/aggregate/changes/aggregate.create.js +2 -2
- package/dist/core/objects/aggregate/changes/aggregate.drop.d.ts +2 -1
- package/dist/core/objects/aggregate/changes/aggregate.drop.js +2 -2
- package/dist/core/objects/aggregate/changes/aggregate.privilege.d.ts +4 -3
- package/dist/core/objects/aggregate/changes/aggregate.privilege.js +3 -3
- package/dist/core/objects/aggregate/changes/aggregate.types.d.ts +1 -0
- package/dist/core/objects/base.change.d.ts +12 -1
- package/dist/core/objects/base.change.js +10 -0
- package/dist/core/objects/base.model.d.ts +4 -1
- package/dist/core/objects/base.model.js +5 -2
- package/dist/core/objects/base.privilege-diff.d.ts +38 -13
- package/dist/core/objects/base.privilege-diff.js +104 -22
- package/dist/core/objects/base.privilege.d.ts +1 -0
- package/dist/core/objects/base.privilege.js +9 -2
- package/dist/core/objects/collation/changes/collation.alter.d.ts +3 -2
- package/dist/core/objects/collation/changes/collation.alter.js +2 -2
- package/dist/core/objects/collation/changes/collation.comment.d.ts +3 -2
- package/dist/core/objects/collation/changes/collation.comment.js +2 -2
- package/dist/core/objects/collation/changes/collation.create.d.ts +2 -1
- package/dist/core/objects/collation/changes/collation.create.js +1 -1
- package/dist/core/objects/collation/changes/collation.drop.d.ts +2 -1
- package/dist/core/objects/collation/changes/collation.drop.js +1 -1
- package/dist/core/objects/collation/changes/collation.types.d.ts +1 -0
- package/dist/core/objects/collation/collation.diff.d.ts +2 -3
- package/dist/core/objects/diff-context.d.ts +15 -0
- package/dist/core/objects/diff-context.js +1 -0
- package/dist/core/objects/domain/changes/domain.alter.d.ts +9 -8
- package/dist/core/objects/domain/changes/domain.alter.js +8 -8
- package/dist/core/objects/domain/changes/domain.comment.d.ts +3 -2
- package/dist/core/objects/domain/changes/domain.comment.js +2 -2
- package/dist/core/objects/domain/changes/domain.create.d.ts +3 -2
- package/dist/core/objects/domain/changes/domain.create.js +12 -4
- package/dist/core/objects/domain/changes/domain.drop.d.ts +2 -1
- package/dist/core/objects/domain/changes/domain.drop.js +1 -1
- package/dist/core/objects/domain/changes/domain.privilege.d.ts +4 -3
- package/dist/core/objects/domain/changes/domain.privilege.js +3 -3
- package/dist/core/objects/domain/changes/domain.types.d.ts +1 -0
- package/dist/core/objects/domain/domain.diff.d.ts +2 -8
- package/dist/core/objects/domain/domain.diff.js +16 -77
- package/dist/core/objects/domain/domain.model.js +1 -1
- package/dist/core/objects/event-trigger/changes/event-trigger.alter.d.ts +3 -2
- package/dist/core/objects/event-trigger/changes/event-trigger.alter.js +2 -2
- package/dist/core/objects/event-trigger/changes/event-trigger.comment.d.ts +3 -2
- package/dist/core/objects/event-trigger/changes/event-trigger.comment.js +2 -2
- package/dist/core/objects/event-trigger/changes/event-trigger.create.d.ts +2 -1
- package/dist/core/objects/event-trigger/changes/event-trigger.create.js +1 -1
- package/dist/core/objects/event-trigger/changes/event-trigger.drop.d.ts +2 -1
- package/dist/core/objects/event-trigger/changes/event-trigger.drop.js +1 -1
- package/dist/core/objects/event-trigger/changes/event-trigger.types.d.ts +1 -0
- package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +2 -3
- package/dist/core/objects/extension/changes/extension.alter.d.ts +3 -2
- package/dist/core/objects/extension/changes/extension.alter.js +2 -2
- package/dist/core/objects/extension/changes/extension.comment.d.ts +3 -2
- package/dist/core/objects/extension/changes/extension.comment.js +2 -2
- package/dist/core/objects/extension/changes/extension.create.d.ts +2 -1
- package/dist/core/objects/extension/changes/extension.create.js +4 -2
- package/dist/core/objects/extension/changes/extension.drop.d.ts +2 -1
- package/dist/core/objects/extension/changes/extension.drop.js +1 -1
- package/dist/core/objects/extension/changes/extension.types.d.ts +1 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.d.ts +3 -2
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.js +2 -2
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.d.ts +3 -2
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.js +2 -2
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.d.ts +2 -1
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.js +1 -1
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.d.ts +2 -1
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.js +1 -1
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.d.ts +4 -3
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.js +3 -3
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.d.ts +1 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts +2 -8
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js +13 -77
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +2 -2
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.d.ts +1 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.d.ts +10 -9
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.js +9 -9
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.d.ts +3 -2
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.js +2 -2
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.d.ts +2 -1
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.js +1 -1
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.d.ts +2 -1
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.js +1 -1
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.d.ts +4 -3
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.js +3 -3
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.d.ts +1 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.d.ts +2 -8
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +16 -77
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +1 -1
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.d.ts +4 -3
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.js +3 -3
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.d.ts +3 -2
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.js +2 -2
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.d.ts +2 -1
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.js +1 -1
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.d.ts +2 -1
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.js +1 -1
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.d.ts +4 -3
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.js +3 -3
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.types.d.ts +1 -0
- package/dist/core/objects/foreign-data-wrapper/server/server.diff.d.ts +2 -8
- package/dist/core/objects/foreign-data-wrapper/server/server.diff.js +13 -77
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.d.ts +2 -1
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.js +1 -1
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.d.ts +2 -1
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.js +1 -1
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.d.ts +2 -1
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.js +1 -1
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.d.ts +1 -0
- package/dist/core/objects/index/changes/index.alter.d.ts +4 -3
- package/dist/core/objects/index/changes/index.alter.js +3 -3
- package/dist/core/objects/index/changes/index.comment.d.ts +3 -2
- package/dist/core/objects/index/changes/index.comment.js +2 -2
- package/dist/core/objects/index/changes/index.create.d.ts +2 -1
- package/dist/core/objects/index/changes/index.create.js +1 -1
- package/dist/core/objects/index/changes/index.drop.d.ts +2 -1
- package/dist/core/objects/index/changes/index.drop.js +1 -1
- package/dist/core/objects/index/changes/index.types.d.ts +1 -0
- package/dist/core/objects/index/index.model.js +12 -2
- package/dist/core/objects/language/changes/language.alter.d.ts +2 -1
- package/dist/core/objects/language/changes/language.alter.js +1 -1
- package/dist/core/objects/language/changes/language.comment.d.ts +3 -2
- package/dist/core/objects/language/changes/language.comment.js +2 -2
- package/dist/core/objects/language/changes/language.create.d.ts +2 -1
- package/dist/core/objects/language/changes/language.create.js +1 -1
- package/dist/core/objects/language/changes/language.drop.d.ts +2 -1
- package/dist/core/objects/language/changes/language.drop.js +1 -1
- package/dist/core/objects/language/changes/language.privilege.d.ts +4 -3
- package/dist/core/objects/language/changes/language.privilege.js +3 -3
- package/dist/core/objects/language/changes/language.types.d.ts +1 -0
- package/dist/core/objects/language/language.diff.d.ts +2 -5
- package/dist/core/objects/language/language.diff.js +7 -39
- package/dist/core/objects/materialized-view/changes/materialized-view.alter.d.ts +3 -2
- package/dist/core/objects/materialized-view/changes/materialized-view.alter.js +2 -2
- package/dist/core/objects/materialized-view/changes/materialized-view.comment.d.ts +5 -4
- package/dist/core/objects/materialized-view/changes/materialized-view.comment.js +4 -4
- package/dist/core/objects/materialized-view/changes/materialized-view.create.d.ts +2 -1
- package/dist/core/objects/materialized-view/changes/materialized-view.create.js +1 -1
- package/dist/core/objects/materialized-view/changes/materialized-view.drop.d.ts +2 -1
- package/dist/core/objects/materialized-view/changes/materialized-view.drop.js +1 -1
- package/dist/core/objects/materialized-view/changes/materialized-view.privilege.d.ts +4 -3
- package/dist/core/objects/materialized-view/changes/materialized-view.privilege.js +3 -3
- package/dist/core/objects/materialized-view/changes/materialized-view.types.d.ts +1 -0
- package/dist/core/objects/materialized-view/materialized-view.diff.d.ts +2 -8
- package/dist/core/objects/materialized-view/materialized-view.diff.js +16 -158
- package/dist/core/objects/materialized-view/materialized-view.model.d.ts +3 -3
- package/dist/core/objects/materialized-view/materialized-view.model.js +1 -1
- package/dist/core/objects/procedure/changes/procedure.alter.d.ts +8 -7
- package/dist/core/objects/procedure/changes/procedure.alter.js +19 -19
- package/dist/core/objects/procedure/changes/procedure.comment.d.ts +3 -2
- package/dist/core/objects/procedure/changes/procedure.comment.js +2 -2
- package/dist/core/objects/procedure/changes/procedure.create.d.ts +2 -1
- package/dist/core/objects/procedure/changes/procedure.create.js +1 -1
- package/dist/core/objects/procedure/changes/procedure.drop.d.ts +2 -1
- package/dist/core/objects/procedure/changes/procedure.drop.js +1 -1
- package/dist/core/objects/procedure/changes/procedure.privilege.d.ts +4 -3
- package/dist/core/objects/procedure/changes/procedure.privilege.js +3 -3
- package/dist/core/objects/procedure/changes/procedure.types.d.ts +1 -0
- package/dist/core/objects/procedure/procedure.diff.d.ts +2 -8
- package/dist/core/objects/procedure/procedure.diff.js +57 -97
- package/dist/core/objects/procedure/procedure.model.d.ts +9 -9
- package/dist/core/objects/procedure/procedure.model.js +1 -1
- package/dist/core/objects/publication/changes/publication.alter.d.ts +9 -16
- package/dist/core/objects/publication/changes/publication.alter.js +12 -21
- package/dist/core/objects/publication/changes/publication.comment.d.ts +3 -2
- package/dist/core/objects/publication/changes/publication.comment.js +2 -2
- package/dist/core/objects/publication/changes/publication.create.d.ts +2 -1
- package/dist/core/objects/publication/changes/publication.create.js +1 -1
- package/dist/core/objects/publication/changes/publication.drop.d.ts +2 -1
- package/dist/core/objects/publication/changes/publication.drop.js +1 -1
- package/dist/core/objects/publication/changes/publication.types.d.ts +3 -2
- package/dist/core/objects/publication/publication.diff.d.ts +2 -3
- package/dist/core/objects/publication/publication.diff.js +8 -13
- package/dist/core/objects/rls-policy/changes/rls-policy.alter.d.ts +4 -3
- package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +6 -6
- package/dist/core/objects/rls-policy/changes/rls-policy.comment.d.ts +3 -2
- package/dist/core/objects/rls-policy/changes/rls-policy.comment.js +2 -2
- package/dist/core/objects/rls-policy/changes/rls-policy.create.d.ts +2 -1
- package/dist/core/objects/rls-policy/changes/rls-policy.create.js +24 -1
- package/dist/core/objects/rls-policy/changes/rls-policy.drop.d.ts +2 -1
- package/dist/core/objects/rls-policy/changes/rls-policy.drop.js +1 -1
- package/dist/core/objects/rls-policy/changes/rls-policy.types.d.ts +1 -0
- package/dist/core/objects/rls-policy/rls-policy.model.d.ts +51 -2
- package/dist/core/objects/rls-policy/rls-policy.model.js +122 -1
- package/dist/core/objects/role/changes/role.alter.d.ts +3 -2
- package/dist/core/objects/role/changes/role.alter.js +2 -2
- package/dist/core/objects/role/changes/role.comment.d.ts +3 -2
- package/dist/core/objects/role/changes/role.comment.js +2 -2
- package/dist/core/objects/role/changes/role.create.d.ts +2 -1
- package/dist/core/objects/role/changes/role.create.js +1 -1
- package/dist/core/objects/role/changes/role.drop.d.ts +2 -1
- package/dist/core/objects/role/changes/role.drop.js +1 -1
- package/dist/core/objects/role/changes/role.privilege.d.ts +6 -5
- package/dist/core/objects/role/changes/role.privilege.js +5 -5
- package/dist/core/objects/role/changes/role.types.d.ts +1 -0
- package/dist/core/objects/role/role.diff.js +22 -1
- package/dist/core/objects/role/role.model.d.ts +4 -3
- package/dist/core/objects/role/role.model.js +118 -12
- package/dist/core/objects/rule/changes/rule.alter.d.ts +3 -2
- package/dist/core/objects/rule/changes/rule.alter.js +2 -2
- package/dist/core/objects/rule/changes/rule.comment.d.ts +3 -2
- package/dist/core/objects/rule/changes/rule.comment.js +2 -2
- package/dist/core/objects/rule/changes/rule.create.d.ts +2 -1
- package/dist/core/objects/rule/changes/rule.create.js +1 -1
- package/dist/core/objects/rule/changes/rule.drop.d.ts +2 -1
- package/dist/core/objects/rule/changes/rule.drop.js +1 -1
- package/dist/core/objects/rule/changes/rule.types.d.ts +1 -0
- package/dist/core/objects/rule/rule.model.d.ts +1 -1
- package/dist/core/objects/schema/changes/schema.alter.d.ts +2 -1
- package/dist/core/objects/schema/changes/schema.alter.js +1 -1
- package/dist/core/objects/schema/changes/schema.comment.d.ts +3 -2
- package/dist/core/objects/schema/changes/schema.comment.js +2 -2
- package/dist/core/objects/schema/changes/schema.create.d.ts +3 -5
- package/dist/core/objects/schema/changes/schema.drop.d.ts +2 -1
- package/dist/core/objects/schema/changes/schema.drop.js +1 -1
- package/dist/core/objects/schema/changes/schema.privilege.d.ts +4 -3
- package/dist/core/objects/schema/changes/schema.privilege.js +3 -3
- package/dist/core/objects/schema/changes/schema.types.d.ts +1 -0
- package/dist/core/objects/schema/schema.diff.d.ts +2 -8
- package/dist/core/objects/schema/schema.diff.js +16 -77
- package/dist/core/objects/schema/schema.model.js +1 -1
- package/dist/core/objects/sequence/changes/sequence.alter.d.ts +3 -2
- package/dist/core/objects/sequence/changes/sequence.alter.js +2 -2
- package/dist/core/objects/sequence/changes/sequence.comment.d.ts +3 -2
- package/dist/core/objects/sequence/changes/sequence.comment.js +2 -2
- package/dist/core/objects/sequence/changes/sequence.create.d.ts +2 -1
- package/dist/core/objects/sequence/changes/sequence.create.js +1 -1
- package/dist/core/objects/sequence/changes/sequence.drop.d.ts +2 -1
- package/dist/core/objects/sequence/changes/sequence.drop.js +11 -3
- package/dist/core/objects/sequence/changes/sequence.privilege.d.ts +4 -3
- package/dist/core/objects/sequence/changes/sequence.privilege.js +3 -3
- package/dist/core/objects/sequence/changes/sequence.types.d.ts +1 -0
- package/dist/core/objects/sequence/sequence.diff.d.ts +5 -8
- package/dist/core/objects/sequence/sequence.diff.js +42 -85
- package/dist/core/objects/sequence/sequence.model.js +1 -1
- package/dist/core/objects/subscription/changes/subscription.alter.d.ts +7 -6
- package/dist/core/objects/subscription/changes/subscription.alter.js +6 -6
- package/dist/core/objects/subscription/changes/subscription.comment.d.ts +3 -2
- package/dist/core/objects/subscription/changes/subscription.comment.js +2 -2
- package/dist/core/objects/subscription/changes/subscription.create.d.ts +2 -1
- package/dist/core/objects/subscription/changes/subscription.create.js +1 -1
- package/dist/core/objects/subscription/changes/subscription.drop.d.ts +2 -1
- package/dist/core/objects/subscription/changes/subscription.drop.js +1 -1
- package/dist/core/objects/subscription/changes/subscription.types.d.ts +1 -0
- package/dist/core/objects/subscription/subscription.diff.d.ts +2 -3
- package/dist/core/objects/table/changes/table.alter.d.ts +65 -22
- package/dist/core/objects/table/changes/table.alter.js +111 -23
- package/dist/core/objects/table/changes/table.comment.d.ts +7 -6
- package/dist/core/objects/table/changes/table.comment.js +6 -6
- package/dist/core/objects/table/changes/table.create.d.ts +2 -1
- package/dist/core/objects/table/changes/table.create.js +4 -1
- package/dist/core/objects/table/changes/table.drop.d.ts +16 -3
- package/dist/core/objects/table/changes/table.drop.js +24 -1
- package/dist/core/objects/table/changes/table.privilege.d.ts +4 -3
- package/dist/core/objects/table/changes/table.privilege.js +3 -3
- package/dist/core/objects/table/changes/table.types.d.ts +1 -0
- package/dist/core/objects/table/table.diff.d.ts +2 -8
- package/dist/core/objects/table/table.diff.js +80 -160
- package/dist/core/objects/table/table.model.d.ts +29 -22
- package/dist/core/objects/table/table.model.js +6 -1
- package/dist/core/objects/trigger/changes/trigger.alter.d.ts +2 -1
- package/dist/core/objects/trigger/changes/trigger.alter.js +24 -1
- package/dist/core/objects/trigger/changes/trigger.comment.d.ts +3 -2
- package/dist/core/objects/trigger/changes/trigger.comment.js +2 -2
- package/dist/core/objects/trigger/changes/trigger.create.d.ts +2 -1
- package/dist/core/objects/trigger/changes/trigger.create.js +5 -6
- package/dist/core/objects/trigger/changes/trigger.drop.d.ts +2 -1
- package/dist/core/objects/trigger/changes/trigger.drop.js +1 -1
- package/dist/core/objects/trigger/changes/trigger.types.d.ts +1 -0
- package/dist/core/objects/trigger/trigger.diff.js +7 -2
- package/dist/core/objects/trigger/trigger.model.d.ts +10 -1
- package/dist/core/objects/trigger/trigger.model.js +19 -1
- package/dist/core/objects/type/composite-type/changes/composite-type.alter.d.ts +5 -4
- package/dist/core/objects/type/composite-type/changes/composite-type.alter.js +4 -4
- package/dist/core/objects/type/composite-type/changes/composite-type.comment.d.ts +5 -4
- package/dist/core/objects/type/composite-type/changes/composite-type.comment.js +4 -4
- package/dist/core/objects/type/composite-type/changes/composite-type.create.d.ts +2 -1
- package/dist/core/objects/type/composite-type/changes/composite-type.create.js +1 -1
- package/dist/core/objects/type/composite-type/changes/composite-type.drop.d.ts +2 -1
- package/dist/core/objects/type/composite-type/changes/composite-type.drop.js +1 -1
- package/dist/core/objects/type/composite-type/changes/composite-type.privilege.d.ts +4 -3
- package/dist/core/objects/type/composite-type/changes/composite-type.privilege.js +3 -3
- package/dist/core/objects/type/composite-type/changes/composite-type.types.d.ts +1 -0
- package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +2 -8
- package/dist/core/objects/type/composite-type/composite-type.diff.js +16 -77
- package/dist/core/objects/type/composite-type/composite-type.model.d.ts +3 -3
- package/dist/core/objects/type/composite-type/composite-type.model.js +2 -1
- package/dist/core/objects/type/enum/changes/enum.alter.d.ts +3 -2
- package/dist/core/objects/type/enum/changes/enum.alter.js +2 -2
- package/dist/core/objects/type/enum/changes/enum.comment.d.ts +3 -2
- package/dist/core/objects/type/enum/changes/enum.comment.js +2 -2
- package/dist/core/objects/type/enum/changes/enum.create.d.ts +2 -1
- package/dist/core/objects/type/enum/changes/enum.create.js +1 -1
- package/dist/core/objects/type/enum/changes/enum.drop.d.ts +2 -1
- package/dist/core/objects/type/enum/changes/enum.drop.js +1 -1
- package/dist/core/objects/type/enum/changes/enum.privilege.d.ts +4 -3
- package/dist/core/objects/type/enum/changes/enum.privilege.js +3 -3
- package/dist/core/objects/type/enum/changes/enum.types.d.ts +1 -0
- package/dist/core/objects/type/enum/enum.diff.d.ts +2 -8
- package/dist/core/objects/type/enum/enum.diff.js +25 -112
- package/dist/core/objects/type/enum/enum.model.js +1 -1
- package/dist/core/objects/type/range/changes/range.alter.d.ts +2 -1
- package/dist/core/objects/type/range/changes/range.alter.js +1 -1
- package/dist/core/objects/type/range/changes/range.comment.d.ts +3 -2
- package/dist/core/objects/type/range/changes/range.comment.js +2 -2
- package/dist/core/objects/type/range/changes/range.create.d.ts +2 -1
- package/dist/core/objects/type/range/changes/range.create.js +7 -4
- package/dist/core/objects/type/range/changes/range.drop.d.ts +2 -1
- package/dist/core/objects/type/range/changes/range.drop.js +1 -1
- package/dist/core/objects/type/range/changes/range.privilege.d.ts +4 -3
- package/dist/core/objects/type/range/changes/range.privilege.js +3 -3
- package/dist/core/objects/type/range/changes/range.types.d.ts +1 -0
- package/dist/core/objects/type/range/range.diff.d.ts +2 -8
- package/dist/core/objects/type/range/range.diff.js +16 -77
- package/dist/core/objects/type/range/range.model.js +1 -1
- package/dist/core/objects/type/type.types.d.ts +1 -0
- package/dist/core/objects/view/changes/view.alter.d.ts +4 -3
- package/dist/core/objects/view/changes/view.alter.js +3 -3
- package/dist/core/objects/view/changes/view.comment.d.ts +3 -2
- package/dist/core/objects/view/changes/view.comment.js +2 -2
- package/dist/core/objects/view/changes/view.create.d.ts +2 -1
- package/dist/core/objects/view/changes/view.create.js +1 -1
- package/dist/core/objects/view/changes/view.drop.d.ts +2 -1
- package/dist/core/objects/view/changes/view.drop.js +1 -1
- package/dist/core/objects/view/changes/view.privilege.d.ts +4 -3
- package/dist/core/objects/view/changes/view.privilege.js +3 -3
- package/dist/core/objects/view/changes/view.types.d.ts +1 -0
- package/dist/core/objects/view/view.diff.d.ts +2 -8
- package/dist/core/objects/view/view.diff.js +37 -168
- package/dist/core/objects/view/view.model.d.ts +18 -4
- package/dist/core/objects/view/view.model.js +3 -13
- package/dist/core/plan/apply.js +11 -28
- package/dist/core/plan/create.d.ts +19 -6
- package/dist/core/plan/create.js +154 -171
- package/dist/core/plan/serialize.js +16 -4
- package/dist/core/plan/sql-format/constants.d.ts +2 -0
- package/dist/core/plan/sql-format/constants.js +11 -0
- package/dist/core/plan/sql-format/fixtures.d.ts +2 -0
- package/dist/core/plan/sql-format/fixtures.js +2455 -0
- package/dist/core/plan/sql-format/format-utils.d.ts +37 -0
- package/dist/core/plan/sql-format/format-utils.js +274 -0
- package/dist/core/plan/sql-format/formatters.d.ts +20 -0
- package/dist/core/plan/sql-format/formatters.js +737 -0
- package/dist/core/plan/sql-format/index.d.ts +2 -0
- package/dist/core/plan/sql-format/index.js +98 -0
- package/dist/core/plan/sql-format/keyword-case.d.ts +2 -0
- package/dist/core/plan/sql-format/keyword-case.js +893 -0
- package/dist/core/plan/sql-format/protect.d.ts +3 -0
- package/dist/core/plan/sql-format/protect.js +269 -0
- package/dist/core/plan/sql-format/sql-scanner.d.ts +59 -0
- package/dist/core/plan/sql-format/sql-scanner.js +202 -0
- package/dist/core/plan/sql-format/tokenizer.d.ts +22 -0
- package/dist/core/plan/sql-format/tokenizer.js +118 -0
- package/dist/core/plan/sql-format/types.d.ts +28 -0
- package/dist/core/plan/sql-format/types.js +1 -0
- package/dist/core/plan/sql-format/wrap.d.ts +2 -0
- package/dist/core/plan/sql-format/wrap.js +165 -0
- package/dist/core/plan/sql-format.d.ts +2 -0
- package/dist/core/plan/sql-format.js +1 -0
- package/dist/core/plan/ssl-config.d.ts +32 -0
- package/dist/core/plan/ssl-config.js +115 -0
- package/dist/core/plan/statements.d.ts +2 -1
- package/dist/core/plan/statements.js +6 -2
- package/dist/core/plan/types.d.ts +9 -6
- package/dist/core/post-diff-cycle-breaking.d.ts +29 -0
- package/dist/core/post-diff-cycle-breaking.js +209 -0
- package/dist/core/postgres-config.d.ts +89 -3
- package/dist/core/postgres-config.js +273 -4
- package/dist/core/sort/custom-constraints.js +65 -1
- package/dist/core/sort/graph-builder.js +10 -0
- package/dist/core/sort/logical-sort.js +34 -47
- package/dist/core/test-utils/assert-valid-sql.d.ts +10 -0
- package/dist/core/test-utils/assert-valid-sql.js +19 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +9 -1
- package/package.json +59 -22
- package/src/cli/app.ts +52 -0
- package/src/cli/bin/cli.ts +15 -0
- package/src/cli/commands/apply.ts +101 -0
- package/src/cli/commands/catalog-export.ts +78 -0
- package/src/cli/commands/declarative-apply.diagnostics.test.ts +77 -0
- package/src/cli/commands/declarative-apply.ts +380 -0
- package/src/cli/commands/declarative-export.ts +322 -0
- package/src/cli/commands/plan.ts +210 -0
- package/src/cli/commands/sync.ts +178 -0
- package/src/cli/exit-code.test.ts +19 -0
- package/src/cli/exit-code.ts +7 -0
- package/src/cli/formatters/index.ts +5 -0
- package/src/cli/formatters/tree/tree-builder.ts +380 -0
- package/src/cli/formatters/tree/tree-renderer.ts +372 -0
- package/src/cli/formatters/tree/tree.ts +238 -0
- package/src/cli/utils/apply-display.test.ts +348 -0
- package/src/cli/utils/apply-display.ts +238 -0
- package/src/cli/utils/export-display.test.ts +103 -0
- package/src/cli/utils/export-display.ts +275 -0
- package/src/cli/utils/integrations.test.ts +251 -0
- package/src/cli/utils/integrations.ts +170 -0
- package/src/cli/utils/resolve-input.test.ts +38 -0
- package/src/cli/utils/resolve-input.ts +17 -0
- package/src/cli/utils.ts +231 -0
- package/src/core/catalog-export/index.ts +20 -0
- package/src/core/catalog.diff.ts +253 -0
- package/src/core/catalog.model.test.ts +122 -0
- package/src/core/catalog.model.ts +510 -0
- package/src/core/catalog.snapshot.test.ts +488 -0
- package/src/core/catalog.snapshot.ts +289 -0
- package/src/core/change-utils.test.ts +61 -0
- package/src/core/change-utils.ts +73 -0
- package/src/core/change.types.ts +94 -0
- package/src/core/connection-url.test.ts +142 -0
- package/src/core/connection-url.ts +82 -0
- package/src/core/context.ts +26 -0
- package/src/core/declarative-apply/discover-sql.test.ts +103 -0
- package/src/core/declarative-apply/discover-sql.ts +107 -0
- package/src/core/declarative-apply/extract-catalog-providers.ts +220 -0
- package/src/core/declarative-apply/index.test.ts +67 -0
- package/src/core/declarative-apply/index.ts +205 -0
- package/src/core/declarative-apply/round-apply.test.ts +504 -0
- package/src/core/declarative-apply/round-apply.ts +562 -0
- package/src/core/depend.ts +1895 -0
- package/src/core/expand-replace-dependencies.test.ts +552 -0
- package/src/core/expand-replace-dependencies.ts +536 -0
- package/src/core/export/file-mapper.test.ts +816 -0
- package/src/core/export/file-mapper.ts +579 -0
- package/src/core/export/grouper.ts +108 -0
- package/src/core/export/index.ts +138 -0
- package/src/core/export/types.ts +104 -0
- package/src/core/fingerprint.ts +204 -0
- package/src/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
- package/src/core/integrations/filter/dsl.test.ts +450 -0
- package/src/core/integrations/filter/dsl.ts +305 -0
- package/src/core/integrations/filter/filter.types.ts +3 -0
- package/src/core/integrations/filter/flatten.test.ts +282 -0
- package/src/core/integrations/filter/flatten.ts +150 -0
- package/src/core/integrations/integration-dsl.ts +50 -0
- package/src/core/integrations/integration.types.ts +65 -0
- package/src/core/integrations/merge.test.ts +128 -0
- package/src/core/integrations/merge.ts +72 -0
- package/src/core/integrations/serialize/dsl.test.ts +110 -0
- package/src/core/integrations/serialize/dsl.ts +71 -0
- package/src/core/integrations/serialize/serialize.types.ts +40 -0
- package/src/core/integrations/supabase.ts +180 -0
- package/src/core/objects/aggregate/aggregate.diff.test.ts +215 -0
- package/src/core/objects/aggregate/aggregate.diff.ts +222 -0
- package/src/core/objects/aggregate/aggregate.model.ts +317 -0
- package/src/core/objects/aggregate/changes/aggregate.alter.test.ts +66 -0
- package/src/core/objects/aggregate/changes/aggregate.alter.ts +33 -0
- package/src/core/objects/aggregate/changes/aggregate.base.ts +20 -0
- package/src/core/objects/aggregate/changes/aggregate.comment.test.ts +89 -0
- package/src/core/objects/aggregate/changes/aggregate.comment.ts +63 -0
- package/src/core/objects/aggregate/changes/aggregate.create.test.ts +104 -0
- package/src/core/objects/aggregate/changes/aggregate.create.ts +330 -0
- package/src/core/objects/aggregate/changes/aggregate.drop.test.ts +82 -0
- package/src/core/objects/aggregate/changes/aggregate.drop.ts +33 -0
- package/src/core/objects/aggregate/changes/aggregate.privilege.test.ts +136 -0
- package/src/core/objects/aggregate/changes/aggregate.privilege.ts +147 -0
- package/src/core/objects/aggregate/changes/aggregate.types.ts +13 -0
- package/src/core/objects/base.change.ts +74 -0
- package/src/core/objects/base.default-privileges.ts +204 -0
- package/src/core/objects/base.diff.ts +20 -0
- package/src/core/objects/base.model.test.ts +43 -0
- package/src/core/objects/base.model.ts +85 -0
- package/src/core/objects/base.privilege-diff.ts +447 -0
- package/src/core/objects/base.privilege.ts +191 -0
- package/src/core/objects/collation/changes/collation.alter.test.ts +68 -0
- package/src/core/objects/collation/changes/collation.alter.ts +80 -0
- package/src/core/objects/collation/changes/collation.base.ts +20 -0
- package/src/core/objects/collation/changes/collation.comment.ts +69 -0
- package/src/core/objects/collation/changes/collation.create.test.ts +56 -0
- package/src/core/objects/collation/changes/collation.create.ts +107 -0
- package/src/core/objects/collation/changes/collation.drop.test.ts +31 -0
- package/src/core/objects/collation/changes/collation.drop.ts +38 -0
- package/src/core/objects/collation/changes/collation.types.ts +11 -0
- package/src/core/objects/collation/collation.diff.test.ts +97 -0
- package/src/core/objects/collation/collation.diff.ts +127 -0
- package/src/core/objects/collation/collation.model.ts +224 -0
- package/src/core/objects/diff-context.ts +16 -0
- package/src/core/objects/domain/changes/domain.alter.test.ts +335 -0
- package/src/core/objects/domain/changes/domain.alter.ts +287 -0
- package/src/core/objects/domain/changes/domain.base.ts +20 -0
- package/src/core/objects/domain/changes/domain.comment.ts +60 -0
- package/src/core/objects/domain/changes/domain.create.test.ts +95 -0
- package/src/core/objects/domain/changes/domain.create.ts +141 -0
- package/src/core/objects/domain/changes/domain.drop.test.ts +33 -0
- package/src/core/objects/domain/changes/domain.drop.ts +35 -0
- package/src/core/objects/domain/changes/domain.privilege.ts +172 -0
- package/src/core/objects/domain/changes/domain.types.ts +13 -0
- package/src/core/objects/domain/domain.diff.test.ts +284 -0
- package/src/core/objects/domain/domain.diff.ts +295 -0
- package/src/core/objects/domain/domain.model.ts +190 -0
- package/src/core/objects/event-trigger/changes/event-trigger.alter.test.ts +57 -0
- package/src/core/objects/event-trigger/changes/event-trigger.alter.ts +83 -0
- package/src/core/objects/event-trigger/changes/event-trigger.base.ts +20 -0
- package/src/core/objects/event-trigger/changes/event-trigger.comment.ts +67 -0
- package/src/core/objects/event-trigger/changes/event-trigger.create.test.ts +27 -0
- package/src/core/objects/event-trigger/changes/event-trigger.create.ts +73 -0
- package/src/core/objects/event-trigger/changes/event-trigger.drop.test.ts +25 -0
- package/src/core/objects/event-trigger/changes/event-trigger.drop.ts +35 -0
- package/src/core/objects/event-trigger/changes/event-trigger.types.ts +11 -0
- package/src/core/objects/event-trigger/event-trigger.diff.test.ts +131 -0
- package/src/core/objects/event-trigger/event-trigger.diff.ts +127 -0
- package/src/core/objects/event-trigger/event-trigger.model.ts +106 -0
- package/src/core/objects/extension/changes/extension.alter.test.ts +63 -0
- package/src/core/objects/extension/changes/extension.alter.ts +79 -0
- package/src/core/objects/extension/changes/extension.base.ts +20 -0
- package/src/core/objects/extension/changes/extension.comment.ts +65 -0
- package/src/core/objects/extension/changes/extension.create.test.ts +50 -0
- package/src/core/objects/extension/changes/extension.create.ts +66 -0
- package/src/core/objects/extension/changes/extension.drop.test.ts +26 -0
- package/src/core/objects/extension/changes/extension.drop.ts +35 -0
- package/src/core/objects/extension/changes/extension.types.ts +11 -0
- package/src/core/objects/extension/extension.diff.test.ts +42 -0
- package/src/core/objects/extension/extension.diff.ts +90 -0
- package/src/core/objects/extension/extension.model.test.ts +98 -0
- package/src/core/objects/extension/extension.model.ts +280 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.test.ts +136 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.ts +102 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.ts +20 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.ts +73 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.test.ts +160 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.ts +96 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.test.ts +26 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.ts +37 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.ts +173 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.ts +13 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.test.ts +286 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.ts +271 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.ts +149 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.ts +11 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.test.ts +340 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.ts +342 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.ts +20 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.ts +73 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.test.ts +210 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.ts +82 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.test.ts +46 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.ts +38 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.ts +182 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.ts +13 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.test.ts +813 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.ts +343 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.ts +242 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.test.ts +183 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.ts +127 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.base.ts +20 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.comment.ts +61 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.create.test.ts +144 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.create.ts +82 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.test.ts +27 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.ts +35 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.privilege.ts +165 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.types.ts +13 -0
- package/src/core/objects/foreign-data-wrapper/server/server.diff.test.ts +262 -0
- package/src/core/objects/foreign-data-wrapper/server/server.diff.ts +247 -0
- package/src/core/objects/foreign-data-wrapper/server/server.model.ts +133 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.test.ts +91 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.ts +70 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.ts +20 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.test.ts +96 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.ts +67 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.test.ts +60 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.ts +41 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.ts +9 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.test.ts +77 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.ts +107 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.ts +96 -0
- package/src/core/objects/index/changes/index.alter.test.ts +209 -0
- package/src/core/objects/index/changes/index.alter.ts +145 -0
- package/src/core/objects/index/changes/index.base.ts +20 -0
- package/src/core/objects/index/changes/index.comment.ts +64 -0
- package/src/core/objects/index/changes/index.create.test.ts +69 -0
- package/src/core/objects/index/changes/index.create.ts +69 -0
- package/src/core/objects/index/changes/index.drop.test.ts +47 -0
- package/src/core/objects/index/changes/index.drop.ts +35 -0
- package/src/core/objects/index/changes/index.types.ts +7 -0
- package/src/core/objects/index/changes/utils.ts +16 -0
- package/src/core/objects/index/index.diff.test.ts +153 -0
- package/src/core/objects/index/index.diff.ts +243 -0
- package/src/core/objects/index/index.model.test.ts +83 -0
- package/src/core/objects/index/index.model.ts +379 -0
- package/src/core/objects/language/changes/language.alter.test.ts +36 -0
- package/src/core/objects/language/changes/language.alter.ts +54 -0
- package/src/core/objects/language/changes/language.base.ts +20 -0
- package/src/core/objects/language/changes/language.comment.ts +59 -0
- package/src/core/objects/language/changes/language.create.test.ts +30 -0
- package/src/core/objects/language/changes/language.create.ts +105 -0
- package/src/core/objects/language/changes/language.drop.test.ts +28 -0
- package/src/core/objects/language/changes/language.drop.ts +40 -0
- package/src/core/objects/language/changes/language.privilege.ts +173 -0
- package/src/core/objects/language/changes/language.types.ts +13 -0
- package/src/core/objects/language/language.diff.test.ts +135 -0
- package/src/core/objects/language/language.diff.ts +144 -0
- package/src/core/objects/language/language.model.ts +150 -0
- package/src/core/objects/materialized-view/changes/materialized-view.alter.test.ts +130 -0
- package/src/core/objects/materialized-view/changes/materialized-view.alter.ts +114 -0
- package/src/core/objects/materialized-view/changes/materialized-view.base.ts +20 -0
- package/src/core/objects/materialized-view/changes/materialized-view.comment.ts +177 -0
- package/src/core/objects/materialized-view/changes/materialized-view.create.test.ts +69 -0
- package/src/core/objects/materialized-view/changes/materialized-view.create.ts +94 -0
- package/src/core/objects/materialized-view/changes/materialized-view.drop.test.ts +37 -0
- package/src/core/objects/materialized-view/changes/materialized-view.drop.ts +61 -0
- package/src/core/objects/materialized-view/changes/materialized-view.privilege.ts +213 -0
- package/src/core/objects/materialized-view/changes/materialized-view.types.ts +13 -0
- package/src/core/objects/materialized-view/materialized-view.diff.test.ts +264 -0
- package/src/core/objects/materialized-view/materialized-view.diff.ts +301 -0
- package/src/core/objects/materialized-view/materialized-view.model.ts +258 -0
- package/src/core/objects/procedure/changes/procedure.alter.test.ts +1077 -0
- package/src/core/objects/procedure/changes/procedure.alter.ts +291 -0
- package/src/core/objects/procedure/changes/procedure.base.ts +20 -0
- package/src/core/objects/procedure/changes/procedure.comment.ts +71 -0
- package/src/core/objects/procedure/changes/procedure.create.test.ts +51 -0
- package/src/core/objects/procedure/changes/procedure.create.ts +93 -0
- package/src/core/objects/procedure/changes/procedure.drop.test.ts +90 -0
- package/src/core/objects/procedure/changes/procedure.drop.ts +50 -0
- package/src/core/objects/procedure/changes/procedure.privilege.ts +189 -0
- package/src/core/objects/procedure/changes/procedure.types.ts +13 -0
- package/src/core/objects/procedure/procedure.diff.test.ts +284 -0
- package/src/core/objects/procedure/procedure.diff.ts +371 -0
- package/src/core/objects/procedure/procedure.model.ts +264 -0
- package/src/core/objects/procedure/utils.ts +58 -0
- package/src/core/objects/publication/changes/publication.alter.test.ts +221 -0
- package/src/core/objects/publication/changes/publication.alter.ts +232 -0
- package/src/core/objects/publication/changes/publication.base.ts +20 -0
- package/src/core/objects/publication/changes/publication.comment.test.ts +73 -0
- package/src/core/objects/publication/changes/publication.comment.ts +65 -0
- package/src/core/objects/publication/changes/publication.create.test.ts +90 -0
- package/src/core/objects/publication/changes/publication.create.ts +83 -0
- package/src/core/objects/publication/changes/publication.drop.test.ts +48 -0
- package/src/core/objects/publication/changes/publication.drop.ts +30 -0
- package/src/core/objects/publication/changes/publication.types.ts +25 -0
- package/src/core/objects/publication/publication.diff.test.ts +297 -0
- package/src/core/objects/publication/publication.diff.ts +247 -0
- package/src/core/objects/publication/publication.model.ts +206 -0
- package/src/core/objects/publication/utils.ts +55 -0
- package/src/core/objects/rls-policy/changes/rls-policy.alter.test.ts +283 -0
- package/src/core/objects/rls-policy/changes/rls-policy.alter.ts +129 -0
- package/src/core/objects/rls-policy/changes/rls-policy.base.ts +20 -0
- package/src/core/objects/rls-policy/changes/rls-policy.comment.ts +70 -0
- package/src/core/objects/rls-policy/changes/rls-policy.create.test.ts +209 -0
- package/src/core/objects/rls-policy/changes/rls-policy.create.ts +128 -0
- package/src/core/objects/rls-policy/changes/rls-policy.drop.test.ts +33 -0
- package/src/core/objects/rls-policy/changes/rls-policy.drop.ts +40 -0
- package/src/core/objects/rls-policy/changes/rls-policy.types.ts +11 -0
- package/src/core/objects/rls-policy/rls-policy.diff.test.ts +81 -0
- package/src/core/objects/rls-policy/rls-policy.diff.ts +121 -0
- package/src/core/objects/rls-policy/rls-policy.model.ts +273 -0
- package/src/core/objects/role/changes/role.alter.test.ts +362 -0
- package/src/core/objects/role/changes/role.alter.ts +111 -0
- package/src/core/objects/role/changes/role.base.ts +24 -0
- package/src/core/objects/role/changes/role.comment.ts +56 -0
- package/src/core/objects/role/changes/role.create.test.ts +56 -0
- package/src/core/objects/role/changes/role.create.ts +103 -0
- package/src/core/objects/role/changes/role.drop.test.ts +32 -0
- package/src/core/objects/role/changes/role.drop.ts +35 -0
- package/src/core/objects/role/changes/role.privilege.ts +377 -0
- package/src/core/objects/role/changes/role.types.ts +13 -0
- package/src/core/objects/role/role.diff.test.ts +279 -0
- package/src/core/objects/role/role.diff.ts +499 -0
- package/src/core/objects/role/role.model.ts +452 -0
- package/src/core/objects/rule/changes/rule.alter.test.ts +82 -0
- package/src/core/objects/rule/changes/rule.alter.ts +73 -0
- package/src/core/objects/rule/changes/rule.base.ts +20 -0
- package/src/core/objects/rule/changes/rule.comment.test.ts +58 -0
- package/src/core/objects/rule/changes/rule.comment.ts +63 -0
- package/src/core/objects/rule/changes/rule.create.test.ts +63 -0
- package/src/core/objects/rule/changes/rule.create.ts +43 -0
- package/src/core/objects/rule/changes/rule.drop.test.ts +40 -0
- package/src/core/objects/rule/changes/rule.drop.ts +30 -0
- package/src/core/objects/rule/changes/rule.types.ts +13 -0
- package/src/core/objects/rule/rule.diff.test.ts +132 -0
- package/src/core/objects/rule/rule.diff.ts +79 -0
- package/src/core/objects/rule/rule.model.ts +173 -0
- package/src/core/objects/schema/changes/schema.alter.test.ts +31 -0
- package/src/core/objects/schema/changes/schema.alter.ts +46 -0
- package/src/core/objects/schema/changes/schema.base.ts +20 -0
- package/src/core/objects/schema/changes/schema.comment.ts +57 -0
- package/src/core/objects/schema/changes/schema.create.test.ts +25 -0
- package/src/core/objects/schema/changes/schema.create.ts +47 -0
- package/src/core/objects/schema/changes/schema.drop.test.ts +23 -0
- package/src/core/objects/schema/changes/schema.drop.ts +35 -0
- package/src/core/objects/schema/changes/schema.privilege.ts +176 -0
- package/src/core/objects/schema/changes/schema.types.ts +13 -0
- package/src/core/objects/schema/schema.diff.test.ts +42 -0
- package/src/core/objects/schema/schema.diff.ts +146 -0
- package/src/core/objects/schema/schema.model.ts +107 -0
- package/src/core/objects/sequence/changes/sequence.alter.test.ts +157 -0
- package/src/core/objects/sequence/changes/sequence.alter.ts +116 -0
- package/src/core/objects/sequence/changes/sequence.base.ts +20 -0
- package/src/core/objects/sequence/changes/sequence.comment.ts +61 -0
- package/src/core/objects/sequence/changes/sequence.create.test.ts +89 -0
- package/src/core/objects/sequence/changes/sequence.create.ts +112 -0
- package/src/core/objects/sequence/changes/sequence.drop.test.ts +35 -0
- package/src/core/objects/sequence/changes/sequence.drop.ts +50 -0
- package/src/core/objects/sequence/changes/sequence.privilege.ts +180 -0
- package/src/core/objects/sequence/changes/sequence.types.ts +13 -0
- package/src/core/objects/sequence/sequence.diff.test.ts +429 -0
- package/src/core/objects/sequence/sequence.diff.ts +326 -0
- package/src/core/objects/sequence/sequence.model.ts +185 -0
- package/src/core/objects/subscription/changes/subscription.alter.test.ts +134 -0
- package/src/core/objects/subscription/changes/subscription.alter.ts +111 -0
- package/src/core/objects/subscription/changes/subscription.base.ts +20 -0
- package/src/core/objects/subscription/changes/subscription.comment.test.ts +70 -0
- package/src/core/objects/subscription/changes/subscription.comment.ts +65 -0
- package/src/core/objects/subscription/changes/subscription.create.test.ts +80 -0
- package/src/core/objects/subscription/changes/subscription.create.ts +70 -0
- package/src/core/objects/subscription/changes/subscription.drop.test.ts +48 -0
- package/src/core/objects/subscription/changes/subscription.drop.ts +21 -0
- package/src/core/objects/subscription/changes/subscription.types.ts +23 -0
- package/src/core/objects/subscription/subscription.diff.test.ts +237 -0
- package/src/core/objects/subscription/subscription.diff.ts +242 -0
- package/src/core/objects/subscription/subscription.model.ts +190 -0
- package/src/core/objects/subscription/utils.ts +156 -0
- package/src/core/objects/table/changes/table.alter.test.ts +899 -0
- package/src/core/objects/table/changes/table.alter.ts +910 -0
- package/src/core/objects/table/changes/table.base.ts +20 -0
- package/src/core/objects/table/changes/table.comment.ts +267 -0
- package/src/core/objects/table/changes/table.create.test.ts +188 -0
- package/src/core/objects/table/changes/table.create.ts +193 -0
- package/src/core/objects/table/changes/table.drop.test.ts +36 -0
- package/src/core/objects/table/changes/table.drop.ts +87 -0
- package/src/core/objects/table/changes/table.privilege.ts +201 -0
- package/src/core/objects/table/changes/table.types.ts +13 -0
- package/src/core/objects/table/table.diff.test.ts +1146 -0
- package/src/core/objects/table/table.diff.ts +889 -0
- package/src/core/objects/table/table.model.ts +462 -0
- package/src/core/objects/trigger/changes/trigger.alter.test.ts +50 -0
- package/src/core/objects/trigger/changes/trigger.alter.ts +77 -0
- package/src/core/objects/trigger/changes/trigger.base.ts +20 -0
- package/src/core/objects/trigger/changes/trigger.comment.ts +65 -0
- package/src/core/objects/trigger/changes/trigger.create.test.ts +47 -0
- package/src/core/objects/trigger/changes/trigger.create.ts +89 -0
- package/src/core/objects/trigger/changes/trigger.drop.test.ts +47 -0
- package/src/core/objects/trigger/changes/trigger.drop.ts +40 -0
- package/src/core/objects/trigger/changes/trigger.types.ts +11 -0
- package/src/core/objects/trigger/trigger.diff.test.ts +84 -0
- package/src/core/objects/trigger/trigger.diff.ts +121 -0
- package/src/core/objects/trigger/trigger.model.ts +268 -0
- package/src/core/objects/type/composite-type/changes/composite-type.alter.test.ts +208 -0
- package/src/core/objects/type/composite-type/changes/composite-type.alter.ts +175 -0
- package/src/core/objects/type/composite-type/changes/composite-type.base.ts +20 -0
- package/src/core/objects/type/composite-type/changes/composite-type.comment.ts +146 -0
- package/src/core/objects/type/composite-type/changes/composite-type.create.test.ts +106 -0
- package/src/core/objects/type/composite-type/changes/composite-type.create.ts +96 -0
- package/src/core/objects/type/composite-type/changes/composite-type.drop.test.ts +36 -0
- package/src/core/objects/type/composite-type/changes/composite-type.drop.ts +38 -0
- package/src/core/objects/type/composite-type/changes/composite-type.privilege.ts +176 -0
- package/src/core/objects/type/composite-type/changes/composite-type.types.ts +13 -0
- package/src/core/objects/type/composite-type/composite-type.diff.test.ts +269 -0
- package/src/core/objects/type/composite-type/composite-type.diff.ts +310 -0
- package/src/core/objects/type/composite-type/composite-type.model.ts +253 -0
- package/src/core/objects/type/enum/changes/enum.alter.test.ts +113 -0
- package/src/core/objects/type/enum/changes/enum.alter.ts +92 -0
- package/src/core/objects/type/enum/changes/enum.base.ts +20 -0
- package/src/core/objects/type/enum/changes/enum.comment.ts +65 -0
- package/src/core/objects/type/enum/changes/enum.create.test.ts +31 -0
- package/src/core/objects/type/enum/changes/enum.create.ts +57 -0
- package/src/core/objects/type/enum/changes/enum.drop.test.ts +28 -0
- package/src/core/objects/type/enum/changes/enum.drop.ts +35 -0
- package/src/core/objects/type/enum/changes/enum.privilege.ts +176 -0
- package/src/core/objects/type/enum/changes/enum.types.ts +13 -0
- package/src/core/objects/type/enum/enum.diff.test.ts +372 -0
- package/src/core/objects/type/enum/enum.diff.ts +308 -0
- package/src/core/objects/type/enum/enum.model.ts +194 -0
- package/src/core/objects/type/range/changes/range.alter.test.ts +29 -0
- package/src/core/objects/type/range/changes/range.alter.ts +52 -0
- package/src/core/objects/type/range/changes/range.base.ts +20 -0
- package/src/core/objects/type/range/changes/range.comment.ts +65 -0
- package/src/core/objects/type/range/changes/range.create.test.ts +54 -0
- package/src/core/objects/type/range/changes/range.create.ts +156 -0
- package/src/core/objects/type/range/changes/range.drop.test.ts +28 -0
- package/src/core/objects/type/range/changes/range.drop.ts +35 -0
- package/src/core/objects/type/range/changes/range.privilege.ts +176 -0
- package/src/core/objects/type/range/changes/range.types.ts +13 -0
- package/src/core/objects/type/range/range.diff.test.ts +147 -0
- package/src/core/objects/type/range/range.diff.ts +197 -0
- package/src/core/objects/type/range/range.model.ts +187 -0
- package/src/core/objects/type/type.types.ts +6 -0
- package/src/core/objects/utils.ts +171 -0
- package/src/core/objects/view/changes/view.alter.test.ts +115 -0
- package/src/core/objects/view/changes/view.alter.ts +113 -0
- package/src/core/objects/view/changes/view.base.ts +20 -0
- package/src/core/objects/view/changes/view.comment.ts +60 -0
- package/src/core/objects/view/changes/view.create.test.ts +70 -0
- package/src/core/objects/view/changes/view.create.ts +74 -0
- package/src/core/objects/view/changes/view.drop.test.ts +37 -0
- package/src/core/objects/view/changes/view.drop.ts +41 -0
- package/src/core/objects/view/changes/view.privilege.ts +201 -0
- package/src/core/objects/view/changes/view.types.ts +13 -0
- package/src/core/objects/view/view.diff.test.ts +269 -0
- package/src/core/objects/view/view.diff.ts +230 -0
- package/src/core/objects/view/view.model.ts +262 -0
- package/src/core/plan/apply.ts +172 -0
- package/src/core/plan/create.ts +368 -0
- package/src/core/plan/hierarchy.ts +574 -0
- package/src/core/plan/index.ts +29 -0
- package/src/core/plan/io.ts +20 -0
- package/src/core/plan/risk.ts +48 -0
- package/src/core/plan/serialize.test.ts +317 -0
- package/src/core/plan/serialize.ts +209 -0
- package/src/core/plan/sql-format/constants.ts +13 -0
- package/src/core/plan/sql-format/fixtures.ts +2811 -0
- package/src/core/plan/sql-format/format-comment-literals.test.ts +96 -0
- package/src/core/plan/sql-format/format-functions.test.ts +127 -0
- package/src/core/plan/sql-format/format-lowercase-coverage.test.ts +119 -0
- package/src/core/plan/sql-format/format-off.test.ts +806 -0
- package/src/core/plan/sql-format/format-pretty-lower-leading.test.ts +1061 -0
- package/src/core/plan/sql-format/format-pretty-narrow.test.ts +1279 -0
- package/src/core/plan/sql-format/format-pretty-preserve.test.ts +1057 -0
- package/src/core/plan/sql-format/format-pretty-upper.test.ts +1048 -0
- package/src/core/plan/sql-format/format-stress.test.ts +616 -0
- package/src/core/plan/sql-format/format-utils.test.ts +91 -0
- package/src/core/plan/sql-format/format-utils.ts +391 -0
- package/src/core/plan/sql-format/formatters.ts +921 -0
- package/src/core/plan/sql-format/index.ts +149 -0
- package/src/core/plan/sql-format/keyword-case.test.ts +118 -0
- package/src/core/plan/sql-format/keyword-case.ts +1120 -0
- package/src/core/plan/sql-format/protect.test.ts +127 -0
- package/src/core/plan/sql-format/protect.ts +337 -0
- package/src/core/plan/sql-format/sql-scanner.test.ts +240 -0
- package/src/core/plan/sql-format/sql-scanner.ts +252 -0
- package/src/core/plan/sql-format/tokenizer.test.ts +68 -0
- package/src/core/plan/sql-format/tokenizer.ts +152 -0
- package/src/core/plan/sql-format/types.ts +31 -0
- package/src/core/plan/sql-format/wrap.test.ts +119 -0
- package/src/core/plan/sql-format/wrap.ts +196 -0
- package/src/core/plan/sql-format.ts +2 -0
- package/src/core/plan/ssl-config.ts +172 -0
- package/src/core/plan/statements.ts +22 -0
- package/src/core/plan/types.ts +168 -0
- package/src/core/post-diff-cycle-breaking.test.ts +459 -0
- package/src/core/post-diff-cycle-breaking.ts +317 -0
- package/src/core/postgres-config.test.ts +336 -0
- package/src/core/postgres-config.ts +458 -0
- package/src/core/sort/custom-constraints.ts +235 -0
- package/src/core/sort/debug-visualization.ts +239 -0
- package/src/core/sort/dependency-filter.ts +224 -0
- package/src/core/sort/graph-builder.ts +235 -0
- package/src/core/sort/graph-utils.ts +51 -0
- package/src/core/sort/logical-sort.test.ts +371 -0
- package/src/core/sort/logical-sort.ts +573 -0
- package/src/core/sort/sort-changes.ts +234 -0
- package/src/core/sort/topological-sort.test.ts +275 -0
- package/src/core/sort/topological-sort.ts +184 -0
- package/src/core/sort/types.ts +112 -0
- package/src/core/sort/utils.ts +69 -0
- package/src/core/test-utils/assert-valid-sql.ts +20 -0
- package/src/index.ts +41 -0
- package/src/typedoc.ts +253 -0
- package/dist/core/integrations/filter/extractors.d.ts +0 -12
- package/dist/core/integrations/filter/extractors.js +0 -136
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { indentString } from "./format-utils.js";
|
|
2
|
+
import { isWordChar, walkSql } from "./sql-scanner.js";
|
|
3
|
+
/**
|
|
4
|
+
* Keywords that are preferred break points when wrapping long lines.
|
|
5
|
+
* The wrapper will prefer to break just before one of these keywords
|
|
6
|
+
* rather than at an arbitrary whitespace position.
|
|
7
|
+
*/
|
|
8
|
+
const WRAP_PREFERRED_KEYWORDS = new Set([
|
|
9
|
+
"ADD",
|
|
10
|
+
"CHECK",
|
|
11
|
+
"CONNECTION",
|
|
12
|
+
"CONSTRAINT",
|
|
13
|
+
"DEFERRABLE",
|
|
14
|
+
"FOREIGN",
|
|
15
|
+
"HANDLER",
|
|
16
|
+
"INCLUDE",
|
|
17
|
+
"INITIALLY",
|
|
18
|
+
"INLINE",
|
|
19
|
+
"MATCH",
|
|
20
|
+
"NOT",
|
|
21
|
+
"ON",
|
|
22
|
+
"OPTIONS",
|
|
23
|
+
"PUBLICATION",
|
|
24
|
+
"REFERENCES",
|
|
25
|
+
"REFERENCING",
|
|
26
|
+
"SET",
|
|
27
|
+
"USING",
|
|
28
|
+
"VALIDATOR",
|
|
29
|
+
"WHERE",
|
|
30
|
+
"WITH",
|
|
31
|
+
]);
|
|
32
|
+
export function wrapStatement(statement, options, noWrapPlaceholders) {
|
|
33
|
+
const lines = statement.split(/\r?\n/);
|
|
34
|
+
const wrapped = [];
|
|
35
|
+
for (const line of lines) {
|
|
36
|
+
if (line.trim().startsWith("--")) {
|
|
37
|
+
wrapped.push(line);
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (hasNoWrapPlaceholder(line, noWrapPlaceholders)) {
|
|
41
|
+
wrapped.push(line);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
wrapped.push(...wrapLine(line, options));
|
|
45
|
+
}
|
|
46
|
+
return wrapped.join("\n");
|
|
47
|
+
}
|
|
48
|
+
function hasNoWrapPlaceholder(line, placeholders) {
|
|
49
|
+
for (const token of placeholders) {
|
|
50
|
+
if (line.includes(token))
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
function wrapLine(line, options) {
|
|
56
|
+
const maxWidth = options.maxWidth;
|
|
57
|
+
if (maxWidth <= 0 || line.length <= maxWidth) {
|
|
58
|
+
return [line];
|
|
59
|
+
}
|
|
60
|
+
const indentMatch = line.match(/^\s*/);
|
|
61
|
+
const baseIndent = indentMatch ? indentMatch[0] : "";
|
|
62
|
+
const continuationIndent = `${baseIndent}${indentString(options.indent)}`;
|
|
63
|
+
let remaining = line;
|
|
64
|
+
const output = [];
|
|
65
|
+
while (remaining.length > maxWidth) {
|
|
66
|
+
const breakpoint = findWrapPosition(remaining, maxWidth);
|
|
67
|
+
if (breakpoint <= 0)
|
|
68
|
+
break;
|
|
69
|
+
const head = remaining.slice(0, breakpoint).trimEnd();
|
|
70
|
+
const tail = remaining.slice(breakpoint).trimStart();
|
|
71
|
+
output.push(head);
|
|
72
|
+
const next = `${continuationIndent}${tail}`;
|
|
73
|
+
if (next.length >= remaining.length) {
|
|
74
|
+
remaining = next;
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
remaining = next;
|
|
78
|
+
}
|
|
79
|
+
output.push(remaining);
|
|
80
|
+
return output;
|
|
81
|
+
}
|
|
82
|
+
/** Words that should not be separated from the previous word when wrapping (e.g. CREATE PUBLICATION, COMMENT ON). */
|
|
83
|
+
const KEEP_WITH_PREVIOUS = new Set([
|
|
84
|
+
"PUBLICATION",
|
|
85
|
+
"TABLE",
|
|
86
|
+
"VIEW",
|
|
87
|
+
"SCHEMA",
|
|
88
|
+
"INDEX",
|
|
89
|
+
"OR", // CREATE OR REPLACE
|
|
90
|
+
"ON", // COMMENT ON
|
|
91
|
+
]);
|
|
92
|
+
function getPreviousWord(text, beforeIndex) {
|
|
93
|
+
let end = beforeIndex - 1;
|
|
94
|
+
while (end >= 0 && (text[end] === " " || text[end] === "\t")) {
|
|
95
|
+
end -= 1;
|
|
96
|
+
}
|
|
97
|
+
if (end < 0 || !isWordChar(text[end]))
|
|
98
|
+
return null;
|
|
99
|
+
let start = end;
|
|
100
|
+
while (start > 0 && isWordChar(text[start - 1])) {
|
|
101
|
+
start -= 1;
|
|
102
|
+
}
|
|
103
|
+
return text.slice(start, end + 1).toUpperCase();
|
|
104
|
+
}
|
|
105
|
+
function findWrapPosition(text, maxWidth) {
|
|
106
|
+
/** Last whitespace at depth 0 (preferred — avoids splitting parenthesized expressions) */
|
|
107
|
+
let lastTopLevelWhitespace = -1;
|
|
108
|
+
/** Last whitespace at any depth (fallback when no depth-0 break exists) */
|
|
109
|
+
let lastAnyWhitespace = -1;
|
|
110
|
+
let lastKeywordBoundary = -1;
|
|
111
|
+
/** First (leftmost) top-level comma within maxWidth — break there so each clause gets its own line */
|
|
112
|
+
let firstComma = -1;
|
|
113
|
+
// Never break within the leading indent — that would produce an empty head line
|
|
114
|
+
const contentStart = text.search(/\S/);
|
|
115
|
+
if (contentStart < 0)
|
|
116
|
+
return -1; // all whitespace
|
|
117
|
+
walkSql(text, (index, char, depth) => {
|
|
118
|
+
if (index > maxWidth)
|
|
119
|
+
return false;
|
|
120
|
+
// Skip positions within leading indent
|
|
121
|
+
if (index < contentStart)
|
|
122
|
+
return true;
|
|
123
|
+
// Prefer breaking after the first top-level comma so comma-separated clauses (e.g. publication tables) each get their own line
|
|
124
|
+
if (char === "," && depth === 0 && firstComma < 0) {
|
|
125
|
+
firstComma = index + 1; // position after the comma
|
|
126
|
+
}
|
|
127
|
+
if (char === " " || char === "\t") {
|
|
128
|
+
lastAnyWhitespace = index;
|
|
129
|
+
if (depth === 0) {
|
|
130
|
+
lastTopLevelWhitespace = index;
|
|
131
|
+
}
|
|
132
|
+
// Check if the next word is a preferred keyword
|
|
133
|
+
const nextWordStart = index + 1;
|
|
134
|
+
if (nextWordStart < text.length && isWordChar(text[nextWordStart])) {
|
|
135
|
+
let wordEnd = nextWordStart + 1;
|
|
136
|
+
while (wordEnd < text.length && isWordChar(text[wordEnd])) {
|
|
137
|
+
wordEnd += 1;
|
|
138
|
+
}
|
|
139
|
+
const word = text.slice(nextWordStart, wordEnd).toUpperCase();
|
|
140
|
+
if (WRAP_PREFERRED_KEYWORDS.has(word)) {
|
|
141
|
+
// Don't break between CREATE and object type, COMMENT and ON, or ALL and ON (GRANT/REVOKE ALL ON)
|
|
142
|
+
const prev = getPreviousWord(text, index);
|
|
143
|
+
if (prev !== null &&
|
|
144
|
+
((prev === "CREATE" && KEEP_WITH_PREVIOUS.has(word)) ||
|
|
145
|
+
((prev === "COMMENT" || prev === "ALL") && word === "ON"))) {
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
lastKeywordBoundary = index;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return true;
|
|
153
|
+
}, { trackDepth: true });
|
|
154
|
+
// Prefer: 1) comma, 2) keyword boundary, 3) depth-0 whitespace, 4) any whitespace
|
|
155
|
+
if (firstComma > 0 && firstComma <= maxWidth) {
|
|
156
|
+
return firstComma;
|
|
157
|
+
}
|
|
158
|
+
if (lastKeywordBoundary > 0 && lastKeywordBoundary <= maxWidth) {
|
|
159
|
+
return lastKeywordBoundary;
|
|
160
|
+
}
|
|
161
|
+
if (lastTopLevelWhitespace > 0) {
|
|
162
|
+
return lastTopLevelWhitespace;
|
|
163
|
+
}
|
|
164
|
+
return lastAnyWhitespace;
|
|
165
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { formatSqlStatements } from "./sql-format/index.js";
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSL configuration parsing for PostgreSQL connection URLs.
|
|
3
|
+
*
|
|
4
|
+
* Supports sslmode and certificate paths (URL params or env). Used by plan,
|
|
5
|
+
* apply, and catalog-export when connecting to source/target databases.
|
|
6
|
+
*/
|
|
7
|
+
/** Parsed SSL options for the pg client plus URL with SSL params stripped (internal). */
|
|
8
|
+
type SslConfig = {
|
|
9
|
+
ssl?: boolean | {
|
|
10
|
+
rejectUnauthorized: boolean;
|
|
11
|
+
ca?: string;
|
|
12
|
+
cert?: string;
|
|
13
|
+
key?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Custom server identity check function.
|
|
16
|
+
* Used to skip hostname verification for verify-ca mode.
|
|
17
|
+
* Returns undefined to indicate success (no error).
|
|
18
|
+
*/
|
|
19
|
+
checkServerIdentity?: () => undefined;
|
|
20
|
+
};
|
|
21
|
+
cleanedUrl: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Parse SSL configuration from a PostgreSQL connection URL.
|
|
25
|
+
* Supports sslmode (require, verify-ca, verify-full, prefer, disable).
|
|
26
|
+
* Certificates can be provided via:
|
|
27
|
+
* - Query string parameters (file paths): sslrootcert, sslcert, sslkey (preferred)
|
|
28
|
+
* - Environment variables (content): PGDELTA_SOURCE_SSLROOTCERT/SSLCERT/SSLKEY or PGDELTA_TARGET_SSLROOTCERT/SSLCERT/SSLKEY
|
|
29
|
+
* Returns SSL options for the postgres.js library and a cleaned URL without SSL-related query parameters.
|
|
30
|
+
*/
|
|
31
|
+
export declare function parseSslConfig(url: string, connectionType: "source" | "target"): Promise<SslConfig>;
|
|
32
|
+
export {};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSL configuration parsing for PostgreSQL connection URLs.
|
|
3
|
+
*
|
|
4
|
+
* Supports sslmode and certificate paths (URL params or env). Used by plan,
|
|
5
|
+
* apply, and catalog-export when connecting to source/target databases.
|
|
6
|
+
*/
|
|
7
|
+
import { readFile } from "node:fs/promises";
|
|
8
|
+
/**
|
|
9
|
+
* Parse SSL configuration from a PostgreSQL connection URL.
|
|
10
|
+
* Supports sslmode (require, verify-ca, verify-full, prefer, disable).
|
|
11
|
+
* Certificates can be provided via:
|
|
12
|
+
* - Query string parameters (file paths): sslrootcert, sslcert, sslkey (preferred)
|
|
13
|
+
* - Environment variables (content): PGDELTA_SOURCE_SSLROOTCERT/SSLCERT/SSLKEY or PGDELTA_TARGET_SSLROOTCERT/SSLCERT/SSLKEY
|
|
14
|
+
* Returns SSL options for the postgres.js library and a cleaned URL without SSL-related query parameters.
|
|
15
|
+
*/
|
|
16
|
+
export async function parseSslConfig(url, connectionType) {
|
|
17
|
+
const urlObj = new URL(url);
|
|
18
|
+
const sslmode = urlObj.searchParams.get("sslmode");
|
|
19
|
+
const sslrootcert = urlObj.searchParams.get("sslrootcert");
|
|
20
|
+
const sslcert = urlObj.searchParams.get("sslcert");
|
|
21
|
+
const sslkey = urlObj.searchParams.get("sslkey");
|
|
22
|
+
// Remove SSL-related query parameters since we parse them ourselves
|
|
23
|
+
urlObj.searchParams.delete("sslmode");
|
|
24
|
+
urlObj.searchParams.delete("sslrootcert");
|
|
25
|
+
urlObj.searchParams.delete("sslcert");
|
|
26
|
+
urlObj.searchParams.delete("sslkey");
|
|
27
|
+
const cleanedUrl = urlObj.toString();
|
|
28
|
+
// Handle different SSL modes
|
|
29
|
+
if (sslmode === "disable") {
|
|
30
|
+
return { cleanedUrl, ssl: false };
|
|
31
|
+
}
|
|
32
|
+
if (sslmode === "require" ||
|
|
33
|
+
sslmode === "prefer" ||
|
|
34
|
+
sslmode === "verify-ca" ||
|
|
35
|
+
sslmode === "verify-full") {
|
|
36
|
+
// Helper function to get certificate value: query param (file path) takes precedence over env var (content)
|
|
37
|
+
const getCertValue = async (queryParam, envVarName) => {
|
|
38
|
+
// Prefer query parameter (file path)
|
|
39
|
+
if (queryParam) {
|
|
40
|
+
try {
|
|
41
|
+
return await readFile(queryParam, "utf-8");
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
throw new Error(`Failed to read certificate file '${queryParam}': ${error instanceof Error ? error.message : String(error)}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Fallback to environment variable (content)
|
|
48
|
+
const envValue = process.env[envVarName];
|
|
49
|
+
return envValue || undefined;
|
|
50
|
+
};
|
|
51
|
+
const hasExplicitVerification = sslmode === "verify-ca" || sslmode === "verify-full";
|
|
52
|
+
// Get CA certificate value.
|
|
53
|
+
// - verify-ca/verify-full: check query param first, then env var
|
|
54
|
+
// - require/prefer: only check query param (libpq backward compatibility
|
|
55
|
+
// requires an explicit root CA *file*, not a global env var)
|
|
56
|
+
const caEnvVar = connectionType === "source"
|
|
57
|
+
? "PGDELTA_SOURCE_SSLROOTCERT"
|
|
58
|
+
: "PGDELTA_TARGET_SSLROOTCERT";
|
|
59
|
+
let caValue;
|
|
60
|
+
if (sslrootcert) {
|
|
61
|
+
// Explicit file path in query param — always honour it
|
|
62
|
+
caValue = await getCertValue(sslrootcert, caEnvVar);
|
|
63
|
+
}
|
|
64
|
+
else if (hasExplicitVerification) {
|
|
65
|
+
// verify-ca / verify-full without file path — fall back to env var
|
|
66
|
+
caValue = await getCertValue(null, caEnvVar);
|
|
67
|
+
}
|
|
68
|
+
// require/prefer without sslrootcert: no CA cert, no verification
|
|
69
|
+
// Determine if we should verify the CA chain
|
|
70
|
+
// From PostgreSQL docs: "if a root CA file exists, the behavior of sslmode=require
|
|
71
|
+
// will be the same as that of verify-ca"
|
|
72
|
+
const hasLibpqCompatibility = (sslmode === "require" || sslmode === "prefer") && caValue !== undefined;
|
|
73
|
+
const shouldVerifyCa = hasExplicitVerification || hasLibpqCompatibility;
|
|
74
|
+
// Determine if we should verify hostname
|
|
75
|
+
// - verify-full: verify both CA and hostname
|
|
76
|
+
// - verify-ca: verify CA only (skip hostname)
|
|
77
|
+
// - require/prefer with CA (libpq compat): behaves like verify-ca (skip hostname)
|
|
78
|
+
const shouldVerifyHostname = sslmode === "verify-full";
|
|
79
|
+
const ssl = {
|
|
80
|
+
rejectUnauthorized: shouldVerifyCa,
|
|
81
|
+
};
|
|
82
|
+
// Add CA certificate if verifying
|
|
83
|
+
if (shouldVerifyCa && caValue) {
|
|
84
|
+
ssl.ca = caValue;
|
|
85
|
+
}
|
|
86
|
+
// For verify-ca and libpq compatibility mode: skip hostname verification
|
|
87
|
+
// This matches PostgreSQL semantics where verify-ca only checks the CA chain
|
|
88
|
+
if (shouldVerifyCa && !shouldVerifyHostname) {
|
|
89
|
+
ssl.checkServerIdentity = () => undefined;
|
|
90
|
+
}
|
|
91
|
+
// Get client certificate (optional, for mutual TLS)
|
|
92
|
+
const certEnvVar = connectionType === "source"
|
|
93
|
+
? "PGDELTA_SOURCE_SSLCERT"
|
|
94
|
+
: "PGDELTA_TARGET_SSLCERT";
|
|
95
|
+
const certValue = await getCertValue(sslcert, certEnvVar);
|
|
96
|
+
if (certValue) {
|
|
97
|
+
ssl.cert = certValue;
|
|
98
|
+
}
|
|
99
|
+
// Get client key (optional, for mutual TLS, required if cert is provided)
|
|
100
|
+
const keyEnvVar = connectionType === "source"
|
|
101
|
+
? "PGDELTA_SOURCE_SSLKEY"
|
|
102
|
+
: "PGDELTA_TARGET_SSLKEY";
|
|
103
|
+
const keyValue = await getCertValue(sslkey, keyEnvVar);
|
|
104
|
+
if (keyValue) {
|
|
105
|
+
ssl.key = keyValue;
|
|
106
|
+
}
|
|
107
|
+
// Warn if cert is provided without key (or vice versa)
|
|
108
|
+
if ((ssl.cert && !ssl.key) || (!ssl.cert && ssl.key)) {
|
|
109
|
+
throw new Error("Both client certificate and key must be provided together for mutual TLS");
|
|
110
|
+
}
|
|
111
|
+
return { ssl, cleanedUrl };
|
|
112
|
+
}
|
|
113
|
+
// No sslmode specified or invalid value - explicitly disable SSL
|
|
114
|
+
return { cleanedUrl, ssl: false };
|
|
115
|
+
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SQL script formatting utilities.
|
|
3
3
|
*/
|
|
4
|
+
import { type SqlFormatOptions } from "./sql-format.ts";
|
|
4
5
|
/**
|
|
5
6
|
* Format an array of SQL statements into a single script string.
|
|
6
7
|
* Statements are joined with double newlines and the script ends with a semicolon.
|
|
7
8
|
*/
|
|
8
|
-
export declare function formatSqlScript(statements: string[]): string;
|
|
9
|
+
export declare function formatSqlScript(statements: string[], options?: SqlFormatOptions): string;
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SQL script formatting utilities.
|
|
3
3
|
*/
|
|
4
|
+
import { formatSqlStatements } from "./sql-format.js";
|
|
4
5
|
const STATEMENT_DELIMITER = ";\n\n";
|
|
5
6
|
/**
|
|
6
7
|
* Format an array of SQL statements into a single script string.
|
|
7
8
|
* Statements are joined with double newlines and the script ends with a semicolon.
|
|
8
9
|
*/
|
|
9
|
-
export function formatSqlScript(statements) {
|
|
10
|
+
export function formatSqlScript(statements, options) {
|
|
10
11
|
if (statements.length === 0)
|
|
11
12
|
return "";
|
|
12
|
-
|
|
13
|
+
const formatted = options
|
|
14
|
+
? formatSqlStatements(statements, options)
|
|
15
|
+
: statements;
|
|
16
|
+
return `${formatted.join(STATEMENT_DELIMITER)};`;
|
|
13
17
|
}
|
|
@@ -3,10 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import z from "zod";
|
|
5
5
|
import type { Change } from "../change.types.ts";
|
|
6
|
-
import type {
|
|
7
|
-
import type { ChangeFilter } from "../integrations/filter/filter.types.ts";
|
|
8
|
-
import type { SerializeDSL } from "../integrations/serialize/dsl.ts";
|
|
9
|
-
import type { ChangeSerializer } from "../integrations/serialize/serialize.types.ts";
|
|
6
|
+
import type { Integration } from "../integrations/integration.types.ts";
|
|
10
7
|
export type PlanRisk = {
|
|
11
8
|
level: "safe";
|
|
12
9
|
} | {
|
|
@@ -133,10 +130,16 @@ export type Plan = z.infer<typeof PlanSchema>;
|
|
|
133
130
|
*/
|
|
134
131
|
export interface CreatePlanOptions {
|
|
135
132
|
/** Filter - either FilterDSL (stored in plan) or ChangeFilter function (not stored) */
|
|
136
|
-
filter?:
|
|
133
|
+
filter?: Integration["filter"];
|
|
137
134
|
/** Serialize - either SerializeDSL (stored in plan) or ChangeSerializer function (not stored) */
|
|
138
|
-
serialize?:
|
|
135
|
+
serialize?: Integration["serialize"];
|
|
139
136
|
/** Role to use when executing the migration (SET ROLE will be added to statements) */
|
|
140
137
|
role?: string;
|
|
138
|
+
/**
|
|
139
|
+
* When true, don't subtract privileges covered by ALTER DEFAULT PRIVILEGES
|
|
140
|
+
* from explicit GRANTs during diffing. Use this for declarative export where
|
|
141
|
+
* the output must be self-contained and not rely on statement execution order.
|
|
142
|
+
*/
|
|
143
|
+
skipDefaultPrivilegeSubtraction?: boolean;
|
|
141
144
|
}
|
|
142
145
|
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Catalog } from "./catalog.model.ts";
|
|
2
|
+
import type { Change } from "./change.types.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Normalize change-list cycles that only become apparent after all object
|
|
5
|
+
* diffs have been collected.
|
|
6
|
+
*
|
|
7
|
+
* This pass intentionally handles whole-plan interactions only:
|
|
8
|
+
* - If replace expansion added `DropTable(T)+CreateTable(T)`, targeted
|
|
9
|
+
* `AlterTableDropColumn(T.*)` / `AlterTableDropConstraint(T.*)` changes are
|
|
10
|
+
* redundant and create an unbreakable drop-phase cycle, so we elide them.
|
|
11
|
+
* - When the same `DropTable+CreateTable` pair is present, the expansion
|
|
12
|
+
* also emits one `AlterTableAddConstraint` / `AlterTableValidateConstraint`
|
|
13
|
+
* / `CreateCommentOnConstraint` per branch constraint, which may collide
|
|
14
|
+
* with the same change already emitted by `diffTables()` (for example on a
|
|
15
|
+
* shape flip or a new constraint). We dedupe these keeping only the last
|
|
16
|
+
* occurrence so the expansion's emission survives and the diffTables
|
|
17
|
+
* duplicate is removed.
|
|
18
|
+
* - If two dropped tables reference each other via FK, we insert dedicated
|
|
19
|
+
* `AlterTableDropConstraint` changes and teach the paired `DropTable`
|
|
20
|
+
* changes not to claim those FK stable IDs.
|
|
21
|
+
*
|
|
22
|
+
* Object-local PostgreSQL semantics (for example owned-sequence cascades) stay
|
|
23
|
+
* in the corresponding `diff*` function instead of this pass.
|
|
24
|
+
*/
|
|
25
|
+
export declare function normalizePostDiffCycles({ changes, mainCatalog, replacedTableIds, }: {
|
|
26
|
+
changes: Change[];
|
|
27
|
+
mainCatalog: Catalog;
|
|
28
|
+
replacedTableIds?: ReadonlySet<string>;
|
|
29
|
+
}): Change[];
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { AlterTableAddConstraint, AlterTableDropColumn, AlterTableDropConstraint, AlterTableValidateConstraint, } from "./objects/table/changes/table.alter.js";
|
|
2
|
+
import { CreateCommentOnConstraint } from "./objects/table/changes/table.comment.js";
|
|
3
|
+
import { DropTable } from "./objects/table/changes/table.drop.js";
|
|
4
|
+
import { stableId } from "./objects/utils.js";
|
|
5
|
+
function constraintStableId(table, constraintName) {
|
|
6
|
+
return stableId.constraint(table.schema, table.name, constraintName);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Yield FK constraints on `table` whose referenced table is also dropped in the
|
|
10
|
+
* final plan. Self-references are left alone because the sort phase already
|
|
11
|
+
* handles the resulting self-loop correctly.
|
|
12
|
+
*/
|
|
13
|
+
function* iterCrossDropFkConstraints(table, droppedSet) {
|
|
14
|
+
for (const constraint of table.constraints) {
|
|
15
|
+
if (constraint.constraint_type !== "f")
|
|
16
|
+
continue;
|
|
17
|
+
if (constraint.is_partition_clone)
|
|
18
|
+
continue;
|
|
19
|
+
if (!constraint.foreign_key_schema || !constraint.foreign_key_table) {
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
const referencedId = stableId.table(constraint.foreign_key_schema, constraint.foreign_key_table);
|
|
23
|
+
if (referencedId === table.stableId)
|
|
24
|
+
continue;
|
|
25
|
+
if (!droppedSet.has(referencedId))
|
|
26
|
+
continue;
|
|
27
|
+
yield { constraint, referencedId };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function isSupersededByTableReplacement(change, replacedTableIds) {
|
|
31
|
+
if (!(change instanceof AlterTableDropColumn) &&
|
|
32
|
+
!(change instanceof AlterTableDropConstraint)) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
return replacedTableIds.has(change.table.stableId);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Drop earlier duplicates of `AlterTableAddConstraint` /
|
|
39
|
+
* `AlterTableValidateConstraint` / `CreateCommentOnConstraint` targeting
|
|
40
|
+
* replaced tables, keeping only the last occurrence of each
|
|
41
|
+
* `(changeType, table.stableId, constraint.name)`.
|
|
42
|
+
*
|
|
43
|
+
* When `expandReplaceDependencies()` promotes a table to a full
|
|
44
|
+
* `DropTable + CreateTable` pair, it also emits one
|
|
45
|
+
* `AlterTableAddConstraint` (plus optional `VALIDATE CONSTRAINT` /
|
|
46
|
+
* `COMMENT ON CONSTRAINT`) per branch constraint. If `diffTables()` already
|
|
47
|
+
* emitted the same change for a shape flip or a new constraint on that
|
|
48
|
+
* table, the plan ends up with two identical `ALTER TABLE ... ADD
|
|
49
|
+
* CONSTRAINT ...` statements and PostgreSQL fails at apply time with
|
|
50
|
+
* `constraint "..." for relation "..." already exists`. Because
|
|
51
|
+
* `expandReplaceDependencies()` appends its additions after the original
|
|
52
|
+
* `diffTables()` output, the last occurrence is the expansion's emission —
|
|
53
|
+
* keeping it preserves correctness while removing the duplicate.
|
|
54
|
+
*/
|
|
55
|
+
function dropReplacedTableDuplicateConstraintChanges(changes, replacedTableIds) {
|
|
56
|
+
if (replacedTableIds.size === 0)
|
|
57
|
+
return changes;
|
|
58
|
+
const keyFor = (change) => {
|
|
59
|
+
if (!(change instanceof AlterTableAddConstraint) &&
|
|
60
|
+
!(change instanceof AlterTableValidateConstraint) &&
|
|
61
|
+
!(change instanceof CreateCommentOnConstraint)) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
if (!replacedTableIds.has(change.table.stableId))
|
|
65
|
+
return null;
|
|
66
|
+
const tag = change instanceof AlterTableAddConstraint
|
|
67
|
+
? "add"
|
|
68
|
+
: change instanceof AlterTableValidateConstraint
|
|
69
|
+
? "validate"
|
|
70
|
+
: "comment";
|
|
71
|
+
return `${tag}:${constraintStableId(change.table, change.constraint.name)}`;
|
|
72
|
+
};
|
|
73
|
+
const seen = new Set();
|
|
74
|
+
const reversedKept = [];
|
|
75
|
+
let mutated = false;
|
|
76
|
+
// Walk backwards: the first encounter of each key corresponds to its LAST
|
|
77
|
+
// occurrence in the original order. `expandReplaceDependencies()` appends
|
|
78
|
+
// additions after the original changes, so "last wins" keeps the
|
|
79
|
+
// expansion's emission and drops the earlier diffTables duplicate.
|
|
80
|
+
for (let i = changes.length - 1; i >= 0; i--) {
|
|
81
|
+
const change = changes[i];
|
|
82
|
+
const key = keyFor(change);
|
|
83
|
+
if (key !== null) {
|
|
84
|
+
if (seen.has(key)) {
|
|
85
|
+
mutated = true;
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
seen.add(key);
|
|
89
|
+
}
|
|
90
|
+
reversedKept.push(change);
|
|
91
|
+
}
|
|
92
|
+
return mutated ? reversedKept.reverse() : changes;
|
|
93
|
+
}
|
|
94
|
+
function collectExplicitConstraintDropIds(changes) {
|
|
95
|
+
const explicitConstraintDropIds = new Set();
|
|
96
|
+
for (const change of changes) {
|
|
97
|
+
if (!(change instanceof AlterTableDropConstraint))
|
|
98
|
+
continue;
|
|
99
|
+
explicitConstraintDropIds.add(constraintStableId(change.table, change.constraint.name));
|
|
100
|
+
}
|
|
101
|
+
return explicitConstraintDropIds;
|
|
102
|
+
}
|
|
103
|
+
function hasSameEntries(left, right) {
|
|
104
|
+
if (left.size !== right.size)
|
|
105
|
+
return false;
|
|
106
|
+
for (const value of left) {
|
|
107
|
+
if (!right.has(value))
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Normalize change-list cycles that only become apparent after all object
|
|
114
|
+
* diffs have been collected.
|
|
115
|
+
*
|
|
116
|
+
* This pass intentionally handles whole-plan interactions only:
|
|
117
|
+
* - If replace expansion added `DropTable(T)+CreateTable(T)`, targeted
|
|
118
|
+
* `AlterTableDropColumn(T.*)` / `AlterTableDropConstraint(T.*)` changes are
|
|
119
|
+
* redundant and create an unbreakable drop-phase cycle, so we elide them.
|
|
120
|
+
* - When the same `DropTable+CreateTable` pair is present, the expansion
|
|
121
|
+
* also emits one `AlterTableAddConstraint` / `AlterTableValidateConstraint`
|
|
122
|
+
* / `CreateCommentOnConstraint` per branch constraint, which may collide
|
|
123
|
+
* with the same change already emitted by `diffTables()` (for example on a
|
|
124
|
+
* shape flip or a new constraint). We dedupe these keeping only the last
|
|
125
|
+
* occurrence so the expansion's emission survives and the diffTables
|
|
126
|
+
* duplicate is removed.
|
|
127
|
+
* - If two dropped tables reference each other via FK, we insert dedicated
|
|
128
|
+
* `AlterTableDropConstraint` changes and teach the paired `DropTable`
|
|
129
|
+
* changes not to claim those FK stable IDs.
|
|
130
|
+
*
|
|
131
|
+
* Object-local PostgreSQL semantics (for example owned-sequence cascades) stay
|
|
132
|
+
* in the corresponding `diff*` function instead of this pass.
|
|
133
|
+
*/
|
|
134
|
+
export function normalizePostDiffCycles({ changes, mainCatalog, replacedTableIds = new Set(), }) {
|
|
135
|
+
const dedupedChanges = dropReplacedTableDuplicateConstraintChanges(changes, replacedTableIds);
|
|
136
|
+
const structurallyNormalizedChanges = replacedTableIds.size === 0
|
|
137
|
+
? dedupedChanges
|
|
138
|
+
: dedupedChanges.filter((change) => !isSupersededByTableReplacement(change, replacedTableIds));
|
|
139
|
+
const dropTableChanges = structurallyNormalizedChanges.filter((change) => change instanceof DropTable);
|
|
140
|
+
if (dropTableChanges.length < 2) {
|
|
141
|
+
return structurallyNormalizedChanges;
|
|
142
|
+
}
|
|
143
|
+
const droppedSet = new Set(dropTableChanges.map((change) => change.table.stableId));
|
|
144
|
+
const droppedFkTargets = new Map();
|
|
145
|
+
for (const dropTableChange of dropTableChanges) {
|
|
146
|
+
const mainTable = mainCatalog.tables[dropTableChange.table.stableId] ??
|
|
147
|
+
dropTableChange.table;
|
|
148
|
+
const targets = new Set();
|
|
149
|
+
for (const { referencedId } of iterCrossDropFkConstraints(mainTable, droppedSet)) {
|
|
150
|
+
targets.add(referencedId);
|
|
151
|
+
}
|
|
152
|
+
droppedFkTargets.set(mainTable.stableId, targets);
|
|
153
|
+
}
|
|
154
|
+
const explicitConstraintDropIds = collectExplicitConstraintDropIds(structurallyNormalizedChanges);
|
|
155
|
+
const injectedConstraintDropsByTableId = new Map();
|
|
156
|
+
const externallyDroppedConstraintsByTableId = new Map();
|
|
157
|
+
let didMutate = structurallyNormalizedChanges !== changes;
|
|
158
|
+
for (const dropTableChange of dropTableChanges) {
|
|
159
|
+
const mainTable = mainCatalog.tables[dropTableChange.table.stableId] ??
|
|
160
|
+
dropTableChange.table;
|
|
161
|
+
const externallyDroppedConstraints = new Set(dropTableChange.externallyDroppedConstraints);
|
|
162
|
+
for (const { constraint, referencedId } of iterCrossDropFkConstraints(mainTable, droppedSet)) {
|
|
163
|
+
const isMutual = droppedFkTargets.get(referencedId)?.has(mainTable.stableId) === true;
|
|
164
|
+
if (!isMutual)
|
|
165
|
+
continue;
|
|
166
|
+
const droppedConstraintStableId = constraintStableId(mainTable, constraint.name);
|
|
167
|
+
externallyDroppedConstraints.add(constraint.name);
|
|
168
|
+
if (!explicitConstraintDropIds.has(droppedConstraintStableId)) {
|
|
169
|
+
const injectedDrop = new AlterTableDropConstraint({
|
|
170
|
+
table: mainTable,
|
|
171
|
+
constraint,
|
|
172
|
+
});
|
|
173
|
+
const existingDrops = injectedConstraintDropsByTableId.get(mainTable.stableId) ?? [];
|
|
174
|
+
existingDrops.push(injectedDrop);
|
|
175
|
+
injectedConstraintDropsByTableId.set(mainTable.stableId, existingDrops);
|
|
176
|
+
explicitConstraintDropIds.add(droppedConstraintStableId);
|
|
177
|
+
didMutate = true;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
if (!hasSameEntries(dropTableChange.externallyDroppedConstraints, externallyDroppedConstraints)) {
|
|
181
|
+
externallyDroppedConstraintsByTableId.set(mainTable.stableId, externallyDroppedConstraints);
|
|
182
|
+
didMutate = true;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
if (!didMutate) {
|
|
186
|
+
return changes;
|
|
187
|
+
}
|
|
188
|
+
const normalizedChanges = [];
|
|
189
|
+
for (const change of structurallyNormalizedChanges) {
|
|
190
|
+
if (!(change instanceof DropTable)) {
|
|
191
|
+
normalizedChanges.push(change);
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
const injectedConstraintDrops = injectedConstraintDropsByTableId.get(change.table.stableId) ?? [];
|
|
195
|
+
if (injectedConstraintDrops.length > 0) {
|
|
196
|
+
normalizedChanges.push(...injectedConstraintDrops);
|
|
197
|
+
}
|
|
198
|
+
const externallyDroppedConstraints = externallyDroppedConstraintsByTableId.get(change.table.stableId);
|
|
199
|
+
if (!externallyDroppedConstraints) {
|
|
200
|
+
normalizedChanges.push(change);
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
normalizedChanges.push(new DropTable({
|
|
204
|
+
table: change.table,
|
|
205
|
+
externallyDroppedConstraints,
|
|
206
|
+
}));
|
|
207
|
+
}
|
|
208
|
+
return normalizedChanges;
|
|
209
|
+
}
|