@supabase/pg-delta 0.0.0 → 1.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +149 -0
- package/dist/cli/app.d.ts +1 -0
- package/dist/cli/app.js +26 -0
- package/dist/cli/bin/cli.d.ts +2 -0
- package/dist/cli/bin/cli.js +7 -0
- package/dist/cli/commands/apply.d.ts +5 -0
- package/dist/cli/commands/apply.js +85 -0
- package/dist/cli/commands/plan.d.ts +5 -0
- package/dist/cli/commands/plan.js +137 -0
- package/dist/cli/commands/sync.d.ts +5 -0
- package/dist/cli/commands/sync.js +141 -0
- package/dist/cli/formatters/index.d.ts +4 -0
- package/dist/cli/formatters/index.js +4 -0
- package/dist/cli/formatters/tree/tree-builder.d.ts +10 -0
- package/dist/cli/formatters/tree/tree-builder.js +333 -0
- package/dist/cli/formatters/tree/tree-renderer.d.ts +45 -0
- package/dist/cli/formatters/tree/tree-renderer.js +303 -0
- package/dist/cli/formatters/tree/tree.d.ts +8 -0
- package/dist/cli/formatters/tree/tree.js +161 -0
- package/dist/cli/utils/integrations.d.ts +13 -0
- package/dist/cli/utils/integrations.js +35 -0
- package/dist/cli/utils.d.ts +64 -0
- package/dist/cli/utils.js +160 -0
- package/dist/core/catalog.diff.d.ts +5 -0
- package/dist/core/catalog.diff.js +147 -0
- package/dist/core/catalog.model.d.ts +93 -0
- package/dist/core/catalog.model.js +254 -0
- package/dist/core/change.types.d.ts +22 -0
- package/dist/core/change.types.js +1 -0
- package/dist/core/context.d.ts +11 -0
- package/dist/core/context.js +12 -0
- package/dist/core/depend.d.ts +31 -0
- package/dist/core/depend.js +1833 -0
- package/dist/core/expand-replace-dependencies.d.ts +14 -0
- package/dist/core/expand-replace-dependencies.js +280 -0
- package/dist/core/fingerprint.d.ts +23 -0
- package/dist/core/fingerprint.js +174 -0
- package/dist/core/index.d.ts +15 -0
- package/dist/core/index.js +14 -0
- package/dist/core/integrations/filter/dsl.d.ts +97 -0
- package/dist/core/integrations/filter/dsl.js +107 -0
- package/dist/core/integrations/filter/extractors.d.ts +12 -0
- package/dist/core/integrations/filter/extractors.js +136 -0
- package/dist/core/integrations/integration-dsl.d.ts +22 -0
- package/dist/core/integrations/integration-dsl.js +6 -0
- package/dist/core/integrations/integration.types.d.ts +5 -0
- package/dist/core/integrations/integration.types.js +1 -0
- package/dist/core/integrations/serialize/dsl.d.ts +58 -0
- package/dist/core/integrations/serialize/dsl.js +42 -0
- package/dist/core/main.d.ts +5 -0
- package/dist/core/main.js +44 -0
- package/dist/core/objects/aggregate/aggregate.diff.d.ts +10 -0
- package/dist/core/objects/aggregate/aggregate.diff.js +186 -0
- package/dist/core/objects/aggregate/aggregate.model.d.ts +174 -0
- package/dist/core/objects/aggregate/aggregate.model.js +297 -0
- package/dist/core/objects/aggregate/changes/aggregate.alter.d.ts +19 -0
- package/dist/core/objects/aggregate/changes/aggregate.alter.js +25 -0
- package/dist/core/objects/aggregate/changes/aggregate.base.d.ts +17 -0
- package/dist/core/objects/aggregate/changes/aggregate.base.js +13 -0
- package/dist/core/objects/aggregate/changes/aggregate.comment.d.ts +23 -0
- package/dist/core/objects/aggregate/changes/aggregate.comment.js +44 -0
- package/dist/core/objects/aggregate/changes/aggregate.create.d.ts +19 -0
- package/dist/core/objects/aggregate/changes/aggregate.create.js +228 -0
- package/dist/core/objects/aggregate/changes/aggregate.drop.d.ts +17 -0
- package/dist/core/objects/aggregate/changes/aggregate.drop.js +26 -0
- package/dist/core/objects/aggregate/changes/aggregate.privilege.d.ts +62 -0
- package/dist/core/objects/aggregate/changes/aggregate.privilege.js +102 -0
- package/dist/core/objects/aggregate/changes/aggregate.types.d.ts +6 -0
- package/dist/core/objects/aggregate/changes/aggregate.types.js +1 -0
- package/dist/core/objects/base.change.d.ts +46 -0
- package/dist/core/objects/base.change.js +38 -0
- package/dist/core/objects/base.default-privileges.d.ts +29 -0
- package/dist/core/objects/base.default-privileges.js +167 -0
- package/dist/core/objects/base.diff.d.ts +6 -0
- package/dist/core/objects/base.diff.js +12 -0
- package/dist/core/objects/base.model.d.ts +74 -0
- package/dist/core/objects/base.model.js +47 -0
- package/dist/core/objects/base.privilege-diff.d.ts +54 -0
- package/dist/core/objects/base.privilege-diff.js +216 -0
- package/dist/core/objects/base.privilege.d.ts +27 -0
- package/dist/core/objects/base.privilege.js +169 -0
- package/dist/core/objects/collation/changes/collation.alter.d.ts +45 -0
- package/dist/core/objects/collation/changes/collation.alter.js +52 -0
- package/dist/core/objects/collation/changes/collation.base.d.ts +17 -0
- package/dist/core/objects/collation/changes/collation.base.js +13 -0
- package/dist/core/objects/collation/changes/collation.comment.d.ts +26 -0
- package/dist/core/objects/collation/changes/collation.comment.js +50 -0
- package/dist/core/objects/collation/changes/collation.create.d.ts +32 -0
- package/dist/core/objects/collation/changes/collation.create.js +86 -0
- package/dist/core/objects/collation/changes/collation.drop.d.ts +22 -0
- package/dist/core/objects/collation/changes/collation.drop.js +31 -0
- package/dist/core/objects/collation/changes/collation.types.d.ts +5 -0
- package/dist/core/objects/collation/changes/collation.types.js +1 -0
- package/dist/core/objects/collation/collation.diff.d.ts +13 -0
- package/dist/core/objects/collation/collation.diff.js +85 -0
- package/dist/core/objects/collation/collation.model.d.ts +67 -0
- package/dist/core/objects/collation/collation.model.js +207 -0
- package/dist/core/objects/domain/changes/domain.alter.d.ts +143 -0
- package/dist/core/objects/domain/changes/domain.alter.js +191 -0
- package/dist/core/objects/domain/changes/domain.base.d.ts +17 -0
- package/dist/core/objects/domain/changes/domain.base.js +13 -0
- package/dist/core/objects/domain/changes/domain.comment.d.ts +25 -0
- package/dist/core/objects/domain/changes/domain.comment.js +47 -0
- package/dist/core/objects/domain/changes/domain.create.d.ts +30 -0
- package/dist/core/objects/domain/changes/domain.create.js +92 -0
- package/dist/core/objects/domain/changes/domain.drop.d.ts +22 -0
- package/dist/core/objects/domain/changes/domain.drop.js +28 -0
- package/dist/core/objects/domain/changes/domain.privilege.d.ts +97 -0
- package/dist/core/objects/domain/changes/domain.privilege.js +127 -0
- package/dist/core/objects/domain/changes/domain.types.d.ts +6 -0
- package/dist/core/objects/domain/changes/domain.types.js +1 -0
- package/dist/core/objects/domain/domain.diff.d.ts +18 -0
- package/dist/core/objects/domain/domain.diff.js +244 -0
- package/dist/core/objects/domain/domain.model.d.ts +103 -0
- package/dist/core/objects/domain/domain.model.js +172 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.alter.d.ts +44 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.alter.js +51 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.base.d.ts +17 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.base.js +13 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.comment.d.ts +23 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.comment.js +46 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.create.d.ts +25 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.create.js +55 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.drop.d.ts +22 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.drop.js +28 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.types.d.ts +5 -0
- package/dist/core/objects/event-trigger/changes/event-trigger.types.js +1 -0
- package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +13 -0
- package/dist/core/objects/event-trigger/event-trigger.diff.js +81 -0
- package/dist/core/objects/event-trigger/event-trigger.model.d.ts +45 -0
- package/dist/core/objects/event-trigger/event-trigger.model.js +89 -0
- package/dist/core/objects/extension/changes/extension.alter.d.ts +44 -0
- package/dist/core/objects/extension/changes/extension.alter.js +51 -0
- package/dist/core/objects/extension/changes/extension.base.d.ts +17 -0
- package/dist/core/objects/extension/changes/extension.base.js +13 -0
- package/dist/core/objects/extension/changes/extension.comment.d.ts +26 -0
- package/dist/core/objects/extension/changes/extension.comment.js +46 -0
- package/dist/core/objects/extension/changes/extension.create.d.ts +25 -0
- package/dist/core/objects/extension/changes/extension.create.js +49 -0
- package/dist/core/objects/extension/changes/extension.drop.d.ts +22 -0
- package/dist/core/objects/extension/changes/extension.drop.js +28 -0
- package/dist/core/objects/extension/changes/extension.types.d.ts +5 -0
- package/dist/core/objects/extension/changes/extension.types.js +1 -0
- package/dist/core/objects/extension/extension.diff.d.ts +10 -0
- package/dist/core/objects/extension/extension.diff.js +65 -0
- package/dist/core/objects/extension/extension.model.d.ts +52 -0
- package/dist/core/objects/extension/extension.model.js +268 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.d.ts +51 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.js +61 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.d.ts +17 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.js +13 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.d.ts +26 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.js +50 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.d.ts +25 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.js +78 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.d.ts +22 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.js +28 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.d.ts +97 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.js +123 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.d.ts +6 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.js +1 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts +18 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js +221 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.d.ts +59 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +128 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.d.ts +5 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.js +1 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.d.ts +163 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.js +248 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.d.ts +17 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.js +13 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.d.ts +26 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.js +50 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.d.ts +25 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.js +64 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.d.ts +22 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.js +31 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.d.ts +97 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.js +129 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.d.ts +6 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.js +1 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.d.ts +18 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +268 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.d.ts +117 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +215 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.d.ts +65 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.js +84 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.base.d.ts +17 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.base.js +13 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.d.ts +26 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.js +43 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.d.ts +24 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.js +62 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.d.ts +22 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.js +28 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.d.ts +97 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.js +123 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.types.d.ts +6 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.types.js +1 -0
- package/dist/core/objects/foreign-data-wrapper/server/server.diff.d.ts +18 -0
- package/dist/core/objects/foreign-data-wrapper/server/server.diff.js +209 -0
- package/dist/core/objects/foreign-data-wrapper/server/server.model.d.ts +62 -0
- package/dist/core/objects/foreign-data-wrapper/server/server.model.js +118 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.d.ts +37 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.js +38 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.d.ts +17 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.js +13 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.d.ts +24 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.js +52 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.d.ts +23 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.js +34 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.d.ts +4 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.js +1 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.d.ts +10 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.js +77 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.d.ts +36 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.js +85 -0
- package/dist/core/objects/index/changes/index.alter.d.ts +76 -0
- package/dist/core/objects/index/changes/index.alter.js +94 -0
- package/dist/core/objects/index/changes/index.base.d.ts +17 -0
- package/dist/core/objects/index/changes/index.base.js +13 -0
- package/dist/core/objects/index/changes/index.comment.d.ts +26 -0
- package/dist/core/objects/index/changes/index.comment.js +50 -0
- package/dist/core/objects/index/changes/index.create.d.ts +30 -0
- package/dist/core/objects/index/changes/index.create.js +53 -0
- package/dist/core/objects/index/changes/index.drop.d.ts +22 -0
- package/dist/core/objects/index/changes/index.drop.js +28 -0
- package/dist/core/objects/index/changes/index.types.d.ts +5 -0
- package/dist/core/objects/index/changes/index.types.js +1 -0
- package/dist/core/objects/index/changes/utils.d.ts +3 -0
- package/dist/core/objects/index/changes/utils.js +6 -0
- package/dist/core/objects/index/index.diff.d.ts +12 -0
- package/dist/core/objects/index/index.diff.js +182 -0
- package/dist/core/objects/index/index.model.d.ts +150 -0
- package/dist/core/objects/index/index.model.js +340 -0
- package/dist/core/objects/language/changes/language.alter.d.ts +32 -0
- package/dist/core/objects/language/changes/language.alter.js +30 -0
- package/dist/core/objects/language/changes/language.base.d.ts +17 -0
- package/dist/core/objects/language/changes/language.base.js +13 -0
- package/dist/core/objects/language/changes/language.comment.d.ts +26 -0
- package/dist/core/objects/language/changes/language.comment.js +45 -0
- package/dist/core/objects/language/changes/language.create.d.ts +25 -0
- package/dist/core/objects/language/changes/language.create.js +76 -0
- package/dist/core/objects/language/changes/language.drop.d.ts +22 -0
- package/dist/core/objects/language/changes/language.drop.js +31 -0
- package/dist/core/objects/language/changes/language.privilege.d.ts +97 -0
- package/dist/core/objects/language/changes/language.privilege.js +128 -0
- package/dist/core/objects/language/changes/language.types.d.ts +6 -0
- package/dist/core/objects/language/changes/language.types.js +1 -0
- package/dist/core/objects/language/language.diff.d.ts +15 -0
- package/dist/core/objects/language/language.diff.js +117 -0
- package/dist/core/objects/language/language.model.d.ts +62 -0
- package/dist/core/objects/language/language.model.js +128 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.alter.d.ts +67 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.alter.js +63 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.base.d.ts +17 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.base.js +13 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.comment.d.ts +53 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.comment.js +112 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.create.d.ts +35 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.create.js +71 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.drop.d.ts +26 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.drop.js +42 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.privilege.d.ts +105 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.privilege.js +151 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.types.d.ts +6 -0
- package/dist/core/objects/materialized-view/changes/materialized-view.types.js +1 -0
- package/dist/core/objects/materialized-view/materialized-view.diff.d.ts +18 -0
- package/dist/core/objects/materialized-view/materialized-view.diff.js +335 -0
- package/dist/core/objects/materialized-view/materialized-view.model.d.ts +152 -0
- package/dist/core/objects/materialized-view/materialized-view.model.js +228 -0
- package/dist/core/objects/procedure/changes/procedure.alter.d.ts +143 -0
- package/dist/core/objects/procedure/changes/procedure.alter.js +207 -0
- package/dist/core/objects/procedure/changes/procedure.base.d.ts +17 -0
- package/dist/core/objects/procedure/changes/procedure.base.js +13 -0
- package/dist/core/objects/procedure/changes/procedure.comment.d.ts +26 -0
- package/dist/core/objects/procedure/changes/procedure.comment.js +52 -0
- package/dist/core/objects/procedure/changes/procedure.create.d.ts +42 -0
- package/dist/core/objects/procedure/changes/procedure.create.js +77 -0
- package/dist/core/objects/procedure/changes/procedure.drop.d.ts +23 -0
- package/dist/core/objects/procedure/changes/procedure.drop.js +37 -0
- package/dist/core/objects/procedure/changes/procedure.privilege.d.ts +98 -0
- package/dist/core/objects/procedure/changes/procedure.privilege.js +144 -0
- package/dist/core/objects/procedure/changes/procedure.types.d.ts +6 -0
- package/dist/core/objects/procedure/changes/procedure.types.js +1 -0
- package/dist/core/objects/procedure/procedure.diff.d.ts +18 -0
- package/dist/core/objects/procedure/procedure.diff.js +282 -0
- package/dist/core/objects/procedure/procedure.model.d.ts +132 -0
- package/dist/core/objects/procedure/procedure.model.js +244 -0
- package/dist/core/objects/procedure/utils.d.ts +14 -0
- package/dist/core/objects/procedure/utils.js +55 -0
- package/dist/core/objects/publication/changes/publication.alter.d.ts +88 -0
- package/dist/core/objects/publication/changes/publication.alter.js +176 -0
- package/dist/core/objects/publication/changes/publication.base.d.ts +17 -0
- package/dist/core/objects/publication/changes/publication.base.js +13 -0
- package/dist/core/objects/publication/changes/publication.comment.d.ts +23 -0
- package/dist/core/objects/publication/changes/publication.comment.js +46 -0
- package/dist/core/objects/publication/changes/publication.create.d.ts +17 -0
- package/dist/core/objects/publication/changes/publication.create.js +61 -0
- package/dist/core/objects/publication/changes/publication.drop.d.ts +17 -0
- package/dist/core/objects/publication/changes/publication.drop.js +23 -0
- package/dist/core/objects/publication/changes/publication.types.d.ts +5 -0
- package/dist/core/objects/publication/changes/publication.types.js +1 -0
- package/dist/core/objects/publication/publication.diff.d.ts +5 -0
- package/dist/core/objects/publication/publication.diff.js +161 -0
- package/dist/core/objects/publication/publication.model.d.ts +96 -0
- package/dist/core/objects/publication/publication.model.js +186 -0
- package/dist/core/objects/publication/utils.d.ts +5 -0
- package/dist/core/objects/publication/utils.js +45 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.alter.d.ts +62 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +90 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.base.d.ts +17 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.base.js +13 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.comment.d.ts +23 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.comment.js +51 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.create.d.ts +27 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.create.js +79 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.drop.d.ts +22 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.drop.js +33 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.types.d.ts +5 -0
- package/dist/core/objects/rls-policy/changes/rls-policy.types.js +1 -0
- package/dist/core/objects/rls-policy/rls-policy.diff.d.ts +10 -0
- package/dist/core/objects/rls-policy/rls-policy.diff.js +80 -0
- package/dist/core/objects/rls-policy/rls-policy.model.d.ts +52 -0
- package/dist/core/objects/rls-policy/rls-policy.model.js +127 -0
- package/dist/core/objects/role/changes/role.alter.d.ts +78 -0
- package/dist/core/objects/role/changes/role.alter.js +55 -0
- package/dist/core/objects/role/changes/role.base.d.ts +17 -0
- package/dist/core/objects/role/changes/role.base.js +13 -0
- package/dist/core/objects/role/changes/role.comment.d.ts +23 -0
- package/dist/core/objects/role/changes/role.comment.js +42 -0
- package/dist/core/objects/role/changes/role.create.d.ts +38 -0
- package/dist/core/objects/role/changes/role.create.js +83 -0
- package/dist/core/objects/role/changes/role.drop.d.ts +22 -0
- package/dist/core/objects/role/changes/role.drop.js +28 -0
- package/dist/core/objects/role/changes/role.privilege.d.ts +148 -0
- package/dist/core/objects/role/changes/role.privilege.js +283 -0
- package/dist/core/objects/role/changes/role.types.d.ts +6 -0
- package/dist/core/objects/role/changes/role.types.js +1 -0
- package/dist/core/objects/role/role.diff.d.ts +13 -0
- package/dist/core/objects/role/role.diff.js +386 -0
- package/dist/core/objects/role/role.model.d.ts +89 -0
- package/dist/core/objects/role/role.model.js +312 -0
- package/dist/core/objects/rule/changes/rule.alter.d.ts +22 -0
- package/dist/core/objects/rule/changes/rule.alter.js +58 -0
- package/dist/core/objects/rule/changes/rule.base.d.ts +17 -0
- package/dist/core/objects/rule/changes/rule.base.js +13 -0
- package/dist/core/objects/rule/changes/rule.comment.d.ts +22 -0
- package/dist/core/objects/rule/changes/rule.comment.js +51 -0
- package/dist/core/objects/rule/changes/rule.create.d.ts +14 -0
- package/dist/core/objects/rule/changes/rule.create.js +28 -0
- package/dist/core/objects/rule/changes/rule.drop.d.ts +12 -0
- package/dist/core/objects/rule/changes/rule.drop.js +23 -0
- package/dist/core/objects/rule/changes/rule.types.d.ts +5 -0
- package/dist/core/objects/rule/changes/rule.types.js +1 -0
- package/dist/core/objects/rule/rule.diff.d.ts +3 -0
- package/dist/core/objects/rule/rule.diff.js +53 -0
- package/dist/core/objects/rule/rule.model.d.ts +72 -0
- package/dist/core/objects/rule/rule.model.js +156 -0
- package/dist/core/objects/schema/changes/schema.alter.d.ts +32 -0
- package/dist/core/objects/schema/changes/schema.alter.js +25 -0
- package/dist/core/objects/schema/changes/schema.base.d.ts +17 -0
- package/dist/core/objects/schema/changes/schema.base.js +13 -0
- package/dist/core/objects/schema/changes/schema.comment.d.ts +23 -0
- package/dist/core/objects/schema/changes/schema.comment.js +43 -0
- package/dist/core/objects/schema/changes/schema.create.d.ts +27 -0
- package/dist/core/objects/schema/changes/schema.create.js +38 -0
- package/dist/core/objects/schema/changes/schema.drop.d.ts +22 -0
- package/dist/core/objects/schema/changes/schema.drop.js +28 -0
- package/dist/core/objects/schema/changes/schema.privilege.d.ts +97 -0
- package/dist/core/objects/schema/changes/schema.privilege.js +131 -0
- package/dist/core/objects/schema/changes/schema.types.d.ts +6 -0
- package/dist/core/objects/schema/changes/schema.types.js +1 -0
- package/dist/core/objects/schema/schema.diff.d.ts +18 -0
- package/dist/core/objects/schema/schema.diff.js +142 -0
- package/dist/core/objects/schema/schema.model.d.ts +47 -0
- package/dist/core/objects/schema/schema.model.js +91 -0
- package/dist/core/objects/sequence/changes/sequence.alter.d.ts +59 -0
- package/dist/core/objects/sequence/changes/sequence.alter.js +75 -0
- package/dist/core/objects/sequence/changes/sequence.base.d.ts +17 -0
- package/dist/core/objects/sequence/changes/sequence.base.js +13 -0
- package/dist/core/objects/sequence/changes/sequence.comment.d.ts +23 -0
- package/dist/core/objects/sequence/changes/sequence.comment.js +47 -0
- package/dist/core/objects/sequence/changes/sequence.create.d.ts +25 -0
- package/dist/core/objects/sequence/changes/sequence.create.js +78 -0
- package/dist/core/objects/sequence/changes/sequence.drop.d.ts +22 -0
- package/dist/core/objects/sequence/changes/sequence.drop.js +31 -0
- package/dist/core/objects/sequence/changes/sequence.privilege.d.ts +101 -0
- package/dist/core/objects/sequence/changes/sequence.privilege.js +135 -0
- package/dist/core/objects/sequence/changes/sequence.types.d.ts +6 -0
- package/dist/core/objects/sequence/changes/sequence.types.js +1 -0
- package/dist/core/objects/sequence/sequence.diff.d.ts +20 -0
- package/dist/core/objects/sequence/sequence.diff.js +258 -0
- package/dist/core/objects/sequence/sequence.model.d.ts +76 -0
- package/dist/core/objects/sequence/sequence.model.js +169 -0
- package/dist/core/objects/subscription/changes/subscription.alter.d.ts +56 -0
- package/dist/core/objects/subscription/changes/subscription.alter.js +82 -0
- package/dist/core/objects/subscription/changes/subscription.base.d.ts +17 -0
- package/dist/core/objects/subscription/changes/subscription.base.js +13 -0
- package/dist/core/objects/subscription/changes/subscription.comment.d.ts +23 -0
- package/dist/core/objects/subscription/changes/subscription.comment.js +46 -0
- package/dist/core/objects/subscription/changes/subscription.create.d.ts +12 -0
- package/dist/core/objects/subscription/changes/subscription.create.js +52 -0
- package/dist/core/objects/subscription/changes/subscription.drop.d.ts +11 -0
- package/dist/core/objects/subscription/changes/subscription.drop.js +15 -0
- package/dist/core/objects/subscription/changes/subscription.types.d.ts +5 -0
- package/dist/core/objects/subscription/changes/subscription.types.js +1 -0
- package/dist/core/objects/subscription/subscription.diff.d.ts +5 -0
- package/dist/core/objects/subscription/subscription.diff.js +167 -0
- package/dist/core/objects/subscription/subscription.model.d.ts +80 -0
- package/dist/core/objects/subscription/subscription.model.js +166 -0
- package/dist/core/objects/subscription/utils.d.ts +37 -0
- package/dist/core/objects/subscription/utils.js +112 -0
- package/dist/core/objects/table/changes/table.alter.d.ts +357 -0
- package/dist/core/objects/table/changes/table.alter.js +607 -0
- package/dist/core/objects/table/changes/table.base.d.ts +17 -0
- package/dist/core/objects/table/changes/table.base.js +13 -0
- package/dist/core/objects/table/changes/table.comment.d.ts +106 -0
- package/dist/core/objects/table/changes/table.comment.js +175 -0
- package/dist/core/objects/table/changes/table.create.d.ts +33 -0
- package/dist/core/objects/table/changes/table.create.js +145 -0
- package/dist/core/objects/table/changes/table.drop.d.ts +22 -0
- package/dist/core/objects/table/changes/table.drop.js +35 -0
- package/dist/core/objects/table/changes/table.privilege.d.ts +107 -0
- package/dist/core/objects/table/changes/table.privilege.js +150 -0
- package/dist/core/objects/table/changes/table.types.d.ts +6 -0
- package/dist/core/objects/table/changes/table.types.js +1 -0
- package/dist/core/objects/table/table.diff.d.ts +18 -0
- package/dist/core/objects/table/table.diff.js +668 -0
- package/dist/core/objects/table/table.model.d.ts +341 -0
- package/dist/core/objects/table/table.model.js +426 -0
- package/dist/core/objects/trigger/changes/trigger.alter.d.ts +29 -0
- package/dist/core/objects/trigger/changes/trigger.alter.js +27 -0
- package/dist/core/objects/trigger/changes/trigger.base.d.ts +17 -0
- package/dist/core/objects/trigger/changes/trigger.base.js +13 -0
- package/dist/core/objects/trigger/changes/trigger.comment.d.ts +23 -0
- package/dist/core/objects/trigger/changes/trigger.comment.js +51 -0
- package/dist/core/objects/trigger/changes/trigger.create.d.ts +41 -0
- package/dist/core/objects/trigger/changes/trigger.create.js +61 -0
- package/dist/core/objects/trigger/changes/trigger.drop.d.ts +22 -0
- package/dist/core/objects/trigger/changes/trigger.drop.js +33 -0
- package/dist/core/objects/trigger/changes/trigger.types.d.ts +5 -0
- package/dist/core/objects/trigger/changes/trigger.types.js +1 -0
- package/dist/core/objects/trigger/trigger.diff.d.ts +11 -0
- package/dist/core/objects/trigger/trigger.diff.js +84 -0
- package/dist/core/objects/trigger/trigger.model.d.ts +92 -0
- package/dist/core/objects/trigger/trigger.model.js +235 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.alter.d.ts +81 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.alter.js +123 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.base.d.ts +17 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.base.js +13 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.comment.d.ts +53 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.comment.js +108 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.create.d.ts +23 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.create.js +72 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.drop.d.ts +22 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.drop.js +31 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.privilege.d.ts +97 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.privilege.js +131 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.types.d.ts +6 -0
- package/dist/core/objects/type/composite-type/changes/composite-type.types.js +1 -0
- package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +18 -0
- package/dist/core/objects/type/composite-type/composite-type.diff.js +250 -0
- package/dist/core/objects/type/composite-type/composite-type.model.d.ts +148 -0
- package/dist/core/objects/type/composite-type/composite-type.model.js +223 -0
- package/dist/core/objects/type/enum/changes/enum.alter.d.ts +52 -0
- package/dist/core/objects/type/enum/changes/enum.alter.js +60 -0
- package/dist/core/objects/type/enum/changes/enum.base.d.ts +17 -0
- package/dist/core/objects/type/enum/changes/enum.base.js +13 -0
- package/dist/core/objects/type/enum/changes/enum.comment.d.ts +26 -0
- package/dist/core/objects/type/enum/changes/enum.comment.js +47 -0
- package/dist/core/objects/type/enum/changes/enum.create.d.ts +22 -0
- package/dist/core/objects/type/enum/changes/enum.create.js +43 -0
- package/dist/core/objects/type/enum/changes/enum.drop.d.ts +22 -0
- package/dist/core/objects/type/enum/changes/enum.drop.js +28 -0
- package/dist/core/objects/type/enum/changes/enum.privilege.d.ts +97 -0
- package/dist/core/objects/type/enum/changes/enum.privilege.js +131 -0
- package/dist/core/objects/type/enum/changes/enum.types.d.ts +6 -0
- package/dist/core/objects/type/enum/changes/enum.types.js +1 -0
- package/dist/core/objects/type/enum/enum.diff.d.ts +18 -0
- package/dist/core/objects/type/enum/enum.diff.js +268 -0
- package/dist/core/objects/type/enum/enum.model.d.ts +66 -0
- package/dist/core/objects/type/enum/enum.model.js +154 -0
- package/dist/core/objects/type/range/changes/range.alter.d.ts +33 -0
- package/dist/core/objects/type/range/changes/range.alter.js +30 -0
- package/dist/core/objects/type/range/changes/range.base.d.ts +17 -0
- package/dist/core/objects/type/range/changes/range.base.js +13 -0
- package/dist/core/objects/type/range/changes/range.comment.d.ts +26 -0
- package/dist/core/objects/type/range/changes/range.comment.js +47 -0
- package/dist/core/objects/type/range/changes/range.create.d.ts +31 -0
- package/dist/core/objects/type/range/changes/range.create.js +113 -0
- package/dist/core/objects/type/range/changes/range.drop.d.ts +22 -0
- package/dist/core/objects/type/range/changes/range.drop.js +28 -0
- package/dist/core/objects/type/range/changes/range.privilege.d.ts +97 -0
- package/dist/core/objects/type/range/changes/range.privilege.js +131 -0
- package/dist/core/objects/type/range/changes/range.types.d.ts +6 -0
- package/dist/core/objects/type/range/changes/range.types.js +1 -0
- package/dist/core/objects/type/range/range.diff.d.ts +18 -0
- package/dist/core/objects/type/range/range.diff.js +172 -0
- package/dist/core/objects/type/range/range.model.d.ts +81 -0
- package/dist/core/objects/type/range/range.model.js +165 -0
- package/dist/core/objects/type/type.types.d.ts +4 -0
- package/dist/core/objects/type/type.types.js +1 -0
- package/dist/core/objects/utils.d.ts +57 -0
- package/dist/core/objects/utils.js +137 -0
- package/dist/core/objects/view/changes/view.alter.d.ts +62 -0
- package/dist/core/objects/view/changes/view.alter.js +75 -0
- package/dist/core/objects/view/changes/view.base.d.ts +17 -0
- package/dist/core/objects/view/changes/view.base.js +13 -0
- package/dist/core/objects/view/changes/view.comment.d.ts +23 -0
- package/dist/core/objects/view/changes/view.comment.js +46 -0
- package/dist/core/objects/view/changes/view.create.d.ts +27 -0
- package/dist/core/objects/view/changes/view.create.js +57 -0
- package/dist/core/objects/view/changes/view.drop.d.ts +17 -0
- package/dist/core/objects/view/changes/view.drop.js +30 -0
- package/dist/core/objects/view/changes/view.privilege.d.ts +107 -0
- package/dist/core/objects/view/changes/view.privilege.js +150 -0
- package/dist/core/objects/view/changes/view.types.d.ts +6 -0
- package/dist/core/objects/view/changes/view.types.js +1 -0
- package/dist/core/objects/view/view.diff.d.ts +18 -0
- package/dist/core/objects/view/view.diff.js +270 -0
- package/dist/core/objects/view/view.model.d.ts +152 -0
- package/dist/core/objects/view/view.model.js +250 -0
- package/dist/core/plan/apply.d.ts +33 -0
- package/dist/core/plan/apply.js +112 -0
- package/dist/core/plan/create.d.ts +22 -0
- package/dist/core/plan/create.js +228 -0
- package/dist/core/plan/hierarchy.d.ts +19 -0
- package/dist/core/plan/hierarchy.js +488 -0
- package/dist/core/plan/index.d.ts +19 -0
- package/dist/core/plan/index.js +21 -0
- package/dist/core/plan/io.d.ts +12 -0
- package/dist/core/plan/io.js +17 -0
- package/dist/core/plan/risk.d.ts +10 -0
- package/dist/core/plan/risk.js +38 -0
- package/dist/core/plan/serialize.d.ts +26 -0
- package/dist/core/plan/serialize.js +176 -0
- package/dist/core/plan/statements.d.ts +8 -0
- package/dist/core/plan/statements.js +13 -0
- package/dist/core/plan/types.d.ts +153 -0
- package/dist/core/plan/types.js +32 -0
- package/dist/core/postgres-config.d.ts +8 -0
- package/dist/core/postgres-config.js +46 -0
- package/dist/core/sort/custom-constraints.d.ts +9 -0
- package/dist/core/sort/custom-constraints.js +133 -0
- package/dist/core/sort/debug-visualization.d.ts +8 -0
- package/dist/core/sort/debug-visualization.js +145 -0
- package/dist/core/sort/dependency-filter.d.ts +19 -0
- package/dist/core/sort/dependency-filter.js +152 -0
- package/dist/core/sort/graph-builder.d.ts +37 -0
- package/dist/core/sort/graph-builder.js +172 -0
- package/dist/core/sort/graph-utils.d.ts +14 -0
- package/dist/core/sort/graph-utils.js +41 -0
- package/dist/core/sort/logical-sort.d.ts +26 -0
- package/dist/core/sort/logical-sort.js +532 -0
- package/dist/core/sort/sort-changes.d.ts +28 -0
- package/dist/core/sort/sort-changes.js +147 -0
- package/dist/core/sort/topological-sort.d.ts +20 -0
- package/dist/core/sort/topological-sort.js +138 -0
- package/dist/core/sort/types.d.ts +102 -0
- package/dist/core/sort/types.js +1 -0
- package/dist/core/sort/utils.d.ts +23 -0
- package/dist/core/sort/utils.js +51 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/package.json +58 -12
|
@@ -0,0 +1,532 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logical pre-sorting for migration scripts.
|
|
3
|
+
*
|
|
4
|
+
* Groups changes by object type, stable ID, and scope to create a readable,
|
|
5
|
+
* logically organized migration script before dependency resolution.
|
|
6
|
+
*
|
|
7
|
+
* This is a pre-sorting step that runs before the dependency-based topological sort.
|
|
8
|
+
* It groups related changes together while preserving the ability for the dependency
|
|
9
|
+
* resolver to reorder within groups when necessary.
|
|
10
|
+
*/
|
|
11
|
+
import { getSchema } from "../integrations/filter/extractors.js";
|
|
12
|
+
import { getExecutionPhase, isMetadataStableId } from "./utils.js";
|
|
13
|
+
/**
|
|
14
|
+
* Object type ordering for logical grouping.
|
|
15
|
+
* Lower numbers come first in the migration script.
|
|
16
|
+
*/
|
|
17
|
+
const OBJECT_TYPE_ORDER = {
|
|
18
|
+
// CREATE/ALTER phase order (forward dependency)
|
|
19
|
+
schema: 1,
|
|
20
|
+
extension: 2,
|
|
21
|
+
role: 3,
|
|
22
|
+
language: 4,
|
|
23
|
+
collation: 5,
|
|
24
|
+
domain: 6,
|
|
25
|
+
enum: 7,
|
|
26
|
+
composite_type: 8,
|
|
27
|
+
range: 9,
|
|
28
|
+
sequence: 10,
|
|
29
|
+
procedure: 11,
|
|
30
|
+
aggregate: 12,
|
|
31
|
+
table: 13,
|
|
32
|
+
index: 14, // Grouped with tables/materialized views
|
|
33
|
+
view: 15,
|
|
34
|
+
materialized_view: 16,
|
|
35
|
+
trigger: 17, // Grouped with tables
|
|
36
|
+
rls_policy: 18, // Grouped with tables
|
|
37
|
+
rule: 19, // Grouped with tables/views
|
|
38
|
+
event_trigger: 20,
|
|
39
|
+
publication: 21,
|
|
40
|
+
subscription: 22,
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Scope ordering within each stable ID group.
|
|
44
|
+
* Lower numbers come first.
|
|
45
|
+
*/
|
|
46
|
+
const SCOPE_ORDER_CREATE_ALTER = {
|
|
47
|
+
default_privilege: 1,
|
|
48
|
+
object: 2,
|
|
49
|
+
comment: 3,
|
|
50
|
+
privilege: 4,
|
|
51
|
+
membership: 5,
|
|
52
|
+
};
|
|
53
|
+
const SCOPE_ORDER_DROP = {
|
|
54
|
+
privilege: 1,
|
|
55
|
+
comment: 2,
|
|
56
|
+
object: 3,
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Sub-entity object types that should be grouped by their parent's stable ID.
|
|
60
|
+
*/
|
|
61
|
+
const SUB_ENTITY_TYPES = new Set(["index", "trigger", "rls_policy", "rule"]);
|
|
62
|
+
/**
|
|
63
|
+
* Regex for parsing stable IDs.
|
|
64
|
+
*/
|
|
65
|
+
const CONSTRAINT_REGEX = /^constraint:([^.]+)\.([^.]+)\./;
|
|
66
|
+
const COLUMN_REGEX = /^column:([^.]+)\.([^.]+)\./;
|
|
67
|
+
/**
|
|
68
|
+
* Find the object stable ID from an array of stable IDs, skipping metadata stable IDs.
|
|
69
|
+
* Iterates through all stable IDs to find the first non-metadata one.
|
|
70
|
+
*/
|
|
71
|
+
function findObjectStableId(stableIds) {
|
|
72
|
+
for (const id of stableIds) {
|
|
73
|
+
if (!isMetadataStableId(id)) {
|
|
74
|
+
return id;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// If all are metadata, return null (shouldn't happen, but safe fallback)
|
|
78
|
+
return stableIds.length > 0 ? stableIds[0] : null;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Extract the main stable ID that a change is touching.
|
|
82
|
+
*
|
|
83
|
+
* For sub-entities (indexes, triggers, constraints, etc.), returns the parent's stable ID.
|
|
84
|
+
* For other changes, returns the primary stable ID being created/dropped/modified.
|
|
85
|
+
*/
|
|
86
|
+
function getMainStableId(change) {
|
|
87
|
+
// For sub-entities, extract parent stable ID from requires
|
|
88
|
+
if (SUB_ENTITY_TYPES.has(change.objectType)) {
|
|
89
|
+
return getParentStableId(change);
|
|
90
|
+
}
|
|
91
|
+
// For metadata operations (comment, privilege): use requires to find object stable ID
|
|
92
|
+
// Check these BEFORE CREATE/DROP/ALTER logic to ensure they group with their target objects
|
|
93
|
+
if (change.scope === "comment" || change.scope === "privilege") {
|
|
94
|
+
// For CREATE comments/privileges: check creates first, but extract object stable ID from requires
|
|
95
|
+
if (change.operation === "create" && change.creates.length > 0) {
|
|
96
|
+
const createdId = change.creates[0];
|
|
97
|
+
// If creating a comment/privilege, find the object stable ID from requires
|
|
98
|
+
if (isMetadataStableId(createdId)) {
|
|
99
|
+
const objectId = findObjectStableId(change.requires);
|
|
100
|
+
if (objectId) {
|
|
101
|
+
// Check if commenting on a constraint - extract table from it
|
|
102
|
+
if (objectId.startsWith("constraint:")) {
|
|
103
|
+
const match = objectId.match(CONSTRAINT_REGEX);
|
|
104
|
+
if (match) {
|
|
105
|
+
const [, schema, table] = match;
|
|
106
|
+
return `table:${schema}.${table}`;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Check if commenting on a column - extract table from it
|
|
110
|
+
// Format: column:schema.table.column
|
|
111
|
+
if (objectId.startsWith("column:")) {
|
|
112
|
+
const match = objectId.match(COLUMN_REGEX);
|
|
113
|
+
if (match) {
|
|
114
|
+
const [, schema, table] = match;
|
|
115
|
+
return `table:${schema}.${table}`;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return objectId;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// For DROP/ALTER comments/privileges: find object stable ID from requires
|
|
123
|
+
if (change.requires.length > 0) {
|
|
124
|
+
const objectId = findObjectStableId(change.requires);
|
|
125
|
+
if (objectId) {
|
|
126
|
+
// Check if commenting on a constraint - extract table from it
|
|
127
|
+
if (objectId.startsWith("constraint:")) {
|
|
128
|
+
const match = objectId.match(CONSTRAINT_REGEX);
|
|
129
|
+
if (match) {
|
|
130
|
+
const [, schema, table] = match;
|
|
131
|
+
return `table:${schema}.${table}`;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Check if commenting on a column - extract table from it
|
|
135
|
+
// Format: column:schema.table.column
|
|
136
|
+
if (objectId.startsWith("column:")) {
|
|
137
|
+
const match = objectId.match(COLUMN_REGEX);
|
|
138
|
+
if (match) {
|
|
139
|
+
const [, schema, table] = match;
|
|
140
|
+
return `table:${schema}.${table}`;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return objectId;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
// For CREATE operations: check if creating a constraint (sub-entity of table)
|
|
149
|
+
if (change.operation === "create" && change.creates.length > 0) {
|
|
150
|
+
// Iterate through creates to find the first non-metadata stable ID
|
|
151
|
+
const createdId = findObjectStableId(change.creates);
|
|
152
|
+
if (createdId) {
|
|
153
|
+
if (createdId.startsWith("constraint:")) {
|
|
154
|
+
// Extract table stable ID from constraint stable ID
|
|
155
|
+
// Format: constraint:schema.table.constraint_name
|
|
156
|
+
const match = createdId.match(CONSTRAINT_REGEX);
|
|
157
|
+
if (match) {
|
|
158
|
+
const [, schema, table] = match;
|
|
159
|
+
return `table:${schema}.${table}`;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return createdId;
|
|
163
|
+
}
|
|
164
|
+
// Fallback: if all creates are metadata (shouldn't happen for non-comment scopes), use first
|
|
165
|
+
return change.creates[0] ?? null;
|
|
166
|
+
}
|
|
167
|
+
// For DROP operations: check if dropping a constraint (sub-entity of table)
|
|
168
|
+
if (change.operation === "drop" && change.drops.length > 0) {
|
|
169
|
+
// Iterate through drops to find the first non-metadata stable ID
|
|
170
|
+
const droppedId = findObjectStableId(change.drops);
|
|
171
|
+
if (droppedId) {
|
|
172
|
+
if (droppedId.startsWith("constraint:")) {
|
|
173
|
+
// Extract table stable ID from constraint stable ID
|
|
174
|
+
const match = droppedId.match(CONSTRAINT_REGEX);
|
|
175
|
+
if (match) {
|
|
176
|
+
const [, schema, table] = match;
|
|
177
|
+
return `table:${schema}.${table}`;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return droppedId;
|
|
181
|
+
}
|
|
182
|
+
// Fallback: if all drops are metadata, use first
|
|
183
|
+
return change.drops[0] ?? null;
|
|
184
|
+
}
|
|
185
|
+
// For default_privilege operations: group by role + schema combination
|
|
186
|
+
// This groups all "FOR ROLE X IN SCHEMA Y" statements together
|
|
187
|
+
if (change.scope === "default_privilege") {
|
|
188
|
+
if (change.requires.length > 0) {
|
|
189
|
+
// Iterate through requires to find role and schema
|
|
190
|
+
let grantingRole = null;
|
|
191
|
+
let schemaId = null;
|
|
192
|
+
for (const id of change.requires) {
|
|
193
|
+
if (id.startsWith("role:")) {
|
|
194
|
+
grantingRole = id;
|
|
195
|
+
}
|
|
196
|
+
else if (id.startsWith("schema:")) {
|
|
197
|
+
schemaId = id;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (schemaId && grantingRole) {
|
|
201
|
+
// Create composite key: "role:postgres:schema:public"
|
|
202
|
+
return `${grantingRole}:${schemaId}`;
|
|
203
|
+
}
|
|
204
|
+
// If no schema, just group by role
|
|
205
|
+
return grantingRole ?? null;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// For ALTER operations: check if creating/dropping a constraint
|
|
209
|
+
// Skip this for privilege/comment/default_privilege scopes (handled above)
|
|
210
|
+
if (change.operation === "alter") {
|
|
211
|
+
// Check creates first (ADD CONSTRAINT, ADD COLUMN, etc.)
|
|
212
|
+
if (change.creates.length > 0) {
|
|
213
|
+
const createdId = findObjectStableId(change.creates);
|
|
214
|
+
if (createdId) {
|
|
215
|
+
if (createdId.startsWith("constraint:")) {
|
|
216
|
+
const match = createdId.match(CONSTRAINT_REGEX);
|
|
217
|
+
if (match) {
|
|
218
|
+
const [, schema, table] = match;
|
|
219
|
+
return `table:${schema}.${table}`;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// Extract table stable ID from column stable IDs (for ALTER TABLE ADD COLUMN)
|
|
223
|
+
// Format: column:schema.table.column
|
|
224
|
+
if (createdId.startsWith("column:")) {
|
|
225
|
+
const match = createdId.match(COLUMN_REGEX);
|
|
226
|
+
if (match) {
|
|
227
|
+
const [, schema, table] = match;
|
|
228
|
+
return `table:${schema}.${table}`;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return createdId;
|
|
232
|
+
}
|
|
233
|
+
// Fallback: if all creates are metadata, use first
|
|
234
|
+
return change.creates[0] ?? null;
|
|
235
|
+
}
|
|
236
|
+
// Check drops (DROP CONSTRAINT)
|
|
237
|
+
if (change.drops && change.drops.length > 0) {
|
|
238
|
+
const droppedId = findObjectStableId(change.drops);
|
|
239
|
+
if (droppedId) {
|
|
240
|
+
if (droppedId.startsWith("constraint:")) {
|
|
241
|
+
const match = droppedId.match(CONSTRAINT_REGEX);
|
|
242
|
+
if (match) {
|
|
243
|
+
const [, schema, table] = match;
|
|
244
|
+
return `table:${schema}.${table}`;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return droppedId;
|
|
248
|
+
}
|
|
249
|
+
// Fallback: if all drops are metadata, use first
|
|
250
|
+
return change.drops[0] ?? null;
|
|
251
|
+
}
|
|
252
|
+
// Otherwise use requires (VALIDATE CONSTRAINT, etc.)
|
|
253
|
+
if (change.requires.length > 0) {
|
|
254
|
+
const requiredId = findObjectStableId(change.requires);
|
|
255
|
+
if (requiredId) {
|
|
256
|
+
// Check if requiring a constraint - extract table from it
|
|
257
|
+
if (requiredId.startsWith("constraint:")) {
|
|
258
|
+
const match = requiredId.match(CONSTRAINT_REGEX);
|
|
259
|
+
if (match) {
|
|
260
|
+
const [, schema, table] = match;
|
|
261
|
+
return `table:${schema}.${table}`;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return requiredId;
|
|
265
|
+
}
|
|
266
|
+
// Fallback: if all requires are metadata, use first
|
|
267
|
+
return change.requires[0] ?? null;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
// Fallback: try requires if available
|
|
271
|
+
if (change.requires.length > 0) {
|
|
272
|
+
return findObjectStableId(change.requires) ?? null;
|
|
273
|
+
}
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Extract parent stable ID for sub-entities (indexes, triggers, RLS policies, rules).
|
|
278
|
+
*
|
|
279
|
+
* Looks for table/view/materialized view stable IDs in the change's requirements.
|
|
280
|
+
*/
|
|
281
|
+
function getParentStableId(change) {
|
|
282
|
+
const requires = change.requires;
|
|
283
|
+
// Look for table, view, or materialized view stable IDs
|
|
284
|
+
for (const stableId of requires) {
|
|
285
|
+
if (stableId.startsWith("table:") ||
|
|
286
|
+
stableId.startsWith("view:") ||
|
|
287
|
+
stableId.startsWith("materializedView:")) {
|
|
288
|
+
return stableId;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
// Fallback: return first requires if available
|
|
292
|
+
return requires.length > 0 ? requires[0] : null;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Extract schema name from a change.
|
|
296
|
+
* Returns the schema name if present, or null for non-schema objects.
|
|
297
|
+
*
|
|
298
|
+
* Uses the getSchema helper which directly accesses schema properties from change objects.
|
|
299
|
+
* For default_privilege changes, accesses the inSchema property directly.
|
|
300
|
+
* For event_trigger changes, groups by their function's schema.
|
|
301
|
+
*/
|
|
302
|
+
function extractSchemaFromChange(change) {
|
|
303
|
+
// Handle default_privilege changes specially (they have inSchema property)
|
|
304
|
+
if (change.scope === "default_privilege") {
|
|
305
|
+
// TypeScript doesn't know about inSchema, but we know it exists for default_privilege changes
|
|
306
|
+
return change.inSchema ?? null;
|
|
307
|
+
}
|
|
308
|
+
// Handle event_trigger changes specially - group by their function's schema
|
|
309
|
+
if (change.objectType === "event_trigger") {
|
|
310
|
+
return change.eventTrigger.function_schema;
|
|
311
|
+
}
|
|
312
|
+
// Use the getSchema helper for all other changes
|
|
313
|
+
return getSchema(change);
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Get the effective object type for sorting purposes.
|
|
317
|
+
* For sub-entities, returns the parent's object type (table/view/materialized_view).
|
|
318
|
+
* For other objects, returns the object type as-is.
|
|
319
|
+
*/
|
|
320
|
+
function getEffectiveObjectType(change) {
|
|
321
|
+
// For sub-entities, determine parent type from stable ID
|
|
322
|
+
if (SUB_ENTITY_TYPES.has(change.objectType)) {
|
|
323
|
+
const parentStableId = getParentStableId(change);
|
|
324
|
+
if (parentStableId) {
|
|
325
|
+
if (parentStableId.startsWith("table:")) {
|
|
326
|
+
return "table";
|
|
327
|
+
}
|
|
328
|
+
if (parentStableId.startsWith("view:")) {
|
|
329
|
+
return "view";
|
|
330
|
+
}
|
|
331
|
+
if (parentStableId.startsWith("materializedView:")) {
|
|
332
|
+
return "materialized_view";
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return change.objectType;
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Get the object type order for sorting.
|
|
340
|
+
* Returns a high number for unknown types to sort them last.
|
|
341
|
+
*/
|
|
342
|
+
function getObjectTypeOrder(objectType) {
|
|
343
|
+
return OBJECT_TYPE_ORDER[objectType] ?? 999;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Get the scope order for sorting within a stable ID group.
|
|
347
|
+
*/
|
|
348
|
+
function getScopeOrder(scope, phase) {
|
|
349
|
+
const orderMap = phase === "drop" ? SCOPE_ORDER_DROP : SCOPE_ORDER_CREATE_ALTER;
|
|
350
|
+
return orderMap[scope] ?? 999;
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Logically pre-sort changes by grouping them into a readable structure.
|
|
354
|
+
*
|
|
355
|
+
* Groups changes by:
|
|
356
|
+
* 1. Phase (DROP vs CREATE/ALTER)
|
|
357
|
+
* 2. Object type (schema, table, index, etc.)
|
|
358
|
+
* 3. Main stable ID (table:public.users, etc.)
|
|
359
|
+
* 4. Scope (object, comment, privilege, etc.)
|
|
360
|
+
*
|
|
361
|
+
* Within each group, preserves the original order (stability).
|
|
362
|
+
*
|
|
363
|
+
* @param changes - Array of changes to sort
|
|
364
|
+
* @returns Logically grouped and sorted array of changes
|
|
365
|
+
*/
|
|
366
|
+
export function logicalSort(changes) {
|
|
367
|
+
if (changes.length === 0) {
|
|
368
|
+
return changes;
|
|
369
|
+
}
|
|
370
|
+
// Step 1: Partition by phase
|
|
371
|
+
const changesByPhase = {
|
|
372
|
+
drop: [],
|
|
373
|
+
create_alter_object: [],
|
|
374
|
+
};
|
|
375
|
+
for (const change of changes) {
|
|
376
|
+
const phase = getExecutionPhase(change);
|
|
377
|
+
changesByPhase[phase].push(change);
|
|
378
|
+
}
|
|
379
|
+
// Step 2: Sort each phase
|
|
380
|
+
const sortedDrop = sortPhase(changesByPhase.drop, "drop");
|
|
381
|
+
const sortedCreateAlter = sortPhase(changesByPhase.create_alter_object, "create_alter_object");
|
|
382
|
+
// Step 3: Combine phases (DROP first, then CREATE/ALTER)
|
|
383
|
+
return [...sortedDrop, ...sortedCreateAlter];
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Sort changes within a phase by object type, stable ID, and scope.
|
|
387
|
+
*/
|
|
388
|
+
function sortPhase(changes, phase) {
|
|
389
|
+
if (changes.length === 0) {
|
|
390
|
+
return changes;
|
|
391
|
+
}
|
|
392
|
+
// Create a map to preserve original indices for stability
|
|
393
|
+
const changesWithIndices = changes.map((change, index) => ({
|
|
394
|
+
change,
|
|
395
|
+
originalIndex: index,
|
|
396
|
+
}));
|
|
397
|
+
// Sort by: schema → effective object type (only when schemas differ) → stable ID → actual object type → scope → original index
|
|
398
|
+
// Schema groups all objects within the same schema together
|
|
399
|
+
// Effective object type ensures schemas come before tables when comparing across schemas
|
|
400
|
+
// Stable ID groups sub-entities with their parents
|
|
401
|
+
// Actual object type orders sub-entities within their parent group
|
|
402
|
+
changesWithIndices.sort((a, b) => {
|
|
403
|
+
const changeA = a.change;
|
|
404
|
+
const changeB = b.change;
|
|
405
|
+
// 1. Compare schemas (group objects by schema)
|
|
406
|
+
const schemaA = extractSchemaFromChange(changeA);
|
|
407
|
+
const schemaB = extractSchemaFromChange(changeB);
|
|
408
|
+
// Non-schema objects (roles, languages, extensions, etc.) sort first
|
|
409
|
+
// Use a special prefix to ensure they come before schema objects
|
|
410
|
+
const schemaKeyA = schemaA === null ? "::" : schemaA;
|
|
411
|
+
const schemaKeyB = schemaB === null ? "::" : schemaB;
|
|
412
|
+
const schemaCompare = schemaKeyA.localeCompare(schemaKeyB);
|
|
413
|
+
if (schemaCompare !== 0) {
|
|
414
|
+
return schemaCompare;
|
|
415
|
+
}
|
|
416
|
+
// 2. Compare effective object types (parent type for sub-entities)
|
|
417
|
+
// Only apply this ordering when schemas differ (for cross-schema ordering)
|
|
418
|
+
// Within the same schema, we want all objects grouped together
|
|
419
|
+
const effectiveTypeA = getEffectiveObjectType(changeA);
|
|
420
|
+
const effectiveTypeB = getEffectiveObjectType(changeB);
|
|
421
|
+
const effectiveTypeOrderA = getObjectTypeOrder(effectiveTypeA);
|
|
422
|
+
const effectiveTypeOrderB = getObjectTypeOrder(effectiveTypeB);
|
|
423
|
+
if (effectiveTypeOrderA !== effectiveTypeOrderB) {
|
|
424
|
+
return effectiveTypeOrderA - effectiveTypeOrderB;
|
|
425
|
+
}
|
|
426
|
+
// 3. Compare main stable IDs (groups sub-entities with parents)
|
|
427
|
+
const stableIdA = getMainStableId(changeA);
|
|
428
|
+
const stableIdB = getMainStableId(changeB);
|
|
429
|
+
const stableIdCompare = (stableIdA ?? "").localeCompare(stableIdB ?? "");
|
|
430
|
+
if (stableIdCompare !== 0) {
|
|
431
|
+
return stableIdCompare;
|
|
432
|
+
}
|
|
433
|
+
// 4. Compare actual object types (orders sub-entities within parent group)
|
|
434
|
+
const typeOrderA = getObjectTypeOrder(changeA.objectType);
|
|
435
|
+
const typeOrderB = getObjectTypeOrder(changeB.objectType);
|
|
436
|
+
if (typeOrderA !== typeOrderB) {
|
|
437
|
+
return typeOrderA - typeOrderB;
|
|
438
|
+
}
|
|
439
|
+
// 5. Compare scopes (within same stable ID and object type)
|
|
440
|
+
// Special handling: comments should come after CREATE object but before ALTER object
|
|
441
|
+
const scopeA = changeA.scope;
|
|
442
|
+
const scopeB = changeB.scope;
|
|
443
|
+
const operationA = changeA.operation;
|
|
444
|
+
const operationB = changeB.operation;
|
|
445
|
+
// Special case: if one is "object" scope and one is "comment" scope
|
|
446
|
+
if (scopeA === "object" && scopeB === "comment") {
|
|
447
|
+
// Comment comes after CREATE object, but before ALTER object
|
|
448
|
+
if (operationA === "create") {
|
|
449
|
+
return -1; // CREATE object comes before comment (A < B)
|
|
450
|
+
}
|
|
451
|
+
else if (operationA === "alter") {
|
|
452
|
+
return 1; // ALTER object comes after comment (A > B)
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
else if (scopeA === "comment" && scopeB === "object") {
|
|
456
|
+
// Comment comes after CREATE object, but before ALTER object
|
|
457
|
+
if (operationB === "create") {
|
|
458
|
+
return 1; // CREATE object comes before comment (B < A, so A > B)
|
|
459
|
+
}
|
|
460
|
+
else if (operationB === "alter") {
|
|
461
|
+
return -1; // ALTER object comes after comment (B > A, so A < B)
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
// Special case: if one is ALTER TABLE ADD COLUMN and one is a column comment for that column
|
|
465
|
+
// Column comment should come right after ADD COLUMN
|
|
466
|
+
if (scopeA === "object" &&
|
|
467
|
+
operationA === "alter" &&
|
|
468
|
+
changeA.creates.length > 0 &&
|
|
469
|
+
changeA.creates[0]?.startsWith("column:")) {
|
|
470
|
+
// This is ALTER TABLE ADD COLUMN
|
|
471
|
+
const addedColumnId = changeA.creates[0];
|
|
472
|
+
if (scopeB === "comment" && changeB.requires.length > 0) {
|
|
473
|
+
const commentColumnId = changeB.requires[0];
|
|
474
|
+
if (commentColumnId === addedColumnId) {
|
|
475
|
+
return -1; // ADD COLUMN comes before its column comment
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
if (scopeB === "object" &&
|
|
480
|
+
operationB === "alter" &&
|
|
481
|
+
changeB.creates.length > 0 &&
|
|
482
|
+
changeB.creates[0]?.startsWith("column:")) {
|
|
483
|
+
// This is ALTER TABLE ADD COLUMN
|
|
484
|
+
const addedColumnId = changeB.creates[0];
|
|
485
|
+
if (scopeA === "comment" && changeA.requires.length > 0) {
|
|
486
|
+
const commentColumnId = changeA.requires[0];
|
|
487
|
+
if (commentColumnId === addedColumnId) {
|
|
488
|
+
return 1; // Column comment comes after ADD COLUMN
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
// Special case: if both are comments, ensure table comments come before column comments
|
|
493
|
+
if (scopeA === "comment" && scopeB === "comment") {
|
|
494
|
+
// Check if one is a table comment and one is a column comment
|
|
495
|
+
const requiresA = changeA.requires.length > 0 ? changeA.requires[0] : null;
|
|
496
|
+
const requiresB = changeB.requires.length > 0 ? changeB.requires[0] : null;
|
|
497
|
+
// Table comments require table stable ID, column comments require column stable ID
|
|
498
|
+
const isTableCommentA = requiresA?.startsWith("table:");
|
|
499
|
+
const isTableCommentB = requiresB?.startsWith("table:");
|
|
500
|
+
const isColumnCommentA = requiresA?.startsWith("column:");
|
|
501
|
+
const isColumnCommentB = requiresB?.startsWith("column:");
|
|
502
|
+
// Table comments come before column comments
|
|
503
|
+
if (isTableCommentA && isColumnCommentB) {
|
|
504
|
+
return -1; // Table comment comes before column comment
|
|
505
|
+
}
|
|
506
|
+
if (isColumnCommentA && isTableCommentB) {
|
|
507
|
+
return 1; // Column comment comes after table comment
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
// Default scope comparison
|
|
511
|
+
const scopeOrderA = getScopeOrder(scopeA, phase);
|
|
512
|
+
const scopeOrderB = getScopeOrder(scopeB, phase);
|
|
513
|
+
if (scopeOrderA !== scopeOrderB) {
|
|
514
|
+
return scopeOrderA - scopeOrderB;
|
|
515
|
+
}
|
|
516
|
+
// 6. Compare operations (CREATE before ALTER within same stable ID, scope, and object type)
|
|
517
|
+
// This ensures CREATE ROLE comes before ALTER ROLE, CREATE SCHEMA before GRANT, etc.
|
|
518
|
+
const operationOrder = {
|
|
519
|
+
create: 1,
|
|
520
|
+
alter: 2,
|
|
521
|
+
drop: 3,
|
|
522
|
+
};
|
|
523
|
+
const operationOrderA = operationOrder[operationA] ?? 999;
|
|
524
|
+
const operationOrderB = operationOrder[operationB] ?? 999;
|
|
525
|
+
if (operationOrderA !== operationOrderB) {
|
|
526
|
+
return operationOrderA - operationOrderB;
|
|
527
|
+
}
|
|
528
|
+
// 7. Preserve original order (stability)
|
|
529
|
+
return a.originalIndex - b.originalIndex;
|
|
530
|
+
});
|
|
531
|
+
return changesWithIndices.map((item) => item.change);
|
|
532
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phased dependency-graph sort for ordered schema changes.
|
|
3
|
+
*
|
|
4
|
+
* Changes are split into two execution phases:
|
|
5
|
+
* - `drop`: Destructive operations (executed first, in reverse dependency order)
|
|
6
|
+
* - `create_alter_object`: All remaining changes (executed second, in forward dependency order)
|
|
7
|
+
*
|
|
8
|
+
* Within each phase, changes are sorted using Constraints derived from:
|
|
9
|
+
* - Catalog dependencies (from pg_depend)
|
|
10
|
+
* - Explicit requirements (from Change.requires)
|
|
11
|
+
* - Custom constraints (change-to-change ordering rules)
|
|
12
|
+
*/
|
|
13
|
+
import type { Catalog } from "../catalog.model.ts";
|
|
14
|
+
import type { Change } from "../change.types.ts";
|
|
15
|
+
/**
|
|
16
|
+
* Sort changes using dependency information from catalogs and custom constraints.
|
|
17
|
+
*
|
|
18
|
+
* First applies logical pre-sorting to group related changes together,
|
|
19
|
+
* then applies dependency-based topological sorting to ensure correct execution order.
|
|
20
|
+
*
|
|
21
|
+
* @param catalogs - Main and branch catalogs containing dependency information
|
|
22
|
+
* @param changes - List of Change objects to order
|
|
23
|
+
* @returns Ordered list of Change objects
|
|
24
|
+
*/
|
|
25
|
+
export declare function sortChanges(catalogs: {
|
|
26
|
+
mainCatalog: Catalog;
|
|
27
|
+
branchCatalog: Catalog;
|
|
28
|
+
}, changes: Change[]): Change[];
|