@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,282 @@
|
|
|
1
|
+
import { diffObjects } from "../base.diff.js";
|
|
2
|
+
import { diffPrivileges, filterPublicBuiltInDefaults, groupPrivilegesByGrantable, } from "../base.privilege-diff.js";
|
|
3
|
+
import { deepEqual, hasNonAlterableChanges } from "../utils.js";
|
|
4
|
+
import { AlterProcedureChangeOwner, AlterProcedureSetConfig, AlterProcedureSetLeakproof, AlterProcedureSetParallel, AlterProcedureSetSecurity, AlterProcedureSetStrictness, AlterProcedureSetVolatility, } from "./changes/procedure.alter.js";
|
|
5
|
+
import { CreateCommentOnProcedure, DropCommentOnProcedure, } from "./changes/procedure.comment.js";
|
|
6
|
+
import { CreateProcedure } from "./changes/procedure.create.js";
|
|
7
|
+
import { DropProcedure } from "./changes/procedure.drop.js";
|
|
8
|
+
import { GrantProcedurePrivileges, RevokeGrantOptionProcedurePrivileges, RevokeProcedurePrivileges, } from "./changes/procedure.privilege.js";
|
|
9
|
+
/**
|
|
10
|
+
* Diff two sets of procedures from main and branch catalogs.
|
|
11
|
+
*
|
|
12
|
+
* @param ctx - Context containing version, currentUser, and defaultPrivilegeState
|
|
13
|
+
* @param main - The procedures in the main catalog.
|
|
14
|
+
* @param branch - The procedures in the branch catalog.
|
|
15
|
+
* @returns A list of changes to apply to main to make it match branch.
|
|
16
|
+
*/
|
|
17
|
+
export function diffProcedures(ctx, main, branch) {
|
|
18
|
+
const { created, dropped, altered } = diffObjects(main, branch);
|
|
19
|
+
const changes = [];
|
|
20
|
+
for (const procedureId of created) {
|
|
21
|
+
const proc = branch[procedureId];
|
|
22
|
+
changes.push(new CreateProcedure({ procedure: proc }));
|
|
23
|
+
// OWNER: If the procedure should be owned by someone other than the current user,
|
|
24
|
+
// emit ALTER FUNCTION/PROCEDURE ... OWNER TO after creation
|
|
25
|
+
if (proc.owner !== ctx.currentUser) {
|
|
26
|
+
changes.push(new AlterProcedureChangeOwner({
|
|
27
|
+
procedure: proc,
|
|
28
|
+
owner: proc.owner,
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
if (proc.comment !== null) {
|
|
32
|
+
changes.push(new CreateCommentOnProcedure({ procedure: proc }));
|
|
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, "procedure", proc.schema ?? "");
|
|
40
|
+
// Filter out PUBLIC's built-in default EXECUTE 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 EXECUTE TO PUBLIC" statements
|
|
43
|
+
const desiredPrivileges = filterPublicBuiltInDefaults("procedure", proc.privileges);
|
|
44
|
+
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
45
|
+
// and shouldn't be compared. Note: we use the final owner (proc.owner), not the
|
|
46
|
+
// current user, because ownership change happens before privilege diffing.
|
|
47
|
+
const privilegeResults = diffPrivileges(effectiveDefaults, desiredPrivileges, proc.owner, ctx.mainRoles);
|
|
48
|
+
// Generate grant changes
|
|
49
|
+
for (const [grantee, result] of privilegeResults) {
|
|
50
|
+
if (result.grants.length > 0) {
|
|
51
|
+
const grantGroups = groupPrivilegesByGrantable(result.grants);
|
|
52
|
+
for (const [grantable, list] of grantGroups) {
|
|
53
|
+
void grantable;
|
|
54
|
+
changes.push(new GrantProcedurePrivileges({
|
|
55
|
+
procedure: proc,
|
|
56
|
+
grantee,
|
|
57
|
+
privileges: list,
|
|
58
|
+
version: ctx.version,
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Generate revoke changes
|
|
63
|
+
if (result.revokes.length > 0) {
|
|
64
|
+
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
65
|
+
for (const [grantable, list] of revokeGroups) {
|
|
66
|
+
void grantable;
|
|
67
|
+
changes.push(new RevokeProcedurePrivileges({
|
|
68
|
+
procedure: proc,
|
|
69
|
+
grantee,
|
|
70
|
+
privileges: list,
|
|
71
|
+
version: ctx.version,
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Generate revoke grant option changes
|
|
76
|
+
if (result.revokeGrantOption.length > 0) {
|
|
77
|
+
changes.push(new RevokeGrantOptionProcedurePrivileges({
|
|
78
|
+
procedure: proc,
|
|
79
|
+
grantee,
|
|
80
|
+
privilegeNames: result.revokeGrantOption,
|
|
81
|
+
version: ctx.version,
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
for (const procedureId of dropped) {
|
|
87
|
+
changes.push(new DropProcedure({ procedure: main[procedureId] }));
|
|
88
|
+
}
|
|
89
|
+
for (const procedureId of altered) {
|
|
90
|
+
const mainProcedure = main[procedureId];
|
|
91
|
+
const branchProcedure = branch[procedureId];
|
|
92
|
+
// Check if non-alterable properties have changed
|
|
93
|
+
// These require dropping and recreating the procedure
|
|
94
|
+
const NON_ALTERABLE_FIELDS = [
|
|
95
|
+
"kind",
|
|
96
|
+
"return_type",
|
|
97
|
+
"return_type_schema",
|
|
98
|
+
"language",
|
|
99
|
+
// The following properties are alterable in SQL, but our generator may choose
|
|
100
|
+
// to replace on changes not covered by explicit ALTER actions. Keep them out here
|
|
101
|
+
// to allow ALTER for those we implement below.
|
|
102
|
+
// security_definer,
|
|
103
|
+
// volatility,
|
|
104
|
+
// parallel_safety,
|
|
105
|
+
// is_strict,
|
|
106
|
+
// leakproof,
|
|
107
|
+
// Returns-set is part of the signature and not alterable
|
|
108
|
+
"returns_set",
|
|
109
|
+
"argument_count",
|
|
110
|
+
"argument_default_count",
|
|
111
|
+
"argument_names",
|
|
112
|
+
"argument_types",
|
|
113
|
+
"all_argument_types",
|
|
114
|
+
"argument_modes",
|
|
115
|
+
"argument_defaults",
|
|
116
|
+
"source_code",
|
|
117
|
+
"binary_path",
|
|
118
|
+
"sql_body",
|
|
119
|
+
// config is alterable via SET/RESET
|
|
120
|
+
];
|
|
121
|
+
const nonAlterablePropsChanged = hasNonAlterableChanges(mainProcedure, branchProcedure, NON_ALTERABLE_FIELDS, {
|
|
122
|
+
argument_names: deepEqual,
|
|
123
|
+
argument_types: deepEqual,
|
|
124
|
+
all_argument_types: deepEqual,
|
|
125
|
+
argument_modes: deepEqual,
|
|
126
|
+
config: deepEqual,
|
|
127
|
+
});
|
|
128
|
+
if (nonAlterablePropsChanged) {
|
|
129
|
+
// Replace the entire procedure
|
|
130
|
+
changes.push(new CreateProcedure({ procedure: branchProcedure, orReplace: true }));
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
// Only alterable properties changed - check each one
|
|
134
|
+
// OWNER
|
|
135
|
+
if (mainProcedure.owner !== branchProcedure.owner) {
|
|
136
|
+
changes.push(new AlterProcedureChangeOwner({
|
|
137
|
+
procedure: mainProcedure,
|
|
138
|
+
owner: branchProcedure.owner,
|
|
139
|
+
}));
|
|
140
|
+
}
|
|
141
|
+
// COMMENT
|
|
142
|
+
if (mainProcedure.comment !== branchProcedure.comment) {
|
|
143
|
+
if (branchProcedure.comment === null) {
|
|
144
|
+
changes.push(new DropCommentOnProcedure({ procedure: mainProcedure }));
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
changes.push(new CreateCommentOnProcedure({ procedure: branchProcedure }));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// SECURITY DEFINER/INVOKER
|
|
151
|
+
if (mainProcedure.security_definer !== branchProcedure.security_definer) {
|
|
152
|
+
changes.push(new AlterProcedureSetSecurity({
|
|
153
|
+
procedure: mainProcedure,
|
|
154
|
+
securityDefiner: branchProcedure.security_definer,
|
|
155
|
+
}));
|
|
156
|
+
}
|
|
157
|
+
// CONFIG SET/RESET
|
|
158
|
+
const toMap = (opts) => {
|
|
159
|
+
const map = new Map();
|
|
160
|
+
for (const opt of opts ?? []) {
|
|
161
|
+
const eq = opt.indexOf("=");
|
|
162
|
+
const key = opt.slice(0, eq).trim();
|
|
163
|
+
const value = opt.slice(eq + 1).trim();
|
|
164
|
+
map.set(key, value);
|
|
165
|
+
}
|
|
166
|
+
return map;
|
|
167
|
+
};
|
|
168
|
+
const mainCfg = toMap(mainProcedure.config);
|
|
169
|
+
const branchCfg = toMap(branchProcedure.config);
|
|
170
|
+
if (branchCfg.size === 0 && mainCfg.size > 0) {
|
|
171
|
+
// Branch has no config at all -> prefer a single RESET ALL
|
|
172
|
+
changes.push(new AlterProcedureSetConfig({
|
|
173
|
+
procedure: mainProcedure,
|
|
174
|
+
action: "reset_all",
|
|
175
|
+
}));
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
for (const [key, oldValue] of mainCfg.entries()) {
|
|
179
|
+
const hasInBranch = branchCfg.has(key);
|
|
180
|
+
const newValue = branchCfg.get(key);
|
|
181
|
+
const changed = hasInBranch ? oldValue !== newValue : true;
|
|
182
|
+
if (changed) {
|
|
183
|
+
changes.push(new AlterProcedureSetConfig({
|
|
184
|
+
procedure: mainProcedure,
|
|
185
|
+
action: "reset",
|
|
186
|
+
key,
|
|
187
|
+
}));
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
for (const [key, newValue] of branchCfg.entries()) {
|
|
191
|
+
const oldValue = mainCfg.get(key);
|
|
192
|
+
if (oldValue !== newValue) {
|
|
193
|
+
changes.push(new AlterProcedureSetConfig({
|
|
194
|
+
procedure: mainProcedure,
|
|
195
|
+
action: "set",
|
|
196
|
+
key,
|
|
197
|
+
value: newValue,
|
|
198
|
+
}));
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// VOLATILITY
|
|
203
|
+
if (mainProcedure.volatility !== branchProcedure.volatility) {
|
|
204
|
+
changes.push(new AlterProcedureSetVolatility({
|
|
205
|
+
procedure: mainProcedure,
|
|
206
|
+
volatility: branchProcedure.volatility,
|
|
207
|
+
}));
|
|
208
|
+
}
|
|
209
|
+
// STRICTNESS
|
|
210
|
+
if (mainProcedure.is_strict !== branchProcedure.is_strict) {
|
|
211
|
+
changes.push(new AlterProcedureSetStrictness({
|
|
212
|
+
procedure: mainProcedure,
|
|
213
|
+
isStrict: branchProcedure.is_strict,
|
|
214
|
+
}));
|
|
215
|
+
}
|
|
216
|
+
// LEAKPROOF
|
|
217
|
+
if (mainProcedure.leakproof !== branchProcedure.leakproof) {
|
|
218
|
+
changes.push(new AlterProcedureSetLeakproof({
|
|
219
|
+
procedure: mainProcedure,
|
|
220
|
+
leakproof: branchProcedure.leakproof,
|
|
221
|
+
}));
|
|
222
|
+
}
|
|
223
|
+
// PARALLEL
|
|
224
|
+
if (mainProcedure.parallel_safety !== branchProcedure.parallel_safety) {
|
|
225
|
+
changes.push(new AlterProcedureSetParallel({
|
|
226
|
+
procedure: mainProcedure,
|
|
227
|
+
parallelSafety: branchProcedure.parallel_safety,
|
|
228
|
+
}));
|
|
229
|
+
}
|
|
230
|
+
// Note: Procedure renaming would also use ALTER FUNCTION/PROCEDURE ... RENAME TO ...
|
|
231
|
+
// But since our Procedure model uses 'name' as the identity field,
|
|
232
|
+
// a name change would be handled as drop + create by diffObjects()
|
|
233
|
+
// PRIVILEGES
|
|
234
|
+
// Filter out PUBLIC's built-in default EXECUTE privilege from main catalog
|
|
235
|
+
// (PostgreSQL grants it automatically, so we shouldn't compare it)
|
|
236
|
+
const mainPrivilegesFiltered = filterPublicBuiltInDefaults("procedure", mainProcedure.privileges);
|
|
237
|
+
// Filter out PUBLIC's built-in default EXECUTE privilege from branch catalog
|
|
238
|
+
const branchPrivilegesFiltered = filterPublicBuiltInDefaults("procedure", branchProcedure.privileges);
|
|
239
|
+
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
240
|
+
// and shouldn't be compared. Use branch owner as the reference.
|
|
241
|
+
const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchProcedure.owner, ctx.mainRoles);
|
|
242
|
+
for (const [grantee, result] of privilegeResults) {
|
|
243
|
+
// Generate grant changes
|
|
244
|
+
if (result.grants.length > 0) {
|
|
245
|
+
const grantGroups = groupPrivilegesByGrantable(result.grants);
|
|
246
|
+
for (const [grantable, list] of grantGroups) {
|
|
247
|
+
void grantable;
|
|
248
|
+
changes.push(new GrantProcedurePrivileges({
|
|
249
|
+
procedure: branchProcedure,
|
|
250
|
+
grantee,
|
|
251
|
+
privileges: list,
|
|
252
|
+
version: ctx.version,
|
|
253
|
+
}));
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// Generate revoke changes
|
|
257
|
+
if (result.revokes.length > 0) {
|
|
258
|
+
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
259
|
+
for (const [grantable, list] of revokeGroups) {
|
|
260
|
+
void grantable;
|
|
261
|
+
changes.push(new RevokeProcedurePrivileges({
|
|
262
|
+
procedure: mainProcedure,
|
|
263
|
+
grantee,
|
|
264
|
+
privileges: list,
|
|
265
|
+
version: ctx.version,
|
|
266
|
+
}));
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// Generate revoke grant option changes
|
|
270
|
+
if (result.revokeGrantOption.length > 0) {
|
|
271
|
+
changes.push(new RevokeGrantOptionProcedurePrivileges({
|
|
272
|
+
procedure: mainProcedure,
|
|
273
|
+
grantee,
|
|
274
|
+
privilegeNames: result.revokeGrantOption,
|
|
275
|
+
version: ctx.version,
|
|
276
|
+
}));
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return changes;
|
|
282
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
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 procedurePropsSchema: z.ZodObject<{
|
|
6
|
+
schema: z.ZodString;
|
|
7
|
+
name: z.ZodString;
|
|
8
|
+
kind: z.ZodEnum<{
|
|
9
|
+
a: "a";
|
|
10
|
+
w: "w";
|
|
11
|
+
p: "p";
|
|
12
|
+
f: "f";
|
|
13
|
+
}>;
|
|
14
|
+
return_type: z.ZodString;
|
|
15
|
+
return_type_schema: z.ZodString;
|
|
16
|
+
language: z.ZodString;
|
|
17
|
+
security_definer: z.ZodBoolean;
|
|
18
|
+
volatility: z.ZodEnum<{
|
|
19
|
+
i: "i";
|
|
20
|
+
s: "s";
|
|
21
|
+
v: "v";
|
|
22
|
+
}>;
|
|
23
|
+
parallel_safety: z.ZodEnum<{
|
|
24
|
+
u: "u";
|
|
25
|
+
s: "s";
|
|
26
|
+
r: "r";
|
|
27
|
+
}>;
|
|
28
|
+
execution_cost: z.ZodNumber;
|
|
29
|
+
result_rows: z.ZodNumber;
|
|
30
|
+
is_strict: z.ZodBoolean;
|
|
31
|
+
leakproof: z.ZodBoolean;
|
|
32
|
+
returns_set: z.ZodBoolean;
|
|
33
|
+
argument_count: z.ZodNumber;
|
|
34
|
+
argument_default_count: z.ZodNumber;
|
|
35
|
+
argument_names: z.ZodNullable<z.ZodArray<z.ZodString>>;
|
|
36
|
+
argument_types: z.ZodNullable<z.ZodArray<z.ZodString>>;
|
|
37
|
+
all_argument_types: z.ZodNullable<z.ZodArray<z.ZodString>>;
|
|
38
|
+
argument_modes: z.ZodNullable<z.ZodArray<z.ZodEnum<{
|
|
39
|
+
i: "i";
|
|
40
|
+
o: "o";
|
|
41
|
+
b: "b";
|
|
42
|
+
v: "v";
|
|
43
|
+
t: "t";
|
|
44
|
+
}>>>;
|
|
45
|
+
argument_defaults: z.ZodNullable<z.ZodString>;
|
|
46
|
+
source_code: z.ZodNullable<z.ZodString>;
|
|
47
|
+
binary_path: z.ZodNullable<z.ZodString>;
|
|
48
|
+
sql_body: z.ZodNullable<z.ZodString>;
|
|
49
|
+
definition: z.ZodString;
|
|
50
|
+
config: z.ZodNullable<z.ZodArray<z.ZodString>>;
|
|
51
|
+
owner: z.ZodString;
|
|
52
|
+
comment: z.ZodNullable<z.ZodString>;
|
|
53
|
+
privileges: z.ZodArray<z.ZodObject<{
|
|
54
|
+
grantee: z.ZodString;
|
|
55
|
+
privilege: z.ZodString;
|
|
56
|
+
grantable: z.ZodBoolean;
|
|
57
|
+
columns: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
|
|
58
|
+
}, z.z.core.$strip>>;
|
|
59
|
+
}, z.z.core.$strip>;
|
|
60
|
+
type ProcedurePrivilegeProps = PrivilegeProps;
|
|
61
|
+
export type ProcedureProps = z.infer<typeof procedurePropsSchema>;
|
|
62
|
+
export declare class Procedure extends BasePgModel {
|
|
63
|
+
readonly schema: ProcedureProps["schema"];
|
|
64
|
+
readonly name: ProcedureProps["name"];
|
|
65
|
+
readonly kind: ProcedureProps["kind"];
|
|
66
|
+
readonly return_type: ProcedureProps["return_type"];
|
|
67
|
+
readonly return_type_schema: ProcedureProps["return_type_schema"];
|
|
68
|
+
readonly language: ProcedureProps["language"];
|
|
69
|
+
readonly security_definer: ProcedureProps["security_definer"];
|
|
70
|
+
readonly volatility: ProcedureProps["volatility"];
|
|
71
|
+
readonly parallel_safety: ProcedureProps["parallel_safety"];
|
|
72
|
+
readonly execution_cost: ProcedureProps["execution_cost"];
|
|
73
|
+
readonly result_rows: ProcedureProps["result_rows"];
|
|
74
|
+
readonly is_strict: ProcedureProps["is_strict"];
|
|
75
|
+
readonly leakproof: ProcedureProps["leakproof"];
|
|
76
|
+
readonly returns_set: ProcedureProps["returns_set"];
|
|
77
|
+
readonly argument_count: ProcedureProps["argument_count"];
|
|
78
|
+
readonly argument_default_count: ProcedureProps["argument_default_count"];
|
|
79
|
+
readonly argument_names: ProcedureProps["argument_names"];
|
|
80
|
+
readonly argument_types: ProcedureProps["argument_types"];
|
|
81
|
+
readonly all_argument_types: ProcedureProps["all_argument_types"];
|
|
82
|
+
readonly argument_modes: ProcedureProps["argument_modes"];
|
|
83
|
+
readonly argument_defaults: ProcedureProps["argument_defaults"];
|
|
84
|
+
readonly source_code: ProcedureProps["source_code"];
|
|
85
|
+
readonly binary_path: ProcedureProps["binary_path"];
|
|
86
|
+
readonly sql_body: ProcedureProps["sql_body"];
|
|
87
|
+
readonly definition: ProcedureProps["definition"];
|
|
88
|
+
readonly config: ProcedureProps["config"];
|
|
89
|
+
readonly owner: ProcedureProps["owner"];
|
|
90
|
+
readonly comment: ProcedureProps["comment"];
|
|
91
|
+
readonly privileges: ProcedurePrivilegeProps[];
|
|
92
|
+
constructor(props: ProcedureProps);
|
|
93
|
+
get stableId(): `procedure:${string}`;
|
|
94
|
+
get identityFields(): {
|
|
95
|
+
schema: string;
|
|
96
|
+
name: string;
|
|
97
|
+
};
|
|
98
|
+
get dataFields(): {
|
|
99
|
+
kind: "a" | "w" | "p" | "f";
|
|
100
|
+
return_type: string;
|
|
101
|
+
return_type_schema: string;
|
|
102
|
+
language: string;
|
|
103
|
+
security_definer: boolean;
|
|
104
|
+
volatility: "i" | "s" | "v";
|
|
105
|
+
parallel_safety: "u" | "s" | "r";
|
|
106
|
+
is_strict: boolean;
|
|
107
|
+
leakproof: boolean;
|
|
108
|
+
returns_set: boolean;
|
|
109
|
+
argument_count: number;
|
|
110
|
+
argument_default_count: number;
|
|
111
|
+
argument_names: string[] | null;
|
|
112
|
+
argument_types: string[] | null;
|
|
113
|
+
all_argument_types: string[] | null;
|
|
114
|
+
argument_modes: ("i" | "o" | "b" | "v" | "t")[] | null;
|
|
115
|
+
argument_defaults: string | null;
|
|
116
|
+
source_code: string | null;
|
|
117
|
+
binary_path: string | null;
|
|
118
|
+
sql_body: string | null;
|
|
119
|
+
definition: string;
|
|
120
|
+
config: string[] | null;
|
|
121
|
+
owner: string;
|
|
122
|
+
comment: string | null;
|
|
123
|
+
privileges: {
|
|
124
|
+
grantee: string;
|
|
125
|
+
privilege: string;
|
|
126
|
+
grantable: boolean;
|
|
127
|
+
columns?: string[] | null | undefined;
|
|
128
|
+
}[];
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
export declare function extractProcedures(sql: Sql): Promise<Procedure[]>;
|
|
132
|
+
export {};
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import z from "zod";
|
|
2
|
+
import { BasePgModel } from "../base.model.js";
|
|
3
|
+
import { privilegePropsSchema, } from "../base.privilege-diff.js";
|
|
4
|
+
const FunctionKindSchema = z.enum([
|
|
5
|
+
"f", // function
|
|
6
|
+
"p", // procedure
|
|
7
|
+
"a", // aggregate function
|
|
8
|
+
"w", // window function
|
|
9
|
+
]);
|
|
10
|
+
const FunctionVolatilitySchema = z.enum([
|
|
11
|
+
"i", // IMMUTABLE
|
|
12
|
+
"s", // STABLE
|
|
13
|
+
"v", // VOLATILE
|
|
14
|
+
]);
|
|
15
|
+
const FunctionParallelSafetySchema = z.enum([
|
|
16
|
+
"u", // UNSAFE (cannot run in parallel)
|
|
17
|
+
"s", // SAFE (can run in parallel)
|
|
18
|
+
"r", // RESTRICTED (can run in parallel with restrictions)
|
|
19
|
+
]);
|
|
20
|
+
const FunctionArgumentModeSchema = z.enum([
|
|
21
|
+
"i", // IN parameter
|
|
22
|
+
"o", // OUT parameter
|
|
23
|
+
"b", // INOUT parameter
|
|
24
|
+
"v", // VARIADIC parameter
|
|
25
|
+
"t", // TABLE parameter
|
|
26
|
+
]);
|
|
27
|
+
const procedurePropsSchema = z.object({
|
|
28
|
+
schema: z.string(),
|
|
29
|
+
name: z.string(),
|
|
30
|
+
kind: FunctionKindSchema,
|
|
31
|
+
return_type: z.string(),
|
|
32
|
+
return_type_schema: z.string(),
|
|
33
|
+
language: z.string(),
|
|
34
|
+
security_definer: z.boolean(),
|
|
35
|
+
volatility: FunctionVolatilitySchema,
|
|
36
|
+
parallel_safety: FunctionParallelSafetySchema,
|
|
37
|
+
execution_cost: z.number(),
|
|
38
|
+
result_rows: z.number(),
|
|
39
|
+
is_strict: z.boolean(),
|
|
40
|
+
leakproof: z.boolean(),
|
|
41
|
+
returns_set: z.boolean(),
|
|
42
|
+
argument_count: z.number(),
|
|
43
|
+
argument_default_count: z.number(),
|
|
44
|
+
argument_names: z.array(z.string()).nullable(),
|
|
45
|
+
argument_types: z.array(z.string()).nullable(),
|
|
46
|
+
all_argument_types: z.array(z.string()).nullable(),
|
|
47
|
+
argument_modes: z.array(FunctionArgumentModeSchema).nullable(),
|
|
48
|
+
argument_defaults: z.string().nullable(),
|
|
49
|
+
source_code: z.string().nullable(),
|
|
50
|
+
binary_path: z.string().nullable(),
|
|
51
|
+
sql_body: z.string().nullable(),
|
|
52
|
+
definition: z.string(),
|
|
53
|
+
config: z.array(z.string()).nullable(),
|
|
54
|
+
owner: z.string(),
|
|
55
|
+
comment: z.string().nullable(),
|
|
56
|
+
privileges: z.array(privilegePropsSchema),
|
|
57
|
+
});
|
|
58
|
+
export class Procedure extends BasePgModel {
|
|
59
|
+
schema;
|
|
60
|
+
name;
|
|
61
|
+
kind;
|
|
62
|
+
return_type;
|
|
63
|
+
return_type_schema;
|
|
64
|
+
language;
|
|
65
|
+
security_definer;
|
|
66
|
+
volatility;
|
|
67
|
+
parallel_safety;
|
|
68
|
+
execution_cost;
|
|
69
|
+
result_rows;
|
|
70
|
+
is_strict;
|
|
71
|
+
leakproof;
|
|
72
|
+
returns_set;
|
|
73
|
+
argument_count;
|
|
74
|
+
argument_default_count;
|
|
75
|
+
argument_names;
|
|
76
|
+
argument_types;
|
|
77
|
+
all_argument_types;
|
|
78
|
+
argument_modes;
|
|
79
|
+
argument_defaults;
|
|
80
|
+
source_code;
|
|
81
|
+
binary_path;
|
|
82
|
+
sql_body;
|
|
83
|
+
definition;
|
|
84
|
+
config;
|
|
85
|
+
owner;
|
|
86
|
+
comment;
|
|
87
|
+
privileges;
|
|
88
|
+
constructor(props) {
|
|
89
|
+
super();
|
|
90
|
+
// Identity fields
|
|
91
|
+
this.schema = props.schema;
|
|
92
|
+
this.name = props.name;
|
|
93
|
+
// Data fields
|
|
94
|
+
this.kind = props.kind;
|
|
95
|
+
this.return_type = props.return_type;
|
|
96
|
+
this.return_type_schema = props.return_type_schema;
|
|
97
|
+
this.language = props.language;
|
|
98
|
+
this.security_definer = props.security_definer;
|
|
99
|
+
this.volatility = props.volatility;
|
|
100
|
+
this.parallel_safety = props.parallel_safety;
|
|
101
|
+
this.execution_cost = props.execution_cost;
|
|
102
|
+
this.result_rows = props.result_rows;
|
|
103
|
+
this.is_strict = props.is_strict;
|
|
104
|
+
this.leakproof = props.leakproof;
|
|
105
|
+
this.returns_set = props.returns_set;
|
|
106
|
+
this.argument_count = props.argument_count;
|
|
107
|
+
this.argument_default_count = props.argument_default_count;
|
|
108
|
+
this.argument_names = props.argument_names;
|
|
109
|
+
this.argument_types = props.argument_types;
|
|
110
|
+
this.all_argument_types = props.all_argument_types;
|
|
111
|
+
this.argument_modes = props.argument_modes;
|
|
112
|
+
this.argument_defaults = props.argument_defaults;
|
|
113
|
+
this.source_code = props.source_code;
|
|
114
|
+
this.binary_path = props.binary_path;
|
|
115
|
+
this.sql_body = props.sql_body;
|
|
116
|
+
this.definition = props.definition;
|
|
117
|
+
this.config = props.config;
|
|
118
|
+
this.owner = props.owner;
|
|
119
|
+
this.comment = props.comment;
|
|
120
|
+
this.privileges = props.privileges;
|
|
121
|
+
}
|
|
122
|
+
get stableId() {
|
|
123
|
+
const args = this.argument_types?.join(",") ?? "";
|
|
124
|
+
return `procedure:${this.schema}.${this.name}(${args})`;
|
|
125
|
+
}
|
|
126
|
+
get identityFields() {
|
|
127
|
+
return {
|
|
128
|
+
schema: this.schema,
|
|
129
|
+
name: this.name,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
get dataFields() {
|
|
133
|
+
return {
|
|
134
|
+
kind: this.kind,
|
|
135
|
+
return_type: this.return_type,
|
|
136
|
+
return_type_schema: this.return_type_schema,
|
|
137
|
+
language: this.language,
|
|
138
|
+
security_definer: this.security_definer,
|
|
139
|
+
volatility: this.volatility,
|
|
140
|
+
parallel_safety: this.parallel_safety,
|
|
141
|
+
// execution_cost and result_rows are planner hints. We intentionally
|
|
142
|
+
// exclude them from dataFields to avoid generating diffs solely due to
|
|
143
|
+
// changes in estimates. They are still used for CREATE serialization.
|
|
144
|
+
is_strict: this.is_strict,
|
|
145
|
+
leakproof: this.leakproof,
|
|
146
|
+
returns_set: this.returns_set,
|
|
147
|
+
argument_count: this.argument_count,
|
|
148
|
+
argument_default_count: this.argument_default_count,
|
|
149
|
+
argument_names: this.argument_names,
|
|
150
|
+
argument_types: this.argument_types,
|
|
151
|
+
all_argument_types: this.all_argument_types,
|
|
152
|
+
argument_modes: this.argument_modes,
|
|
153
|
+
argument_defaults: this.argument_defaults,
|
|
154
|
+
source_code: this.source_code,
|
|
155
|
+
binary_path: this.binary_path,
|
|
156
|
+
sql_body: this.sql_body,
|
|
157
|
+
definition: this.definition,
|
|
158
|
+
config: this.config,
|
|
159
|
+
owner: this.owner,
|
|
160
|
+
comment: this.comment,
|
|
161
|
+
privileges: this.privileges,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
export async function extractProcedures(sql) {
|
|
166
|
+
return sql.begin(async (sql) => {
|
|
167
|
+
await sql `set search_path = ''`;
|
|
168
|
+
const procedureRows = await sql `
|
|
169
|
+
with extension_oids as (
|
|
170
|
+
select
|
|
171
|
+
objid
|
|
172
|
+
from
|
|
173
|
+
pg_depend d
|
|
174
|
+
where
|
|
175
|
+
d.refclassid = 'pg_extension'::regclass
|
|
176
|
+
and d.classid = 'pg_proc'::regclass
|
|
177
|
+
)
|
|
178
|
+
select
|
|
179
|
+
p.pronamespace::regnamespace::text as schema,
|
|
180
|
+
quote_ident(p.proname) as name,
|
|
181
|
+
p.prokind as kind,
|
|
182
|
+
format_type(p.prorettype, null) as return_type,
|
|
183
|
+
rt.typnamespace::regnamespace::text as return_type_schema,
|
|
184
|
+
l.lanname as language,
|
|
185
|
+
p.prosecdef as security_definer,
|
|
186
|
+
p.provolatile as volatility,
|
|
187
|
+
p.proparallel as parallel_safety,
|
|
188
|
+
p.procost as execution_cost,
|
|
189
|
+
p.prorows as result_rows,
|
|
190
|
+
p.proisstrict as is_strict,
|
|
191
|
+
p.proleakproof as leakproof,
|
|
192
|
+
p.proretset as returns_set,
|
|
193
|
+
p.pronargs as argument_count,
|
|
194
|
+
p.pronargdefaults as argument_default_count,
|
|
195
|
+
-- quote argument names server-side for safe serialization
|
|
196
|
+
case when p.proargnames is null then null
|
|
197
|
+
else array(select quote_ident(n) from unnest(p.proargnames) as n)
|
|
198
|
+
end as argument_names,
|
|
199
|
+
array(
|
|
200
|
+
select format_type(oid, null)
|
|
201
|
+
from unnest(p.proargtypes) as oid
|
|
202
|
+
) as argument_types,
|
|
203
|
+
array(
|
|
204
|
+
select format_type(oid, null)
|
|
205
|
+
from unnest(p.proallargtypes) as oid
|
|
206
|
+
) as all_argument_types,
|
|
207
|
+
p.proargmodes as argument_modes,
|
|
208
|
+
pg_get_expr(p.proargdefaults, 0) as argument_defaults,
|
|
209
|
+
p.prosrc as source_code,
|
|
210
|
+
p.probin as binary_path,
|
|
211
|
+
pg_get_function_sqlbody(p.oid) as sql_body,
|
|
212
|
+
pg_get_functiondef(p.oid) as definition,
|
|
213
|
+
p.proconfig as config,
|
|
214
|
+
p.proowner::regrole::text as owner,
|
|
215
|
+
obj_description(p.oid, 'pg_proc') as comment,
|
|
216
|
+
coalesce(
|
|
217
|
+
(
|
|
218
|
+
select json_agg(
|
|
219
|
+
json_build_object(
|
|
220
|
+
'grantee', case when x.grantee = 0 then 'PUBLIC' else x.grantee::regrole::text end,
|
|
221
|
+
'privilege', x.privilege_type,
|
|
222
|
+
'grantable', x.is_grantable
|
|
223
|
+
)
|
|
224
|
+
order by x.grantee, x.privilege_type
|
|
225
|
+
)
|
|
226
|
+
from lateral aclexplode(p.proacl) as x(grantor, grantee, privilege_type, is_grantable)
|
|
227
|
+
), '[]'
|
|
228
|
+
) as privileges
|
|
229
|
+
from
|
|
230
|
+
pg_catalog.pg_proc p
|
|
231
|
+
inner join pg_catalog.pg_language l on l.oid = p.prolang
|
|
232
|
+
left join pg_catalog.pg_type rt on rt.oid = p.prorettype
|
|
233
|
+
left outer join extension_oids e on p.oid = e.objid
|
|
234
|
+
where not p.pronamespace::regnamespace::text like any(array['pg\\_%', 'information\\_schema'])
|
|
235
|
+
and e.objid is null
|
|
236
|
+
and l.lanname not in ('c', 'internal')
|
|
237
|
+
order by
|
|
238
|
+
1, 2;
|
|
239
|
+
`;
|
|
240
|
+
// Validate and parse each row using the Zod schema
|
|
241
|
+
const validatedRows = procedureRows.map((row) => procedurePropsSchema.parse(row));
|
|
242
|
+
return validatedRows.map((row) => new Procedure(row));
|
|
243
|
+
});
|
|
244
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format function arguments for CREATE/DROP FUNCTION statements.
|
|
3
|
+
*
|
|
4
|
+
* @param argNames - Array of argument names (can be null)
|
|
5
|
+
* @param argTypes - Array of argument types (required)
|
|
6
|
+
* @param argModes - Array of argument modes (can be null)
|
|
7
|
+
* @returns Formatted argument string
|
|
8
|
+
*/
|
|
9
|
+
export declare function formatFunctionArguments(argNames: string[] | null, argTypes: string[] | null, argModes: string[] | null): string;
|
|
10
|
+
/**
|
|
11
|
+
* Format a GUC value for SET ... TO ... in function/procedure definitions.
|
|
12
|
+
* Applies quoting rules consistent with PostgreSQL docs and psql style.
|
|
13
|
+
*/
|
|
14
|
+
export declare function formatConfigValue(key: string, rawValue: string): string;
|