@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,131 @@
|
|
|
1
|
+
import { formatObjectPrivilegeList, getObjectKindPrefix, } from "../../../base.privilege.js";
|
|
2
|
+
import { stableId } from "../../../utils.js";
|
|
3
|
+
import { AlterEnumChange } from "./enum.base.js";
|
|
4
|
+
/**
|
|
5
|
+
* Grant privileges on an enum type.
|
|
6
|
+
*
|
|
7
|
+
* @see https://www.postgresql.org/docs/17/sql-grant.html
|
|
8
|
+
*
|
|
9
|
+
* Synopsis
|
|
10
|
+
* ```sql
|
|
11
|
+
* GRANT { USAGE | ALL [ PRIVILEGES ] }
|
|
12
|
+
* ON TYPE type_name [, ...]
|
|
13
|
+
* TO role_specification [, ...] [ WITH GRANT OPTION ]
|
|
14
|
+
* [ GRANTED BY role_specification ]
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export class GrantEnumPrivileges extends AlterEnumChange {
|
|
18
|
+
enum;
|
|
19
|
+
grantee;
|
|
20
|
+
privileges;
|
|
21
|
+
version;
|
|
22
|
+
scope = "privilege";
|
|
23
|
+
constructor(props) {
|
|
24
|
+
super();
|
|
25
|
+
this.enum = props.enum;
|
|
26
|
+
this.grantee = props.grantee;
|
|
27
|
+
this.privileges = props.privileges;
|
|
28
|
+
this.version = props.version;
|
|
29
|
+
}
|
|
30
|
+
get creates() {
|
|
31
|
+
return [stableId.acl(this.enum.stableId, this.grantee)];
|
|
32
|
+
}
|
|
33
|
+
get requires() {
|
|
34
|
+
return [this.enum.stableId, stableId.role(this.grantee)];
|
|
35
|
+
}
|
|
36
|
+
serialize() {
|
|
37
|
+
const hasGrantable = this.privileges.some((p) => p.grantable);
|
|
38
|
+
const hasBase = this.privileges.some((p) => !p.grantable);
|
|
39
|
+
if (hasGrantable && hasBase) {
|
|
40
|
+
throw new Error("GrantEnumPrivileges expects privileges with uniform grantable flag");
|
|
41
|
+
}
|
|
42
|
+
const withGrant = hasGrantable ? " WITH GRANT OPTION" : "";
|
|
43
|
+
const kindPrefix = getObjectKindPrefix("TYPE");
|
|
44
|
+
const list = this.privileges.map((p) => p.privilege);
|
|
45
|
+
const privSql = formatObjectPrivilegeList("TYPE", list, this.version);
|
|
46
|
+
const typeName = `${this.enum.schema}.${this.enum.name}`;
|
|
47
|
+
return `GRANT ${privSql} ${kindPrefix} ${typeName} TO ${this.grantee}${withGrant}`;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Revoke privileges on an enum type.
|
|
52
|
+
*
|
|
53
|
+
* @see https://www.postgresql.org/docs/17/sql-revoke.html
|
|
54
|
+
*
|
|
55
|
+
* Synopsis
|
|
56
|
+
* ```sql
|
|
57
|
+
* REVOKE [ GRANT OPTION FOR ]
|
|
58
|
+
* { USAGE | ALL [ PRIVILEGES ] }
|
|
59
|
+
* ON TYPE type_name [, ...]
|
|
60
|
+
* FROM role_specification [, ...]
|
|
61
|
+
* [ GRANTED BY role_specification ]
|
|
62
|
+
* [ CASCADE | RESTRICT ]
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export class RevokeEnumPrivileges extends AlterEnumChange {
|
|
66
|
+
enum;
|
|
67
|
+
grantee;
|
|
68
|
+
privileges;
|
|
69
|
+
version;
|
|
70
|
+
scope = "privilege";
|
|
71
|
+
constructor(props) {
|
|
72
|
+
super();
|
|
73
|
+
this.enum = props.enum;
|
|
74
|
+
this.grantee = props.grantee;
|
|
75
|
+
this.privileges = props.privileges;
|
|
76
|
+
this.version = props.version;
|
|
77
|
+
}
|
|
78
|
+
get drops() {
|
|
79
|
+
// Return ACL ID for dependency tracking, even though this is an ALTER operation
|
|
80
|
+
// Phase assignment now uses operation type, so this won't affect phase placement
|
|
81
|
+
return [stableId.acl(this.enum.stableId, this.grantee)];
|
|
82
|
+
}
|
|
83
|
+
get requires() {
|
|
84
|
+
return [
|
|
85
|
+
stableId.acl(this.enum.stableId, this.grantee),
|
|
86
|
+
this.enum.stableId,
|
|
87
|
+
stableId.role(this.grantee),
|
|
88
|
+
];
|
|
89
|
+
}
|
|
90
|
+
serialize() {
|
|
91
|
+
const kindPrefix = getObjectKindPrefix("TYPE");
|
|
92
|
+
const list = this.privileges.map((p) => p.privilege);
|
|
93
|
+
const privSql = formatObjectPrivilegeList("TYPE", list, this.version);
|
|
94
|
+
const typeName = `${this.enum.schema}.${this.enum.name}`;
|
|
95
|
+
return `REVOKE ${privSql} ${kindPrefix} ${typeName} FROM ${this.grantee}`;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Revoke grant option for privileges on an enum type.
|
|
100
|
+
*
|
|
101
|
+
* This removes the ability to grant the privilege to others, but keeps the privilege itself.
|
|
102
|
+
*
|
|
103
|
+
* @see https://www.postgresql.org/docs/17/sql-revoke.html
|
|
104
|
+
*/
|
|
105
|
+
export class RevokeGrantOptionEnumPrivileges extends AlterEnumChange {
|
|
106
|
+
enum;
|
|
107
|
+
grantee;
|
|
108
|
+
privilegeNames;
|
|
109
|
+
version;
|
|
110
|
+
scope = "privilege";
|
|
111
|
+
constructor(props) {
|
|
112
|
+
super();
|
|
113
|
+
this.enum = props.enum;
|
|
114
|
+
this.grantee = props.grantee;
|
|
115
|
+
this.privilegeNames = [...new Set(props.privilegeNames)].sort();
|
|
116
|
+
this.version = props.version;
|
|
117
|
+
}
|
|
118
|
+
get requires() {
|
|
119
|
+
return [
|
|
120
|
+
stableId.acl(this.enum.stableId, this.grantee),
|
|
121
|
+
this.enum.stableId,
|
|
122
|
+
stableId.role(this.grantee),
|
|
123
|
+
];
|
|
124
|
+
}
|
|
125
|
+
serialize() {
|
|
126
|
+
const kindPrefix = getObjectKindPrefix("TYPE");
|
|
127
|
+
const privSql = formatObjectPrivilegeList("TYPE", this.privilegeNames, this.version);
|
|
128
|
+
const typeName = `${this.enum.schema}.${this.enum.name}`;
|
|
129
|
+
return `REVOKE GRANT OPTION FOR ${privSql} ${kindPrefix} ${typeName} FROM ${this.grantee}`;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AlterEnum } from "./enum.alter.ts";
|
|
2
|
+
import type { CommentEnum } from "./enum.comment.ts";
|
|
3
|
+
import type { CreateEnum } from "./enum.create.ts";
|
|
4
|
+
import type { DropEnum } from "./enum.drop.ts";
|
|
5
|
+
import type { EnumPrivilege } from "./enum.privilege.ts";
|
|
6
|
+
export type EnumChange = AlterEnum | CommentEnum | CreateEnum | DropEnum | EnumPrivilege;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { DefaultPrivilegeState } from "../../base.default-privileges.ts";
|
|
2
|
+
import type { Role } from "../../role/role.model.ts";
|
|
3
|
+
import type { EnumChange } from "./changes/enum.types.ts";
|
|
4
|
+
import type { Enum } from "./enum.model.ts";
|
|
5
|
+
/**
|
|
6
|
+
* Diff two sets of enums from main and branch catalogs.
|
|
7
|
+
*
|
|
8
|
+
* @param ctx - Context containing version, currentUser, and defaultPrivilegeState
|
|
9
|
+
* @param main - The enums in the main catalog.
|
|
10
|
+
* @param branch - The enums in the branch catalog.
|
|
11
|
+
* @returns A list of changes to apply to main to make it match branch.
|
|
12
|
+
*/
|
|
13
|
+
export declare function diffEnums(ctx: {
|
|
14
|
+
version: number;
|
|
15
|
+
currentUser: string;
|
|
16
|
+
defaultPrivilegeState: DefaultPrivilegeState;
|
|
17
|
+
mainRoles: Record<string, Role>;
|
|
18
|
+
}, main: Record<string, Enum>, branch: Record<string, Enum>): EnumChange[];
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { diffObjects } from "../../base.diff.js";
|
|
2
|
+
import { diffPrivileges, filterPublicBuiltInDefaults, groupPrivilegesByGrantable, } from "../../base.privilege-diff.js";
|
|
3
|
+
import { AlterEnumAddValue, AlterEnumChangeOwner, } from "./changes/enum.alter.js";
|
|
4
|
+
import { CreateCommentOnEnum, DropCommentOnEnum, } from "./changes/enum.comment.js";
|
|
5
|
+
import { CreateEnum } from "./changes/enum.create.js";
|
|
6
|
+
import { DropEnum } from "./changes/enum.drop.js";
|
|
7
|
+
import { GrantEnumPrivileges, RevokeEnumPrivileges, RevokeGrantOptionEnumPrivileges, } from "./changes/enum.privilege.js";
|
|
8
|
+
/**
|
|
9
|
+
* Diff two sets of enums from main and branch catalogs.
|
|
10
|
+
*
|
|
11
|
+
* @param ctx - Context containing version, currentUser, and defaultPrivilegeState
|
|
12
|
+
* @param main - The enums in the main catalog.
|
|
13
|
+
* @param branch - The enums in the branch catalog.
|
|
14
|
+
* @returns A list of changes to apply to main to make it match branch.
|
|
15
|
+
*/
|
|
16
|
+
export function diffEnums(ctx, main, branch) {
|
|
17
|
+
const { created, dropped, altered } = diffObjects(main, branch);
|
|
18
|
+
const changes = [];
|
|
19
|
+
for (const enumId of created) {
|
|
20
|
+
const createdEnum = branch[enumId];
|
|
21
|
+
changes.push(new CreateEnum({ enum: createdEnum }));
|
|
22
|
+
// OWNER: If the enum should be owned by someone other than the current user,
|
|
23
|
+
// emit ALTER TYPE ... OWNER TO after creation
|
|
24
|
+
if (createdEnum.owner !== ctx.currentUser) {
|
|
25
|
+
changes.push(new AlterEnumChangeOwner({
|
|
26
|
+
enum: createdEnum,
|
|
27
|
+
owner: createdEnum.owner,
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
if (createdEnum.comment !== null) {
|
|
31
|
+
changes.push(new CreateCommentOnEnum({ enum: createdEnum }));
|
|
32
|
+
}
|
|
33
|
+
// PRIVILEGES: For created objects, compare against default privileges state
|
|
34
|
+
// The migration script will run ALTER DEFAULT PRIVILEGES before CREATE (via constraint spec),
|
|
35
|
+
// so objects are created with the default privileges state in effect.
|
|
36
|
+
// We compare default privileges against desired privileges to generate REVOKE/GRANT statements
|
|
37
|
+
// needed to reach the final desired state.
|
|
38
|
+
const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "enum", createdEnum.schema ?? "");
|
|
39
|
+
// Filter out PUBLIC's built-in default USAGE privilege (PostgreSQL grants it automatically)
|
|
40
|
+
// Reference: https://www.postgresql.org/docs/17/ddl-priv.html Table 5.2
|
|
41
|
+
// This prevents generating unnecessary "GRANT USAGE TO PUBLIC" statements
|
|
42
|
+
const desiredPrivileges = filterPublicBuiltInDefaults("enum", createdEnum.privileges);
|
|
43
|
+
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
44
|
+
// and shouldn't be compared. Use the enum owner as the reference.
|
|
45
|
+
const privilegeResults = diffPrivileges(effectiveDefaults, desiredPrivileges, createdEnum.owner, ctx.mainRoles);
|
|
46
|
+
// Generate grant changes
|
|
47
|
+
for (const [grantee, result] of privilegeResults) {
|
|
48
|
+
if (result.grants.length > 0) {
|
|
49
|
+
const grantGroups = groupPrivilegesByGrantable(result.grants);
|
|
50
|
+
for (const [grantable, list] of grantGroups) {
|
|
51
|
+
void grantable;
|
|
52
|
+
changes.push(new GrantEnumPrivileges({
|
|
53
|
+
enum: createdEnum,
|
|
54
|
+
grantee,
|
|
55
|
+
privileges: list,
|
|
56
|
+
version: ctx.version,
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Generate revoke changes
|
|
61
|
+
if (result.revokes.length > 0) {
|
|
62
|
+
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
63
|
+
for (const [grantable, list] of revokeGroups) {
|
|
64
|
+
void grantable;
|
|
65
|
+
changes.push(new RevokeEnumPrivileges({
|
|
66
|
+
enum: createdEnum,
|
|
67
|
+
grantee,
|
|
68
|
+
privileges: list,
|
|
69
|
+
version: ctx.version,
|
|
70
|
+
}));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Generate revoke grant option changes
|
|
74
|
+
if (result.revokeGrantOption.length > 0) {
|
|
75
|
+
changes.push(new RevokeGrantOptionEnumPrivileges({
|
|
76
|
+
enum: createdEnum,
|
|
77
|
+
grantee,
|
|
78
|
+
privilegeNames: result.revokeGrantOption,
|
|
79
|
+
version: ctx.version,
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
for (const enumId of dropped) {
|
|
85
|
+
changes.push(new DropEnum({ enum: main[enumId] }));
|
|
86
|
+
}
|
|
87
|
+
for (const enumId of altered) {
|
|
88
|
+
const mainEnum = main[enumId];
|
|
89
|
+
const branchEnum = branch[enumId];
|
|
90
|
+
// If labels were removed (branch is missing labels present in main),
|
|
91
|
+
// recreate the enum to avoid relying on unsupported DROP VALUE operations.
|
|
92
|
+
const removedLabels = mainEnum.labels
|
|
93
|
+
.map((l) => l.label)
|
|
94
|
+
.filter((label) => !branchEnum.labels.some((b) => b.label === label));
|
|
95
|
+
if (removedLabels.length > 0) {
|
|
96
|
+
changes.push(new DropEnum({ enum: mainEnum }));
|
|
97
|
+
changes.push(new CreateEnum({ enum: branchEnum }));
|
|
98
|
+
if (branchEnum.owner !== ctx.currentUser) {
|
|
99
|
+
changes.push(new AlterEnumChangeOwner({
|
|
100
|
+
enum: branchEnum,
|
|
101
|
+
owner: branchEnum.owner,
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
if (branchEnum.comment !== null) {
|
|
105
|
+
changes.push(new CreateCommentOnEnum({ enum: branchEnum }));
|
|
106
|
+
}
|
|
107
|
+
const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "enum", branchEnum.schema ?? "");
|
|
108
|
+
const desiredPrivileges = filterPublicBuiltInDefaults("enum", branchEnum.privileges);
|
|
109
|
+
const privilegeResults = diffPrivileges(effectiveDefaults, desiredPrivileges, branchEnum.owner, ctx.mainRoles);
|
|
110
|
+
for (const [grantee, result] of privilegeResults) {
|
|
111
|
+
if (result.grants.length > 0) {
|
|
112
|
+
const grantGroups = groupPrivilegesByGrantable(result.grants);
|
|
113
|
+
for (const [grantable, list] of grantGroups) {
|
|
114
|
+
void grantable;
|
|
115
|
+
changes.push(new GrantEnumPrivileges({
|
|
116
|
+
enum: branchEnum,
|
|
117
|
+
grantee,
|
|
118
|
+
privileges: list,
|
|
119
|
+
version: ctx.version,
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (result.revokes.length > 0) {
|
|
124
|
+
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
125
|
+
for (const [grantable, list] of revokeGroups) {
|
|
126
|
+
void grantable;
|
|
127
|
+
changes.push(new RevokeEnumPrivileges({
|
|
128
|
+
enum: branchEnum,
|
|
129
|
+
grantee,
|
|
130
|
+
privileges: list,
|
|
131
|
+
version: ctx.version,
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (result.revokeGrantOption.length > 0) {
|
|
136
|
+
changes.push(new RevokeGrantOptionEnumPrivileges({
|
|
137
|
+
enum: branchEnum,
|
|
138
|
+
grantee,
|
|
139
|
+
privilegeNames: result.revokeGrantOption,
|
|
140
|
+
version: ctx.version,
|
|
141
|
+
}));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
// OWNER
|
|
147
|
+
if (mainEnum.owner !== branchEnum.owner) {
|
|
148
|
+
changes.push(new AlterEnumChangeOwner({ enum: mainEnum, owner: branchEnum.owner }));
|
|
149
|
+
}
|
|
150
|
+
// LABELS (enum values)
|
|
151
|
+
if (JSON.stringify(mainEnum.labels) !== JSON.stringify(branchEnum.labels)) {
|
|
152
|
+
const labelChanges = diffEnumLabels(mainEnum, branchEnum);
|
|
153
|
+
changes.push(...labelChanges);
|
|
154
|
+
}
|
|
155
|
+
// COMMENT
|
|
156
|
+
if (mainEnum.comment !== branchEnum.comment) {
|
|
157
|
+
if (branchEnum.comment === null) {
|
|
158
|
+
changes.push(new DropCommentOnEnum({ enum: mainEnum }));
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
changes.push(new CreateCommentOnEnum({ enum: branchEnum }));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// PRIVILEGES
|
|
165
|
+
// Filter out PUBLIC's built-in default USAGE privilege from main catalog
|
|
166
|
+
// (PostgreSQL grants it automatically, so we shouldn't compare it)
|
|
167
|
+
const mainPrivilegesFiltered = filterPublicBuiltInDefaults("enum", mainEnum.privileges);
|
|
168
|
+
// Filter out PUBLIC's built-in default USAGE privilege from branch catalog
|
|
169
|
+
const branchPrivilegesFiltered = filterPublicBuiltInDefaults("enum", branchEnum.privileges);
|
|
170
|
+
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
171
|
+
// and shouldn't be compared. Use branch owner as the reference.
|
|
172
|
+
const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchEnum.owner, ctx.mainRoles);
|
|
173
|
+
for (const [grantee, result] of privilegeResults) {
|
|
174
|
+
// Generate grant changes
|
|
175
|
+
if (result.grants.length > 0) {
|
|
176
|
+
const grantGroups = groupPrivilegesByGrantable(result.grants);
|
|
177
|
+
for (const [grantable, list] of grantGroups) {
|
|
178
|
+
void grantable;
|
|
179
|
+
changes.push(new GrantEnumPrivileges({
|
|
180
|
+
enum: branchEnum,
|
|
181
|
+
grantee,
|
|
182
|
+
privileges: list,
|
|
183
|
+
version: ctx.version,
|
|
184
|
+
}));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// Generate revoke changes
|
|
188
|
+
if (result.revokes.length > 0) {
|
|
189
|
+
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
190
|
+
for (const [grantable, list] of revokeGroups) {
|
|
191
|
+
void grantable;
|
|
192
|
+
changes.push(new RevokeEnumPrivileges({
|
|
193
|
+
enum: mainEnum,
|
|
194
|
+
grantee,
|
|
195
|
+
privileges: list,
|
|
196
|
+
version: ctx.version,
|
|
197
|
+
}));
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// Generate revoke grant option changes
|
|
201
|
+
if (result.revokeGrantOption.length > 0) {
|
|
202
|
+
changes.push(new RevokeGrantOptionEnumPrivileges({
|
|
203
|
+
enum: mainEnum,
|
|
204
|
+
grantee,
|
|
205
|
+
privilegeNames: result.revokeGrantOption,
|
|
206
|
+
version: ctx.version,
|
|
207
|
+
}));
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Note: Enum renaming would also use ALTER TYPE ... RENAME TO ...
|
|
211
|
+
// But since our Enum model uses 'name' as the identity field,
|
|
212
|
+
// a name change would be handled as drop + create by diffObjects()
|
|
213
|
+
}
|
|
214
|
+
return changes;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Diff enum labels to determine what ALTER TYPE statements are needed.
|
|
218
|
+
* This implementation properly handles enum value positioning using sort_order.
|
|
219
|
+
* Note: We cannot reliably detect renames, so we only handle additions.
|
|
220
|
+
*/
|
|
221
|
+
function diffEnumLabels(mainEnum, branchEnum) {
|
|
222
|
+
const changes = [];
|
|
223
|
+
// Create maps for efficient lookup
|
|
224
|
+
const mainLabelMap = new Map(mainEnum.labels.map((label) => [label.label, label.sort_order]));
|
|
225
|
+
const branchLabelMap = new Map(branchEnum.labels.map((label) => [label.label, label.sort_order]));
|
|
226
|
+
// Find added values (values in branch but not in main)
|
|
227
|
+
const addedValues = Array.from(branchLabelMap.keys()).filter((label) => !mainLabelMap.has(label));
|
|
228
|
+
// Maintain a working list of labels (by name) to calculate correct BEFORE/AFTER
|
|
229
|
+
// anchors as we simulate applying the additions in order.
|
|
230
|
+
const branchOrdered = [...branchEnum.labels].sort((a, b) => a.sort_order - b.sort_order);
|
|
231
|
+
const workingLabels = [...mainEnum.labels].map((l) => l.label);
|
|
232
|
+
for (const newValue of addedValues) {
|
|
233
|
+
const branchIdx = branchOrdered.findIndex((l) => l.label === newValue);
|
|
234
|
+
if (branchIdx === -1)
|
|
235
|
+
continue;
|
|
236
|
+
const prevBranch = branchOrdered[branchIdx - 1]?.label;
|
|
237
|
+
const nextBranch = branchOrdered[branchIdx + 1]?.label;
|
|
238
|
+
let position;
|
|
239
|
+
// Prefer AFTER when prevBranch exists in workingLabels (more natural for sequential additions)
|
|
240
|
+
// Use BEFORE only when we need to insert before the first value or when prevBranch doesn't exist
|
|
241
|
+
if (prevBranch && workingLabels.includes(prevBranch)) {
|
|
242
|
+
position = { after: prevBranch };
|
|
243
|
+
// Insert after the previous label in our working list
|
|
244
|
+
const prevIdx = workingLabels.indexOf(prevBranch);
|
|
245
|
+
workingLabels.splice(prevIdx + 1, 0, newValue);
|
|
246
|
+
}
|
|
247
|
+
else if (nextBranch && workingLabels.includes(nextBranch)) {
|
|
248
|
+
// Insert before nextBranch when prevBranch doesn't exist (e.g., adding at beginning)
|
|
249
|
+
position = { before: nextBranch };
|
|
250
|
+
const nextIdx = workingLabels.indexOf(nextBranch);
|
|
251
|
+
workingLabels.splice(nextIdx, 0, newValue);
|
|
252
|
+
}
|
|
253
|
+
else if (nextBranch) {
|
|
254
|
+
// nextBranch exists but not in workingLabels yet (shouldn't happen in normal flow)
|
|
255
|
+
position = { before: nextBranch };
|
|
256
|
+
workingLabels.push(newValue);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
// Fallback: append to the end
|
|
260
|
+
position = { after: workingLabels[workingLabels.length - 1] };
|
|
261
|
+
workingLabels.push(newValue);
|
|
262
|
+
}
|
|
263
|
+
changes.push(new AlterEnumAddValue({ enum: mainEnum, newValue, position }));
|
|
264
|
+
}
|
|
265
|
+
// Complex changes (removals, resorting) are currently not auto-handled.
|
|
266
|
+
// We intentionally avoid emitting drop+create to prevent data loss.
|
|
267
|
+
return changes;
|
|
268
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
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
|
+
/**
|
|
6
|
+
* All properties exposed by CREATE TYPE AS ENUM statement are included in diff output.
|
|
7
|
+
* https://www.postgresql.org/docs/current/sql-createtype.html
|
|
8
|
+
*
|
|
9
|
+
* ALTER TYPE statement can be generated for changes to the following properties:
|
|
10
|
+
* - name, owner, schema, add or rename value
|
|
11
|
+
* https://www.postgresql.org/docs/current/sql-altertype.html
|
|
12
|
+
*
|
|
13
|
+
* Sort order of values may be negative or fractional.
|
|
14
|
+
* https://www.postgresql.org/docs/current/catalog-pg-enum.html
|
|
15
|
+
*
|
|
16
|
+
* Type ACL will be supported separately.
|
|
17
|
+
* https://www.postgresql.org/docs/current/ddl-priv.html
|
|
18
|
+
*/
|
|
19
|
+
declare const enumPropsSchema: z.ZodObject<{
|
|
20
|
+
schema: z.ZodString;
|
|
21
|
+
name: z.ZodString;
|
|
22
|
+
owner: z.ZodString;
|
|
23
|
+
labels: z.ZodArray<z.ZodObject<{
|
|
24
|
+
sort_order: z.ZodNumber;
|
|
25
|
+
label: z.ZodString;
|
|
26
|
+
}, z.z.core.$strip>>;
|
|
27
|
+
comment: z.ZodNullable<z.ZodString>;
|
|
28
|
+
privileges: z.ZodArray<z.ZodObject<{
|
|
29
|
+
grantee: z.ZodString;
|
|
30
|
+
privilege: z.ZodString;
|
|
31
|
+
grantable: z.ZodBoolean;
|
|
32
|
+
columns: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
|
|
33
|
+
}, z.z.core.$strip>>;
|
|
34
|
+
}, z.z.core.$strip>;
|
|
35
|
+
type EnumPrivilegeProps = PrivilegeProps;
|
|
36
|
+
export type EnumProps = z.infer<typeof enumPropsSchema>;
|
|
37
|
+
export declare class Enum extends BasePgModel {
|
|
38
|
+
readonly schema: EnumProps["schema"];
|
|
39
|
+
readonly name: EnumProps["name"];
|
|
40
|
+
readonly owner: EnumProps["owner"];
|
|
41
|
+
readonly labels: EnumProps["labels"];
|
|
42
|
+
readonly comment: EnumProps["comment"];
|
|
43
|
+
readonly privileges: EnumPrivilegeProps[];
|
|
44
|
+
constructor(props: EnumProps);
|
|
45
|
+
get stableId(): `type:${string}`;
|
|
46
|
+
get identityFields(): {
|
|
47
|
+
schema: string;
|
|
48
|
+
name: string;
|
|
49
|
+
};
|
|
50
|
+
get dataFields(): {
|
|
51
|
+
owner: string;
|
|
52
|
+
labels: {
|
|
53
|
+
sort_order: number;
|
|
54
|
+
label: string;
|
|
55
|
+
}[];
|
|
56
|
+
comment: string | null;
|
|
57
|
+
privileges: {
|
|
58
|
+
columns: string[] | null | undefined;
|
|
59
|
+
grantee: string;
|
|
60
|
+
privilege: string;
|
|
61
|
+
grantable: boolean;
|
|
62
|
+
}[];
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export declare function extractEnums(sql: Sql): Promise<Enum[]>;
|
|
66
|
+
export {};
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import z from "zod";
|
|
2
|
+
import { BasePgModel } from "../../base.model.js";
|
|
3
|
+
import { privilegePropsSchema, } from "../../base.privilege-diff.js";
|
|
4
|
+
const enumLabelSchema = z.object({
|
|
5
|
+
sort_order: z.number(),
|
|
6
|
+
label: z.string(),
|
|
7
|
+
});
|
|
8
|
+
/**
|
|
9
|
+
* All properties exposed by CREATE TYPE AS ENUM statement are included in diff output.
|
|
10
|
+
* https://www.postgresql.org/docs/current/sql-createtype.html
|
|
11
|
+
*
|
|
12
|
+
* ALTER TYPE statement can be generated for changes to the following properties:
|
|
13
|
+
* - name, owner, schema, add or rename value
|
|
14
|
+
* https://www.postgresql.org/docs/current/sql-altertype.html
|
|
15
|
+
*
|
|
16
|
+
* Sort order of values may be negative or fractional.
|
|
17
|
+
* https://www.postgresql.org/docs/current/catalog-pg-enum.html
|
|
18
|
+
*
|
|
19
|
+
* Type ACL will be supported separately.
|
|
20
|
+
* https://www.postgresql.org/docs/current/ddl-priv.html
|
|
21
|
+
*/
|
|
22
|
+
const enumPropsSchema = z.object({
|
|
23
|
+
schema: z.string(),
|
|
24
|
+
name: z.string(),
|
|
25
|
+
owner: z.string(),
|
|
26
|
+
labels: z.array(enumLabelSchema),
|
|
27
|
+
comment: z.string().nullable(),
|
|
28
|
+
privileges: z.array(privilegePropsSchema),
|
|
29
|
+
});
|
|
30
|
+
export class Enum extends BasePgModel {
|
|
31
|
+
schema;
|
|
32
|
+
name;
|
|
33
|
+
owner;
|
|
34
|
+
labels;
|
|
35
|
+
comment;
|
|
36
|
+
privileges;
|
|
37
|
+
constructor(props) {
|
|
38
|
+
super();
|
|
39
|
+
// Identity fields
|
|
40
|
+
this.schema = props.schema;
|
|
41
|
+
this.name = props.name;
|
|
42
|
+
// Data fields
|
|
43
|
+
this.owner = props.owner;
|
|
44
|
+
this.labels = props.labels;
|
|
45
|
+
this.comment = props.comment;
|
|
46
|
+
this.privileges = props.privileges;
|
|
47
|
+
}
|
|
48
|
+
get stableId() {
|
|
49
|
+
return `type:${this.schema}.${this.name}`;
|
|
50
|
+
}
|
|
51
|
+
get identityFields() {
|
|
52
|
+
return {
|
|
53
|
+
schema: this.schema,
|
|
54
|
+
name: this.name,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
get dataFields() {
|
|
58
|
+
const orderedLabels = [...this.labels]
|
|
59
|
+
.map((label) => ({ ...label }))
|
|
60
|
+
.sort((a, b) => a.sort_order - b.sort_order || a.label.localeCompare(b.label));
|
|
61
|
+
// Normalize sort_order to a deterministic 1..N sequence to avoid float gaps
|
|
62
|
+
// that occur when adding multiple enum values with AFTER clauses.
|
|
63
|
+
const labels = orderedLabels.map((label, idx) => ({
|
|
64
|
+
sort_order: idx + 1,
|
|
65
|
+
label: label.label,
|
|
66
|
+
}));
|
|
67
|
+
const privileges = [...this.privileges]
|
|
68
|
+
.map((priv) => ({
|
|
69
|
+
...priv,
|
|
70
|
+
columns: priv.columns ? [...priv.columns].sort() : priv.columns,
|
|
71
|
+
}))
|
|
72
|
+
.sort((a, b) => {
|
|
73
|
+
const byGrantee = a.grantee.localeCompare(b.grantee);
|
|
74
|
+
if (byGrantee !== 0)
|
|
75
|
+
return byGrantee;
|
|
76
|
+
const byPriv = a.privilege.localeCompare(b.privilege);
|
|
77
|
+
if (byPriv !== 0)
|
|
78
|
+
return byPriv;
|
|
79
|
+
if (a.grantable !== b.grantable)
|
|
80
|
+
return a.grantable ? 1 : -1;
|
|
81
|
+
const colsA = (a.columns ?? []).join(",");
|
|
82
|
+
const colsB = (b.columns ?? []).join(",");
|
|
83
|
+
return colsA.localeCompare(colsB);
|
|
84
|
+
});
|
|
85
|
+
return {
|
|
86
|
+
owner: this.owner,
|
|
87
|
+
labels,
|
|
88
|
+
comment: this.comment,
|
|
89
|
+
privileges,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export async function extractEnums(sql) {
|
|
94
|
+
return sql.begin(async (sql) => {
|
|
95
|
+
await sql `set search_path = ''`;
|
|
96
|
+
const enumRows = await sql `
|
|
97
|
+
with extension_oids as (
|
|
98
|
+
select
|
|
99
|
+
objid
|
|
100
|
+
from
|
|
101
|
+
pg_depend d
|
|
102
|
+
where
|
|
103
|
+
d.refclassid = 'pg_extension'::regclass
|
|
104
|
+
and d.classid = 'pg_type'::regclass
|
|
105
|
+
)
|
|
106
|
+
select
|
|
107
|
+
t.typnamespace::regnamespace::text as schema,
|
|
108
|
+
quote_ident(t.typname) as name,
|
|
109
|
+
e.enumsortorder as sort_order,
|
|
110
|
+
e.enumlabel as label,
|
|
111
|
+
t.typowner::regrole::text as owner,
|
|
112
|
+
obj_description(t.oid, 'pg_type') as comment,
|
|
113
|
+
coalesce(
|
|
114
|
+
(
|
|
115
|
+
select json_agg(
|
|
116
|
+
json_build_object(
|
|
117
|
+
'grantee', case when x.grantee = 0 then 'PUBLIC' else x.grantee::regrole::text end,
|
|
118
|
+
'privilege', x.privilege_type,
|
|
119
|
+
'grantable', x.is_grantable
|
|
120
|
+
)
|
|
121
|
+
order by x.grantee, x.privilege_type
|
|
122
|
+
)
|
|
123
|
+
from lateral aclexplode(t.typacl) as x(grantor, grantee, privilege_type, is_grantable)
|
|
124
|
+
), '[]'
|
|
125
|
+
) as privileges
|
|
126
|
+
from
|
|
127
|
+
pg_catalog.pg_enum e
|
|
128
|
+
inner join pg_catalog.pg_type t on t.oid = e.enumtypid
|
|
129
|
+
left outer join extension_oids ext on t.oid = ext.objid
|
|
130
|
+
where not t.typnamespace::regnamespace::text like any(array['pg\\_%', 'information\\_schema'])
|
|
131
|
+
and ext.objid is null
|
|
132
|
+
order by
|
|
133
|
+
1, 2, 3;
|
|
134
|
+
`;
|
|
135
|
+
const grouped = {};
|
|
136
|
+
for (const e of enumRows) {
|
|
137
|
+
const key = `${e.schema}.${e.name}`;
|
|
138
|
+
if (!grouped[key]) {
|
|
139
|
+
grouped[key] = {
|
|
140
|
+
schema: e.schema,
|
|
141
|
+
name: e.name,
|
|
142
|
+
owner: e.owner,
|
|
143
|
+
labels: [],
|
|
144
|
+
comment: e.comment,
|
|
145
|
+
privileges: e.privileges,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
grouped[key].labels.push({ sort_order: e.sort_order, label: e.label });
|
|
149
|
+
}
|
|
150
|
+
// Validate and parse each enum using the Zod schema
|
|
151
|
+
const validatedEnums = Object.values(grouped).map((e) => enumPropsSchema.parse(e));
|
|
152
|
+
return validatedEnums.map((e) => new Enum(e));
|
|
153
|
+
});
|
|
154
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Range } from "../range.model.ts";
|
|
2
|
+
import { AlterRangeChange } from "./range.base.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Alter a range type.
|
|
5
|
+
*
|
|
6
|
+
* @see https://www.postgresql.org/docs/17/sql-altertype.html
|
|
7
|
+
*
|
|
8
|
+
* Synopsis
|
|
9
|
+
* ```sql
|
|
10
|
+
* ALTER TYPE name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
|
|
11
|
+
* ALTER TYPE name RENAME TO new_name
|
|
12
|
+
* ALTER TYPE name SET SCHEMA new_schema
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export type AlterRange = AlterRangeChangeOwner;
|
|
16
|
+
/**
|
|
17
|
+
* ALTER TYPE ... OWNER TO ...
|
|
18
|
+
*/
|
|
19
|
+
export declare class AlterRangeChangeOwner extends AlterRangeChange {
|
|
20
|
+
readonly range: Range;
|
|
21
|
+
readonly owner: string;
|
|
22
|
+
readonly scope: "object";
|
|
23
|
+
constructor(props: {
|
|
24
|
+
range: Range;
|
|
25
|
+
owner: string;
|
|
26
|
+
});
|
|
27
|
+
get requires(): `type:${string}`[];
|
|
28
|
+
serialize(): string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Replace a range type by dropping and recreating it.
|
|
32
|
+
* This is used when properties that cannot be altered via ALTER TYPE change.
|
|
33
|
+
*/
|