@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,172 @@
|
|
|
1
|
+
import { diffObjects } from "../../base.diff.js";
|
|
2
|
+
import { diffPrivileges, filterPublicBuiltInDefaults, groupPrivilegesByGrantable, } from "../../base.privilege-diff.js";
|
|
3
|
+
import { hasNonAlterableChanges } from "../../utils.js";
|
|
4
|
+
import { AlterRangeChangeOwner } from "./changes/range.alter.js";
|
|
5
|
+
import { CreateCommentOnRange, DropCommentOnRange, } from "./changes/range.comment.js";
|
|
6
|
+
import { CreateRange } from "./changes/range.create.js";
|
|
7
|
+
import { DropRange } from "./changes/range.drop.js";
|
|
8
|
+
import { GrantRangePrivileges, RevokeGrantOptionRangePrivileges, RevokeRangePrivileges, } from "./changes/range.privilege.js";
|
|
9
|
+
/**
|
|
10
|
+
* Diff two sets of range types from main and branch catalogs.
|
|
11
|
+
*
|
|
12
|
+
* @param ctx - Context containing version, currentUser, and defaultPrivilegeState
|
|
13
|
+
* @param main - The ranges in the main catalog.
|
|
14
|
+
* @param branch - The ranges in the branch catalog.
|
|
15
|
+
* @returns A list of changes to apply to main to make it match branch.
|
|
16
|
+
*/
|
|
17
|
+
export function diffRanges(ctx, main, branch) {
|
|
18
|
+
const { created, dropped, altered } = diffObjects(main, branch);
|
|
19
|
+
const changes = [];
|
|
20
|
+
for (const id of created) {
|
|
21
|
+
const createdRange = branch[id];
|
|
22
|
+
changes.push(new CreateRange({ range: createdRange }));
|
|
23
|
+
// OWNER: If the range type should be owned by someone other than the current user,
|
|
24
|
+
// emit ALTER TYPE ... OWNER TO after creation
|
|
25
|
+
if (createdRange.owner !== ctx.currentUser) {
|
|
26
|
+
changes.push(new AlterRangeChangeOwner({
|
|
27
|
+
range: createdRange,
|
|
28
|
+
owner: createdRange.owner,
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
if (createdRange.comment !== null) {
|
|
32
|
+
changes.push(new CreateCommentOnRange({ range: createdRange }));
|
|
33
|
+
}
|
|
34
|
+
// PRIVILEGES: For created objects, compare against default privileges state
|
|
35
|
+
// The migration script will run ALTER DEFAULT PRIVILEGES before CREATE (via constraint spec),
|
|
36
|
+
// so objects are created with the default privileges state in effect.
|
|
37
|
+
// We compare default privileges against desired privileges to generate REVOKE/GRANT statements
|
|
38
|
+
// needed to reach the final desired state.
|
|
39
|
+
const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "range", createdRange.schema ?? "");
|
|
40
|
+
// Filter out PUBLIC's built-in default USAGE privilege (PostgreSQL grants it automatically)
|
|
41
|
+
// Reference: https://www.postgresql.org/docs/17/ddl-priv.html Table 5.2
|
|
42
|
+
// This prevents generating unnecessary "GRANT USAGE TO PUBLIC" statements
|
|
43
|
+
const desiredPrivileges = filterPublicBuiltInDefaults("range", createdRange.privileges);
|
|
44
|
+
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
45
|
+
// and shouldn't be compared. Use the range owner as the reference.
|
|
46
|
+
const privilegeResults = diffPrivileges(effectiveDefaults, desiredPrivileges, createdRange.owner);
|
|
47
|
+
// Generate grant changes
|
|
48
|
+
for (const [grantee, result] of privilegeResults) {
|
|
49
|
+
if (result.grants.length > 0) {
|
|
50
|
+
const grantGroups = groupPrivilegesByGrantable(result.grants);
|
|
51
|
+
for (const [grantable, list] of grantGroups) {
|
|
52
|
+
void grantable;
|
|
53
|
+
changes.push(new GrantRangePrivileges({
|
|
54
|
+
range: createdRange,
|
|
55
|
+
grantee,
|
|
56
|
+
privileges: list,
|
|
57
|
+
version: ctx.version,
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Generate revoke changes
|
|
62
|
+
if (result.revokes.length > 0) {
|
|
63
|
+
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
64
|
+
for (const [grantable, list] of revokeGroups) {
|
|
65
|
+
void grantable;
|
|
66
|
+
changes.push(new RevokeRangePrivileges({
|
|
67
|
+
range: createdRange,
|
|
68
|
+
grantee,
|
|
69
|
+
privileges: list,
|
|
70
|
+
version: ctx.version,
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Generate revoke grant option changes
|
|
75
|
+
if (result.revokeGrantOption.length > 0) {
|
|
76
|
+
changes.push(new RevokeGrantOptionRangePrivileges({
|
|
77
|
+
range: createdRange,
|
|
78
|
+
grantee,
|
|
79
|
+
privilegeNames: result.revokeGrantOption,
|
|
80
|
+
version: ctx.version,
|
|
81
|
+
}));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
for (const id of dropped) {
|
|
86
|
+
changes.push(new DropRange({ range: main[id] }));
|
|
87
|
+
}
|
|
88
|
+
for (const id of altered) {
|
|
89
|
+
const mainRange = main[id];
|
|
90
|
+
const branchRange = branch[id];
|
|
91
|
+
const NON_ALTERABLE_FIELDS = [
|
|
92
|
+
// Changes to these require DROP + CREATE
|
|
93
|
+
"subtype_schema",
|
|
94
|
+
"subtype_str",
|
|
95
|
+
"collation",
|
|
96
|
+
"canonical_function_schema",
|
|
97
|
+
"canonical_function_name",
|
|
98
|
+
"subtype_diff_schema",
|
|
99
|
+
"subtype_diff_name",
|
|
100
|
+
"subtype_opclass_schema",
|
|
101
|
+
"subtype_opclass_name",
|
|
102
|
+
];
|
|
103
|
+
const nonAlterablePropsChanged = hasNonAlterableChanges(mainRange, branchRange, NON_ALTERABLE_FIELDS);
|
|
104
|
+
if (nonAlterablePropsChanged) {
|
|
105
|
+
changes.push(new DropRange({ range: mainRange }), new CreateRange({ range: branchRange }));
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
if (mainRange.owner !== branchRange.owner) {
|
|
109
|
+
changes.push(new AlterRangeChangeOwner({
|
|
110
|
+
range: mainRange,
|
|
111
|
+
owner: branchRange.owner,
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
// COMMENT
|
|
115
|
+
if (mainRange.comment !== branchRange.comment) {
|
|
116
|
+
if (branchRange.comment === null) {
|
|
117
|
+
changes.push(new DropCommentOnRange({ range: mainRange }));
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
changes.push(new CreateCommentOnRange({ range: branchRange }));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// PRIVILEGES
|
|
124
|
+
// Filter out PUBLIC's built-in default USAGE privilege from main catalog
|
|
125
|
+
// (PostgreSQL grants it automatically, so we shouldn't compare it)
|
|
126
|
+
const mainPrivilegesFiltered = filterPublicBuiltInDefaults("range", mainRange.privileges);
|
|
127
|
+
// Filter out PUBLIC's built-in default USAGE privilege from branch catalog
|
|
128
|
+
const branchPrivilegesFiltered = filterPublicBuiltInDefaults("range", branchRange.privileges);
|
|
129
|
+
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
130
|
+
// and shouldn't be compared. Use branch owner as the reference.
|
|
131
|
+
const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchRange.owner, ctx.mainRoles);
|
|
132
|
+
for (const [grantee, result] of privilegeResults) {
|
|
133
|
+
// Generate grant changes
|
|
134
|
+
if (result.grants.length > 0) {
|
|
135
|
+
const grantGroups = groupPrivilegesByGrantable(result.grants);
|
|
136
|
+
for (const [grantable, list] of grantGroups) {
|
|
137
|
+
void grantable;
|
|
138
|
+
changes.push(new GrantRangePrivileges({
|
|
139
|
+
range: branchRange,
|
|
140
|
+
grantee,
|
|
141
|
+
privileges: list,
|
|
142
|
+
version: ctx.version,
|
|
143
|
+
}));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Generate revoke changes
|
|
147
|
+
if (result.revokes.length > 0) {
|
|
148
|
+
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
149
|
+
for (const [grantable, list] of revokeGroups) {
|
|
150
|
+
void grantable;
|
|
151
|
+
changes.push(new RevokeRangePrivileges({
|
|
152
|
+
range: mainRange,
|
|
153
|
+
grantee,
|
|
154
|
+
privileges: list,
|
|
155
|
+
version: ctx.version,
|
|
156
|
+
}));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Generate revoke grant option changes
|
|
160
|
+
if (result.revokeGrantOption.length > 0) {
|
|
161
|
+
changes.push(new RevokeGrantOptionRangePrivileges({
|
|
162
|
+
range: mainRange,
|
|
163
|
+
grantee,
|
|
164
|
+
privilegeNames: result.revokeGrantOption,
|
|
165
|
+
version: ctx.version,
|
|
166
|
+
}));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return changes;
|
|
172
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { Sql } from "postgres";
|
|
2
|
+
import z from "zod";
|
|
3
|
+
import { BasePgModel } from "../../base.model.ts";
|
|
4
|
+
import { type PrivilegeProps } from "../../base.privilege-diff.ts";
|
|
5
|
+
declare const rangePropsSchema: z.ZodObject<{
|
|
6
|
+
schema: z.ZodString;
|
|
7
|
+
name: z.ZodString;
|
|
8
|
+
owner: z.ZodString;
|
|
9
|
+
comment: z.ZodNullable<z.ZodString>;
|
|
10
|
+
subtype_schema: z.ZodString;
|
|
11
|
+
subtype_str: z.ZodString;
|
|
12
|
+
collation: z.ZodNullable<z.ZodString>;
|
|
13
|
+
canonical_function_schema: z.ZodNullable<z.ZodString>;
|
|
14
|
+
canonical_function_name: z.ZodNullable<z.ZodString>;
|
|
15
|
+
subtype_diff_schema: z.ZodNullable<z.ZodString>;
|
|
16
|
+
subtype_diff_name: z.ZodNullable<z.ZodString>;
|
|
17
|
+
subtype_opclass_schema: z.ZodNullable<z.ZodString>;
|
|
18
|
+
subtype_opclass_name: z.ZodNullable<z.ZodString>;
|
|
19
|
+
privileges: z.ZodArray<z.ZodObject<{
|
|
20
|
+
grantee: z.ZodString;
|
|
21
|
+
privilege: z.ZodString;
|
|
22
|
+
grantable: z.ZodBoolean;
|
|
23
|
+
columns: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
|
|
24
|
+
}, z.z.core.$strip>>;
|
|
25
|
+
}, z.z.core.$strip>;
|
|
26
|
+
type RangePrivilegeProps = PrivilegeProps;
|
|
27
|
+
export type RangeProps = z.infer<typeof rangePropsSchema>;
|
|
28
|
+
export declare class Range extends BasePgModel {
|
|
29
|
+
readonly schema: RangeProps["schema"];
|
|
30
|
+
readonly name: RangeProps["name"];
|
|
31
|
+
readonly owner: RangeProps["owner"];
|
|
32
|
+
readonly comment: RangeProps["comment"];
|
|
33
|
+
readonly subtype_schema: RangeProps["subtype_schema"];
|
|
34
|
+
readonly subtype_str: RangeProps["subtype_str"];
|
|
35
|
+
readonly collation: RangeProps["collation"];
|
|
36
|
+
readonly canonical_function_schema: RangeProps["canonical_function_schema"];
|
|
37
|
+
readonly canonical_function_name: RangeProps["canonical_function_name"];
|
|
38
|
+
readonly subtype_diff_schema: RangeProps["subtype_diff_schema"];
|
|
39
|
+
readonly subtype_diff_name: RangeProps["subtype_diff_name"];
|
|
40
|
+
readonly subtype_opclass_schema: RangeProps["subtype_opclass_schema"];
|
|
41
|
+
readonly subtype_opclass_name: RangeProps["subtype_opclass_name"];
|
|
42
|
+
readonly privileges: RangePrivilegeProps[];
|
|
43
|
+
constructor(props: RangeProps);
|
|
44
|
+
get stableId(): `type:${string}`;
|
|
45
|
+
get identityFields(): {
|
|
46
|
+
schema: string;
|
|
47
|
+
name: string;
|
|
48
|
+
};
|
|
49
|
+
get dataFields(): {
|
|
50
|
+
owner: string;
|
|
51
|
+
subtype_schema: string;
|
|
52
|
+
subtype_str: string;
|
|
53
|
+
collation: string | null;
|
|
54
|
+
canonical_function_schema: string | null;
|
|
55
|
+
canonical_function_name: string | null;
|
|
56
|
+
subtype_diff_schema: string | null;
|
|
57
|
+
subtype_diff_name: string | null;
|
|
58
|
+
subtype_opclass_schema: string | null;
|
|
59
|
+
subtype_opclass_name: string | null;
|
|
60
|
+
comment: string | null;
|
|
61
|
+
privileges: {
|
|
62
|
+
grantee: string;
|
|
63
|
+
privilege: string;
|
|
64
|
+
grantable: boolean;
|
|
65
|
+
columns?: string[] | null | undefined;
|
|
66
|
+
}[];
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Extract all range types from the database.
|
|
71
|
+
*
|
|
72
|
+
* We intentionally capture only non-default options for CREATE TYPE AS RANGE:
|
|
73
|
+
* - SUBTYPE is required and always present
|
|
74
|
+
* - SUBTYPE_OPCLASS is included only when it differs from the default btree opclass
|
|
75
|
+
* - COLLATION is included only when it differs from the subtype's typcollation
|
|
76
|
+
* - CANONICAL and SUBTYPE_DIFF are included only when set
|
|
77
|
+
* - MULTIRANGE_TYPE_NAME is not included (we currently do not attempt to infer
|
|
78
|
+
* whether it differs from the default auto-generated name)
|
|
79
|
+
*/
|
|
80
|
+
export declare function extractRanges(sql: Sql): Promise<Range[]>;
|
|
81
|
+
export {};
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import z from "zod";
|
|
2
|
+
import { BasePgModel } from "../../base.model.js";
|
|
3
|
+
import { privilegePropsSchema, } from "../../base.privilege-diff.js";
|
|
4
|
+
const rangePropsSchema = z.object({
|
|
5
|
+
schema: z.string(),
|
|
6
|
+
name: z.string(),
|
|
7
|
+
owner: z.string(),
|
|
8
|
+
comment: z.string().nullable(),
|
|
9
|
+
// Subtype information
|
|
10
|
+
subtype_schema: z.string(),
|
|
11
|
+
subtype_str: z.string(),
|
|
12
|
+
// Optional, only present when non-default relative to subtype
|
|
13
|
+
collation: z.string().nullable(),
|
|
14
|
+
// Canonical and diff functions when present (non-default)
|
|
15
|
+
canonical_function_schema: z.string().nullable(),
|
|
16
|
+
canonical_function_name: z.string().nullable(),
|
|
17
|
+
subtype_diff_schema: z.string().nullable(),
|
|
18
|
+
subtype_diff_name: z.string().nullable(),
|
|
19
|
+
// Optional: print only when non-default (see extractor logic)
|
|
20
|
+
subtype_opclass_schema: z.string().nullable(),
|
|
21
|
+
subtype_opclass_name: z.string().nullable(),
|
|
22
|
+
privileges: z.array(privilegePropsSchema),
|
|
23
|
+
});
|
|
24
|
+
export class Range extends BasePgModel {
|
|
25
|
+
schema;
|
|
26
|
+
name;
|
|
27
|
+
owner;
|
|
28
|
+
comment;
|
|
29
|
+
subtype_schema;
|
|
30
|
+
subtype_str;
|
|
31
|
+
collation;
|
|
32
|
+
canonical_function_schema;
|
|
33
|
+
canonical_function_name;
|
|
34
|
+
subtype_diff_schema;
|
|
35
|
+
subtype_diff_name;
|
|
36
|
+
subtype_opclass_schema;
|
|
37
|
+
subtype_opclass_name;
|
|
38
|
+
privileges;
|
|
39
|
+
constructor(props) {
|
|
40
|
+
super();
|
|
41
|
+
// Identity fields
|
|
42
|
+
this.schema = props.schema;
|
|
43
|
+
this.name = props.name;
|
|
44
|
+
// Data fields
|
|
45
|
+
this.owner = props.owner;
|
|
46
|
+
this.comment = props.comment;
|
|
47
|
+
this.subtype_schema = props.subtype_schema;
|
|
48
|
+
this.subtype_str = props.subtype_str;
|
|
49
|
+
this.collation = props.collation;
|
|
50
|
+
this.canonical_function_schema = props.canonical_function_schema;
|
|
51
|
+
this.canonical_function_name = props.canonical_function_name;
|
|
52
|
+
this.subtype_diff_schema = props.subtype_diff_schema;
|
|
53
|
+
this.subtype_diff_name = props.subtype_diff_name;
|
|
54
|
+
this.subtype_opclass_schema = props.subtype_opclass_schema;
|
|
55
|
+
this.subtype_opclass_name = props.subtype_opclass_name;
|
|
56
|
+
this.privileges = props.privileges;
|
|
57
|
+
}
|
|
58
|
+
get stableId() {
|
|
59
|
+
return `type:${this.schema}.${this.name}`;
|
|
60
|
+
}
|
|
61
|
+
get identityFields() {
|
|
62
|
+
return {
|
|
63
|
+
schema: this.schema,
|
|
64
|
+
name: this.name,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
get dataFields() {
|
|
68
|
+
return {
|
|
69
|
+
owner: this.owner,
|
|
70
|
+
subtype_schema: this.subtype_schema,
|
|
71
|
+
subtype_str: this.subtype_str,
|
|
72
|
+
collation: this.collation,
|
|
73
|
+
canonical_function_schema: this.canonical_function_schema,
|
|
74
|
+
canonical_function_name: this.canonical_function_name,
|
|
75
|
+
subtype_diff_schema: this.subtype_diff_schema,
|
|
76
|
+
subtype_diff_name: this.subtype_diff_name,
|
|
77
|
+
subtype_opclass_schema: this.subtype_opclass_schema,
|
|
78
|
+
subtype_opclass_name: this.subtype_opclass_name,
|
|
79
|
+
comment: this.comment,
|
|
80
|
+
privileges: this.privileges,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Extract all range types from the database.
|
|
86
|
+
*
|
|
87
|
+
* We intentionally capture only non-default options for CREATE TYPE AS RANGE:
|
|
88
|
+
* - SUBTYPE is required and always present
|
|
89
|
+
* - SUBTYPE_OPCLASS is included only when it differs from the default btree opclass
|
|
90
|
+
* - COLLATION is included only when it differs from the subtype's typcollation
|
|
91
|
+
* - CANONICAL and SUBTYPE_DIFF are included only when set
|
|
92
|
+
* - MULTIRANGE_TYPE_NAME is not included (we currently do not attempt to infer
|
|
93
|
+
* whether it differs from the default auto-generated name)
|
|
94
|
+
*/
|
|
95
|
+
export async function extractRanges(sql) {
|
|
96
|
+
return sql.begin(async (sql) => {
|
|
97
|
+
await sql `set search_path = ''`;
|
|
98
|
+
const rows = await sql `
|
|
99
|
+
with extension_oids as (
|
|
100
|
+
select objid from pg_depend d
|
|
101
|
+
where d.refclassid = 'pg_extension'::regclass and d.classid = 'pg_type'::regclass
|
|
102
|
+
), default_btree_opclass as (
|
|
103
|
+
-- For each input type, find its default btree operator class
|
|
104
|
+
select oc2.opcintype as type_oid, oc2.oid as opclass_oid
|
|
105
|
+
from pg_opclass oc2
|
|
106
|
+
join pg_am am on am.oid = oc2.opcmethod and am.amname = 'btree'
|
|
107
|
+
where oc2.opcdefault
|
|
108
|
+
)
|
|
109
|
+
select
|
|
110
|
+
-- range type identity
|
|
111
|
+
t.typnamespace::regnamespace::text as schema,
|
|
112
|
+
quote_ident(t.typname) as name,
|
|
113
|
+
t.typowner::regrole::text as owner,
|
|
114
|
+
obj_description(t.oid, 'pg_type') as comment,
|
|
115
|
+
|
|
116
|
+
-- subtype info
|
|
117
|
+
subt.typnamespace::regnamespace::text as subtype_schema,
|
|
118
|
+
format_type(r.rngsubtype, 0) as subtype_str,
|
|
119
|
+
|
|
120
|
+
-- include collation only if not default
|
|
121
|
+
case when r.rngcollation is not null and r.rngcollation <> 0 and r.rngcollation <> subt.typcollation then quote_ident(c.collname) else null end as collation,
|
|
122
|
+
|
|
123
|
+
-- include canonical/subtype_diff when set
|
|
124
|
+
case when r.rngcanonical <> 0 then pn_subcanon.nspname::regnamespace::text else null end as canonical_function_schema,
|
|
125
|
+
case when r.rngcanonical <> 0 then quote_ident(p_subcanon.proname) else null end as canonical_function_name,
|
|
126
|
+
case when r.rngsubdiff <> 0 then pn_subdiff.nspname::regnamespace::text else null end as subtype_diff_schema,
|
|
127
|
+
case when r.rngsubdiff <> 0 then quote_ident(p_subdiff.proname) else null end as subtype_diff_name,
|
|
128
|
+
|
|
129
|
+
-- include opclass only when not default for btree
|
|
130
|
+
case when r.rngsubopc is not null and r.rngsubopc <> 0 and r.rngsubopc <> dbo.opclass_oid then opc.opcnamespace::regnamespace::text else null end as subtype_opclass_schema,
|
|
131
|
+
case when r.rngsubopc is not null and r.rngsubopc <> 0 and r.rngsubopc <> dbo.opclass_oid then quote_ident(opc.opcname) else null end as subtype_opclass_name,
|
|
132
|
+
|
|
133
|
+
-- privileges
|
|
134
|
+
coalesce(
|
|
135
|
+
(
|
|
136
|
+
select json_agg(
|
|
137
|
+
json_build_object(
|
|
138
|
+
'grantee', case when x.grantee = 0 then 'PUBLIC' else x.grantee::regrole::text end,
|
|
139
|
+
'privilege', x.privilege_type,
|
|
140
|
+
'grantable', x.is_grantable
|
|
141
|
+
)
|
|
142
|
+
order by x.grantee, x.privilege_type
|
|
143
|
+
)
|
|
144
|
+
from lateral aclexplode(t.typacl) as x(grantor, grantee, privilege_type, is_grantable)
|
|
145
|
+
), '[]'
|
|
146
|
+
) as privileges
|
|
147
|
+
from pg_catalog.pg_range r
|
|
148
|
+
join pg_catalog.pg_type t on t.oid = r.rngtypid
|
|
149
|
+
join pg_catalog.pg_type subt on subt.oid = r.rngsubtype
|
|
150
|
+
left join default_btree_opclass dbo on dbo.type_oid = r.rngsubtype
|
|
151
|
+
left join pg_catalog.pg_opclass opc on opc.oid = r.rngsubopc
|
|
152
|
+
left join pg_catalog.pg_collation c on c.oid = r.rngcollation
|
|
153
|
+
left join pg_catalog.pg_proc p_subcanon on p_subcanon.oid = r.rngcanonical
|
|
154
|
+
left join pg_catalog.pg_namespace pn_subcanon on pn_subcanon.oid = p_subcanon.pronamespace
|
|
155
|
+
left join pg_catalog.pg_proc p_subdiff on p_subdiff.oid = r.rngsubdiff
|
|
156
|
+
left join pg_catalog.pg_namespace pn_subdiff on pn_subdiff.oid = p_subdiff.pronamespace
|
|
157
|
+
left outer join extension_oids e on t.oid = e.objid
|
|
158
|
+
where not t.typnamespace::regnamespace::text like any(array['pg\_%', 'information\_schema'])
|
|
159
|
+
and e.objid is null
|
|
160
|
+
order by 1, 2;
|
|
161
|
+
`;
|
|
162
|
+
const validated = rows.map((row) => rangePropsSchema.parse(row));
|
|
163
|
+
return validated.map((row) => new Range(row));
|
|
164
|
+
});
|
|
165
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CompositeTypeChange } from "./composite-type/changes/composite-type.types.ts";
|
|
2
|
+
import type { EnumChange } from "./enum/changes/enum.types.ts";
|
|
3
|
+
import type { RangeChange } from "./range/changes/range.types.ts";
|
|
4
|
+
export type TypeChange = CompositeTypeChange | EnumChange | RangeChange;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
type Comparator<T> = (a: T, b: T) => boolean;
|
|
2
|
+
/**
|
|
3
|
+
* JSON.stringify replacement that safely serializes BigInt values by converting
|
|
4
|
+
* them to strings. This ensures stable serialization for deep equality checks
|
|
5
|
+
* without throwing on BigInt instances.
|
|
6
|
+
*/
|
|
7
|
+
export declare function stringifyWithBigInt(value: unknown, space?: number): string;
|
|
8
|
+
export declare function hasNonAlterableChanges<T, K extends keyof T>(main: T, branch: T, keys: ReadonlyArray<K>, comparators?: Partial<Record<K, Comparator<unknown>>>): boolean;
|
|
9
|
+
export declare const deepEqual: Comparator<unknown>;
|
|
10
|
+
export declare const stableId: {
|
|
11
|
+
schema(schema: string): `schema:${string}`;
|
|
12
|
+
table(schema: string, table: string): `table:${string}.${string}`;
|
|
13
|
+
view(schema: string, view: string): `view:${string}.${string}`;
|
|
14
|
+
materializedView(schema: string, view: string): `materializedView:${string}.${string}`;
|
|
15
|
+
acl(objectStableId: string, grantee: string): `acl:${string}::grantee:${string}`;
|
|
16
|
+
/**
|
|
17
|
+
*
|
|
18
|
+
* 'defacl:' || grantor || ':' || objtype || ':' || coalesce('schema:' || in_schema, 'global') || ':grantee:' || grantee as dependent_stable_id,
|
|
19
|
+
*/
|
|
20
|
+
defacl(grantor: string, objtype: string, schema: string | null, grantee: string): `defacl:${string}:${string}:${string}:grantee:${string}`;
|
|
21
|
+
column(schema: string, table: string, column: string): `column:${string}.${string}.${string}`;
|
|
22
|
+
constraint(schema: string, table: string, constraint: string): `constraint:${string}.${string}.${string}`;
|
|
23
|
+
comment(objectStableId: string): `comment:${string}`;
|
|
24
|
+
role(role: string): `role:${string}`;
|
|
25
|
+
type(schema: string, name: string): `type:${string}.${string}`;
|
|
26
|
+
collation(schema: string, name: string): `collation:${string}.${string}`;
|
|
27
|
+
procedure(schema: string, name: string, args?: string): `procedure:${string}.${string}(${string})`;
|
|
28
|
+
membership(role: string, member: string): `membership:${string}->${string}`;
|
|
29
|
+
foreignDataWrapper(name: string): `foreignDataWrapper:${string}`;
|
|
30
|
+
server(name: string): `server:${string}`;
|
|
31
|
+
userMapping(server: string, user: string): `userMapping:${string}:${string}`;
|
|
32
|
+
foreignTable(schema: string, name: string): `foreignTable:${string}.${string}`;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Check if a schema name represents a user-defined type (not pg_catalog or information_schema).
|
|
36
|
+
* Used to filter out system types when building dependency lists.
|
|
37
|
+
*/
|
|
38
|
+
export declare function isUserDefinedTypeSchema(schema: string | null | undefined): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Parse a procedure reference string (from regprocedure::text) to extract schema and function name.
|
|
41
|
+
* Format: "schema.function_name(argtypes)" or "function_name(argtypes)"
|
|
42
|
+
* Returns null if parsing fails or if it's a system procedure.
|
|
43
|
+
*/
|
|
44
|
+
export declare function parseProcedureReference(procRef: string | null | undefined): {
|
|
45
|
+
schema: string;
|
|
46
|
+
name: string;
|
|
47
|
+
} | null;
|
|
48
|
+
/**
|
|
49
|
+
* Parse a type string (from format_type) to extract schema and type name if it's schema-qualified.
|
|
50
|
+
* Format: "type_name" or "schema.type_name" or "schema.type_name[]"
|
|
51
|
+
* Returns null if it's not schema-qualified or if it's a system type.
|
|
52
|
+
*/
|
|
53
|
+
export declare function parseTypeString(typeStr: string | null | undefined): {
|
|
54
|
+
schema: string;
|
|
55
|
+
name: string;
|
|
56
|
+
} | null;
|
|
57
|
+
export {};
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON.stringify replacement that safely serializes BigInt values by converting
|
|
3
|
+
* them to strings. This ensures stable serialization for deep equality checks
|
|
4
|
+
* without throwing on BigInt instances.
|
|
5
|
+
*/
|
|
6
|
+
export function stringifyWithBigInt(value, space = 2) {
|
|
7
|
+
return JSON.stringify(value, (_key, v) => (typeof v === "bigint" ? v.toString() : v), space);
|
|
8
|
+
}
|
|
9
|
+
export function hasNonAlterableChanges(main, branch, keys, comparators) {
|
|
10
|
+
const mainIndexable = main;
|
|
11
|
+
const branchIndexable = branch;
|
|
12
|
+
for (const key of keys) {
|
|
13
|
+
// Prefer custom comparator when provided; fallback to strict equality
|
|
14
|
+
const equals = comparators?.[key] ??
|
|
15
|
+
((a, b) => a === b);
|
|
16
|
+
if (!equals(mainIndexable[key], branchIndexable[key]))
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
export const deepEqual = (a, b) => stringifyWithBigInt(a) === stringifyWithBigInt(b);
|
|
22
|
+
// Helpers for stableId that aren't encoded in a class, mostly for sub-entities or meta entities.
|
|
23
|
+
export const stableId = {
|
|
24
|
+
schema(schema) {
|
|
25
|
+
return `schema:${schema}`;
|
|
26
|
+
},
|
|
27
|
+
table(schema, table) {
|
|
28
|
+
return `table:${schema}.${table}`;
|
|
29
|
+
},
|
|
30
|
+
view(schema, view) {
|
|
31
|
+
return `view:${schema}.${view}`;
|
|
32
|
+
},
|
|
33
|
+
materializedView(schema, view) {
|
|
34
|
+
return `materializedView:${schema}.${view}`;
|
|
35
|
+
},
|
|
36
|
+
acl(objectStableId, grantee) {
|
|
37
|
+
return `acl:${objectStableId}::grantee:${grantee}`;
|
|
38
|
+
},
|
|
39
|
+
/**
|
|
40
|
+
*
|
|
41
|
+
* 'defacl:' || grantor || ':' || objtype || ':' || coalesce('schema:' || in_schema, 'global') || ':grantee:' || grantee as dependent_stable_id,
|
|
42
|
+
*/
|
|
43
|
+
defacl(grantor, objtype, schema, grantee) {
|
|
44
|
+
return `defacl:${grantor}:${objtype}:${schema ? `schema:${schema}` : "global"}:grantee:${grantee}`;
|
|
45
|
+
},
|
|
46
|
+
column(schema, table, column) {
|
|
47
|
+
return `column:${schema}.${table}.${column}`;
|
|
48
|
+
},
|
|
49
|
+
constraint(schema, table, constraint) {
|
|
50
|
+
return `constraint:${schema}.${table}.${constraint}`;
|
|
51
|
+
},
|
|
52
|
+
comment(objectStableId) {
|
|
53
|
+
return `comment:${objectStableId}`;
|
|
54
|
+
},
|
|
55
|
+
role(role) {
|
|
56
|
+
return `role:${role}`;
|
|
57
|
+
},
|
|
58
|
+
type(schema, name) {
|
|
59
|
+
return `type:${schema}.${name}`;
|
|
60
|
+
},
|
|
61
|
+
collation(schema, name) {
|
|
62
|
+
return `collation:${schema}.${name}`;
|
|
63
|
+
},
|
|
64
|
+
procedure(schema, name, args = "") {
|
|
65
|
+
return `procedure:${schema}.${name}(${args})`;
|
|
66
|
+
},
|
|
67
|
+
membership(role, member) {
|
|
68
|
+
return `membership:${role}->${member}`;
|
|
69
|
+
},
|
|
70
|
+
foreignDataWrapper(name) {
|
|
71
|
+
return `foreignDataWrapper:${name}`;
|
|
72
|
+
},
|
|
73
|
+
server(name) {
|
|
74
|
+
return `server:${name}`;
|
|
75
|
+
},
|
|
76
|
+
userMapping(server, user) {
|
|
77
|
+
return `userMapping:${server}:${user}`;
|
|
78
|
+
},
|
|
79
|
+
foreignTable(schema, name) {
|
|
80
|
+
return `foreignTable:${schema}.${name}`;
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Check if a schema name represents a user-defined type (not pg_catalog or information_schema).
|
|
85
|
+
* Used to filter out system types when building dependency lists.
|
|
86
|
+
*/
|
|
87
|
+
export function isUserDefinedTypeSchema(schema) {
|
|
88
|
+
return (schema != null && schema !== "pg_catalog" && schema !== "information_schema");
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Parse a procedure reference string (from regprocedure::text) to extract schema and function name.
|
|
92
|
+
* Format: "schema.function_name(argtypes)" or "function_name(argtypes)"
|
|
93
|
+
* Returns null if parsing fails or if it's a system procedure.
|
|
94
|
+
*/
|
|
95
|
+
export function parseProcedureReference(procRef) {
|
|
96
|
+
if (!procRef)
|
|
97
|
+
return null;
|
|
98
|
+
// Format is "schema.function_name(argtypes)" or "function_name(argtypes)"
|
|
99
|
+
// Extract everything before the opening parenthesis
|
|
100
|
+
const match = procRef.match(/^([^(]+)\(/);
|
|
101
|
+
if (!match)
|
|
102
|
+
return null;
|
|
103
|
+
const qualifiedName = match[1];
|
|
104
|
+
const parts = qualifiedName.split(".");
|
|
105
|
+
if (parts.length === 1) {
|
|
106
|
+
// No schema prefix - assume current schema (we can't determine it here)
|
|
107
|
+
// For now, skip these as we need schema info
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
if (parts.length === 2) {
|
|
111
|
+
const [schema, name] = parts;
|
|
112
|
+
if (isUserDefinedTypeSchema(schema)) {
|
|
113
|
+
return { schema, name };
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Parse a type string (from format_type) to extract schema and type name if it's schema-qualified.
|
|
120
|
+
* Format: "type_name" or "schema.type_name" or "schema.type_name[]"
|
|
121
|
+
* Returns null if it's not schema-qualified or if it's a system type.
|
|
122
|
+
*/
|
|
123
|
+
export function parseTypeString(typeStr) {
|
|
124
|
+
if (!typeStr)
|
|
125
|
+
return null;
|
|
126
|
+
// Remove array brackets for parsing
|
|
127
|
+
const baseType = typeStr.replace(/\[\]+$/, "");
|
|
128
|
+
// Check if it's schema-qualified (contains a dot)
|
|
129
|
+
const parts = baseType.split(".");
|
|
130
|
+
if (parts.length === 2) {
|
|
131
|
+
const [schema, name] = parts;
|
|
132
|
+
if (isUserDefinedTypeSchema(schema)) {
|
|
133
|
+
return { schema, name };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { View } from "../view.model.ts";
|
|
2
|
+
import { AlterViewChange } from "./view.base.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Alter a view.
|
|
5
|
+
*
|
|
6
|
+
* @see https://www.postgresql.org/docs/17/sql-alterview.html
|
|
7
|
+
*
|
|
8
|
+
* Synopsis
|
|
9
|
+
* ```sql
|
|
10
|
+
* ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name SET DEFAULT expression
|
|
11
|
+
* ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name DROP DEFAULT
|
|
12
|
+
* ALTER VIEW [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
|
|
13
|
+
* ALTER VIEW [ IF EXISTS ] name RENAME [ COLUMN ] column_name TO new_column_name
|
|
14
|
+
* ALTER VIEW [ IF EXISTS ] name RENAME TO new_name
|
|
15
|
+
* ALTER VIEW [ IF EXISTS ] name SET SCHEMA new_schema
|
|
16
|
+
* ALTER VIEW [ IF EXISTS ] name SET ( view_option_name [= view_option_value] [, ... ] )
|
|
17
|
+
* ALTER VIEW [ IF EXISTS ] name RESET ( view_option_name [, ... ] )
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export type AlterView = AlterViewChangeOwner | AlterViewResetOptions | AlterViewSetOptions;
|
|
21
|
+
/**
|
|
22
|
+
* ALTER VIEW ... OWNER TO ...
|
|
23
|
+
*/
|
|
24
|
+
export declare class AlterViewChangeOwner extends AlterViewChange {
|
|
25
|
+
readonly view: View;
|
|
26
|
+
readonly owner: string;
|
|
27
|
+
readonly scope: "object";
|
|
28
|
+
constructor(props: {
|
|
29
|
+
view: View;
|
|
30
|
+
owner: string;
|
|
31
|
+
});
|
|
32
|
+
get requires(): `view:${string}`[];
|
|
33
|
+
serialize(): string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* ALTER VIEW ... SET ( ... )
|
|
37
|
+
*/
|
|
38
|
+
export declare class AlterViewSetOptions extends AlterViewChange {
|
|
39
|
+
readonly view: View;
|
|
40
|
+
readonly options: string[];
|
|
41
|
+
readonly scope: "object";
|
|
42
|
+
constructor(props: {
|
|
43
|
+
view: View;
|
|
44
|
+
options: string[];
|
|
45
|
+
});
|
|
46
|
+
get requires(): `view:${string}`[];
|
|
47
|
+
serialize(): string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* ALTER VIEW ... RESET ( ... )
|
|
51
|
+
*/
|
|
52
|
+
export declare class AlterViewResetOptions extends AlterViewChange {
|
|
53
|
+
readonly view: View;
|
|
54
|
+
readonly params: string[];
|
|
55
|
+
readonly scope: "object";
|
|
56
|
+
constructor(props: {
|
|
57
|
+
view: View;
|
|
58
|
+
params: string[];
|
|
59
|
+
});
|
|
60
|
+
get requires(): `view:${string}`[];
|
|
61
|
+
serialize(): string;
|
|
62
|
+
}
|