@supabase/pg-delta 1.0.0-alpha.1 → 1.0.0-alpha.10
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 +16 -3
- package/dist/core/catalog.model.js +132 -30
- package/dist/core/catalog.snapshot.d.ts +66 -0
- package/dist/core/catalog.snapshot.js +206 -0
- package/dist/core/context.d.ts +3 -3
- package/dist/core/context.js +7 -10
- 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/depend.d.ts +2 -2
- package/dist/core/depend.js +8 -7
- 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 +11 -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 +10 -10
- package/dist/core/objects/aggregate/aggregate.model.js +8 -10
- 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/collation/collation.model.d.ts +2 -2
- package/dist/core/objects/collation/collation.model.js +29 -28
- 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.d.ts +2 -2
- package/dist/core/objects/domain/domain.model.js +9 -11
- package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +2 -3
- package/dist/core/objects/event-trigger/event-trigger.model.d.ts +2 -2
- package/dist/core/objects/event-trigger/event-trigger.model.js +7 -9
- package/dist/core/objects/extension/extension.model.d.ts +2 -2
- package/dist/core/objects/extension/extension.model.js +8 -10
- 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.d.ts +2 -2
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +22 -24
- 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.d.ts +2 -2
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +21 -23
- 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/foreign-data-wrapper/server/server.model.d.ts +2 -2
- package/dist/core/objects/foreign-data-wrapper/server/server.model.js +20 -22
- package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.d.ts +2 -2
- package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.js +20 -22
- package/dist/core/objects/index/index.model.d.ts +4 -4
- package/dist/core/objects/index/index.model.js +9 -11
- 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/language/language.model.js +5 -7
- 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 +5 -5
- package/dist/core/objects/materialized-view/materialized-view.model.js +9 -11
- 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 +11 -11
- package/dist/core/objects/procedure/procedure.model.js +9 -11
- 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/publication/publication.model.d.ts +2 -2
- package/dist/core/objects/publication/publication.model.js +7 -9
- package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +3 -3
- package/dist/core/objects/rls-policy/rls-policy.model.d.ts +4 -4
- package/dist/core/objects/rls-policy/rls-policy.model.js +8 -10
- package/dist/core/objects/role/role.diff.js +22 -1
- package/dist/core/objects/role/role.model.d.ts +6 -5
- package/dist/core/objects/role/role.model.js +146 -40
- package/dist/core/objects/rule/rule.model.d.ts +3 -3
- package/dist/core/objects/rule/rule.model.js +7 -9
- 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.d.ts +2 -2
- package/dist/core/objects/schema/schema.model.js +9 -11
- 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.d.ts +2 -2
- package/dist/core/objects/sequence/sequence.model.js +9 -11
- package/dist/core/objects/subscription/subscription.diff.d.ts +2 -3
- package/dist/core/objects/subscription/subscription.model.d.ts +2 -2
- package/dist/core/objects/subscription/subscription.model.js +25 -20
- 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 +27 -24
- package/dist/core/objects/table/table.model.js +12 -11
- 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 +11 -2
- package/dist/core/objects/trigger/trigger.model.js +22 -10
- 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 +5 -5
- package/dist/core/objects/type/composite-type/composite-type.model.js +10 -11
- 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.d.ts +2 -2
- package/dist/core/objects/type/enum/enum.model.js +23 -25
- 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.d.ts +2 -2
- package/dist/core/objects/type/range/range.model.js +8 -10
- 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 +20 -6
- package/dist/core/objects/view/view.model.js +11 -23
- package/dist/core/plan/apply.d.ts +2 -2
- package/dist/core/plan/apply.js +33 -16
- package/dist/core/plan/create.d.ts +20 -7
- package/dist/core/plan/create.js +153 -112
- 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 +47 -3
- package/dist/core/postgres-config.js +225 -39
- 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 +9 -0
- package/dist/index.js +9 -1
- package/package.json +56 -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 +477 -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 +384 -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 +293 -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 +41 -0
|
@@ -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[];
|
|
@@ -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 { AlterDomainAddConstraint, AlterDomainChangeOwner, AlterDomainDropConstraint, AlterDomainDropDefault, AlterDomainDropNotNull, AlterDomainSetDefault, AlterDomainSetNotNull, AlterDomainValidateConstraint, } from "./changes/domain.alter.js";
|
|
4
4
|
import { CreateCommentOnDomain, DropCommentOnDomain, } from "./changes/domain.comment.js";
|
|
5
5
|
import { CreateDomain } from "./changes/domain.create.js";
|
|
@@ -50,50 +50,21 @@ export function diffDomains(ctx, main, branch) {
|
|
|
50
50
|
// We compare default privileges against desired privileges to generate REVOKE/GRANT statements
|
|
51
51
|
// needed to reach the final desired state.
|
|
52
52
|
const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "domain", newDomain.schema ?? "");
|
|
53
|
+
const creatorFilteredDefaults = newDomain.owner !== ctx.currentUser
|
|
54
|
+
? effectiveDefaults.filter((p) => p.grantee !== ctx.currentUser)
|
|
55
|
+
: effectiveDefaults;
|
|
53
56
|
// Filter out PUBLIC's built-in default USAGE privilege (PostgreSQL grants it automatically)
|
|
54
57
|
// Reference: https://www.postgresql.org/docs/17/ddl-priv.html Table 5.2
|
|
55
58
|
// This prevents generating unnecessary "GRANT USAGE TO PUBLIC" statements
|
|
56
59
|
const desiredPrivileges = filterPublicBuiltInDefaults("domain", newDomain.privileges);
|
|
57
60
|
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
58
61
|
// and shouldn't be compared. Use the domain owner as the reference.
|
|
59
|
-
const privilegeResults = diffPrivileges(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
void grantable;
|
|
66
|
-
changes.push(new GrantDomainPrivileges({
|
|
67
|
-
domain: newDomain,
|
|
68
|
-
grantee,
|
|
69
|
-
privileges: list,
|
|
70
|
-
version: ctx.version,
|
|
71
|
-
}));
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
// Generate revoke changes
|
|
75
|
-
if (result.revokes.length > 0) {
|
|
76
|
-
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
77
|
-
for (const [grantable, list] of revokeGroups) {
|
|
78
|
-
void grantable;
|
|
79
|
-
changes.push(new RevokeDomainPrivileges({
|
|
80
|
-
domain: newDomain,
|
|
81
|
-
grantee,
|
|
82
|
-
privileges: list,
|
|
83
|
-
version: ctx.version,
|
|
84
|
-
}));
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
// Generate revoke grant option changes
|
|
88
|
-
if (result.revokeGrantOption.length > 0) {
|
|
89
|
-
changes.push(new RevokeGrantOptionDomainPrivileges({
|
|
90
|
-
domain: newDomain,
|
|
91
|
-
grantee,
|
|
92
|
-
privilegeNames: result.revokeGrantOption,
|
|
93
|
-
version: ctx.version,
|
|
94
|
-
}));
|
|
95
|
-
}
|
|
96
|
-
}
|
|
62
|
+
const privilegeResults = diffPrivileges(filterPublicBuiltInDefaults("domain", creatorFilteredDefaults), desiredPrivileges, newDomain.owner);
|
|
63
|
+
changes.push(...emitObjectPrivilegeChanges(privilegeResults, newDomain, newDomain, "domain", {
|
|
64
|
+
Grant: GrantDomainPrivileges,
|
|
65
|
+
Revoke: RevokeDomainPrivileges,
|
|
66
|
+
RevokeGrantOption: RevokeGrantOptionDomainPrivileges,
|
|
67
|
+
}, ctx.version));
|
|
97
68
|
}
|
|
98
69
|
for (const domainId of dropped) {
|
|
99
70
|
changes.push(new DropDomain({ domain: main[domainId] }));
|
|
@@ -201,44 +172,12 @@ export function diffDomains(ctx, main, branch) {
|
|
|
201
172
|
const branchPrivilegesFiltered = filterPublicBuiltInDefaults("domain", branchDomain.privileges);
|
|
202
173
|
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
203
174
|
// and shouldn't be compared. Use branch owner as the reference.
|
|
204
|
-
const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchDomain.owner
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
void grantable;
|
|
211
|
-
changes.push(new GrantDomainPrivileges({
|
|
212
|
-
domain: branchDomain,
|
|
213
|
-
grantee,
|
|
214
|
-
privileges: list,
|
|
215
|
-
version: ctx.version,
|
|
216
|
-
}));
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
// Generate revoke changes
|
|
220
|
-
if (result.revokes.length > 0) {
|
|
221
|
-
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
222
|
-
for (const [grantable, list] of revokeGroups) {
|
|
223
|
-
void grantable;
|
|
224
|
-
changes.push(new RevokeDomainPrivileges({
|
|
225
|
-
domain: mainDomain,
|
|
226
|
-
grantee,
|
|
227
|
-
privileges: list,
|
|
228
|
-
version: ctx.version,
|
|
229
|
-
}));
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
// Generate revoke grant option changes
|
|
233
|
-
if (result.revokeGrantOption.length > 0) {
|
|
234
|
-
changes.push(new RevokeGrantOptionDomainPrivileges({
|
|
235
|
-
domain: mainDomain,
|
|
236
|
-
grantee,
|
|
237
|
-
privilegeNames: result.revokeGrantOption,
|
|
238
|
-
version: ctx.version,
|
|
239
|
-
}));
|
|
240
|
-
}
|
|
241
|
-
}
|
|
175
|
+
const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchDomain.owner);
|
|
176
|
+
changes.push(...emitObjectPrivilegeChanges(privilegeResults, branchDomain, mainDomain, "domain", {
|
|
177
|
+
Grant: GrantDomainPrivileges,
|
|
178
|
+
Revoke: RevokeDomainPrivileges,
|
|
179
|
+
RevokeGrantOption: RevokeGrantOptionDomainPrivileges,
|
|
180
|
+
}, ctx.version));
|
|
242
181
|
}
|
|
243
182
|
return changes;
|
|
244
183
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Pool } from "pg";
|
|
2
2
|
import z from "zod";
|
|
3
3
|
import { BasePgModel } from "../base.model.ts";
|
|
4
4
|
import { type PrivilegeProps } from "../base.privilege-diff.ts";
|
|
@@ -99,5 +99,5 @@ export declare class Domain extends BasePgModel {
|
|
|
99
99
|
* @param sql - The SQL client.
|
|
100
100
|
* @returns A list of domains.
|
|
101
101
|
*/
|
|
102
|
-
export declare function extractDomains(
|
|
102
|
+
export declare function extractDomains(pool: Pool): Promise<Domain[]>;
|
|
103
103
|
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { sql } from "@ts-safeql/sql-tag";
|
|
1
2
|
import z from "zod";
|
|
2
3
|
import { BasePgModel } from "../base.model.js";
|
|
3
4
|
import { privilegePropsSchema, } from "../base.privilege-diff.js";
|
|
@@ -98,10 +99,8 @@ export class Domain extends BasePgModel {
|
|
|
98
99
|
* @param sql - The SQL client.
|
|
99
100
|
* @returns A list of domains.
|
|
100
101
|
*/
|
|
101
|
-
export async function extractDomains(
|
|
102
|
-
|
|
103
|
-
await sql `set search_path = ''`;
|
|
104
|
-
const domainRows = await sql `
|
|
102
|
+
export async function extractDomains(pool) {
|
|
103
|
+
const { rows: domainRows } = await pool.query(sql `
|
|
105
104
|
with extension_oids as (
|
|
106
105
|
select
|
|
107
106
|
objid
|
|
@@ -151,7 +150,7 @@ export async function extractDomains(sql) {
|
|
|
151
150
|
)
|
|
152
151
|
order by x.grantee, x.privilege_type
|
|
153
152
|
)
|
|
154
|
-
from lateral aclexplode(t.typacl) as x(grantor, grantee, privilege_type, is_grantable)
|
|
153
|
+
from lateral aclexplode(COALESCE(t.typacl, acldefault('T', t.typowner))) as x(grantor, grantee, privilege_type, is_grantable)
|
|
155
154
|
), '[]'
|
|
156
155
|
) as privileges
|
|
157
156
|
from
|
|
@@ -163,10 +162,9 @@ export async function extractDomains(sql) {
|
|
|
163
162
|
and e.objid is null
|
|
164
163
|
and t.typtype = 'd'
|
|
165
164
|
order by
|
|
166
|
-
1, 2
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
});
|
|
165
|
+
1, 2
|
|
166
|
+
`);
|
|
167
|
+
// Validate and parse each row using the Zod schema
|
|
168
|
+
const validatedRows = domainRows.map((row) => domainPropsSchema.parse(row));
|
|
169
|
+
return validatedRows.map((row) => new Domain(row));
|
|
172
170
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ObjectDiffContext } from "../diff-context.ts";
|
|
1
2
|
import type { EventTriggerChange } from "./changes/event-trigger.types.ts";
|
|
2
3
|
import type { EventTrigger } from "./event-trigger.model.ts";
|
|
3
4
|
/**
|
|
@@ -8,6 +9,4 @@ import type { EventTrigger } from "./event-trigger.model.ts";
|
|
|
8
9
|
* @param branch - The event triggers 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 diffEventTriggers(ctx:
|
|
12
|
-
currentUser: string;
|
|
13
|
-
}, main: Record<string, EventTrigger>, branch: Record<string, EventTrigger>): EventTriggerChange[];
|
|
12
|
+
export declare function diffEventTriggers(ctx: Pick<ObjectDiffContext, "currentUser">, main: Record<string, EventTrigger>, branch: Record<string, EventTrigger>): EventTriggerChange[];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Pool } from "pg";
|
|
2
2
|
import z from "zod";
|
|
3
3
|
import { BasePgModel } from "../base.model.ts";
|
|
4
4
|
declare const eventTriggerPropsSchema: z.ZodObject<{
|
|
@@ -41,5 +41,5 @@ export declare class EventTrigger extends BasePgModel {
|
|
|
41
41
|
comment: string | null;
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
|
-
export declare function extractEventTriggers(
|
|
44
|
+
export declare function extractEventTriggers(pool: Pool): Promise<EventTrigger[]>;
|
|
45
45
|
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { sql } from "@ts-safeql/sql-tag";
|
|
1
2
|
import z from "zod";
|
|
2
3
|
import { BasePgModel } from "../base.model.js";
|
|
3
4
|
const EventTriggerEnabledSchema = z.enum([
|
|
@@ -58,10 +59,8 @@ export class EventTrigger extends BasePgModel {
|
|
|
58
59
|
};
|
|
59
60
|
}
|
|
60
61
|
}
|
|
61
|
-
export async function extractEventTriggers(
|
|
62
|
-
|
|
63
|
-
await sql `set search_path = ''`;
|
|
64
|
-
const rows = await sql `
|
|
62
|
+
export async function extractEventTriggers(pool) {
|
|
63
|
+
const { rows } = await pool.query(sql `
|
|
65
64
|
with extension_oids as (
|
|
66
65
|
select objid
|
|
67
66
|
from pg_depend d
|
|
@@ -81,9 +80,8 @@ from pg_catalog.pg_event_trigger et
|
|
|
81
80
|
join pg_catalog.pg_proc p on p.oid = et.evtfoid
|
|
82
81
|
left join extension_oids e on e.objid = et.oid
|
|
83
82
|
where e.objid is null
|
|
84
|
-
order by 1
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
});
|
|
83
|
+
order by 1
|
|
84
|
+
`);
|
|
85
|
+
const validatedRows = rows.map((row) => eventTriggerPropsSchema.parse(row));
|
|
86
|
+
return validatedRows.map((row) => new EventTrigger(row));
|
|
89
87
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Pool } from "pg";
|
|
2
2
|
import z from "zod";
|
|
3
3
|
import { BasePgModel } from "../base.model.ts";
|
|
4
4
|
/**
|
|
@@ -48,5 +48,5 @@ export declare class Extension extends BasePgModel {
|
|
|
48
48
|
comment: string | null;
|
|
49
49
|
};
|
|
50
50
|
}
|
|
51
|
-
export declare function extractExtensions(
|
|
51
|
+
export declare function extractExtensions(pool: Pool): Promise<Extension[]>;
|
|
52
52
|
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { sql } from "@ts-safeql/sql-tag";
|
|
1
2
|
import z from "zod";
|
|
2
3
|
import { BasePgModel } from "../base.model.js";
|
|
3
4
|
/**
|
|
@@ -65,10 +66,8 @@ export class Extension extends BasePgModel {
|
|
|
65
66
|
}
|
|
66
67
|
}
|
|
67
68
|
// TODO: fetch extension dependencies so we can determine when to use CASCADE on creation
|
|
68
|
-
export async function extractExtensions(
|
|
69
|
-
|
|
70
|
-
await sql `set search_path = ''`;
|
|
71
|
-
const extensionRows = await sql `
|
|
69
|
+
export async function extractExtensions(pool) {
|
|
70
|
+
const { rows: extensionRows } = await pool.query(sql `
|
|
72
71
|
with extension_rows as (
|
|
73
72
|
select
|
|
74
73
|
e.oid,
|
|
@@ -259,10 +258,9 @@ export async function extractExtensions(sql) {
|
|
|
259
258
|
) as members
|
|
260
259
|
from extension_rows er
|
|
261
260
|
order by
|
|
262
|
-
er.name
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
});
|
|
261
|
+
er.name
|
|
262
|
+
`);
|
|
263
|
+
// Validate and parse each row using the Zod schema
|
|
264
|
+
const validatedRows = extensionRows.map((row) => extensionPropsSchema.parse(row));
|
|
265
|
+
return validatedRows.map((row) => new Extension(row));
|
|
268
266
|
}
|
package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts
CHANGED
|
@@ -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 { ForeignDataWrapperChange } from "./changes/foreign-data-wrapper.types.ts";
|
|
4
3
|
import type { ForeignDataWrapper } from "./foreign-data-wrapper.model.ts";
|
|
5
4
|
/**
|
|
@@ -10,9 +9,4 @@ import type { ForeignDataWrapper } from "./foreign-data-wrapper.model.ts";
|
|
|
10
9
|
* @param branch - The foreign data wrappers 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 diffForeignDataWrappers(ctx:
|
|
14
|
-
version: number;
|
|
15
|
-
currentUser: string;
|
|
16
|
-
defaultPrivilegeState: DefaultPrivilegeState;
|
|
17
|
-
mainRoles: Record<string, Role>;
|
|
18
|
-
}, main: Record<string, ForeignDataWrapper>, branch: Record<string, ForeignDataWrapper>): ForeignDataWrapperChange[];
|
|
12
|
+
export declare function diffForeignDataWrappers(ctx: Pick<ObjectDiffContext, "version" | "currentUser">, main: Record<string, ForeignDataWrapper>, branch: Record<string, ForeignDataWrapper>): ForeignDataWrapperChange[];
|
package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js
CHANGED
|
@@ -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 { AlterForeignDataWrapperChangeOwner, AlterForeignDataWrapperSetOptions, } from "./changes/foreign-data-wrapper.alter.js";
|
|
4
4
|
import { CreateCommentOnForeignDataWrapper, DropCommentOnForeignDataWrapper, } from "./changes/foreign-data-wrapper.comment.js";
|
|
5
5
|
import { CreateForeignDataWrapper } from "./changes/foreign-data-wrapper.create.js";
|
|
@@ -37,44 +37,12 @@ export function diffForeignDataWrappers(ctx, main, branch) {
|
|
|
37
37
|
const effectiveDefaults = [];
|
|
38
38
|
const desiredPrivileges = filterPublicBuiltInDefaults("foreign_data_wrapper", createdFdw.privileges);
|
|
39
39
|
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
40
|
-
const privilegeResults = diffPrivileges(effectiveDefaults, desiredPrivileges, createdFdw.owner
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
void grantable;
|
|
47
|
-
changes.push(new GrantForeignDataWrapperPrivileges({
|
|
48
|
-
foreignDataWrapper: createdFdw,
|
|
49
|
-
grantee,
|
|
50
|
-
privileges: list,
|
|
51
|
-
version: ctx.version,
|
|
52
|
-
}));
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
// Generate revoke changes
|
|
56
|
-
if (result.revokes.length > 0) {
|
|
57
|
-
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
58
|
-
for (const [grantable, list] of revokeGroups) {
|
|
59
|
-
void grantable;
|
|
60
|
-
changes.push(new RevokeForeignDataWrapperPrivileges({
|
|
61
|
-
foreignDataWrapper: createdFdw,
|
|
62
|
-
grantee,
|
|
63
|
-
privileges: list,
|
|
64
|
-
version: ctx.version,
|
|
65
|
-
}));
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
// Generate revoke grant option changes
|
|
69
|
-
if (result.revokeGrantOption.length > 0) {
|
|
70
|
-
changes.push(new RevokeGrantOptionForeignDataWrapperPrivileges({
|
|
71
|
-
foreignDataWrapper: createdFdw,
|
|
72
|
-
grantee,
|
|
73
|
-
privilegeNames: result.revokeGrantOption,
|
|
74
|
-
version: ctx.version,
|
|
75
|
-
}));
|
|
76
|
-
}
|
|
77
|
-
}
|
|
40
|
+
const privilegeResults = diffPrivileges(effectiveDefaults, desiredPrivileges, createdFdw.owner);
|
|
41
|
+
changes.push(...emitObjectPrivilegeChanges(privilegeResults, createdFdw, createdFdw, "foreignDataWrapper", {
|
|
42
|
+
Grant: GrantForeignDataWrapperPrivileges,
|
|
43
|
+
Revoke: RevokeForeignDataWrapperPrivileges,
|
|
44
|
+
RevokeGrantOption: RevokeGrantOptionForeignDataWrapperPrivileges,
|
|
45
|
+
}, ctx.version));
|
|
78
46
|
}
|
|
79
47
|
for (const fdwId of dropped) {
|
|
80
48
|
changes.push(new DropForeignDataWrapper({ foreignDataWrapper: main[fdwId] }));
|
|
@@ -133,44 +101,12 @@ export function diffForeignDataWrappers(ctx, main, branch) {
|
|
|
133
101
|
// PRIVILEGES
|
|
134
102
|
const mainPrivilegesFiltered = filterPublicBuiltInDefaults("foreign_data_wrapper", mainFdw.privileges);
|
|
135
103
|
const branchPrivilegesFiltered = filterPublicBuiltInDefaults("foreign_data_wrapper", branchFdw.privileges);
|
|
136
|
-
const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchFdw.owner
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
void grantable;
|
|
143
|
-
changes.push(new GrantForeignDataWrapperPrivileges({
|
|
144
|
-
foreignDataWrapper: branchFdw,
|
|
145
|
-
grantee,
|
|
146
|
-
privileges: list,
|
|
147
|
-
version: ctx.version,
|
|
148
|
-
}));
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
// Generate revoke changes
|
|
152
|
-
if (result.revokes.length > 0) {
|
|
153
|
-
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
154
|
-
for (const [grantable, list] of revokeGroups) {
|
|
155
|
-
void grantable;
|
|
156
|
-
changes.push(new RevokeForeignDataWrapperPrivileges({
|
|
157
|
-
foreignDataWrapper: mainFdw,
|
|
158
|
-
grantee,
|
|
159
|
-
privileges: list,
|
|
160
|
-
version: ctx.version,
|
|
161
|
-
}));
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
// Generate revoke grant option changes
|
|
165
|
-
if (result.revokeGrantOption.length > 0) {
|
|
166
|
-
changes.push(new RevokeGrantOptionForeignDataWrapperPrivileges({
|
|
167
|
-
foreignDataWrapper: mainFdw,
|
|
168
|
-
grantee,
|
|
169
|
-
privilegeNames: result.revokeGrantOption,
|
|
170
|
-
version: ctx.version,
|
|
171
|
-
}));
|
|
172
|
-
}
|
|
173
|
-
}
|
|
104
|
+
const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchFdw.owner);
|
|
105
|
+
changes.push(...emitObjectPrivilegeChanges(privilegeResults, branchFdw, mainFdw, "foreignDataWrapper", {
|
|
106
|
+
Grant: GrantForeignDataWrapperPrivileges,
|
|
107
|
+
Revoke: RevokeForeignDataWrapperPrivileges,
|
|
108
|
+
RevokeGrantOption: RevokeGrantOptionForeignDataWrapperPrivileges,
|
|
109
|
+
}, ctx.version));
|
|
174
110
|
// Note: FDW renaming would also use ALTER FOREIGN DATA WRAPPER ... RENAME TO ...
|
|
175
111
|
// But since our ForeignDataWrapper model uses 'name' as the identity field,
|
|
176
112
|
// a name change would be handled as drop + create by diffObjects()
|
package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Pool } from "pg";
|
|
2
2
|
import z from "zod";
|
|
3
3
|
import { BasePgModel } from "../../base.model.ts";
|
|
4
4
|
import { type PrivilegeProps } from "../../base.privilege-diff.ts";
|
|
@@ -55,5 +55,5 @@ export declare class ForeignDataWrapper extends BasePgModel {
|
|
|
55
55
|
}[];
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
|
-
export declare function extractForeignDataWrappers(
|
|
58
|
+
export declare function extractForeignDataWrappers(pool: Pool): Promise<ForeignDataWrapper[]>;
|
|
59
59
|
export {};
|
package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { sql } from "@ts-safeql/sql-tag";
|
|
1
2
|
import z from "zod";
|
|
2
3
|
import { BasePgModel } from "../../base.model.js";
|
|
3
4
|
import { privilegePropsSchema, } from "../../base.privilege-diff.js";
|
|
@@ -59,10 +60,8 @@ export class ForeignDataWrapper extends BasePgModel {
|
|
|
59
60
|
};
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
|
-
export async function extractForeignDataWrappers(
|
|
63
|
-
|
|
64
|
-
await sql `set search_path = ''`;
|
|
65
|
-
const fdwRows = await sql `
|
|
63
|
+
export async function extractForeignDataWrappers(pool) {
|
|
64
|
+
const { rows: fdwRows } = await pool.query(sql `
|
|
66
65
|
with extension_oids as (
|
|
67
66
|
select objid
|
|
68
67
|
from pg_depend d
|
|
@@ -74,11 +73,11 @@ export async function extractForeignDataWrappers(sql) {
|
|
|
74
73
|
fdw.fdwowner::regrole::text as owner,
|
|
75
74
|
case
|
|
76
75
|
when fdw.fdwhandler = 0 then null
|
|
77
|
-
else p_handler.pronamespace::regnamespace::text || '.' || quote_ident(p_handler.proname)
|
|
76
|
+
else p_handler.pronamespace::regnamespace::text || '.' || quote_ident(p_handler.proname)
|
|
78
77
|
end as handler,
|
|
79
78
|
case
|
|
80
79
|
when fdw.fdwvalidator = 0 then null
|
|
81
|
-
else p_validator.pronamespace::regnamespace::text || '.' || quote_ident(p_validator.proname)
|
|
80
|
+
else p_validator.pronamespace::regnamespace::text || '.' || quote_ident(p_validator.proname)
|
|
82
81
|
end as validator,
|
|
83
82
|
coalesce(fdw.fdwoptions, array[]::text[]) as options,
|
|
84
83
|
obj_description(fdw.oid, 'pg_foreign_data_wrapper') as comment,
|
|
@@ -104,25 +103,24 @@ export async function extractForeignDataWrappers(sql) {
|
|
|
104
103
|
not fdw.fdwname like any(array['pg\\_%'])
|
|
105
104
|
and e.objid is null
|
|
106
105
|
order by
|
|
107
|
-
fdw.fdwname
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
106
|
+
fdw.fdwname
|
|
107
|
+
`);
|
|
108
|
+
// Validate and parse each row using the Zod schema
|
|
109
|
+
const validatedRows = fdwRows.map((row) => {
|
|
110
|
+
const parsed = foreignDataWrapperPropsSchema.parse(row);
|
|
111
|
+
// Parse options from PostgreSQL format ['key=value'] to ['key', 'value']
|
|
112
|
+
if (parsed.options && parsed.options.length > 0) {
|
|
113
|
+
const parsedOptions = [];
|
|
114
|
+
for (const opt of parsed.options) {
|
|
115
|
+
const eqIndex = opt.indexOf("=");
|
|
116
|
+
if (eqIndex > 0) {
|
|
117
|
+
parsedOptions.push(opt.substring(0, eqIndex));
|
|
118
|
+
parsedOptions.push(opt.substring(eqIndex + 1));
|
|
121
119
|
}
|
|
122
|
-
parsed.options = parsedOptions.length > 0 ? parsedOptions : null;
|
|
123
120
|
}
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
return
|
|
121
|
+
parsed.options = parsedOptions.length > 0 ? parsedOptions : null;
|
|
122
|
+
}
|
|
123
|
+
return parsed;
|
|
127
124
|
});
|
|
125
|
+
return validatedRows.map((row) => new ForeignDataWrapper(row));
|
|
128
126
|
}
|
|
@@ -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 { ForeignTableChange } from "./changes/foreign-table.types.ts";
|
|
4
3
|
import type { ForeignTable } from "./foreign-table.model.ts";
|
|
5
4
|
/**
|
|
@@ -10,9 +9,4 @@ import type { ForeignTable } from "./foreign-table.model.ts";
|
|
|
10
9
|
* @param branch - The foreign tables 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 diffForeignTables(ctx:
|
|
14
|
-
version: number;
|
|
15
|
-
currentUser: string;
|
|
16
|
-
defaultPrivilegeState: DefaultPrivilegeState;
|
|
17
|
-
mainRoles: Record<string, Role>;
|
|
18
|
-
}, main: Record<string, ForeignTable>, branch: Record<string, ForeignTable>): ForeignTableChange[];
|
|
12
|
+
export declare function diffForeignTables(ctx: Pick<ObjectDiffContext, "version" | "currentUser" | "defaultPrivilegeState">, main: Record<string, ForeignTable>, branch: Record<string, ForeignTable>): ForeignTableChange[];
|