@supabase/pg-delta 1.0.0-alpha.10 → 1.0.0-alpha.12
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/dist/cli/commands/declarative-export.js +12 -17
- package/dist/cli/commands/plan.js +10 -13
- package/dist/cli/commands/sync.js +8 -12
- package/dist/cli/utils/integrations.d.ts +30 -6
- package/dist/cli/utils/integrations.js +98 -6
- 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/depend.js +25 -0
- package/dist/core/expand-replace-dependencies.js +23 -0
- package/dist/core/export/file-mapper.d.ts +2 -2
- package/dist/core/integrations/filter/dsl.d.ts +78 -74
- package/dist/core/integrations/filter/dsl.js +127 -79
- 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 +17 -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.js +42 -8
- 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 +1 -1
- package/dist/core/objects/aggregate/changes/aggregate.drop.d.ts +2 -1
- package/dist/core/objects/aggregate/changes/aggregate.drop.js +1 -1
- 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/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/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 +8 -2
- 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/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/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.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/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/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/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/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/procedure/changes/procedure.alter.d.ts +8 -7
- package/dist/core/objects/procedure/changes/procedure.alter.js +7 -7
- 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/publication/changes/publication.alter.d.ts +9 -7
- package/dist/core/objects/publication/changes/publication.alter.js +12 -7
- 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 +1 -0
- 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 +3 -3
- 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 +1 -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/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/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/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/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 +4 -1
- package/dist/core/objects/sequence/sequence.diff.js +12 -0
- 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/table/changes/table.alter.d.ts +65 -22
- package/dist/core/objects/table/changes/table.alter.js +107 -22
- 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 +1 -1
- package/dist/core/objects/table/changes/table.drop.d.ts +4 -3
- package/dist/core/objects/table/changes/table.drop.js +7 -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.js +46 -1
- package/dist/core/objects/trigger/changes/trigger.alter.d.ts +2 -1
- package/dist/core/objects/trigger/changes/trigger.alter.js +1 -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 +1 -1
- 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/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/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/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 +1 -1
- 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/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.js +24 -13
- package/dist/core/postgres-config.d.ts +2 -2
- package/dist/core/sort/custom-constraints.js +65 -1
- package/dist/core/sort/logical-sort.js +3 -24
- package/package.json +5 -1
- package/src/cli/commands/declarative-export.ts +19 -27
- package/src/cli/commands/plan.ts +14 -20
- package/src/cli/commands/sync.ts +8 -15
- package/src/cli/utils/integrations.test.ts +210 -3
- package/src/cli/utils/integrations.ts +134 -6
- package/src/core/catalog.snapshot.test.ts +11 -2
- package/src/core/change-utils.test.ts +61 -0
- package/src/core/change-utils.ts +73 -0
- package/src/core/change.types.ts +50 -0
- package/src/core/depend.ts +25 -0
- package/src/core/expand-replace-dependencies.test.ts +126 -1
- package/src/core/expand-replace-dependencies.ts +50 -0
- package/src/core/export/file-mapper.ts +7 -2
- package/src/core/integrations/filter/dsl.test.ts +299 -60
- package/src/core/integrations/filter/dsl.ts +208 -169
- 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 +17 -1
- 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 +26 -7
- package/src/core/integrations/serialize/dsl.ts +8 -14
- package/src/core/integrations/serialize/serialize.types.ts +37 -0
- package/src/core/integrations/supabase.ts +42 -8
- package/src/core/objects/aggregate/changes/aggregate.alter.ts +2 -1
- package/src/core/objects/aggregate/changes/aggregate.comment.ts +3 -2
- package/src/core/objects/aggregate/changes/aggregate.create.ts +2 -1
- package/src/core/objects/aggregate/changes/aggregate.drop.ts +2 -1
- package/src/core/objects/aggregate/changes/aggregate.privilege.ts +4 -3
- package/src/core/objects/aggregate/changes/aggregate.types.ts +1 -0
- package/src/core/objects/base.change.ts +13 -1
- package/src/core/objects/base.model.test.ts +43 -0
- package/src/core/objects/base.model.ts +5 -2
- package/src/core/objects/collation/changes/collation.alter.ts +3 -2
- package/src/core/objects/collation/changes/collation.comment.ts +3 -2
- package/src/core/objects/collation/changes/collation.create.ts +2 -1
- package/src/core/objects/collation/changes/collation.drop.ts +2 -1
- package/src/core/objects/collation/changes/collation.types.ts +1 -0
- package/src/core/objects/domain/changes/domain.alter.ts +9 -8
- package/src/core/objects/domain/changes/domain.comment.ts +3 -2
- package/src/core/objects/domain/changes/domain.create.ts +19 -2
- package/src/core/objects/domain/changes/domain.drop.ts +2 -1
- package/src/core/objects/domain/changes/domain.privilege.ts +4 -3
- package/src/core/objects/domain/changes/domain.types.ts +1 -0
- package/src/core/objects/event-trigger/changes/event-trigger.alter.ts +3 -2
- package/src/core/objects/event-trigger/changes/event-trigger.comment.ts +3 -2
- package/src/core/objects/event-trigger/changes/event-trigger.create.ts +2 -1
- package/src/core/objects/event-trigger/changes/event-trigger.drop.ts +2 -1
- package/src/core/objects/event-trigger/changes/event-trigger.types.ts +1 -0
- package/src/core/objects/extension/changes/extension.alter.ts +3 -2
- package/src/core/objects/extension/changes/extension.comment.ts +3 -2
- package/src/core/objects/extension/changes/extension.create.test.ts +22 -0
- package/src/core/objects/extension/changes/extension.create.ts +5 -2
- package/src/core/objects/extension/changes/extension.drop.ts +2 -1
- package/src/core/objects/extension/changes/extension.types.ts +1 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.ts +3 -2
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.ts +3 -2
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.ts +2 -1
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.ts +2 -1
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.ts +4 -3
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.ts +1 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.ts +1 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.ts +10 -9
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.ts +3 -2
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.ts +2 -1
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.ts +2 -1
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.ts +4 -3
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.ts +1 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.ts +4 -3
- package/src/core/objects/foreign-data-wrapper/server/changes/server.comment.ts +3 -2
- package/src/core/objects/foreign-data-wrapper/server/changes/server.create.ts +2 -1
- package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.ts +2 -1
- package/src/core/objects/foreign-data-wrapper/server/changes/server.privilege.ts +4 -3
- package/src/core/objects/foreign-data-wrapper/server/changes/server.types.ts +1 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.ts +2 -1
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.ts +2 -1
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.ts +2 -1
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.ts +1 -0
- package/src/core/objects/index/changes/index.alter.ts +4 -3
- package/src/core/objects/index/changes/index.comment.ts +3 -2
- package/src/core/objects/index/changes/index.create.ts +2 -1
- package/src/core/objects/index/changes/index.drop.ts +2 -1
- package/src/core/objects/index/changes/index.types.ts +1 -0
- package/src/core/objects/language/changes/language.alter.ts +2 -1
- package/src/core/objects/language/changes/language.comment.ts +3 -2
- package/src/core/objects/language/changes/language.create.ts +2 -1
- package/src/core/objects/language/changes/language.drop.ts +2 -1
- package/src/core/objects/language/changes/language.privilege.ts +4 -3
- package/src/core/objects/language/changes/language.types.ts +1 -0
- package/src/core/objects/materialized-view/changes/materialized-view.alter.ts +3 -2
- package/src/core/objects/materialized-view/changes/materialized-view.comment.ts +5 -4
- package/src/core/objects/materialized-view/changes/materialized-view.create.ts +2 -1
- package/src/core/objects/materialized-view/changes/materialized-view.drop.ts +2 -1
- package/src/core/objects/materialized-view/changes/materialized-view.privilege.ts +4 -3
- package/src/core/objects/materialized-view/changes/materialized-view.types.ts +1 -0
- package/src/core/objects/procedure/changes/procedure.alter.ts +8 -7
- package/src/core/objects/procedure/changes/procedure.comment.ts +3 -2
- package/src/core/objects/procedure/changes/procedure.create.ts +2 -1
- package/src/core/objects/procedure/changes/procedure.drop.ts +2 -1
- package/src/core/objects/procedure/changes/procedure.privilege.ts +4 -3
- package/src/core/objects/procedure/changes/procedure.types.ts +1 -0
- package/src/core/objects/publication/changes/publication.alter.test.ts +4 -0
- package/src/core/objects/publication/changes/publication.alter.ts +14 -7
- package/src/core/objects/publication/changes/publication.comment.ts +3 -2
- package/src/core/objects/publication/changes/publication.create.ts +2 -1
- package/src/core/objects/publication/changes/publication.drop.ts +2 -1
- package/src/core/objects/publication/changes/publication.types.ts +1 -0
- package/src/core/objects/rls-policy/changes/rls-policy.alter.ts +4 -3
- package/src/core/objects/rls-policy/changes/rls-policy.comment.ts +3 -2
- package/src/core/objects/rls-policy/changes/rls-policy.create.ts +2 -1
- package/src/core/objects/rls-policy/changes/rls-policy.drop.ts +2 -1
- package/src/core/objects/rls-policy/changes/rls-policy.types.ts +1 -0
- package/src/core/objects/role/changes/role.alter.ts +3 -2
- package/src/core/objects/role/changes/role.comment.ts +3 -2
- package/src/core/objects/role/changes/role.create.ts +2 -1
- package/src/core/objects/role/changes/role.drop.ts +2 -1
- package/src/core/objects/role/changes/role.privilege.ts +6 -5
- package/src/core/objects/role/changes/role.types.ts +1 -0
- package/src/core/objects/rule/changes/rule.alter.ts +3 -2
- package/src/core/objects/rule/changes/rule.comment.ts +3 -2
- package/src/core/objects/rule/changes/rule.create.ts +2 -1
- package/src/core/objects/rule/changes/rule.drop.ts +2 -1
- package/src/core/objects/rule/changes/rule.types.ts +1 -0
- package/src/core/objects/schema/changes/schema.alter.ts +2 -1
- package/src/core/objects/schema/changes/schema.comment.ts +3 -2
- package/src/core/objects/schema/changes/schema.create.ts +3 -3
- package/src/core/objects/schema/changes/schema.drop.ts +2 -1
- package/src/core/objects/schema/changes/schema.privilege.ts +4 -3
- package/src/core/objects/schema/changes/schema.types.ts +1 -0
- package/src/core/objects/sequence/changes/sequence.alter.ts +3 -2
- package/src/core/objects/sequence/changes/sequence.comment.ts +3 -2
- package/src/core/objects/sequence/changes/sequence.create.ts +2 -1
- package/src/core/objects/sequence/changes/sequence.drop.ts +16 -3
- package/src/core/objects/sequence/changes/sequence.privilege.ts +4 -3
- package/src/core/objects/sequence/changes/sequence.types.ts +1 -0
- package/src/core/objects/sequence/sequence.diff.test.ts +73 -1
- package/src/core/objects/sequence/sequence.diff.ts +24 -2
- package/src/core/objects/subscription/changes/subscription.alter.ts +7 -6
- package/src/core/objects/subscription/changes/subscription.comment.ts +3 -2
- package/src/core/objects/subscription/changes/subscription.create.ts +2 -1
- package/src/core/objects/subscription/changes/subscription.drop.ts +2 -1
- package/src/core/objects/subscription/changes/subscription.types.ts +1 -0
- package/src/core/objects/table/changes/table.alter.test.ts +38 -0
- package/src/core/objects/table/changes/table.alter.ts +123 -22
- package/src/core/objects/table/changes/table.comment.ts +7 -6
- package/src/core/objects/table/changes/table.create.ts +2 -1
- package/src/core/objects/table/changes/table.drop.ts +20 -1
- package/src/core/objects/table/changes/table.privilege.ts +4 -3
- package/src/core/objects/table/changes/table.types.ts +1 -0
- package/src/core/objects/table/table.diff.test.ts +121 -0
- package/src/core/objects/table/table.diff.ts +64 -1
- package/src/core/objects/trigger/changes/trigger.alter.ts +2 -1
- package/src/core/objects/trigger/changes/trigger.comment.ts +3 -2
- package/src/core/objects/trigger/changes/trigger.create.ts +2 -1
- package/src/core/objects/trigger/changes/trigger.drop.ts +2 -1
- package/src/core/objects/trigger/changes/trigger.types.ts +1 -0
- package/src/core/objects/type/composite-type/changes/composite-type.alter.ts +5 -4
- package/src/core/objects/type/composite-type/changes/composite-type.comment.ts +5 -4
- package/src/core/objects/type/composite-type/changes/composite-type.create.ts +2 -1
- package/src/core/objects/type/composite-type/changes/composite-type.drop.ts +2 -1
- package/src/core/objects/type/composite-type/changes/composite-type.privilege.ts +4 -3
- package/src/core/objects/type/composite-type/changes/composite-type.types.ts +1 -0
- package/src/core/objects/type/enum/changes/enum.alter.ts +3 -2
- package/src/core/objects/type/enum/changes/enum.comment.ts +3 -2
- package/src/core/objects/type/enum/changes/enum.create.ts +2 -1
- package/src/core/objects/type/enum/changes/enum.drop.ts +2 -1
- package/src/core/objects/type/enum/changes/enum.privilege.ts +4 -3
- package/src/core/objects/type/enum/changes/enum.types.ts +1 -0
- package/src/core/objects/type/range/changes/range.alter.ts +2 -1
- package/src/core/objects/type/range/changes/range.comment.ts +3 -2
- package/src/core/objects/type/range/changes/range.create.ts +2 -1
- package/src/core/objects/type/range/changes/range.drop.ts +2 -1
- package/src/core/objects/type/range/changes/range.privilege.ts +4 -3
- package/src/core/objects/type/range/changes/range.types.ts +1 -0
- package/src/core/objects/type/type.types.ts +1 -0
- package/src/core/objects/view/changes/view.alter.ts +4 -3
- package/src/core/objects/view/changes/view.comment.ts +3 -2
- package/src/core/objects/view/changes/view.create.ts +2 -1
- package/src/core/objects/view/changes/view.drop.ts +2 -1
- package/src/core/objects/view/changes/view.privilege.ts +4 -3
- package/src/core/objects/view/changes/view.types.ts +1 -0
- package/src/core/objects/view/view.diff.test.ts +96 -0
- package/src/core/objects/view/view.diff.ts +30 -15
- package/src/core/plan/sql-format/format-off.test.ts +1 -1
- package/src/core/plan/sql-format/format-pretty-lower-leading.test.ts +1 -1
- package/src/core/plan/sql-format/format-pretty-narrow.test.ts +1 -1
- package/src/core/plan/sql-format/format-pretty-preserve.test.ts +1 -1
- package/src/core/plan/sql-format/format-pretty-upper.test.ts +1 -1
- package/src/core/postgres-config.ts +2 -2
- package/src/core/sort/custom-constraints.ts +75 -1
- package/src/core/sort/logical-sort.ts +3 -27
- package/src/typedoc.ts +253 -0
- package/dist/core/integrations/filter/extractors.d.ts +0 -12
- package/dist/core/integrations/filter/extractors.js +0 -178
- package/src/core/integrations/filter/extractors.test.ts +0 -244
- package/src/core/integrations/filter/extractors.ts +0 -187
|
@@ -105,6 +105,102 @@ describe.concurrent("view.diff", () => {
|
|
|
105
105
|
expect(changes[0]).toBeInstanceOf(CreateView);
|
|
106
106
|
});
|
|
107
107
|
|
|
108
|
+
test("drop and recreate when view columns change", () => {
|
|
109
|
+
const main = makeView({
|
|
110
|
+
owner: "postgres",
|
|
111
|
+
columns: [
|
|
112
|
+
{
|
|
113
|
+
name: "id",
|
|
114
|
+
position: 1,
|
|
115
|
+
data_type: "integer",
|
|
116
|
+
data_type_str: "integer",
|
|
117
|
+
is_custom_type: false,
|
|
118
|
+
custom_type_type: null,
|
|
119
|
+
custom_type_category: null,
|
|
120
|
+
custom_type_schema: null,
|
|
121
|
+
custom_type_name: null,
|
|
122
|
+
not_null: false,
|
|
123
|
+
is_identity: false,
|
|
124
|
+
is_identity_always: false,
|
|
125
|
+
is_generated: false,
|
|
126
|
+
collation: null,
|
|
127
|
+
default: null,
|
|
128
|
+
comment: null,
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
});
|
|
132
|
+
const branch = makeView({
|
|
133
|
+
owner: "postgres",
|
|
134
|
+
columns: [
|
|
135
|
+
...main.columns,
|
|
136
|
+
{
|
|
137
|
+
name: "priority",
|
|
138
|
+
position: 2,
|
|
139
|
+
data_type: "integer",
|
|
140
|
+
data_type_str: "integer",
|
|
141
|
+
is_custom_type: false,
|
|
142
|
+
custom_type_type: null,
|
|
143
|
+
custom_type_category: null,
|
|
144
|
+
custom_type_schema: null,
|
|
145
|
+
custom_type_name: null,
|
|
146
|
+
not_null: false,
|
|
147
|
+
is_identity: false,
|
|
148
|
+
is_identity_always: false,
|
|
149
|
+
is_generated: false,
|
|
150
|
+
collation: null,
|
|
151
|
+
default: null,
|
|
152
|
+
comment: null,
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
});
|
|
156
|
+
const changes = diffViews(
|
|
157
|
+
testContext,
|
|
158
|
+
{ [main.stableId]: main },
|
|
159
|
+
{ [branch.stableId]: branch },
|
|
160
|
+
);
|
|
161
|
+
expect(changes).toHaveLength(2);
|
|
162
|
+
expect(changes[0]).toBeInstanceOf(DropView);
|
|
163
|
+
expect(changes[1]).toBeInstanceOf(CreateView);
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
test("column position-only change does not trigger drop+create", () => {
|
|
167
|
+
const col = {
|
|
168
|
+
name: "id",
|
|
169
|
+
position: 1,
|
|
170
|
+
data_type: "integer",
|
|
171
|
+
data_type_str: "integer",
|
|
172
|
+
is_custom_type: false,
|
|
173
|
+
custom_type_type: null,
|
|
174
|
+
custom_type_category: null,
|
|
175
|
+
custom_type_schema: null,
|
|
176
|
+
custom_type_name: null,
|
|
177
|
+
not_null: false,
|
|
178
|
+
is_identity: false,
|
|
179
|
+
is_identity_always: false,
|
|
180
|
+
is_generated: false,
|
|
181
|
+
collation: null,
|
|
182
|
+
default: null,
|
|
183
|
+
comment: "my column",
|
|
184
|
+
};
|
|
185
|
+
const main = makeView({
|
|
186
|
+
owner: "postgres",
|
|
187
|
+
comment: "old comment",
|
|
188
|
+
columns: [{ ...col, position: 1 }],
|
|
189
|
+
});
|
|
190
|
+
const branch = makeView({
|
|
191
|
+
owner: "postgres",
|
|
192
|
+
comment: "new comment",
|
|
193
|
+
columns: [{ ...col, position: 2 }],
|
|
194
|
+
});
|
|
195
|
+
const changes = diffViews(
|
|
196
|
+
testContext,
|
|
197
|
+
{ [main.stableId]: main },
|
|
198
|
+
{ [branch.stableId]: branch },
|
|
199
|
+
);
|
|
200
|
+
expect(changes.some((c) => c instanceof DropView)).toBe(false);
|
|
201
|
+
expect(changes.some((c) => c instanceof CreateCommentOnView)).toBe(true);
|
|
202
|
+
});
|
|
203
|
+
|
|
108
204
|
test("create with privileges emits grant changes", () => {
|
|
109
205
|
const v = makeView({
|
|
110
206
|
privileges: [
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { diffObjects } from "../base.diff.ts";
|
|
2
|
+
import { normalizeColumns } from "../base.model.ts";
|
|
2
3
|
import {
|
|
3
4
|
diffPrivileges,
|
|
4
5
|
emitColumnPrivilegeChanges,
|
|
@@ -43,19 +44,17 @@ export function diffViews(
|
|
|
43
44
|
const { created, dropped, altered } = diffObjects(main, branch);
|
|
44
45
|
|
|
45
46
|
const changes: ViewChange[] = [];
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const v = branch[viewId];
|
|
49
|
-
changes.push(new CreateView({ view: v }));
|
|
47
|
+
const appendCreateViewChanges = (view: View) => {
|
|
48
|
+
changes.push(new CreateView({ view }));
|
|
50
49
|
|
|
51
50
|
// OWNER: If the view should be owned by someone other than the current user,
|
|
52
51
|
// emit ALTER VIEW ... OWNER TO after creation
|
|
53
|
-
if (
|
|
54
|
-
changes.push(new AlterViewChangeOwner({ view
|
|
52
|
+
if (view.owner !== ctx.currentUser) {
|
|
53
|
+
changes.push(new AlterViewChangeOwner({ view, owner: view.owner }));
|
|
55
54
|
}
|
|
56
55
|
|
|
57
|
-
if (
|
|
58
|
-
changes.push(new CreateCommentOnView({ view
|
|
56
|
+
if (view.comment !== null) {
|
|
57
|
+
changes.push(new CreateCommentOnView({ view }));
|
|
59
58
|
}
|
|
60
59
|
|
|
61
60
|
// PRIVILEGES: For created objects, compare against default privileges state
|
|
@@ -66,26 +65,26 @@ export function diffViews(
|
|
|
66
65
|
const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(
|
|
67
66
|
ctx.currentUser,
|
|
68
67
|
"view",
|
|
69
|
-
|
|
68
|
+
view.schema ?? "",
|
|
70
69
|
);
|
|
71
70
|
const creatorFilteredDefaults =
|
|
72
|
-
|
|
71
|
+
view.owner !== ctx.currentUser
|
|
73
72
|
? effectiveDefaults.filter((p) => p.grantee !== ctx.currentUser)
|
|
74
73
|
: effectiveDefaults;
|
|
75
|
-
const desiredPrivileges =
|
|
74
|
+
const desiredPrivileges = view.privileges;
|
|
76
75
|
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
77
76
|
// and shouldn't be compared. Use the view owner as the reference.
|
|
78
77
|
const privilegeResults = diffPrivileges(
|
|
79
78
|
creatorFilteredDefaults,
|
|
80
79
|
desiredPrivileges,
|
|
81
|
-
|
|
80
|
+
view.owner,
|
|
82
81
|
);
|
|
83
82
|
|
|
84
83
|
changes.push(
|
|
85
84
|
...(emitColumnPrivilegeChanges(
|
|
86
85
|
privilegeResults,
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
view,
|
|
87
|
+
view,
|
|
89
88
|
"view",
|
|
90
89
|
{
|
|
91
90
|
Grant: GrantViewPrivileges,
|
|
@@ -96,6 +95,10 @@ export function diffViews(
|
|
|
96
95
|
ctx.version,
|
|
97
96
|
) as ViewChange[]),
|
|
98
97
|
);
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
for (const viewId of created) {
|
|
101
|
+
appendCreateViewChanges(branch[viewId]);
|
|
99
102
|
}
|
|
100
103
|
|
|
101
104
|
for (const viewId of dropped) {
|
|
@@ -128,7 +131,19 @@ export function diffViews(
|
|
|
128
131
|
{ options: deepEqual },
|
|
129
132
|
);
|
|
130
133
|
|
|
131
|
-
|
|
134
|
+
// Normalize columns (strip position, sort by name) to match stableSnapshot().
|
|
135
|
+
// Position-only differences are safe to ignore here because column order in a
|
|
136
|
+
// view is determined by its definition, which is already checked above via
|
|
137
|
+
// NON_ALTERABLE_FIELDS - a position change always implies a definition change.
|
|
138
|
+
if (
|
|
139
|
+
!deepEqual(
|
|
140
|
+
normalizeColumns(mainView.columns),
|
|
141
|
+
normalizeColumns(branchView.columns),
|
|
142
|
+
)
|
|
143
|
+
) {
|
|
144
|
+
changes.push(new DropView({ view: mainView }));
|
|
145
|
+
appendCreateViewChanges(branchView);
|
|
146
|
+
} else if (nonAlterablePropsChanged) {
|
|
132
147
|
// Replace the entire view using CREATE OR REPLACE to avoid drop when possible
|
|
133
148
|
changes.push(new CreateView({ view: branchView, orReplace: true }));
|
|
134
149
|
} else {
|
|
@@ -439,7 +439,7 @@ describe("sql formatting snapshots", () => {
|
|
|
439
439
|
CREATE SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq;
|
|
440
440
|
|
|
441
441
|
-- sequence.drop
|
|
442
|
-
DROP SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq;
|
|
442
|
+
DROP SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq CASCADE;
|
|
443
443
|
|
|
444
444
|
-- sequence.alter.set_owned_by
|
|
445
445
|
ALTER SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq OWNED BY public.table_with_very_long_name_for_formatting_and_wrapping_test.id;
|
|
@@ -579,7 +579,7 @@ describe("sql formatting snapshots", () => {
|
|
|
579
579
|
create sequence public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq;
|
|
580
580
|
|
|
581
581
|
-- sequence.drop
|
|
582
|
-
drop sequence public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq;
|
|
582
|
+
drop sequence public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq cascade;
|
|
583
583
|
|
|
584
584
|
-- sequence.alter.set_owned_by
|
|
585
585
|
alter sequence public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq owned by
|
|
@@ -684,7 +684,7 @@ describe("sql formatting snapshots", () => {
|
|
|
684
684
|
|
|
685
685
|
-- sequence.drop
|
|
686
686
|
DROP SEQUENCE
|
|
687
|
-
public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq;
|
|
687
|
+
public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq CASCADE;
|
|
688
688
|
|
|
689
689
|
-- sequence.alter.set_owned_by
|
|
690
690
|
ALTER SEQUENCE
|
|
@@ -577,7 +577,7 @@ describe("sql formatting snapshots", () => {
|
|
|
577
577
|
CREATE SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq;
|
|
578
578
|
|
|
579
579
|
-- sequence.drop
|
|
580
|
-
DROP SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq;
|
|
580
|
+
DROP SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq CASCADE;
|
|
581
581
|
|
|
582
582
|
-- sequence.alter.set_owned_by
|
|
583
583
|
ALTER SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq OWNED BY
|
|
@@ -570,7 +570,7 @@ describe("sql formatting snapshots", () => {
|
|
|
570
570
|
CREATE SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq;
|
|
571
571
|
|
|
572
572
|
-- sequence.drop
|
|
573
|
-
DROP SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq;
|
|
573
|
+
DROP SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq CASCADE;
|
|
574
574
|
|
|
575
575
|
-- sequence.alter.set_owned_by
|
|
576
576
|
ALTER SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq OWNED BY
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* PostgreSQL connection configuration with custom type handlers.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import type { PoolClient, PoolConfig } from "pg";
|
|
5
|
+
import type { ClientBase, PoolClient, PoolConfig } from "pg";
|
|
6
6
|
import { escapeIdentifier, Pool, types } from "pg";
|
|
7
7
|
import { parseSslConfig } from "./plan/ssl-config.ts";
|
|
8
8
|
|
|
@@ -115,7 +115,7 @@ const DEFAULT_CONNECT_TIMEOUT_MS =
|
|
|
115
115
|
*/
|
|
116
116
|
interface CreatePoolOptions extends Partial<PoolConfig> {
|
|
117
117
|
/** Called when a new client connects to the pool */
|
|
118
|
-
onConnect?: (client:
|
|
118
|
+
onConnect?: (client: ClientBase) => void | Promise<void>;
|
|
119
119
|
/** Called when an idle client emits an error */
|
|
120
120
|
onError?: (err: Error, client: PoolClient) => void;
|
|
121
121
|
/** Called when a client is acquired from the pool */
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import type { Change } from "../change.types.ts";
|
|
2
|
-
import { getSchema } from "../
|
|
2
|
+
import { getSchema } from "../change-utils.ts";
|
|
3
3
|
import {
|
|
4
4
|
GrantRoleDefaultPrivileges,
|
|
5
5
|
RevokeRoleDefaultPrivileges,
|
|
6
6
|
} from "../objects/role/changes/role.privilege.ts";
|
|
7
|
+
import {
|
|
8
|
+
AlterTableAlterColumnAddIdentity,
|
|
9
|
+
AlterTableAlterColumnDropDefault,
|
|
10
|
+
AlterTableAlterColumnDropIdentity,
|
|
11
|
+
AlterTableAlterColumnSetDefault,
|
|
12
|
+
} from "../objects/table/changes/table.alter.ts";
|
|
7
13
|
import type { Constraint } from "./types.ts";
|
|
8
14
|
|
|
9
15
|
/**
|
|
@@ -143,11 +149,79 @@ function generateDefaultPrivilegeConstraints(changes: Change[]): Constraint[] {
|
|
|
143
149
|
return constraints;
|
|
144
150
|
}
|
|
145
151
|
|
|
152
|
+
function generateIdentityTransitionConstraints(
|
|
153
|
+
changes: Change[],
|
|
154
|
+
): Constraint[] {
|
|
155
|
+
const constraints: Constraint[] = [];
|
|
156
|
+
const dropDefaultByColumn = new Map<string, number[]>();
|
|
157
|
+
const dropIdentityByColumn = new Map<string, number[]>();
|
|
158
|
+
const addIdentityByColumn = new Map<string, number[]>();
|
|
159
|
+
const setDefaultByColumn = new Map<string, number[]>();
|
|
160
|
+
|
|
161
|
+
for (let i = 0; i < changes.length; i++) {
|
|
162
|
+
const change = changes[i];
|
|
163
|
+
const columnKey =
|
|
164
|
+
"table" in change && "column" in change
|
|
165
|
+
? `${change.table.schema}.${change.table.name}.${change.column.name}`
|
|
166
|
+
: null;
|
|
167
|
+
if (!columnKey) continue;
|
|
168
|
+
|
|
169
|
+
if (change instanceof AlterTableAlterColumnDropDefault) {
|
|
170
|
+
const entries = dropDefaultByColumn.get(columnKey) ?? [];
|
|
171
|
+
entries.push(i);
|
|
172
|
+
dropDefaultByColumn.set(columnKey, entries);
|
|
173
|
+
} else if (change instanceof AlterTableAlterColumnAddIdentity) {
|
|
174
|
+
const entries = addIdentityByColumn.get(columnKey) ?? [];
|
|
175
|
+
entries.push(i);
|
|
176
|
+
addIdentityByColumn.set(columnKey, entries);
|
|
177
|
+
} else if (change instanceof AlterTableAlterColumnDropIdentity) {
|
|
178
|
+
const entries = dropIdentityByColumn.get(columnKey) ?? [];
|
|
179
|
+
entries.push(i);
|
|
180
|
+
dropIdentityByColumn.set(columnKey, entries);
|
|
181
|
+
} else if (change instanceof AlterTableAlterColumnSetDefault) {
|
|
182
|
+
const entries = setDefaultByColumn.get(columnKey) ?? [];
|
|
183
|
+
entries.push(i);
|
|
184
|
+
setDefaultByColumn.set(columnKey, entries);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// These rules only order same-column ALTERs inside the create/alter phase.
|
|
189
|
+
// Sequence drops are handled separately in the earlier drop phase.
|
|
190
|
+
for (const [columnKey, dropDefaultIndexes] of dropDefaultByColumn) {
|
|
191
|
+
const addIdentityIndexes = addIdentityByColumn.get(columnKey) ?? [];
|
|
192
|
+
for (const sourceIndex of dropDefaultIndexes) {
|
|
193
|
+
for (const targetIndex of addIdentityIndexes) {
|
|
194
|
+
constraints.push({
|
|
195
|
+
sourceChangeIndex: sourceIndex,
|
|
196
|
+
targetChangeIndex: targetIndex,
|
|
197
|
+
source: "custom",
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
for (const [columnKey, dropIdentityIndexes] of dropIdentityByColumn) {
|
|
204
|
+
const setDefaultIndexes = setDefaultByColumn.get(columnKey) ?? [];
|
|
205
|
+
for (const sourceIndex of dropIdentityIndexes) {
|
|
206
|
+
for (const targetIndex of setDefaultIndexes) {
|
|
207
|
+
constraints.push({
|
|
208
|
+
sourceChangeIndex: sourceIndex,
|
|
209
|
+
targetChangeIndex: targetIndex,
|
|
210
|
+
source: "custom",
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
return constraints;
|
|
217
|
+
}
|
|
218
|
+
|
|
146
219
|
/**
|
|
147
220
|
* All custom constraint generators.
|
|
148
221
|
*/
|
|
149
222
|
const customConstraintGenerators: ConstraintGenerator[] = [
|
|
150
223
|
generateDefaultPrivilegeConstraints,
|
|
224
|
+
generateIdentityTransitionConstraints,
|
|
151
225
|
];
|
|
152
226
|
|
|
153
227
|
/**
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import type { Change } from "../change.types.ts";
|
|
13
|
-
import { getSchema } from "../
|
|
13
|
+
import { getSchema } from "../change-utils.ts";
|
|
14
14
|
import { getExecutionPhase, isMetadataStableId, type Phase } from "./utils.ts";
|
|
15
15
|
|
|
16
16
|
/**
|
|
@@ -308,30 +308,6 @@ function getParentStableId(change: Change): string | null {
|
|
|
308
308
|
return requires.length > 0 ? requires[0] : null;
|
|
309
309
|
}
|
|
310
310
|
|
|
311
|
-
/**
|
|
312
|
-
* Extract schema name from a change.
|
|
313
|
-
* Returns the schema name if present, or null for non-schema objects.
|
|
314
|
-
*
|
|
315
|
-
* Uses the getSchema helper which directly accesses schema properties from change objects.
|
|
316
|
-
* For default_privilege changes, accesses the inSchema property directly.
|
|
317
|
-
* For event_trigger changes, groups by their function's schema.
|
|
318
|
-
*/
|
|
319
|
-
function extractSchemaFromChange(change: Change): string | null {
|
|
320
|
-
// Handle default_privilege changes specially (they have inSchema property)
|
|
321
|
-
if (change.scope === "default_privilege") {
|
|
322
|
-
// TypeScript doesn't know about inSchema, but we know it exists for default_privilege changes
|
|
323
|
-
return (change as { inSchema: string | null }).inSchema ?? null;
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
// Handle event_trigger changes specially - group by their function's schema
|
|
327
|
-
if (change.objectType === "event_trigger") {
|
|
328
|
-
return change.eventTrigger.function_schema;
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
// Use the getSchema helper for all other changes
|
|
332
|
-
return getSchema(change);
|
|
333
|
-
}
|
|
334
|
-
|
|
335
311
|
/**
|
|
336
312
|
* Get the effective object type for sorting purposes.
|
|
337
313
|
* For sub-entities, returns the parent's object type (table/view/materialized_view).
|
|
@@ -438,8 +414,8 @@ function sortPhase(changes: Change[], phase: Phase): Change[] {
|
|
|
438
414
|
const changeB = b.change;
|
|
439
415
|
|
|
440
416
|
// 1. Compare schemas (group objects by schema)
|
|
441
|
-
const schemaA =
|
|
442
|
-
const schemaB =
|
|
417
|
+
const schemaA = getSchema(changeA);
|
|
418
|
+
const schemaB = getSchema(changeB);
|
|
443
419
|
|
|
444
420
|
// Non-schema objects (roles, languages, extensions, etc.) sort first
|
|
445
421
|
// Use a special prefix to ensure they come before schema objects
|