@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,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter DSL - A serializable domain-specific language for change filtering.
|
|
3
|
+
*/
|
|
4
|
+
import { PROPERTY_EXTRACTORS } from "./extractors.js";
|
|
5
|
+
/**
|
|
6
|
+
* Evaluate a pattern against a change.
|
|
7
|
+
*
|
|
8
|
+
* @param pattern - The pattern to evaluate
|
|
9
|
+
* @param change - The change to match against
|
|
10
|
+
* @returns true if the pattern matches, false otherwise
|
|
11
|
+
*/
|
|
12
|
+
export function evaluatePattern(pattern, change) {
|
|
13
|
+
// Handle composition operators first (they take precedence)
|
|
14
|
+
// NOT operator - negate the result
|
|
15
|
+
if (pattern.not) {
|
|
16
|
+
return !evaluatePattern(pattern.not, change);
|
|
17
|
+
}
|
|
18
|
+
// AND operator - all patterns must match
|
|
19
|
+
if (pattern.and) {
|
|
20
|
+
return pattern.and.every((p) => evaluatePattern(p, change));
|
|
21
|
+
}
|
|
22
|
+
// OR operator - any pattern must match
|
|
23
|
+
if (pattern.or) {
|
|
24
|
+
return pattern.or.some((p) => evaluatePattern(p, change));
|
|
25
|
+
}
|
|
26
|
+
// Evaluate basic pattern matching
|
|
27
|
+
// Multiple properties in a pattern are combined with AND (all must match)
|
|
28
|
+
// Match objectType
|
|
29
|
+
if (pattern.type) {
|
|
30
|
+
if (change.objectType !== pattern.type) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Match operation
|
|
35
|
+
if (pattern.operation) {
|
|
36
|
+
if (change.operation !== pattern.operation) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Match scope
|
|
41
|
+
if (pattern.scope) {
|
|
42
|
+
if (change.scope !== pattern.scope) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Match extracted properties
|
|
47
|
+
for (const [key, value] of Object.entries(pattern)) {
|
|
48
|
+
// Skip composition operators and core properties
|
|
49
|
+
if (["and", "or", "not", "type", "operation", "scope"].includes(key)) {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
// Check if this is a registered property extractor
|
|
53
|
+
const extractor = PROPERTY_EXTRACTORS[key];
|
|
54
|
+
if (!extractor) {
|
|
55
|
+
// Unknown property - ignore
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
// Extract the actual value from the change
|
|
59
|
+
const actualValue = extractor(change);
|
|
60
|
+
// Property matching rules:
|
|
61
|
+
// - String value: exact match
|
|
62
|
+
// - Array value: value must be in array
|
|
63
|
+
// - Missing properties (null) don't match
|
|
64
|
+
if (actualValue === null) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
if (typeof value === "string") {
|
|
68
|
+
// Exact match
|
|
69
|
+
if (actualValue !== value) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else if (Array.isArray(value)) {
|
|
74
|
+
// Value must be in array
|
|
75
|
+
if (!value.includes(actualValue)) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
// Invalid value type - don't match
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// All checks passed
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Compile a Filter DSL to a ChangeFilter function.
|
|
89
|
+
*
|
|
90
|
+
* @param dsl - The filter DSL pattern
|
|
91
|
+
* @returns A ChangeFilter function that evaluates the pattern
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```ts
|
|
95
|
+
* const filter = compileFilterDSL({
|
|
96
|
+
* or: [
|
|
97
|
+
* { type: "schema", operation: "create" },
|
|
98
|
+
* { schema: "public" }
|
|
99
|
+
* ]
|
|
100
|
+
* });
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
export function compileFilterDSL(dsl) {
|
|
104
|
+
return (change) => {
|
|
105
|
+
return evaluatePattern(dsl, change);
|
|
106
|
+
};
|
|
107
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Change } from "../../change.types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Property extractor function that extracts a value from a change.
|
|
4
|
+
*/
|
|
5
|
+
type PropertyExtractor = (change: Change) => string | null;
|
|
6
|
+
/**
|
|
7
|
+
* Registry of property extractors.
|
|
8
|
+
* Maps property names to extractor functions.
|
|
9
|
+
*/
|
|
10
|
+
export declare const PROPERTY_EXTRACTORS: Record<string, PropertyExtractor>;
|
|
11
|
+
export declare function getSchema(change: Change): string | null;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry of property extractors.
|
|
3
|
+
* Maps property names to extractor functions.
|
|
4
|
+
*/
|
|
5
|
+
export const PROPERTY_EXTRACTORS = {
|
|
6
|
+
schema: getSchema,
|
|
7
|
+
owner: getOwner,
|
|
8
|
+
member: (change) => {
|
|
9
|
+
if (change.scope === "membership") {
|
|
10
|
+
return change.member;
|
|
11
|
+
}
|
|
12
|
+
return null;
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
export function getSchema(change) {
|
|
16
|
+
switch (change.objectType) {
|
|
17
|
+
case "aggregate":
|
|
18
|
+
return change.aggregate.schema;
|
|
19
|
+
case "collation":
|
|
20
|
+
return change.collation.schema;
|
|
21
|
+
case "composite_type":
|
|
22
|
+
return change.compositeType.schema;
|
|
23
|
+
case "domain":
|
|
24
|
+
return change.domain.schema;
|
|
25
|
+
case "enum":
|
|
26
|
+
return change.enum.schema;
|
|
27
|
+
case "event_trigger":
|
|
28
|
+
return null;
|
|
29
|
+
case "extension":
|
|
30
|
+
return change.extension.schema;
|
|
31
|
+
case "index":
|
|
32
|
+
return change.index.schema;
|
|
33
|
+
case "language":
|
|
34
|
+
return null;
|
|
35
|
+
case "materialized_view":
|
|
36
|
+
return change.materializedView.schema;
|
|
37
|
+
case "procedure":
|
|
38
|
+
return change.procedure.schema;
|
|
39
|
+
case "publication":
|
|
40
|
+
return null;
|
|
41
|
+
case "range":
|
|
42
|
+
return change.range.schema;
|
|
43
|
+
case "rls_policy":
|
|
44
|
+
return change.policy.schema;
|
|
45
|
+
case "role":
|
|
46
|
+
return null;
|
|
47
|
+
case "rule":
|
|
48
|
+
return change.rule.schema;
|
|
49
|
+
case "schema":
|
|
50
|
+
return change.schema.name;
|
|
51
|
+
case "sequence":
|
|
52
|
+
return change.sequence.schema;
|
|
53
|
+
case "subscription":
|
|
54
|
+
return null;
|
|
55
|
+
case "table":
|
|
56
|
+
return change.table.schema;
|
|
57
|
+
case "trigger":
|
|
58
|
+
return change.trigger.schema;
|
|
59
|
+
case "view":
|
|
60
|
+
return change.view.schema;
|
|
61
|
+
case "foreign_data_wrapper":
|
|
62
|
+
return null;
|
|
63
|
+
case "server":
|
|
64
|
+
return null;
|
|
65
|
+
case "user_mapping":
|
|
66
|
+
return null;
|
|
67
|
+
case "foreign_table":
|
|
68
|
+
return change.foreignTable.schema;
|
|
69
|
+
default: {
|
|
70
|
+
// exhaustiveness check
|
|
71
|
+
const _exhaustive = change;
|
|
72
|
+
return _exhaustive;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function getOwner(change) {
|
|
77
|
+
switch (change.objectType) {
|
|
78
|
+
case "aggregate":
|
|
79
|
+
return change.aggregate.owner;
|
|
80
|
+
case "collation":
|
|
81
|
+
return change.collation.owner;
|
|
82
|
+
case "composite_type":
|
|
83
|
+
return change.compositeType.owner;
|
|
84
|
+
case "domain":
|
|
85
|
+
return change.domain.owner;
|
|
86
|
+
case "enum":
|
|
87
|
+
return change.enum.owner;
|
|
88
|
+
case "event_trigger":
|
|
89
|
+
return change.eventTrigger.owner;
|
|
90
|
+
case "extension":
|
|
91
|
+
return change.extension.owner;
|
|
92
|
+
case "index":
|
|
93
|
+
return change.index.owner;
|
|
94
|
+
case "language":
|
|
95
|
+
return change.language.owner;
|
|
96
|
+
case "materialized_view":
|
|
97
|
+
return change.materializedView.owner;
|
|
98
|
+
case "procedure":
|
|
99
|
+
return change.procedure.owner;
|
|
100
|
+
case "publication":
|
|
101
|
+
return change.publication.owner;
|
|
102
|
+
case "range":
|
|
103
|
+
return change.range.owner;
|
|
104
|
+
case "rls_policy":
|
|
105
|
+
return change.policy.owner;
|
|
106
|
+
case "role":
|
|
107
|
+
return change.role.name;
|
|
108
|
+
case "rule":
|
|
109
|
+
return change.rule.owner;
|
|
110
|
+
case "schema":
|
|
111
|
+
return change.schema.owner;
|
|
112
|
+
case "sequence":
|
|
113
|
+
return change.sequence.owner;
|
|
114
|
+
case "subscription":
|
|
115
|
+
return change.subscription.owner;
|
|
116
|
+
case "table":
|
|
117
|
+
return change.table.owner;
|
|
118
|
+
case "trigger":
|
|
119
|
+
return change.trigger.owner;
|
|
120
|
+
case "view":
|
|
121
|
+
return change.view.owner;
|
|
122
|
+
case "foreign_data_wrapper":
|
|
123
|
+
return change.foreignDataWrapper.owner;
|
|
124
|
+
case "server":
|
|
125
|
+
return change.server.owner;
|
|
126
|
+
case "user_mapping":
|
|
127
|
+
return null;
|
|
128
|
+
case "foreign_table":
|
|
129
|
+
return change.foreignTable.owner;
|
|
130
|
+
default: {
|
|
131
|
+
// exhaustiveness check
|
|
132
|
+
const _exhaustive = change;
|
|
133
|
+
return _exhaustive;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration DSL - A serializable domain-specific language for integrations.
|
|
3
|
+
*
|
|
4
|
+
* Combines filter and serialization DSLs into a single serializable structure.
|
|
5
|
+
*/
|
|
6
|
+
import type { FilterDSL } from "./filter/dsl.ts";
|
|
7
|
+
import type { SerializeDSL } from "./serialize/dsl.ts";
|
|
8
|
+
/**
|
|
9
|
+
* Integration DSL - serializable representation of an integration.
|
|
10
|
+
*/
|
|
11
|
+
export type IntegrationDSL = {
|
|
12
|
+
/**
|
|
13
|
+
* Filter DSL - determines which changes to include/exclude.
|
|
14
|
+
* If not provided, all changes are included.
|
|
15
|
+
*/
|
|
16
|
+
filter?: FilterDSL;
|
|
17
|
+
/**
|
|
18
|
+
* Serialization DSL - customizes how changes are serialized.
|
|
19
|
+
* If not provided, changes are serialized with default options.
|
|
20
|
+
*/
|
|
21
|
+
serialize?: SerializeDSL;
|
|
22
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialization DSL - A serializable domain-specific language for customizing change serialization.
|
|
3
|
+
*
|
|
4
|
+
* Reuses the filter pattern matching logic to determine when to apply serialization options.
|
|
5
|
+
*/
|
|
6
|
+
import type { ChangeSerializer } from "../../main.ts";
|
|
7
|
+
import { type FilterPattern } from "../filter/dsl.ts";
|
|
8
|
+
/**
|
|
9
|
+
* Serialization options that can be passed to change.serialize().
|
|
10
|
+
*/
|
|
11
|
+
type SerializeOptions = {
|
|
12
|
+
skipAuthorization?: boolean;
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* A serialization rule that applies options when a pattern matches.
|
|
17
|
+
*/
|
|
18
|
+
type SerializeRule = {
|
|
19
|
+
/**
|
|
20
|
+
* Pattern to match against changes.
|
|
21
|
+
* Uses the same pattern matching logic as filters.
|
|
22
|
+
*/
|
|
23
|
+
when: FilterPattern;
|
|
24
|
+
/**
|
|
25
|
+
* Serialization options to apply when the pattern matches.
|
|
26
|
+
*/
|
|
27
|
+
options: SerializeOptions;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Serialization DSL - array of rules evaluated in order.
|
|
31
|
+
* First matching rule's options are applied.
|
|
32
|
+
*/
|
|
33
|
+
export type SerializeDSL = SerializeRule[];
|
|
34
|
+
/**
|
|
35
|
+
* Compile a Serialization DSL to a ChangeSerializer function.
|
|
36
|
+
*
|
|
37
|
+
* Rules are evaluated in order, and the first matching rule's options are applied.
|
|
38
|
+
* If no rule matches, the change is serialized with default options.
|
|
39
|
+
*
|
|
40
|
+
* @param dsl - The serialization DSL
|
|
41
|
+
* @returns A ChangeSerializer function that applies the rules
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* const serializer = compileSerializeDSL([
|
|
46
|
+
* {
|
|
47
|
+
* when: {
|
|
48
|
+
* type: "schema",
|
|
49
|
+
* operation: "create",
|
|
50
|
+
* owner: ["service_role"]
|
|
51
|
+
* },
|
|
52
|
+
* options: { skipAuthorization: true }
|
|
53
|
+
* }
|
|
54
|
+
* ]);
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare function compileSerializeDSL(dsl: SerializeDSL): ChangeSerializer;
|
|
58
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialization DSL - A serializable domain-specific language for customizing change serialization.
|
|
3
|
+
*
|
|
4
|
+
* Reuses the filter pattern matching logic to determine when to apply serialization options.
|
|
5
|
+
*/
|
|
6
|
+
import { evaluatePattern } from "../filter/dsl.js";
|
|
7
|
+
/**
|
|
8
|
+
* Compile a Serialization DSL to a ChangeSerializer function.
|
|
9
|
+
*
|
|
10
|
+
* Rules are evaluated in order, and the first matching rule's options are applied.
|
|
11
|
+
* If no rule matches, the change is serialized with default options.
|
|
12
|
+
*
|
|
13
|
+
* @param dsl - The serialization DSL
|
|
14
|
+
* @returns A ChangeSerializer function that applies the rules
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* const serializer = compileSerializeDSL([
|
|
19
|
+
* {
|
|
20
|
+
* when: {
|
|
21
|
+
* type: "schema",
|
|
22
|
+
* operation: "create",
|
|
23
|
+
* owner: ["service_role"]
|
|
24
|
+
* },
|
|
25
|
+
* options: { skipAuthorization: true }
|
|
26
|
+
* }
|
|
27
|
+
* ]);
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export function compileSerializeDSL(dsl) {
|
|
31
|
+
return (change) => {
|
|
32
|
+
// Find first matching rule
|
|
33
|
+
for (const rule of dsl) {
|
|
34
|
+
if (evaluatePattern(rule.when, change)) {
|
|
35
|
+
// Apply this rule's options
|
|
36
|
+
return change.serialize(rule.options);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// No rule matched - use default serialization
|
|
40
|
+
return change.serialize();
|
|
41
|
+
};
|
|
42
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Change } from "./change.types.ts";
|
|
2
|
+
import type { Integration } from "./integrations/integration.types.ts";
|
|
3
|
+
export type ChangeFilter = (change: Change) => boolean;
|
|
4
|
+
export type ChangeSerializer = (change: Change) => string | undefined;
|
|
5
|
+
export type MainOptions = Integration;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import postgres from "postgres";
|
|
2
|
+
import { diffCatalogs } from "./catalog.diff.js";
|
|
3
|
+
import { extractCatalog } from "./catalog.model.js";
|
|
4
|
+
import { postgresConfig } from "./postgres-config.js";
|
|
5
|
+
import { sortChanges } from "./sort/sort-changes.js";
|
|
6
|
+
async function _main(mainDatabaseUrl, branchDatabaseUrl, options = {}) {
|
|
7
|
+
const mainSql = postgres(mainDatabaseUrl, postgresConfig);
|
|
8
|
+
const branchSql = postgres(branchDatabaseUrl, postgresConfig);
|
|
9
|
+
const [mainCatalog, branchCatalog] = await Promise.all([
|
|
10
|
+
extractCatalog(mainSql),
|
|
11
|
+
extractCatalog(branchSql),
|
|
12
|
+
]);
|
|
13
|
+
await Promise.all([mainSql.end(), branchSql.end()]);
|
|
14
|
+
const changes = diffCatalogs(mainCatalog, branchCatalog);
|
|
15
|
+
// Use provided options as integration (optional)
|
|
16
|
+
const integration = options ?? {};
|
|
17
|
+
// Apply filter if provided
|
|
18
|
+
const ctx = { mainCatalog, branchCatalog };
|
|
19
|
+
let filteredChanges = changes;
|
|
20
|
+
const integrationFilter = integration.filter;
|
|
21
|
+
if (integrationFilter) {
|
|
22
|
+
filteredChanges = filteredChanges.filter((change) => integrationFilter(change));
|
|
23
|
+
}
|
|
24
|
+
if (filteredChanges.length === 0) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const sortedChanges = sortChanges(ctx, filteredChanges);
|
|
28
|
+
const hasRoutineChanges = sortedChanges.some((change) => change.objectType === "procedure" || change.objectType === "aggregate");
|
|
29
|
+
const sessionConfig = hasRoutineChanges
|
|
30
|
+
? ["SET check_function_bodies = false"]
|
|
31
|
+
: [];
|
|
32
|
+
// Build migration script
|
|
33
|
+
const scriptParts = [];
|
|
34
|
+
scriptParts.push(...sessionConfig);
|
|
35
|
+
// Serialize changes using integration serialize hook (applies masking) or fallback
|
|
36
|
+
const changeStatements = sortedChanges.map((change) => {
|
|
37
|
+
return integration.serialize?.(change) ?? change.serialize();
|
|
38
|
+
});
|
|
39
|
+
scriptParts.push(...changeStatements);
|
|
40
|
+
const migrationScript = `${scriptParts.join(";\n\n")};`;
|
|
41
|
+
return {
|
|
42
|
+
migrationScript,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DefaultPrivilegeState } from "../base.default-privileges.ts";
|
|
2
|
+
import type { Role } from "../role/role.model.ts";
|
|
3
|
+
import type { Aggregate } from "./aggregate.model.ts";
|
|
4
|
+
import type { AggregateChange } from "./changes/aggregate.types.ts";
|
|
5
|
+
export declare function diffAggregates(ctx: {
|
|
6
|
+
version: number;
|
|
7
|
+
currentUser: string;
|
|
8
|
+
defaultPrivilegeState: DefaultPrivilegeState;
|
|
9
|
+
mainRoles: Record<string, Role>;
|
|
10
|
+
}, main: Record<string, Aggregate>, branch: Record<string, Aggregate>): AggregateChange[];
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { diffObjects } from "../base.diff.js";
|
|
2
|
+
import { diffPrivileges, filterPublicBuiltInDefaults, groupPrivilegesByGrantable, } from "../base.privilege-diff.js";
|
|
3
|
+
import { deepEqual, hasNonAlterableChanges } from "../utils.js";
|
|
4
|
+
import { AlterAggregateChangeOwner } from "./changes/aggregate.alter.js";
|
|
5
|
+
import { CreateCommentOnAggregate, DropCommentOnAggregate, } from "./changes/aggregate.comment.js";
|
|
6
|
+
import { CreateAggregate } from "./changes/aggregate.create.js";
|
|
7
|
+
import { DropAggregate } from "./changes/aggregate.drop.js";
|
|
8
|
+
import { GrantAggregatePrivileges, RevokeAggregatePrivileges, RevokeGrantOptionAggregatePrivileges, } from "./changes/aggregate.privilege.js";
|
|
9
|
+
export function diffAggregates(ctx, main, branch) {
|
|
10
|
+
const { created, dropped, altered } = diffObjects(main, branch);
|
|
11
|
+
const changes = [];
|
|
12
|
+
for (const aggregateId of created) {
|
|
13
|
+
const aggregate = branch[aggregateId];
|
|
14
|
+
changes.push(new CreateAggregate({ aggregate }));
|
|
15
|
+
// OWNER: If the aggregate should be owned by someone other than the current user,
|
|
16
|
+
// emit ALTER AGGREGATE ... OWNER TO after creation
|
|
17
|
+
if (aggregate.owner !== ctx.currentUser) {
|
|
18
|
+
changes.push(new AlterAggregateChangeOwner({
|
|
19
|
+
aggregate,
|
|
20
|
+
owner: aggregate.owner,
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
if (aggregate.comment !== null) {
|
|
24
|
+
changes.push(new CreateCommentOnAggregate({ aggregate }));
|
|
25
|
+
}
|
|
26
|
+
// PRIVILEGES: For created objects, compare against default privileges state
|
|
27
|
+
// The migration script will run ALTER DEFAULT PRIVILEGES before CREATE (via constraint spec),
|
|
28
|
+
// so objects are created with the default privileges state in effect.
|
|
29
|
+
// We compare default privileges against desired privileges to generate REVOKE/GRANT statements
|
|
30
|
+
// needed to reach the final desired state.
|
|
31
|
+
const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "aggregate", aggregate.schema ?? "");
|
|
32
|
+
// Filter out PUBLIC's built-in default EXECUTE privilege (PostgreSQL grants it automatically)
|
|
33
|
+
// Reference: https://www.postgresql.org/docs/17/ddl-priv.html Table 5.2
|
|
34
|
+
// This prevents generating unnecessary "GRANT EXECUTE TO PUBLIC" statements
|
|
35
|
+
const desiredPrivileges = filterPublicBuiltInDefaults("aggregate", aggregate.privileges);
|
|
36
|
+
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
37
|
+
// and shouldn't be compared. Use the aggregate owner as the reference.
|
|
38
|
+
const privilegeResults = diffPrivileges(effectiveDefaults, desiredPrivileges, aggregate.owner, ctx.mainRoles);
|
|
39
|
+
// Generate grant changes
|
|
40
|
+
for (const [grantee, result] of privilegeResults) {
|
|
41
|
+
if (result.grants.length > 0) {
|
|
42
|
+
const grantGroups = groupPrivilegesByGrantable(result.grants);
|
|
43
|
+
for (const [, list] of grantGroups) {
|
|
44
|
+
changes.push(new GrantAggregatePrivileges({
|
|
45
|
+
aggregate,
|
|
46
|
+
grantee,
|
|
47
|
+
privileges: list,
|
|
48
|
+
version: ctx.version,
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Generate revoke changes
|
|
53
|
+
if (result.revokes.length > 0) {
|
|
54
|
+
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
55
|
+
for (const [, list] of revokeGroups) {
|
|
56
|
+
changes.push(new RevokeAggregatePrivileges({
|
|
57
|
+
aggregate,
|
|
58
|
+
grantee,
|
|
59
|
+
privileges: list,
|
|
60
|
+
version: ctx.version,
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Generate revoke grant option changes
|
|
65
|
+
if (result.revokeGrantOption.length > 0) {
|
|
66
|
+
changes.push(new RevokeGrantOptionAggregatePrivileges({
|
|
67
|
+
aggregate,
|
|
68
|
+
grantee,
|
|
69
|
+
privilegeNames: result.revokeGrantOption,
|
|
70
|
+
version: ctx.version,
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
for (const aggregateId of dropped) {
|
|
76
|
+
changes.push(new DropAggregate({ aggregate: main[aggregateId] }));
|
|
77
|
+
}
|
|
78
|
+
for (const aggregateId of altered) {
|
|
79
|
+
const mainAggregate = main[aggregateId];
|
|
80
|
+
const branchAggregate = branch[aggregateId];
|
|
81
|
+
const NON_ALTERABLE_FIELDS = [
|
|
82
|
+
"kind",
|
|
83
|
+
"aggkind",
|
|
84
|
+
"num_direct_args",
|
|
85
|
+
"return_type",
|
|
86
|
+
"return_type_schema",
|
|
87
|
+
"parallel_safety",
|
|
88
|
+
"is_strict",
|
|
89
|
+
"transition_function",
|
|
90
|
+
"state_data_type",
|
|
91
|
+
"state_data_type_schema",
|
|
92
|
+
"state_data_space",
|
|
93
|
+
"final_function",
|
|
94
|
+
"final_function_extra_args",
|
|
95
|
+
"final_function_modify",
|
|
96
|
+
"combine_function",
|
|
97
|
+
"serial_function",
|
|
98
|
+
"deserial_function",
|
|
99
|
+
"initial_condition",
|
|
100
|
+
"moving_transition_function",
|
|
101
|
+
"moving_inverse_function",
|
|
102
|
+
"moving_state_data_type",
|
|
103
|
+
"moving_state_data_type_schema",
|
|
104
|
+
"moving_state_data_space",
|
|
105
|
+
"moving_final_function",
|
|
106
|
+
"moving_final_function_extra_args",
|
|
107
|
+
"moving_final_function_modify",
|
|
108
|
+
"moving_initial_condition",
|
|
109
|
+
"sort_operator",
|
|
110
|
+
"argument_count",
|
|
111
|
+
"argument_default_count",
|
|
112
|
+
"argument_names",
|
|
113
|
+
"argument_types",
|
|
114
|
+
"all_argument_types",
|
|
115
|
+
"argument_modes",
|
|
116
|
+
"argument_defaults",
|
|
117
|
+
"identityArguments",
|
|
118
|
+
];
|
|
119
|
+
const nonAlterableChanged = hasNonAlterableChanges(mainAggregate, branchAggregate, NON_ALTERABLE_FIELDS, {
|
|
120
|
+
argument_names: deepEqual,
|
|
121
|
+
argument_types: deepEqual,
|
|
122
|
+
all_argument_types: deepEqual,
|
|
123
|
+
argument_modes: deepEqual,
|
|
124
|
+
});
|
|
125
|
+
if (nonAlterableChanged) {
|
|
126
|
+
changes.push(new CreateAggregate({ aggregate: branchAggregate, orReplace: true }));
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
if (mainAggregate.owner !== branchAggregate.owner) {
|
|
130
|
+
changes.push(new AlterAggregateChangeOwner({
|
|
131
|
+
aggregate: mainAggregate,
|
|
132
|
+
owner: branchAggregate.owner,
|
|
133
|
+
}));
|
|
134
|
+
}
|
|
135
|
+
if (mainAggregate.comment !== branchAggregate.comment) {
|
|
136
|
+
if (branchAggregate.comment === null) {
|
|
137
|
+
changes.push(new DropCommentOnAggregate({ aggregate: mainAggregate }));
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
changes.push(new CreateCommentOnAggregate({ aggregate: branchAggregate }));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// PRIVILEGES
|
|
144
|
+
// Filter out PUBLIC's built-in default EXECUTE privilege from main catalog
|
|
145
|
+
// (PostgreSQL grants it automatically, so we shouldn't compare it)
|
|
146
|
+
const mainPrivilegesFiltered = filterPublicBuiltInDefaults("aggregate", mainAggregate.privileges);
|
|
147
|
+
// Filter out PUBLIC's built-in default EXECUTE privilege from branch catalog
|
|
148
|
+
const branchPrivilegesFiltered = filterPublicBuiltInDefaults("aggregate", branchAggregate.privileges);
|
|
149
|
+
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
150
|
+
// and shouldn't be compared. Use branch owner as the reference.
|
|
151
|
+
const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchAggregate.owner, ctx.mainRoles);
|
|
152
|
+
for (const [grantee, result] of privilegeResults) {
|
|
153
|
+
if (result.grants.length > 0) {
|
|
154
|
+
const grantGroups = groupPrivilegesByGrantable(result.grants);
|
|
155
|
+
for (const [, list] of grantGroups) {
|
|
156
|
+
changes.push(new GrantAggregatePrivileges({
|
|
157
|
+
aggregate: branchAggregate,
|
|
158
|
+
grantee,
|
|
159
|
+
privileges: list,
|
|
160
|
+
version: ctx.version,
|
|
161
|
+
}));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (result.revokes.length > 0) {
|
|
165
|
+
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
166
|
+
for (const [, list] of revokeGroups) {
|
|
167
|
+
changes.push(new RevokeAggregatePrivileges({
|
|
168
|
+
aggregate: mainAggregate,
|
|
169
|
+
grantee,
|
|
170
|
+
privileges: list,
|
|
171
|
+
version: ctx.version,
|
|
172
|
+
}));
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (result.revokeGrantOption.length > 0) {
|
|
176
|
+
changes.push(new RevokeGrantOptionAggregatePrivileges({
|
|
177
|
+
aggregate: mainAggregate,
|
|
178
|
+
grantee,
|
|
179
|
+
privilegeNames: result.revokeGrantOption,
|
|
180
|
+
version: ctx.version,
|
|
181
|
+
}));
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return changes;
|
|
186
|
+
}
|