@supabase/pg-delta 1.0.0-alpha.3 → 1.0.0-alpha.5
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/README.md +41 -2
- package/dist/cli/app.js +26 -3
- package/dist/cli/bin/cli.js +5 -0
- package/dist/cli/commands/catalog-export.d.ts +5 -0
- package/dist/cli/commands/catalog-export.js +64 -0
- package/dist/cli/commands/declarative-apply.d.ts +6 -0
- package/dist/cli/commands/declarative-apply.js +288 -0
- package/dist/cli/commands/declarative-export.d.ts +5 -0
- package/dist/cli/commands/declarative-export.js +245 -0
- package/dist/cli/commands/plan.js +40 -6
- package/dist/cli/exit-code.d.ts +2 -0
- package/dist/cli/exit-code.js +7 -0
- package/dist/cli/formatters/tree/tree.js +3 -2
- package/dist/cli/utils/apply-display.d.ts +52 -0
- package/dist/cli/utils/apply-display.js +183 -0
- package/dist/cli/utils/export-display.d.ts +43 -0
- package/dist/cli/utils/export-display.js +202 -0
- package/dist/cli/utils/resolve-input.d.ts +7 -0
- package/dist/cli/utils/resolve-input.js +13 -0
- package/dist/cli/utils.d.ts +2 -0
- package/dist/cli/utils.js +1 -1
- package/dist/core/catalog-export/index.d.ts +11 -0
- package/dist/core/catalog-export/index.js +10 -0
- package/dist/core/catalog.diff.d.ts +1 -0
- package/dist/core/catalog.diff.js +64 -48
- package/dist/core/catalog.model.d.ts +14 -1
- package/dist/core/catalog.model.js +103 -1
- package/dist/core/catalog.snapshot.d.ts +66 -0
- package/dist/core/catalog.snapshot.js +206 -0
- package/dist/core/declarative-apply/discover-sql.d.ts +18 -0
- package/dist/core/declarative-apply/discover-sql.js +86 -0
- package/dist/core/declarative-apply/extract-catalog-providers.d.ts +23 -0
- package/dist/core/declarative-apply/extract-catalog-providers.js +159 -0
- package/dist/core/declarative-apply/index.d.ts +49 -0
- package/dist/core/declarative-apply/index.js +134 -0
- package/dist/core/declarative-apply/round-apply.d.ts +100 -0
- package/dist/core/declarative-apply/round-apply.js +378 -0
- package/dist/core/export/file-mapper.d.ts +71 -0
- package/dist/core/export/file-mapper.js +474 -0
- package/dist/core/export/grouper.d.ts +13 -0
- package/dist/core/export/grouper.js +76 -0
- package/dist/core/export/index.d.ts +45 -0
- package/dist/core/export/index.js +63 -0
- package/dist/core/export/types.d.ts +84 -0
- package/dist/core/export/types.js +25 -0
- package/dist/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
- package/dist/core/integrations/filter/dsl.d.ts +38 -1
- package/dist/core/integrations/filter/dsl.js +20 -2
- package/dist/core/integrations/filter/extractors.js +42 -0
- package/dist/core/integrations/integration-dsl.d.ts +10 -0
- package/dist/core/integrations/supabase.d.ts +8 -0
- package/dist/core/integrations/supabase.js +9 -0
- package/dist/core/objects/aggregate/aggregate.diff.d.ts +2 -8
- package/dist/core/objects/aggregate/aggregate.diff.js +16 -70
- package/dist/core/objects/aggregate/aggregate.model.d.ts +8 -8
- package/dist/core/objects/aggregate/aggregate.model.js +1 -1
- package/dist/core/objects/aggregate/changes/aggregate.create.js +1 -1
- package/dist/core/objects/aggregate/changes/aggregate.drop.js +1 -1
- package/dist/core/objects/base.privilege-diff.d.ts +38 -13
- package/dist/core/objects/base.privilege-diff.js +104 -22
- package/dist/core/objects/base.privilege.d.ts +1 -0
- package/dist/core/objects/base.privilege.js +9 -2
- package/dist/core/objects/collation/collation.diff.d.ts +2 -3
- package/dist/core/objects/diff-context.d.ts +15 -0
- package/dist/core/objects/diff-context.js +1 -0
- package/dist/core/objects/domain/changes/domain.create.js +4 -2
- package/dist/core/objects/domain/domain.diff.d.ts +2 -8
- package/dist/core/objects/domain/domain.diff.js +16 -77
- package/dist/core/objects/domain/domain.model.js +1 -1
- package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +2 -3
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts +2 -8
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js +13 -77
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +2 -2
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.d.ts +2 -8
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +16 -77
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +1 -1
- package/dist/core/objects/foreign-data-wrapper/server/server.diff.d.ts +2 -8
- package/dist/core/objects/foreign-data-wrapper/server/server.diff.js +13 -77
- package/dist/core/objects/language/language.diff.d.ts +2 -5
- package/dist/core/objects/language/language.diff.js +7 -39
- package/dist/core/objects/materialized-view/materialized-view.diff.d.ts +2 -8
- package/dist/core/objects/materialized-view/materialized-view.diff.js +16 -158
- package/dist/core/objects/materialized-view/materialized-view.model.d.ts +3 -3
- package/dist/core/objects/materialized-view/materialized-view.model.js +1 -1
- package/dist/core/objects/procedure/changes/procedure.alter.js +12 -12
- package/dist/core/objects/procedure/procedure.diff.d.ts +2 -8
- package/dist/core/objects/procedure/procedure.diff.js +16 -77
- package/dist/core/objects/procedure/procedure.model.d.ts +9 -9
- package/dist/core/objects/procedure/procedure.model.js +1 -1
- package/dist/core/objects/publication/changes/publication.alter.d.ts +0 -9
- package/dist/core/objects/publication/changes/publication.alter.js +0 -14
- package/dist/core/objects/publication/changes/publication.types.d.ts +2 -2
- package/dist/core/objects/publication/publication.diff.d.ts +2 -3
- package/dist/core/objects/publication/publication.diff.js +8 -13
- package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +3 -3
- package/dist/core/objects/rls-policy/rls-policy.model.d.ts +2 -2
- package/dist/core/objects/role/role.diff.js +22 -1
- package/dist/core/objects/role/role.model.d.ts +4 -3
- package/dist/core/objects/role/role.model.js +118 -12
- package/dist/core/objects/rule/rule.model.d.ts +1 -1
- package/dist/core/objects/schema/schema.diff.d.ts +2 -8
- package/dist/core/objects/schema/schema.diff.js +16 -77
- package/dist/core/objects/schema/schema.model.js +1 -1
- package/dist/core/objects/sequence/sequence.diff.d.ts +2 -8
- package/dist/core/objects/sequence/sequence.diff.js +16 -79
- package/dist/core/objects/sequence/sequence.model.js +1 -1
- package/dist/core/objects/subscription/subscription.diff.d.ts +2 -3
- package/dist/core/objects/table/changes/table.create.js +3 -0
- package/dist/core/objects/table/table.diff.d.ts +2 -8
- package/dist/core/objects/table/table.diff.js +26 -157
- package/dist/core/objects/table/table.model.d.ts +25 -22
- package/dist/core/objects/table/table.model.js +4 -1
- package/dist/core/objects/trigger/changes/trigger.alter.js +23 -0
- package/dist/core/objects/trigger/changes/trigger.create.js +4 -5
- package/dist/core/objects/trigger/trigger.model.d.ts +9 -0
- package/dist/core/objects/trigger/trigger.model.js +14 -0
- package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +2 -8
- package/dist/core/objects/type/composite-type/composite-type.diff.js +16 -77
- package/dist/core/objects/type/composite-type/composite-type.model.d.ts +3 -3
- package/dist/core/objects/type/composite-type/composite-type.model.js +2 -1
- package/dist/core/objects/type/enum/enum.diff.d.ts +2 -8
- package/dist/core/objects/type/enum/enum.diff.js +25 -112
- package/dist/core/objects/type/enum/enum.model.js +1 -1
- package/dist/core/objects/type/range/changes/range.create.js +6 -3
- package/dist/core/objects/type/range/range.diff.d.ts +2 -8
- package/dist/core/objects/type/range/range.diff.js +16 -77
- package/dist/core/objects/type/range/range.model.js +1 -1
- package/dist/core/objects/view/view.diff.d.ts +2 -8
- package/dist/core/objects/view/view.diff.js +16 -158
- package/dist/core/objects/view/view.model.d.ts +18 -4
- package/dist/core/objects/view/view.model.js +3 -13
- package/dist/core/plan/apply.js +11 -28
- package/dist/core/plan/create.d.ts +19 -6
- package/dist/core/plan/create.js +134 -155
- package/dist/core/plan/serialize.js +16 -4
- package/dist/core/plan/sql-format/constants.d.ts +2 -0
- package/dist/core/plan/sql-format/constants.js +11 -0
- package/dist/core/plan/sql-format/fixtures.d.ts +2 -0
- package/dist/core/plan/sql-format/fixtures.js +2447 -0
- package/dist/core/plan/sql-format/format-utils.d.ts +37 -0
- package/dist/core/plan/sql-format/format-utils.js +274 -0
- package/dist/core/plan/sql-format/formatters.d.ts +20 -0
- package/dist/core/plan/sql-format/formatters.js +737 -0
- package/dist/core/plan/sql-format/index.d.ts +2 -0
- package/dist/core/plan/sql-format/index.js +98 -0
- package/dist/core/plan/sql-format/keyword-case.d.ts +2 -0
- package/dist/core/plan/sql-format/keyword-case.js +893 -0
- package/dist/core/plan/sql-format/protect.d.ts +3 -0
- package/dist/core/plan/sql-format/protect.js +269 -0
- package/dist/core/plan/sql-format/sql-scanner.d.ts +59 -0
- package/dist/core/plan/sql-format/sql-scanner.js +202 -0
- package/dist/core/plan/sql-format/tokenizer.d.ts +22 -0
- package/dist/core/plan/sql-format/tokenizer.js +118 -0
- package/dist/core/plan/sql-format/types.d.ts +28 -0
- package/dist/core/plan/sql-format/types.js +1 -0
- package/dist/core/plan/sql-format/wrap.d.ts +2 -0
- package/dist/core/plan/sql-format/wrap.js +165 -0
- package/dist/core/plan/sql-format.d.ts +2 -0
- package/dist/core/plan/sql-format.js +1 -0
- package/dist/core/plan/ssl-config.d.ts +32 -0
- package/dist/core/plan/ssl-config.js +115 -0
- package/dist/core/plan/statements.d.ts +2 -1
- package/dist/core/plan/statements.js +6 -2
- package/dist/core/plan/types.d.ts +6 -0
- package/dist/core/postgres-config.d.ts +29 -0
- package/dist/core/postgres-config.js +83 -2
- package/dist/core/sort/graph-builder.js +10 -0
- package/dist/core/sort/logical-sort.js +31 -23
- package/dist/core/test-utils/assert-valid-sql.d.ts +10 -0
- package/dist/core/test-utils/assert-valid-sql.js +19 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +7 -1
- package/package.json +54 -22
- package/src/cli/app.ts +52 -0
- package/src/cli/bin/cli.ts +15 -0
- package/src/cli/commands/apply.ts +101 -0
- package/src/cli/commands/catalog-export.ts +78 -0
- package/src/cli/commands/declarative-apply.diagnostics.test.ts +77 -0
- package/src/cli/commands/declarative-apply.ts +380 -0
- package/src/cli/commands/declarative-export.ts +330 -0
- package/src/cli/commands/plan.ts +216 -0
- package/src/cli/commands/sync.ts +185 -0
- package/src/cli/exit-code.test.ts +19 -0
- package/src/cli/exit-code.ts +7 -0
- package/src/cli/formatters/index.ts +5 -0
- package/src/cli/formatters/tree/tree-builder.ts +380 -0
- package/src/cli/formatters/tree/tree-renderer.ts +372 -0
- package/src/cli/formatters/tree/tree.ts +238 -0
- package/src/cli/utils/apply-display.test.ts +348 -0
- package/src/cli/utils/apply-display.ts +238 -0
- package/src/cli/utils/export-display.test.ts +103 -0
- package/src/cli/utils/export-display.ts +275 -0
- package/src/cli/utils/integrations.test.ts +44 -0
- package/src/cli/utils/integrations.ts +42 -0
- package/src/cli/utils/resolve-input.test.ts +38 -0
- package/src/cli/utils/resolve-input.ts +17 -0
- package/src/cli/utils.ts +231 -0
- package/src/core/catalog-export/index.ts +20 -0
- package/src/core/catalog.diff.ts +247 -0
- package/src/core/catalog.model.test.ts +122 -0
- package/src/core/catalog.model.ts +510 -0
- package/src/core/catalog.snapshot.test.ts +464 -0
- package/src/core/catalog.snapshot.ts +289 -0
- package/src/core/change.types.ts +44 -0
- package/src/core/context.ts +26 -0
- package/src/core/declarative-apply/discover-sql.test.ts +103 -0
- package/src/core/declarative-apply/discover-sql.ts +107 -0
- package/src/core/declarative-apply/extract-catalog-providers.ts +220 -0
- package/src/core/declarative-apply/index.test.ts +67 -0
- package/src/core/declarative-apply/index.ts +205 -0
- package/src/core/declarative-apply/round-apply.test.ts +504 -0
- package/src/core/declarative-apply/round-apply.ts +562 -0
- package/src/core/depend.ts +1870 -0
- package/src/core/expand-replace-dependencies.test.ts +70 -0
- package/src/core/expand-replace-dependencies.ts +380 -0
- package/src/core/export/file-mapper.test.ts +816 -0
- package/src/core/export/file-mapper.ts +574 -0
- package/src/core/export/grouper.ts +108 -0
- package/src/core/export/index.ts +129 -0
- package/src/core/export/types.ts +104 -0
- package/src/core/fingerprint.ts +204 -0
- package/src/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
- package/src/core/integrations/filter/dsl.test.ts +211 -0
- package/src/core/integrations/filter/dsl.ts +266 -0
- package/src/core/integrations/filter/extractors.test.ts +244 -0
- package/src/core/integrations/filter/extractors.ts +187 -0
- package/src/core/integrations/filter/filter.types.ts +3 -0
- package/src/core/integrations/integration-dsl.ts +34 -0
- package/src/core/integrations/integration.types.ts +7 -0
- package/src/core/integrations/serialize/dsl.test.ts +91 -0
- package/src/core/integrations/serialize/dsl.ts +77 -0
- package/src/core/integrations/serialize/serialize.types.ts +3 -0
- package/src/core/integrations/supabase.ts +130 -0
- package/src/core/objects/aggregate/aggregate.diff.test.ts +215 -0
- package/src/core/objects/aggregate/aggregate.diff.ts +222 -0
- package/src/core/objects/aggregate/aggregate.model.ts +317 -0
- package/src/core/objects/aggregate/changes/aggregate.alter.test.ts +66 -0
- package/src/core/objects/aggregate/changes/aggregate.alter.ts +32 -0
- package/src/core/objects/aggregate/changes/aggregate.base.ts +20 -0
- package/src/core/objects/aggregate/changes/aggregate.comment.test.ts +89 -0
- package/src/core/objects/aggregate/changes/aggregate.comment.ts +62 -0
- package/src/core/objects/aggregate/changes/aggregate.create.test.ts +104 -0
- package/src/core/objects/aggregate/changes/aggregate.create.ts +329 -0
- package/src/core/objects/aggregate/changes/aggregate.drop.test.ts +82 -0
- package/src/core/objects/aggregate/changes/aggregate.drop.ts +32 -0
- package/src/core/objects/aggregate/changes/aggregate.privilege.test.ts +136 -0
- package/src/core/objects/aggregate/changes/aggregate.privilege.ts +146 -0
- package/src/core/objects/aggregate/changes/aggregate.types.ts +12 -0
- package/src/core/objects/base.change.ts +62 -0
- package/src/core/objects/base.default-privileges.ts +204 -0
- package/src/core/objects/base.diff.ts +20 -0
- package/src/core/objects/base.model.ts +82 -0
- package/src/core/objects/base.privilege-diff.ts +447 -0
- package/src/core/objects/base.privilege.ts +191 -0
- package/src/core/objects/collation/changes/collation.alter.test.ts +68 -0
- package/src/core/objects/collation/changes/collation.alter.ts +79 -0
- package/src/core/objects/collation/changes/collation.base.ts +20 -0
- package/src/core/objects/collation/changes/collation.comment.ts +68 -0
- package/src/core/objects/collation/changes/collation.create.test.ts +56 -0
- package/src/core/objects/collation/changes/collation.create.ts +106 -0
- package/src/core/objects/collation/changes/collation.drop.test.ts +31 -0
- package/src/core/objects/collation/changes/collation.drop.ts +37 -0
- package/src/core/objects/collation/changes/collation.types.ts +10 -0
- package/src/core/objects/collation/collation.diff.test.ts +97 -0
- package/src/core/objects/collation/collation.diff.ts +127 -0
- package/src/core/objects/collation/collation.model.ts +224 -0
- package/src/core/objects/diff-context.ts +16 -0
- package/src/core/objects/domain/changes/domain.alter.test.ts +335 -0
- package/src/core/objects/domain/changes/domain.alter.ts +286 -0
- package/src/core/objects/domain/changes/domain.base.ts +20 -0
- package/src/core/objects/domain/changes/domain.comment.ts +59 -0
- package/src/core/objects/domain/changes/domain.create.test.ts +95 -0
- package/src/core/objects/domain/changes/domain.create.ts +124 -0
- package/src/core/objects/domain/changes/domain.drop.test.ts +33 -0
- package/src/core/objects/domain/changes/domain.drop.ts +34 -0
- package/src/core/objects/domain/changes/domain.privilege.ts +171 -0
- package/src/core/objects/domain/changes/domain.types.ts +12 -0
- package/src/core/objects/domain/domain.diff.test.ts +284 -0
- package/src/core/objects/domain/domain.diff.ts +295 -0
- package/src/core/objects/domain/domain.model.ts +190 -0
- package/src/core/objects/event-trigger/changes/event-trigger.alter.test.ts +57 -0
- package/src/core/objects/event-trigger/changes/event-trigger.alter.ts +82 -0
- package/src/core/objects/event-trigger/changes/event-trigger.base.ts +20 -0
- package/src/core/objects/event-trigger/changes/event-trigger.comment.ts +66 -0
- package/src/core/objects/event-trigger/changes/event-trigger.create.test.ts +27 -0
- package/src/core/objects/event-trigger/changes/event-trigger.create.ts +72 -0
- package/src/core/objects/event-trigger/changes/event-trigger.drop.test.ts +25 -0
- package/src/core/objects/event-trigger/changes/event-trigger.drop.ts +34 -0
- package/src/core/objects/event-trigger/changes/event-trigger.types.ts +10 -0
- package/src/core/objects/event-trigger/event-trigger.diff.test.ts +131 -0
- package/src/core/objects/event-trigger/event-trigger.diff.ts +127 -0
- package/src/core/objects/event-trigger/event-trigger.model.ts +106 -0
- package/src/core/objects/extension/changes/extension.alter.test.ts +63 -0
- package/src/core/objects/extension/changes/extension.alter.ts +78 -0
- package/src/core/objects/extension/changes/extension.base.ts +20 -0
- package/src/core/objects/extension/changes/extension.comment.ts +64 -0
- package/src/core/objects/extension/changes/extension.create.test.ts +28 -0
- package/src/core/objects/extension/changes/extension.create.ts +63 -0
- package/src/core/objects/extension/changes/extension.drop.test.ts +26 -0
- package/src/core/objects/extension/changes/extension.drop.ts +34 -0
- package/src/core/objects/extension/changes/extension.types.ts +10 -0
- package/src/core/objects/extension/extension.diff.test.ts +42 -0
- package/src/core/objects/extension/extension.diff.ts +90 -0
- package/src/core/objects/extension/extension.model.test.ts +98 -0
- package/src/core/objects/extension/extension.model.ts +280 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.test.ts +136 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.ts +101 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.ts +20 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.ts +72 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.test.ts +160 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.ts +95 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.test.ts +26 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.ts +36 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.ts +172 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.ts +12 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.test.ts +286 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.ts +271 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.ts +149 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.ts +10 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.test.ts +340 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.ts +341 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.ts +20 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.ts +72 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.test.ts +210 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.ts +81 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.test.ts +46 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.ts +37 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.ts +181 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.ts +12 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.test.ts +813 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.ts +343 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.ts +242 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.test.ts +183 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.ts +126 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.base.ts +20 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.comment.ts +60 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.create.test.ts +144 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.create.ts +81 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.test.ts +27 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.ts +34 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.privilege.ts +164 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.types.ts +12 -0
- package/src/core/objects/foreign-data-wrapper/server/server.diff.test.ts +262 -0
- package/src/core/objects/foreign-data-wrapper/server/server.diff.ts +247 -0
- package/src/core/objects/foreign-data-wrapper/server/server.model.ts +133 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.test.ts +91 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.ts +69 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.ts +20 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.test.ts +96 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.ts +66 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.test.ts +60 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.ts +40 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.ts +8 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.test.ts +77 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.ts +107 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.ts +96 -0
- package/src/core/objects/index/changes/index.alter.test.ts +209 -0
- package/src/core/objects/index/changes/index.alter.ts +144 -0
- package/src/core/objects/index/changes/index.base.ts +20 -0
- package/src/core/objects/index/changes/index.comment.ts +63 -0
- package/src/core/objects/index/changes/index.create.test.ts +69 -0
- package/src/core/objects/index/changes/index.create.ts +68 -0
- package/src/core/objects/index/changes/index.drop.test.ts +47 -0
- package/src/core/objects/index/changes/index.drop.ts +34 -0
- package/src/core/objects/index/changes/index.types.ts +6 -0
- package/src/core/objects/index/changes/utils.ts +16 -0
- package/src/core/objects/index/index.diff.test.ts +153 -0
- package/src/core/objects/index/index.diff.ts +243 -0
- package/src/core/objects/index/index.model.ts +370 -0
- package/src/core/objects/language/changes/language.alter.test.ts +36 -0
- package/src/core/objects/language/changes/language.alter.ts +53 -0
- package/src/core/objects/language/changes/language.base.ts +20 -0
- package/src/core/objects/language/changes/language.comment.ts +58 -0
- package/src/core/objects/language/changes/language.create.test.ts +30 -0
- package/src/core/objects/language/changes/language.create.ts +104 -0
- package/src/core/objects/language/changes/language.drop.test.ts +28 -0
- package/src/core/objects/language/changes/language.drop.ts +39 -0
- package/src/core/objects/language/changes/language.privilege.ts +172 -0
- package/src/core/objects/language/changes/language.types.ts +12 -0
- package/src/core/objects/language/language.diff.test.ts +135 -0
- package/src/core/objects/language/language.diff.ts +144 -0
- package/src/core/objects/language/language.model.ts +150 -0
- package/src/core/objects/materialized-view/changes/materialized-view.alter.test.ts +130 -0
- package/src/core/objects/materialized-view/changes/materialized-view.alter.ts +113 -0
- package/src/core/objects/materialized-view/changes/materialized-view.base.ts +20 -0
- package/src/core/objects/materialized-view/changes/materialized-view.comment.ts +176 -0
- package/src/core/objects/materialized-view/changes/materialized-view.create.test.ts +69 -0
- package/src/core/objects/materialized-view/changes/materialized-view.create.ts +93 -0
- package/src/core/objects/materialized-view/changes/materialized-view.drop.test.ts +37 -0
- package/src/core/objects/materialized-view/changes/materialized-view.drop.ts +60 -0
- package/src/core/objects/materialized-view/changes/materialized-view.privilege.ts +212 -0
- package/src/core/objects/materialized-view/changes/materialized-view.types.ts +12 -0
- package/src/core/objects/materialized-view/materialized-view.diff.test.ts +264 -0
- package/src/core/objects/materialized-view/materialized-view.diff.ts +301 -0
- package/src/core/objects/materialized-view/materialized-view.model.ts +258 -0
- package/src/core/objects/procedure/changes/procedure.alter.test.ts +1077 -0
- package/src/core/objects/procedure/changes/procedure.alter.ts +290 -0
- package/src/core/objects/procedure/changes/procedure.base.ts +20 -0
- package/src/core/objects/procedure/changes/procedure.comment.ts +70 -0
- package/src/core/objects/procedure/changes/procedure.create.test.ts +51 -0
- package/src/core/objects/procedure/changes/procedure.create.ts +92 -0
- package/src/core/objects/procedure/changes/procedure.drop.test.ts +90 -0
- package/src/core/objects/procedure/changes/procedure.drop.ts +49 -0
- package/src/core/objects/procedure/changes/procedure.privilege.ts +188 -0
- package/src/core/objects/procedure/changes/procedure.types.ts +12 -0
- package/src/core/objects/procedure/procedure.diff.test.ts +161 -0
- package/src/core/objects/procedure/procedure.diff.ts +341 -0
- package/src/core/objects/procedure/procedure.model.ts +264 -0
- package/src/core/objects/procedure/utils.ts +58 -0
- package/src/core/objects/publication/changes/publication.alter.test.ts +217 -0
- package/src/core/objects/publication/changes/publication.alter.ts +225 -0
- package/src/core/objects/publication/changes/publication.base.ts +20 -0
- package/src/core/objects/publication/changes/publication.comment.test.ts +73 -0
- package/src/core/objects/publication/changes/publication.comment.ts +64 -0
- package/src/core/objects/publication/changes/publication.create.test.ts +90 -0
- package/src/core/objects/publication/changes/publication.create.ts +82 -0
- package/src/core/objects/publication/changes/publication.drop.test.ts +48 -0
- package/src/core/objects/publication/changes/publication.drop.ts +29 -0
- package/src/core/objects/publication/changes/publication.types.ts +24 -0
- package/src/core/objects/publication/publication.diff.test.ts +297 -0
- package/src/core/objects/publication/publication.diff.ts +247 -0
- package/src/core/objects/publication/publication.model.ts +206 -0
- package/src/core/objects/publication/utils.ts +55 -0
- package/src/core/objects/rls-policy/changes/rls-policy.alter.test.ts +267 -0
- package/src/core/objects/rls-policy/changes/rls-policy.alter.ts +128 -0
- package/src/core/objects/rls-policy/changes/rls-policy.base.ts +20 -0
- package/src/core/objects/rls-policy/changes/rls-policy.comment.ts +69 -0
- package/src/core/objects/rls-policy/changes/rls-policy.create.test.ts +81 -0
- package/src/core/objects/rls-policy/changes/rls-policy.create.ts +100 -0
- package/src/core/objects/rls-policy/changes/rls-policy.drop.test.ts +31 -0
- package/src/core/objects/rls-policy/changes/rls-policy.drop.ts +39 -0
- package/src/core/objects/rls-policy/changes/rls-policy.types.ts +10 -0
- package/src/core/objects/rls-policy/rls-policy.diff.test.ts +79 -0
- package/src/core/objects/rls-policy/rls-policy.diff.ts +121 -0
- package/src/core/objects/rls-policy/rls-policy.model.ts +140 -0
- package/src/core/objects/role/changes/role.alter.test.ts +362 -0
- package/src/core/objects/role/changes/role.alter.ts +110 -0
- package/src/core/objects/role/changes/role.base.ts +24 -0
- package/src/core/objects/role/changes/role.comment.ts +55 -0
- package/src/core/objects/role/changes/role.create.test.ts +56 -0
- package/src/core/objects/role/changes/role.create.ts +102 -0
- package/src/core/objects/role/changes/role.drop.test.ts +32 -0
- package/src/core/objects/role/changes/role.drop.ts +34 -0
- package/src/core/objects/role/changes/role.privilege.ts +376 -0
- package/src/core/objects/role/changes/role.types.ts +12 -0
- package/src/core/objects/role/role.diff.test.ts +279 -0
- package/src/core/objects/role/role.diff.ts +499 -0
- package/src/core/objects/role/role.model.ts +452 -0
- package/src/core/objects/rule/changes/rule.alter.test.ts +82 -0
- package/src/core/objects/rule/changes/rule.alter.ts +72 -0
- package/src/core/objects/rule/changes/rule.base.ts +20 -0
- package/src/core/objects/rule/changes/rule.comment.test.ts +58 -0
- package/src/core/objects/rule/changes/rule.comment.ts +62 -0
- package/src/core/objects/rule/changes/rule.create.test.ts +63 -0
- package/src/core/objects/rule/changes/rule.create.ts +42 -0
- package/src/core/objects/rule/changes/rule.drop.test.ts +40 -0
- package/src/core/objects/rule/changes/rule.drop.ts +29 -0
- package/src/core/objects/rule/changes/rule.types.ts +12 -0
- package/src/core/objects/rule/rule.diff.test.ts +132 -0
- package/src/core/objects/rule/rule.diff.ts +79 -0
- package/src/core/objects/rule/rule.model.ts +173 -0
- package/src/core/objects/schema/changes/schema.alter.test.ts +31 -0
- package/src/core/objects/schema/changes/schema.alter.ts +45 -0
- package/src/core/objects/schema/changes/schema.base.ts +20 -0
- package/src/core/objects/schema/changes/schema.comment.ts +56 -0
- package/src/core/objects/schema/changes/schema.create.test.ts +25 -0
- package/src/core/objects/schema/changes/schema.create.ts +47 -0
- package/src/core/objects/schema/changes/schema.drop.test.ts +23 -0
- package/src/core/objects/schema/changes/schema.drop.ts +34 -0
- package/src/core/objects/schema/changes/schema.privilege.ts +175 -0
- package/src/core/objects/schema/changes/schema.types.ts +12 -0
- package/src/core/objects/schema/schema.diff.test.ts +42 -0
- package/src/core/objects/schema/schema.diff.ts +146 -0
- package/src/core/objects/schema/schema.model.ts +107 -0
- package/src/core/objects/sequence/changes/sequence.alter.test.ts +157 -0
- package/src/core/objects/sequence/changes/sequence.alter.ts +115 -0
- package/src/core/objects/sequence/changes/sequence.base.ts +20 -0
- package/src/core/objects/sequence/changes/sequence.comment.ts +60 -0
- package/src/core/objects/sequence/changes/sequence.create.test.ts +89 -0
- package/src/core/objects/sequence/changes/sequence.create.ts +111 -0
- package/src/core/objects/sequence/changes/sequence.drop.test.ts +35 -0
- package/src/core/objects/sequence/changes/sequence.drop.ts +37 -0
- package/src/core/objects/sequence/changes/sequence.privilege.ts +179 -0
- package/src/core/objects/sequence/changes/sequence.types.ts +12 -0
- package/src/core/objects/sequence/sequence.diff.test.ts +255 -0
- package/src/core/objects/sequence/sequence.diff.ts +294 -0
- package/src/core/objects/sequence/sequence.model.ts +185 -0
- package/src/core/objects/subscription/changes/subscription.alter.test.ts +134 -0
- package/src/core/objects/subscription/changes/subscription.alter.ts +110 -0
- package/src/core/objects/subscription/changes/subscription.base.ts +20 -0
- package/src/core/objects/subscription/changes/subscription.comment.test.ts +70 -0
- package/src/core/objects/subscription/changes/subscription.comment.ts +64 -0
- package/src/core/objects/subscription/changes/subscription.create.test.ts +80 -0
- package/src/core/objects/subscription/changes/subscription.create.ts +69 -0
- package/src/core/objects/subscription/changes/subscription.drop.test.ts +48 -0
- package/src/core/objects/subscription/changes/subscription.drop.ts +20 -0
- package/src/core/objects/subscription/changes/subscription.types.ts +22 -0
- package/src/core/objects/subscription/subscription.diff.test.ts +237 -0
- package/src/core/objects/subscription/subscription.diff.ts +242 -0
- package/src/core/objects/subscription/subscription.model.ts +190 -0
- package/src/core/objects/subscription/utils.ts +156 -0
- package/src/core/objects/table/changes/table.alter.test.ts +846 -0
- package/src/core/objects/table/changes/table.alter.ts +806 -0
- package/src/core/objects/table/changes/table.base.ts +20 -0
- package/src/core/objects/table/changes/table.comment.ts +266 -0
- package/src/core/objects/table/changes/table.create.test.ts +188 -0
- package/src/core/objects/table/changes/table.create.ts +192 -0
- package/src/core/objects/table/changes/table.drop.test.ts +36 -0
- package/src/core/objects/table/changes/table.drop.ts +45 -0
- package/src/core/objects/table/changes/table.privilege.ts +200 -0
- package/src/core/objects/table/changes/table.types.ts +12 -0
- package/src/core/objects/table/table.diff.test.ts +868 -0
- package/src/core/objects/table/table.diff.ts +817 -0
- package/src/core/objects/table/table.model.ts +460 -0
- package/src/core/objects/trigger/changes/trigger.alter.test.ts +50 -0
- package/src/core/objects/trigger/changes/trigger.alter.ts +76 -0
- package/src/core/objects/trigger/changes/trigger.base.ts +20 -0
- package/src/core/objects/trigger/changes/trigger.comment.ts +64 -0
- package/src/core/objects/trigger/changes/trigger.create.test.ts +47 -0
- package/src/core/objects/trigger/changes/trigger.create.ts +88 -0
- package/src/core/objects/trigger/changes/trigger.drop.test.ts +47 -0
- package/src/core/objects/trigger/changes/trigger.drop.ts +39 -0
- package/src/core/objects/trigger/changes/trigger.types.ts +10 -0
- package/src/core/objects/trigger/trigger.diff.test.ts +84 -0
- package/src/core/objects/trigger/trigger.diff.ts +116 -0
- package/src/core/objects/trigger/trigger.model.ts +264 -0
- package/src/core/objects/type/composite-type/changes/composite-type.alter.test.ts +208 -0
- package/src/core/objects/type/composite-type/changes/composite-type.alter.ts +174 -0
- package/src/core/objects/type/composite-type/changes/composite-type.base.ts +20 -0
- package/src/core/objects/type/composite-type/changes/composite-type.comment.ts +145 -0
- package/src/core/objects/type/composite-type/changes/composite-type.create.test.ts +106 -0
- package/src/core/objects/type/composite-type/changes/composite-type.create.ts +95 -0
- package/src/core/objects/type/composite-type/changes/composite-type.drop.test.ts +36 -0
- package/src/core/objects/type/composite-type/changes/composite-type.drop.ts +37 -0
- package/src/core/objects/type/composite-type/changes/composite-type.privilege.ts +175 -0
- package/src/core/objects/type/composite-type/changes/composite-type.types.ts +12 -0
- package/src/core/objects/type/composite-type/composite-type.diff.test.ts +269 -0
- package/src/core/objects/type/composite-type/composite-type.diff.ts +310 -0
- package/src/core/objects/type/composite-type/composite-type.model.ts +253 -0
- package/src/core/objects/type/enum/changes/enum.alter.test.ts +113 -0
- package/src/core/objects/type/enum/changes/enum.alter.ts +91 -0
- package/src/core/objects/type/enum/changes/enum.base.ts +20 -0
- package/src/core/objects/type/enum/changes/enum.comment.ts +64 -0
- package/src/core/objects/type/enum/changes/enum.create.test.ts +31 -0
- package/src/core/objects/type/enum/changes/enum.create.ts +56 -0
- package/src/core/objects/type/enum/changes/enum.drop.test.ts +28 -0
- package/src/core/objects/type/enum/changes/enum.drop.ts +34 -0
- package/src/core/objects/type/enum/changes/enum.privilege.ts +175 -0
- package/src/core/objects/type/enum/changes/enum.types.ts +12 -0
- package/src/core/objects/type/enum/enum.diff.test.ts +372 -0
- package/src/core/objects/type/enum/enum.diff.ts +308 -0
- package/src/core/objects/type/enum/enum.model.ts +194 -0
- package/src/core/objects/type/range/changes/range.alter.test.ts +29 -0
- package/src/core/objects/type/range/changes/range.alter.ts +51 -0
- package/src/core/objects/type/range/changes/range.base.ts +20 -0
- package/src/core/objects/type/range/changes/range.comment.ts +64 -0
- package/src/core/objects/type/range/changes/range.create.test.ts +54 -0
- package/src/core/objects/type/range/changes/range.create.ts +155 -0
- package/src/core/objects/type/range/changes/range.drop.test.ts +28 -0
- package/src/core/objects/type/range/changes/range.drop.ts +34 -0
- package/src/core/objects/type/range/changes/range.privilege.ts +175 -0
- package/src/core/objects/type/range/changes/range.types.ts +12 -0
- package/src/core/objects/type/range/range.diff.test.ts +147 -0
- package/src/core/objects/type/range/range.diff.ts +197 -0
- package/src/core/objects/type/range/range.model.ts +187 -0
- package/src/core/objects/type/type.types.ts +5 -0
- package/src/core/objects/utils.ts +171 -0
- package/src/core/objects/view/changes/view.alter.test.ts +115 -0
- package/src/core/objects/view/changes/view.alter.ts +112 -0
- package/src/core/objects/view/changes/view.base.ts +20 -0
- package/src/core/objects/view/changes/view.comment.ts +59 -0
- package/src/core/objects/view/changes/view.create.test.ts +70 -0
- package/src/core/objects/view/changes/view.create.ts +73 -0
- package/src/core/objects/view/changes/view.drop.test.ts +37 -0
- package/src/core/objects/view/changes/view.drop.ts +40 -0
- package/src/core/objects/view/changes/view.privilege.ts +200 -0
- package/src/core/objects/view/changes/view.types.ts +12 -0
- package/src/core/objects/view/view.diff.test.ts +173 -0
- package/src/core/objects/view/view.diff.ts +215 -0
- package/src/core/objects/view/view.model.ts +262 -0
- package/src/core/plan/apply.ts +172 -0
- package/src/core/plan/create.ts +368 -0
- package/src/core/plan/hierarchy.ts +574 -0
- package/src/core/plan/index.ts +29 -0
- package/src/core/plan/io.ts +20 -0
- package/src/core/plan/risk.ts +48 -0
- package/src/core/plan/serialize.test.ts +317 -0
- package/src/core/plan/serialize.ts +209 -0
- package/src/core/plan/sql-format/constants.ts +13 -0
- package/src/core/plan/sql-format/fixtures.ts +2803 -0
- package/src/core/plan/sql-format/format-comment-literals.test.ts +96 -0
- package/src/core/plan/sql-format/format-functions.test.ts +127 -0
- package/src/core/plan/sql-format/format-lowercase-coverage.test.ts +119 -0
- package/src/core/plan/sql-format/format-off.test.ts +806 -0
- package/src/core/plan/sql-format/format-pretty-lower-leading.test.ts +1061 -0
- package/src/core/plan/sql-format/format-pretty-narrow.test.ts +1279 -0
- package/src/core/plan/sql-format/format-pretty-preserve.test.ts +1057 -0
- package/src/core/plan/sql-format/format-pretty-upper.test.ts +1048 -0
- package/src/core/plan/sql-format/format-stress.test.ts +616 -0
- package/src/core/plan/sql-format/format-utils.test.ts +91 -0
- package/src/core/plan/sql-format/format-utils.ts +391 -0
- package/src/core/plan/sql-format/formatters.ts +921 -0
- package/src/core/plan/sql-format/index.ts +149 -0
- package/src/core/plan/sql-format/keyword-case.test.ts +118 -0
- package/src/core/plan/sql-format/keyword-case.ts +1120 -0
- package/src/core/plan/sql-format/protect.test.ts +127 -0
- package/src/core/plan/sql-format/protect.ts +337 -0
- package/src/core/plan/sql-format/sql-scanner.test.ts +240 -0
- package/src/core/plan/sql-format/sql-scanner.ts +252 -0
- package/src/core/plan/sql-format/tokenizer.test.ts +68 -0
- package/src/core/plan/sql-format/tokenizer.ts +152 -0
- package/src/core/plan/sql-format/types.ts +31 -0
- package/src/core/plan/sql-format/wrap.test.ts +119 -0
- package/src/core/plan/sql-format/wrap.ts +196 -0
- package/src/core/plan/sql-format.ts +2 -0
- package/src/core/plan/ssl-config.ts +172 -0
- package/src/core/plan/statements.ts +22 -0
- package/src/core/plan/types.ts +171 -0
- package/src/core/postgres-config.ts +238 -0
- package/src/core/sort/custom-constraints.ts +161 -0
- package/src/core/sort/debug-visualization.ts +239 -0
- package/src/core/sort/dependency-filter.ts +224 -0
- package/src/core/sort/graph-builder.ts +235 -0
- package/src/core/sort/graph-utils.ts +51 -0
- package/src/core/sort/logical-sort.test.ts +371 -0
- package/src/core/sort/logical-sort.ts +597 -0
- package/src/core/sort/sort-changes.ts +234 -0
- package/src/core/sort/topological-sort.test.ts +275 -0
- package/src/core/sort/topological-sort.ts +184 -0
- package/src/core/sort/types.ts +112 -0
- package/src/core/sort/utils.ts +69 -0
- package/src/core/test-utils/assert-valid-sql.ts +20 -0
- package/src/index.ts +38 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { diffObjects } from "../base.diff.js";
|
|
2
|
-
import { diffPrivileges,
|
|
2
|
+
import { diffPrivileges, emitObjectPrivilegeChanges, filterPublicBuiltInDefaults, } from "../base.privilege-diff.js";
|
|
3
3
|
import { deepEqual, hasNonAlterableChanges } from "../utils.js";
|
|
4
4
|
import { AlterAggregateChangeOwner } from "./changes/aggregate.alter.js";
|
|
5
5
|
import { CreateCommentOnAggregate, DropCommentOnAggregate, } from "./changes/aggregate.comment.js";
|
|
@@ -29,48 +29,21 @@ export function diffAggregates(ctx, main, branch) {
|
|
|
29
29
|
// We compare default privileges against desired privileges to generate REVOKE/GRANT statements
|
|
30
30
|
// needed to reach the final desired state.
|
|
31
31
|
const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "aggregate", aggregate.schema ?? "");
|
|
32
|
+
const creatorFilteredDefaults = aggregate.owner !== ctx.currentUser
|
|
33
|
+
? effectiveDefaults.filter((p) => p.grantee !== ctx.currentUser)
|
|
34
|
+
: effectiveDefaults;
|
|
32
35
|
// Filter out PUBLIC's built-in default EXECUTE privilege (PostgreSQL grants it automatically)
|
|
33
36
|
// Reference: https://www.postgresql.org/docs/17/ddl-priv.html Table 5.2
|
|
34
37
|
// This prevents generating unnecessary "GRANT EXECUTE TO PUBLIC" statements
|
|
35
38
|
const desiredPrivileges = filterPublicBuiltInDefaults("aggregate", aggregate.privileges);
|
|
36
39
|
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
37
40
|
// and shouldn't be compared. Use the aggregate owner as the reference.
|
|
38
|
-
const privilegeResults = diffPrivileges(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
changes.push(new GrantAggregatePrivileges({
|
|
45
|
-
aggregate,
|
|
46
|
-
grantee,
|
|
47
|
-
privileges: list,
|
|
48
|
-
version: ctx.version,
|
|
49
|
-
}));
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
// Generate revoke changes
|
|
53
|
-
if (result.revokes.length > 0) {
|
|
54
|
-
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
55
|
-
for (const [, list] of revokeGroups) {
|
|
56
|
-
changes.push(new RevokeAggregatePrivileges({
|
|
57
|
-
aggregate,
|
|
58
|
-
grantee,
|
|
59
|
-
privileges: list,
|
|
60
|
-
version: ctx.version,
|
|
61
|
-
}));
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
// Generate revoke grant option changes
|
|
65
|
-
if (result.revokeGrantOption.length > 0) {
|
|
66
|
-
changes.push(new RevokeGrantOptionAggregatePrivileges({
|
|
67
|
-
aggregate,
|
|
68
|
-
grantee,
|
|
69
|
-
privilegeNames: result.revokeGrantOption,
|
|
70
|
-
version: ctx.version,
|
|
71
|
-
}));
|
|
72
|
-
}
|
|
73
|
-
}
|
|
41
|
+
const privilegeResults = diffPrivileges(filterPublicBuiltInDefaults("aggregate", creatorFilteredDefaults), desiredPrivileges, aggregate.owner);
|
|
42
|
+
changes.push(...emitObjectPrivilegeChanges(privilegeResults, aggregate, aggregate, "aggregate", {
|
|
43
|
+
Grant: GrantAggregatePrivileges,
|
|
44
|
+
Revoke: RevokeAggregatePrivileges,
|
|
45
|
+
RevokeGrantOption: RevokeGrantOptionAggregatePrivileges,
|
|
46
|
+
}, ctx.version));
|
|
74
47
|
}
|
|
75
48
|
for (const aggregateId of dropped) {
|
|
76
49
|
changes.push(new DropAggregate({ aggregate: main[aggregateId] }));
|
|
@@ -148,39 +121,12 @@ export function diffAggregates(ctx, main, branch) {
|
|
|
148
121
|
const branchPrivilegesFiltered = filterPublicBuiltInDefaults("aggregate", branchAggregate.privileges);
|
|
149
122
|
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
150
123
|
// and shouldn't be compared. Use branch owner as the reference.
|
|
151
|
-
const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchAggregate.owner
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
aggregate: branchAggregate,
|
|
158
|
-
grantee,
|
|
159
|
-
privileges: list,
|
|
160
|
-
version: ctx.version,
|
|
161
|
-
}));
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
if (result.revokes.length > 0) {
|
|
165
|
-
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
166
|
-
for (const [, list] of revokeGroups) {
|
|
167
|
-
changes.push(new RevokeAggregatePrivileges({
|
|
168
|
-
aggregate: mainAggregate,
|
|
169
|
-
grantee,
|
|
170
|
-
privileges: list,
|
|
171
|
-
version: ctx.version,
|
|
172
|
-
}));
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
if (result.revokeGrantOption.length > 0) {
|
|
176
|
-
changes.push(new RevokeGrantOptionAggregatePrivileges({
|
|
177
|
-
aggregate: mainAggregate,
|
|
178
|
-
grantee,
|
|
179
|
-
privilegeNames: result.revokeGrantOption,
|
|
180
|
-
version: ctx.version,
|
|
181
|
-
}));
|
|
182
|
-
}
|
|
183
|
-
}
|
|
124
|
+
const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchAggregate.owner);
|
|
125
|
+
changes.push(...emitObjectPrivilegeChanges(privilegeResults, branchAggregate, mainAggregate, "aggregate", {
|
|
126
|
+
Grant: GrantAggregatePrivileges,
|
|
127
|
+
Revoke: RevokeAggregatePrivileges,
|
|
128
|
+
RevokeGrantOption: RevokeGrantOptionAggregatePrivileges,
|
|
129
|
+
}, ctx.version));
|
|
184
130
|
}
|
|
185
131
|
return changes;
|
|
186
132
|
}
|
|
@@ -16,9 +16,9 @@ declare const aggregatePropsSchema: z.ZodObject<{
|
|
|
16
16
|
return_type: z.ZodString;
|
|
17
17
|
return_type_schema: z.ZodNullable<z.ZodString>;
|
|
18
18
|
parallel_safety: z.ZodEnum<{
|
|
19
|
-
r: "r";
|
|
20
19
|
u: "u";
|
|
21
20
|
s: "s";
|
|
21
|
+
r: "r";
|
|
22
22
|
}>;
|
|
23
23
|
is_strict: z.ZodBoolean;
|
|
24
24
|
transition_function: z.ZodString;
|
|
@@ -28,8 +28,8 @@ declare const aggregatePropsSchema: z.ZodObject<{
|
|
|
28
28
|
final_function: z.ZodNullable<z.ZodString>;
|
|
29
29
|
final_function_extra_args: z.ZodBoolean;
|
|
30
30
|
final_function_modify: z.ZodNullable<z.ZodEnum<{
|
|
31
|
-
r: "r";
|
|
32
31
|
s: "s";
|
|
32
|
+
r: "r";
|
|
33
33
|
w: "w";
|
|
34
34
|
}>>;
|
|
35
35
|
combine_function: z.ZodNullable<z.ZodString>;
|
|
@@ -44,8 +44,8 @@ declare const aggregatePropsSchema: z.ZodObject<{
|
|
|
44
44
|
moving_final_function: z.ZodNullable<z.ZodString>;
|
|
45
45
|
moving_final_function_extra_args: z.ZodBoolean;
|
|
46
46
|
moving_final_function_modify: z.ZodNullable<z.ZodEnum<{
|
|
47
|
-
r: "r";
|
|
48
47
|
s: "s";
|
|
48
|
+
r: "r";
|
|
49
49
|
w: "w";
|
|
50
50
|
}>>;
|
|
51
51
|
moving_initial_condition: z.ZodNullable<z.ZodString>;
|
|
@@ -56,8 +56,8 @@ declare const aggregatePropsSchema: z.ZodObject<{
|
|
|
56
56
|
argument_types: z.ZodNullable<z.ZodArray<z.ZodString>>;
|
|
57
57
|
all_argument_types: z.ZodNullable<z.ZodArray<z.ZodString>>;
|
|
58
58
|
argument_modes: z.ZodNullable<z.ZodArray<z.ZodEnum<{
|
|
59
|
-
o: "o";
|
|
60
59
|
i: "i";
|
|
60
|
+
o: "o";
|
|
61
61
|
b: "b";
|
|
62
62
|
v: "v";
|
|
63
63
|
t: "t";
|
|
@@ -129,7 +129,7 @@ export declare class Aggregate extends BasePgModel {
|
|
|
129
129
|
num_direct_args: number;
|
|
130
130
|
return_type: string;
|
|
131
131
|
return_type_schema: string | null;
|
|
132
|
-
parallel_safety: "
|
|
132
|
+
parallel_safety: "u" | "s" | "r";
|
|
133
133
|
is_strict: boolean;
|
|
134
134
|
transition_function: string;
|
|
135
135
|
state_data_type: string;
|
|
@@ -137,7 +137,7 @@ export declare class Aggregate extends BasePgModel {
|
|
|
137
137
|
state_data_space: number;
|
|
138
138
|
final_function: string | null;
|
|
139
139
|
final_function_extra_args: boolean;
|
|
140
|
-
final_function_modify: "
|
|
140
|
+
final_function_modify: "s" | "r" | "w" | null;
|
|
141
141
|
combine_function: string | null;
|
|
142
142
|
serial_function: string | null;
|
|
143
143
|
deserial_function: string | null;
|
|
@@ -149,7 +149,7 @@ export declare class Aggregate extends BasePgModel {
|
|
|
149
149
|
moving_state_data_space: number | null;
|
|
150
150
|
moving_final_function: string | null;
|
|
151
151
|
moving_final_function_extra_args: boolean;
|
|
152
|
-
moving_final_function_modify: "
|
|
152
|
+
moving_final_function_modify: "s" | "r" | "w" | null;
|
|
153
153
|
moving_initial_condition: string | null;
|
|
154
154
|
sort_operator: string | null;
|
|
155
155
|
argument_count: number;
|
|
@@ -157,7 +157,7 @@ export declare class Aggregate extends BasePgModel {
|
|
|
157
157
|
argument_names: string[] | null;
|
|
158
158
|
argument_types: string[] | null;
|
|
159
159
|
all_argument_types: string[] | null;
|
|
160
|
-
argument_modes: ("
|
|
160
|
+
argument_modes: ("i" | "o" | "b" | "v" | "t")[] | null;
|
|
161
161
|
argument_defaults: string | null;
|
|
162
162
|
identity_arguments: string;
|
|
163
163
|
owner: string;
|
|
@@ -273,7 +273,7 @@ select
|
|
|
273
273
|
)
|
|
274
274
|
order by x.grantee, x.privilege_type
|
|
275
275
|
)
|
|
276
|
-
from lateral aclexplode(p.proacl) as x(grantor, grantee, privilege_type, is_grantable)
|
|
276
|
+
from lateral aclexplode(COALESCE(p.proacl, acldefault('f', p.proowner))) as x(grantor, grantee, privilege_type, is_grantable)
|
|
277
277
|
), '[]'
|
|
278
278
|
) as privileges
|
|
279
279
|
from
|
|
@@ -183,7 +183,7 @@ export class CreateAggregate extends CreateAggregateChange {
|
|
|
183
183
|
clauses.push(`SORTOP = ${formatOperator(this.aggregate.sort_operator)}`);
|
|
184
184
|
}
|
|
185
185
|
if (this.aggregate.parallel_safety !== "u") {
|
|
186
|
-
clauses.push(`PARALLEL ${formatParallel(this.aggregate.parallel_safety)}`);
|
|
186
|
+
clauses.push(`PARALLEL = ${formatParallel(this.aggregate.parallel_safety)}`);
|
|
187
187
|
}
|
|
188
188
|
if (this.aggregate.is_strict) {
|
|
189
189
|
clauses.push("STRICT");
|
|
@@ -20,7 +20,7 @@ export class DropAggregate extends DropAggregateChange {
|
|
|
20
20
|
serialize() {
|
|
21
21
|
const signature = this.aggregate.identityArguments;
|
|
22
22
|
const qualifiedName = `${this.aggregate.schema}.${this.aggregate.name}`;
|
|
23
|
-
const withArgs = signature.length > 0 ? `(${signature})` : "()";
|
|
23
|
+
const withArgs = signature.length > 0 ? `(${signature})` : "(*)";
|
|
24
24
|
return `DROP AGGREGATE ${qualifiedName}${withArgs}`;
|
|
25
25
|
}
|
|
26
26
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import z from "zod";
|
|
2
2
|
import type { Change } from "../change.types.ts";
|
|
3
|
-
import type {
|
|
3
|
+
import type { BaseChange } from "./base.change.ts";
|
|
4
4
|
/**
|
|
5
5
|
* Privilege properties that all privilege objects share.
|
|
6
6
|
*/
|
|
@@ -19,17 +19,6 @@ interface PrivilegeDiffResult<T extends PrivilegeProps> {
|
|
|
19
19
|
revokes: T[];
|
|
20
20
|
revokeGrantOption: string[];
|
|
21
21
|
}
|
|
22
|
-
/**
|
|
23
|
-
* Groups privileges by grantable flag for efficient SQL generation
|
|
24
|
-
*/
|
|
25
|
-
export declare function groupPrivilegesByGrantable<T extends PrivilegeProps>(privileges: T[]): Map<boolean, T[]>;
|
|
26
|
-
/**
|
|
27
|
-
* Groups privileges by columns and grantable flag
|
|
28
|
-
*/
|
|
29
|
-
export declare function groupPrivilegesByColumns<T extends PrivilegeProps>(privileges: T[]): Map<string, {
|
|
30
|
-
columns?: string[];
|
|
31
|
-
byGrant: Map<boolean, Set<string>>;
|
|
32
|
-
}>;
|
|
33
22
|
/**
|
|
34
23
|
* Filters out PUBLIC's built-in default privileges that PostgreSQL automatically grants
|
|
35
24
|
* when creating certain object types. This prevents generating unnecessary GRANT statements
|
|
@@ -50,5 +39,41 @@ export declare function filterPublicBuiltInDefaults<T extends PrivilegeProps>(ob
|
|
|
50
39
|
/**
|
|
51
40
|
* Generic privilege diffing function that works for any object type
|
|
52
41
|
*/
|
|
53
|
-
export declare function diffPrivileges<T extends PrivilegeProps>(mainPrivileges: T[], branchPrivileges: T[], owner?: string
|
|
42
|
+
export declare function diffPrivileges<T extends PrivilegeProps>(mainPrivileges: T[], branchPrivileges: T[], owner?: string): Map<string, PrivilegeDiffResult<T>>;
|
|
43
|
+
/**
|
|
44
|
+
* Factory constructors for Grant / Revoke / RevokeGrantOption change classes.
|
|
45
|
+
* Every object type provides its own concrete classes. The `any` props type
|
|
46
|
+
* is intentional: the helpers build props with a computed `[objectKey]` key
|
|
47
|
+
* whose name varies per object type, so no single concrete type can unify
|
|
48
|
+
* all call sites without an unsafe cast elsewhere.
|
|
49
|
+
*/
|
|
50
|
+
interface PrivilegeChangeFactories {
|
|
51
|
+
Grant: new (props: any) => BaseChange;
|
|
52
|
+
Revoke: new (props: any) => BaseChange;
|
|
53
|
+
RevokeGrantOption: new (props: any) => BaseChange;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Emit privilege changes for object-level privileges (schema, sequence,
|
|
57
|
+
* procedure, etc.).
|
|
58
|
+
*
|
|
59
|
+
* For each grantee in `privilegeResults` the function groups grants and revokes
|
|
60
|
+
* by the `grantable` flag and pushes one change per group. Revoke-grant-option
|
|
61
|
+
* entries produce a single change carrying `privilegeNames`.
|
|
62
|
+
*
|
|
63
|
+
* `grantTarget` is the *branch* object (the desired state) while `revokeTarget`
|
|
64
|
+
* is the *main* object (the current state), so that GRANTs reference the
|
|
65
|
+
* newly-created/altered object and REVOKEs reference the existing one.
|
|
66
|
+
*/
|
|
67
|
+
export declare function emitObjectPrivilegeChanges(privilegeResults: Map<string, PrivilegeDiffResult<PrivilegeProps>>, grantTarget: unknown, revokeTarget: unknown, objectKey: string, factories: PrivilegeChangeFactories, version?: number): BaseChange[];
|
|
68
|
+
/**
|
|
69
|
+
* Emit privilege changes for column-level privileges (table, view,
|
|
70
|
+
* materialized view).
|
|
71
|
+
*
|
|
72
|
+
* Like {@link emitObjectPrivilegeChanges} but groups by column set (via
|
|
73
|
+
* `groupPrivilegesByColumns`) instead of only by grantable. For
|
|
74
|
+
* revoke-grant-option the column sets come from `sourcePrivileges` so that
|
|
75
|
+
* `REVOKE GRANT OPTION FOR` is emitted per column set that originally carried
|
|
76
|
+
* the privilege.
|
|
77
|
+
*/
|
|
78
|
+
export declare function emitColumnPrivilegeChanges(privilegeResults: Map<string, PrivilegeDiffResult<PrivilegeProps>>, grantTarget: unknown, revokeTarget: unknown, objectKey: string, factories: PrivilegeChangeFactories, sourcePrivileges: PrivilegeProps[], version?: number): BaseChange[];
|
|
54
79
|
export {};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import z from "zod";
|
|
2
|
-
import { stableId } from "./utils.js";
|
|
3
2
|
/**
|
|
4
3
|
* Privilege properties that all privilege objects share.
|
|
5
4
|
*/
|
|
@@ -81,7 +80,7 @@ function checkStillHasBase(targetPrivs, privilege, key) {
|
|
|
81
80
|
/**
|
|
82
81
|
* Groups privileges by grantable flag for efficient SQL generation
|
|
83
82
|
*/
|
|
84
|
-
|
|
83
|
+
function groupPrivilegesByGrantable(privileges) {
|
|
85
84
|
const groups = new Map();
|
|
86
85
|
for (const privilege of privileges) {
|
|
87
86
|
const arr = groups.get(privilege.grantable) ?? [];
|
|
@@ -93,7 +92,7 @@ export function groupPrivilegesByGrantable(privileges) {
|
|
|
93
92
|
/**
|
|
94
93
|
* Groups privileges by columns and grantable flag
|
|
95
94
|
*/
|
|
96
|
-
|
|
95
|
+
function groupPrivilegesByColumns(privileges) {
|
|
97
96
|
const groups = new Map();
|
|
98
97
|
for (const privilege of privileges) {
|
|
99
98
|
const key = privilege.columns ? privilege.columns.sort().join(",") : "";
|
|
@@ -171,33 +170,17 @@ export function filterPublicBuiltInDefaults(objectType, privileges) {
|
|
|
171
170
|
function filterOwnerPrivileges(privileges, owner) {
|
|
172
171
|
return privileges.filter((p) => p.grantee !== owner);
|
|
173
172
|
}
|
|
174
|
-
/**
|
|
175
|
-
* Filter out privileges for superuser roles, as PostgreSQL doesn't store
|
|
176
|
-
* GRANTs to superusers in relacl (they already have all privileges implicitly).
|
|
177
|
-
* Reference: https://www.postgresql.org/docs/current/role-attributes.html
|
|
178
|
-
*/
|
|
179
|
-
function filterSuperuserPrivileges(privileges, mainRoles) {
|
|
180
|
-
if (!mainRoles)
|
|
181
|
-
return privileges;
|
|
182
|
-
return privileges.filter((priv) => {
|
|
183
|
-
const role = mainRoles[stableId.role(priv.grantee)];
|
|
184
|
-
return !role?.is_superuser;
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
173
|
/**
|
|
188
174
|
* Generic privilege diffing function that works for any object type
|
|
189
175
|
*/
|
|
190
|
-
export function diffPrivileges(mainPrivileges, branchPrivileges, owner
|
|
191
|
-
// Filter out superuser privileges from branch - PostgreSQL doesn't store GRANTs
|
|
192
|
-
// to superusers in relacl because they already have all privileges implicitly
|
|
193
|
-
const branchPrivilegesFiltered = filterSuperuserPrivileges(branchPrivileges, mainRoles);
|
|
176
|
+
export function diffPrivileges(mainPrivileges, branchPrivileges, owner) {
|
|
194
177
|
// Filter out owner privileges if owner is provided
|
|
195
178
|
const mainFiltered = owner
|
|
196
179
|
? filterOwnerPrivileges(mainPrivileges, owner)
|
|
197
180
|
: mainPrivileges;
|
|
198
181
|
const branchFiltered = owner
|
|
199
|
-
? filterOwnerPrivileges(
|
|
200
|
-
:
|
|
182
|
+
? filterOwnerPrivileges(branchPrivileges, owner)
|
|
183
|
+
: branchPrivileges;
|
|
201
184
|
const mainByGrantee = groupPrivilegesByGrantee(mainFiltered);
|
|
202
185
|
const branchByGrantee = groupPrivilegesByGrantee(branchFiltered);
|
|
203
186
|
// Get all grantees
|
|
@@ -214,3 +197,102 @@ export function diffPrivileges(mainPrivileges, branchPrivileges, owner, mainRole
|
|
|
214
197
|
}
|
|
215
198
|
return results;
|
|
216
199
|
}
|
|
200
|
+
/**
|
|
201
|
+
* Emit privilege changes for object-level privileges (schema, sequence,
|
|
202
|
+
* procedure, etc.).
|
|
203
|
+
*
|
|
204
|
+
* For each grantee in `privilegeResults` the function groups grants and revokes
|
|
205
|
+
* by the `grantable` flag and pushes one change per group. Revoke-grant-option
|
|
206
|
+
* entries produce a single change carrying `privilegeNames`.
|
|
207
|
+
*
|
|
208
|
+
* `grantTarget` is the *branch* object (the desired state) while `revokeTarget`
|
|
209
|
+
* is the *main* object (the current state), so that GRANTs reference the
|
|
210
|
+
* newly-created/altered object and REVOKEs reference the existing one.
|
|
211
|
+
*/
|
|
212
|
+
export function emitObjectPrivilegeChanges(privilegeResults, grantTarget, revokeTarget, objectKey, factories, version) {
|
|
213
|
+
const changes = [];
|
|
214
|
+
for (const [grantee, result] of privilegeResults) {
|
|
215
|
+
for (const [, revokes] of groupPrivilegesByGrantable(result.revokes)) {
|
|
216
|
+
changes.push(new factories.Revoke({
|
|
217
|
+
[objectKey]: revokeTarget,
|
|
218
|
+
privileges: revokes,
|
|
219
|
+
grantee,
|
|
220
|
+
version,
|
|
221
|
+
}));
|
|
222
|
+
}
|
|
223
|
+
if (result.revokeGrantOption.length > 0) {
|
|
224
|
+
changes.push(new factories.RevokeGrantOption({
|
|
225
|
+
[objectKey]: revokeTarget,
|
|
226
|
+
privilegeNames: result.revokeGrantOption,
|
|
227
|
+
grantee,
|
|
228
|
+
version,
|
|
229
|
+
}));
|
|
230
|
+
}
|
|
231
|
+
for (const [, grants] of groupPrivilegesByGrantable(result.grants)) {
|
|
232
|
+
changes.push(new factories.Grant({
|
|
233
|
+
[objectKey]: grantTarget,
|
|
234
|
+
privileges: grants,
|
|
235
|
+
grantee,
|
|
236
|
+
version,
|
|
237
|
+
}));
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return changes;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Emit privilege changes for column-level privileges (table, view,
|
|
244
|
+
* materialized view).
|
|
245
|
+
*
|
|
246
|
+
* Like {@link emitObjectPrivilegeChanges} but groups by column set (via
|
|
247
|
+
* `groupPrivilegesByColumns`) instead of only by grantable. For
|
|
248
|
+
* revoke-grant-option the column sets come from `sourcePrivileges` so that
|
|
249
|
+
* `REVOKE GRANT OPTION FOR` is emitted per column set that originally carried
|
|
250
|
+
* the privilege.
|
|
251
|
+
*/
|
|
252
|
+
export function emitColumnPrivilegeChanges(privilegeResults, grantTarget, revokeTarget, objectKey, factories, sourcePrivileges, version) {
|
|
253
|
+
const changes = [];
|
|
254
|
+
for (const [grantee, result] of privilegeResults) {
|
|
255
|
+
for (const [, group] of groupPrivilegesByColumns(result.revokes)) {
|
|
256
|
+
const allPrivileges = new Set();
|
|
257
|
+
for (const [, privSet] of group.byGrant) {
|
|
258
|
+
for (const priv of privSet) {
|
|
259
|
+
allPrivileges.add(priv);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
changes.push(new factories.Revoke({
|
|
263
|
+
[objectKey]: revokeTarget,
|
|
264
|
+
privileges: [...allPrivileges].map((p) => ({
|
|
265
|
+
privilege: p,
|
|
266
|
+
grantable: false,
|
|
267
|
+
})),
|
|
268
|
+
grantee,
|
|
269
|
+
columns: group.columns,
|
|
270
|
+
version,
|
|
271
|
+
}));
|
|
272
|
+
}
|
|
273
|
+
if (result.revokeGrantOption.length > 0) {
|
|
274
|
+
const sourcePrivsForGrantee = sourcePrivileges.filter((p) => p.grantee === grantee);
|
|
275
|
+
for (const [, group] of groupPrivilegesByColumns(sourcePrivsForGrantee.filter((p) => result.revokeGrantOption.includes(p.privilege)))) {
|
|
276
|
+
changes.push(new factories.RevokeGrantOption({
|
|
277
|
+
[objectKey]: revokeTarget,
|
|
278
|
+
privilegeNames: result.revokeGrantOption,
|
|
279
|
+
grantee,
|
|
280
|
+
columns: group.columns,
|
|
281
|
+
version,
|
|
282
|
+
}));
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
for (const [, group] of groupPrivilegesByColumns(result.grants)) {
|
|
286
|
+
for (const [grantable, privSet] of group.byGrant) {
|
|
287
|
+
changes.push(new factories.Grant({
|
|
288
|
+
[objectKey]: grantTarget,
|
|
289
|
+
privileges: [...privSet].map((p) => ({ privilege: p, grantable })),
|
|
290
|
+
grantee,
|
|
291
|
+
columns: group.columns,
|
|
292
|
+
version,
|
|
293
|
+
}));
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return changes;
|
|
298
|
+
}
|
|
@@ -149,7 +149,7 @@ export function getObjectKindPrefix(objectKind) {
|
|
|
149
149
|
case "TYPE":
|
|
150
150
|
return "ON TYPE";
|
|
151
151
|
case "FOREIGN TABLE":
|
|
152
|
-
return "ON
|
|
152
|
+
return "ON TABLE";
|
|
153
153
|
default:
|
|
154
154
|
return "ON";
|
|
155
155
|
}
|
|
@@ -160,10 +160,17 @@ export function normalizePrivileges(privileges) {
|
|
|
160
160
|
grantee: privilege.grantee,
|
|
161
161
|
privilege: privilege.privilege,
|
|
162
162
|
grantable: privilege.grantable,
|
|
163
|
+
columns: privilege.columns
|
|
164
|
+
? [...privilege.columns].sort()
|
|
165
|
+
: privilege.columns,
|
|
163
166
|
}))
|
|
164
167
|
.sort((a, b) => {
|
|
165
168
|
if (a.grantee !== b.grantee)
|
|
166
169
|
return a.grantee.localeCompare(b.grantee);
|
|
167
|
-
|
|
170
|
+
if (a.privilege !== b.privilege)
|
|
171
|
+
return a.privilege.localeCompare(b.privilege);
|
|
172
|
+
const colA = a.columns?.join(",") ?? "";
|
|
173
|
+
const colB = b.columns?.join(",") ?? "";
|
|
174
|
+
return colA.localeCompare(colB);
|
|
168
175
|
});
|
|
169
176
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ObjectDiffContext } from "../diff-context.ts";
|
|
1
2
|
import type { CollationChange } from "./changes/collation.types.ts";
|
|
2
3
|
import type { Collation } from "./collation.model.ts";
|
|
3
4
|
/**
|
|
@@ -8,6 +9,4 @@ import type { Collation } from "./collation.model.ts";
|
|
|
8
9
|
* @param branch - The collations in the branch catalog.
|
|
9
10
|
* @returns A list of changes to apply to main to make it match branch.
|
|
10
11
|
*/
|
|
11
|
-
export declare function diffCollations(ctx:
|
|
12
|
-
currentUser: string;
|
|
13
|
-
}, main: Record<string, Collation>, branch: Record<string, Collation>): CollationChange[];
|
|
12
|
+
export declare function diffCollations(ctx: Pick<ObjectDiffContext, "currentUser">, main: Record<string, Collation>, branch: Record<string, Collation>): CollationChange[];
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DefaultPrivilegeState } from "./base.default-privileges.ts";
|
|
2
|
+
import type { Role } from "./role/role.model.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Unified context built by `diffCatalogs` and passed to per-object diff
|
|
5
|
+
* functions. Each diff declares only the keys it reads via
|
|
6
|
+
* `Pick<ObjectDiffContext, …>`, so every signature documents its actual
|
|
7
|
+
* requirements. The full object is always assignable to every narrower Pick.
|
|
8
|
+
*/
|
|
9
|
+
export interface ObjectDiffContext {
|
|
10
|
+
version: number;
|
|
11
|
+
currentUser: string;
|
|
12
|
+
defaultPrivilegeState: DefaultPrivilegeState;
|
|
13
|
+
mainRoles: Record<string, Role>;
|
|
14
|
+
skipDefaultPrivilegeSubtraction?: boolean;
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isUserDefinedTypeSchema, stableId } from "../../utils.js";
|
|
1
|
+
import { isUserDefinedTypeSchema, parseTypeString, stableId, } from "../../utils.js";
|
|
2
2
|
import { CreateDomainChange } from "./domain.base.js";
|
|
3
3
|
/**
|
|
4
4
|
* Create a domain.
|
|
@@ -58,7 +58,9 @@ export class CreateDomain extends CreateDomainChange {
|
|
|
58
58
|
const domainName = `${this.domain.schema}.${this.domain.name}`;
|
|
59
59
|
// Base type (use formatted string for type+typmod and add schema if needed)
|
|
60
60
|
let baseType = this.domain.base_type_str;
|
|
61
|
-
|
|
61
|
+
const alreadyQualified = parseTypeString(baseType);
|
|
62
|
+
if (!alreadyQualified &&
|
|
63
|
+
this.domain.base_type_schema &&
|
|
62
64
|
this.domain.base_type_schema !== "pg_catalog") {
|
|
63
65
|
baseType = `${this.domain.base_type_schema}.${baseType}`;
|
|
64
66
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { Role } from "../role/role.model.ts";
|
|
1
|
+
import type { ObjectDiffContext } from "../diff-context.ts";
|
|
3
2
|
import type { DomainChange } from "./changes/domain.types.ts";
|
|
4
3
|
import type { Domain } from "./domain.model.ts";
|
|
5
4
|
/**
|
|
@@ -10,9 +9,4 @@ import type { Domain } from "./domain.model.ts";
|
|
|
10
9
|
* @param branch - The domains in the branch catalog.
|
|
11
10
|
* @returns A list of changes to apply to main to make it match branch.
|
|
12
11
|
*/
|
|
13
|
-
export declare function diffDomains(ctx:
|
|
14
|
-
version: number;
|
|
15
|
-
currentUser: string;
|
|
16
|
-
defaultPrivilegeState: DefaultPrivilegeState;
|
|
17
|
-
mainRoles: Record<string, Role>;
|
|
18
|
-
}, main: Record<string, Domain>, branch: Record<string, Domain>): DomainChange[];
|
|
12
|
+
export declare function diffDomains(ctx: Pick<ObjectDiffContext, "version" | "currentUser" | "defaultPrivilegeState">, main: Record<string, Domain>, branch: Record<string, Domain>): DomainChange[];
|