@supabase/pg-delta 1.0.0-alpha.0 → 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/integrations.d.ts +4 -3
- package/dist/cli/utils/integrations.js +25 -16
- 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/fingerprint.d.ts +0 -8
- package/dist/core/fingerprint.js +2 -2
- package/dist/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
- package/dist/core/integrations/filter/dsl.d.ts +39 -2
- package/dist/core/integrations/filter/dsl.js +20 -2
- package/dist/core/integrations/filter/extractors.js +42 -0
- package/dist/core/integrations/filter/filter.types.d.ts +2 -0
- package/dist/core/integrations/filter/filter.types.js +1 -0
- package/dist/core/integrations/integration-dsl.d.ts +10 -0
- package/dist/core/integrations/integration.types.d.ts +2 -1
- package/dist/core/integrations/serialize/dsl.d.ts +1 -1
- package/dist/core/integrations/serialize/serialize.types.d.ts +2 -0
- package/dist/core/integrations/serialize/serialize.types.js +1 -0
- package/dist/core/integrations/supabase.d.ts +18 -0
- package/dist/core/integrations/supabase.js +125 -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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +3 -2
- package/dist/core/objects/role/role.model.js +146 -40
- package/dist/core/objects/rule/rule.model.d.ts +2 -2
- 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 +7 -4
- 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 +2 -2
- 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 +17 -3
- 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/index.d.ts +1 -2
- package/dist/core/plan/index.js +0 -1
- 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 +10 -15
- 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 +18 -1
- package/dist/index.js +16 -1
- package/package.json +58 -21
- 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
- package/dist/core/index.d.ts +0 -15
- package/dist/core/index.js +0 -14
- package/dist/core/main.d.ts +0 -5
- package/dist/core/main.js +0 -44
|
@@ -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";
|
|
@@ -71,10 +72,8 @@ export class Language extends BasePgModel {
|
|
|
71
72
|
};
|
|
72
73
|
}
|
|
73
74
|
}
|
|
74
|
-
async function _extractLanguages(
|
|
75
|
-
const languageRows = await
|
|
76
|
-
await sql `set search_path = ''`;
|
|
77
|
-
return sql `
|
|
75
|
+
async function _extractLanguages(pool) {
|
|
76
|
+
const { rows: languageRows } = await pool.query(sql `
|
|
78
77
|
with extension_oids as (
|
|
79
78
|
select
|
|
80
79
|
objid
|
|
@@ -112,9 +111,8 @@ async function _extractLanguages(sql) {
|
|
|
112
111
|
-- <EXCLUDE_INTERNAL and default>
|
|
113
112
|
where lan.lanname not in ('internal', 'c')
|
|
114
113
|
order by
|
|
115
|
-
lan.lanname
|
|
116
|
-
|
|
117
|
-
});
|
|
114
|
+
lan.lanname
|
|
115
|
+
`);
|
|
118
116
|
// Process rows to handle "-" as null values
|
|
119
117
|
const processedRows = languageRows.map((row) => ({
|
|
120
118
|
...row,
|
|
@@ -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 { MaterializedViewChange } from "./changes/materialized-view.types.ts";
|
|
4
3
|
import type { MaterializedView } from "./materialized-view.model.ts";
|
|
5
4
|
/**
|
|
@@ -10,9 +9,4 @@ import type { MaterializedView } from "./materialized-view.model.ts";
|
|
|
10
9
|
* @param branch - The materialized views 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 diffMaterializedViews(ctx:
|
|
14
|
-
version: number;
|
|
15
|
-
currentUser: string;
|
|
16
|
-
defaultPrivilegeState: DefaultPrivilegeState;
|
|
17
|
-
mainRoles: Record<string, Role>;
|
|
18
|
-
}, main: Record<string, MaterializedView>, branch: Record<string, MaterializedView>): MaterializedViewChange[];
|
|
12
|
+
export declare function diffMaterializedViews(ctx: Pick<ObjectDiffContext, "version" | "currentUser" | "defaultPrivilegeState">, main: Record<string, MaterializedView>, branch: Record<string, MaterializedView>): MaterializedViewChange[];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { diffObjects } from "../base.diff.js";
|
|
2
|
-
import { diffPrivileges,
|
|
2
|
+
import { diffPrivileges, emitColumnPrivilegeChanges, } from "../base.privilege-diff.js";
|
|
3
3
|
import { deepEqual, hasNonAlterableChanges } from "../utils.js";
|
|
4
4
|
import { AlterMaterializedViewChangeOwner, AlterMaterializedViewSetStorageParams, } from "./changes/materialized-view.alter.js";
|
|
5
5
|
import { CreateCommentOnMaterializedView, CreateCommentOnMaterializedViewColumn, DropCommentOnMaterializedView, DropCommentOnMaterializedViewColumn, } from "./changes/materialized-view.comment.js";
|
|
@@ -54,87 +54,18 @@ export function diffMaterializedViews(ctx, main, branch) {
|
|
|
54
54
|
// We compare default privileges against desired privileges to generate REVOKE/GRANT statements
|
|
55
55
|
// needed to reach the final desired state.
|
|
56
56
|
const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "materialized_view", mv.schema ?? "");
|
|
57
|
+
const creatorFilteredDefaults = mv.owner !== ctx.currentUser
|
|
58
|
+
? effectiveDefaults.filter((p) => p.grantee !== ctx.currentUser)
|
|
59
|
+
: effectiveDefaults;
|
|
57
60
|
const desiredPrivileges = mv.privileges;
|
|
58
61
|
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
59
62
|
// and shouldn't be compared. Use the materialized view owner as the reference.
|
|
60
|
-
const privilegeResults = diffPrivileges(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
for (const [grantable, privSet] of group.byGrant) {
|
|
67
|
-
const privileges = Array.from(privSet).map((priv) => ({
|
|
68
|
-
privilege: priv,
|
|
69
|
-
grantable,
|
|
70
|
-
}));
|
|
71
|
-
changes.push(new GrantMaterializedViewPrivileges({
|
|
72
|
-
materializedView: mv,
|
|
73
|
-
grantee,
|
|
74
|
-
privileges,
|
|
75
|
-
columns: group.columns,
|
|
76
|
-
version: ctx.version,
|
|
77
|
-
}));
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
// Generate revoke changes
|
|
82
|
-
if (result.revokes.length > 0) {
|
|
83
|
-
const revokeGroups = groupPrivilegesByColumns(result.revokes);
|
|
84
|
-
for (const [, group] of revokeGroups) {
|
|
85
|
-
const allPrivileges = new Set();
|
|
86
|
-
for (const [, privSet] of group.byGrant) {
|
|
87
|
-
for (const priv of privSet) {
|
|
88
|
-
allPrivileges.add(priv);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
const privileges = Array.from(allPrivileges).map((priv) => ({
|
|
92
|
-
privilege: priv,
|
|
93
|
-
grantable: false,
|
|
94
|
-
}));
|
|
95
|
-
changes.push(new RevokeMaterializedViewPrivileges({
|
|
96
|
-
materializedView: mv,
|
|
97
|
-
grantee,
|
|
98
|
-
privileges,
|
|
99
|
-
columns: group.columns,
|
|
100
|
-
version: ctx.version,
|
|
101
|
-
}));
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
// Generate revoke grant option changes
|
|
105
|
-
if (result.revokeGrantOption.length > 0) {
|
|
106
|
-
const revokeGrantGroups = new Map();
|
|
107
|
-
for (const r of result.revokeGrantOption) {
|
|
108
|
-
// For revoke grant option, we need to find the columns from the effective defaults
|
|
109
|
-
const originalPriv = effectiveDefaults.find((p) => p.grantee === grantee && p.privilege === r);
|
|
110
|
-
const key = originalPriv?.columns
|
|
111
|
-
? originalPriv.columns.sort().join(",")
|
|
112
|
-
: "";
|
|
113
|
-
if (!revokeGrantGroups.has(key)) {
|
|
114
|
-
revokeGrantGroups.set(key, {
|
|
115
|
-
columns: originalPriv?.columns
|
|
116
|
-
? [...originalPriv.columns]
|
|
117
|
-
: undefined,
|
|
118
|
-
privileges: new Set(),
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
const group = revokeGrantGroups.get(key);
|
|
122
|
-
if (!group)
|
|
123
|
-
continue;
|
|
124
|
-
group.privileges.add(r);
|
|
125
|
-
}
|
|
126
|
-
for (const [, group] of revokeGrantGroups) {
|
|
127
|
-
const privilegeNames = Array.from(group.privileges);
|
|
128
|
-
changes.push(new RevokeGrantOptionMaterializedViewPrivileges({
|
|
129
|
-
materializedView: mv,
|
|
130
|
-
grantee,
|
|
131
|
-
privilegeNames,
|
|
132
|
-
columns: group.columns,
|
|
133
|
-
version: ctx.version,
|
|
134
|
-
}));
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
63
|
+
const privilegeResults = diffPrivileges(creatorFilteredDefaults, desiredPrivileges, mv.owner);
|
|
64
|
+
changes.push(...emitColumnPrivilegeChanges(privilegeResults, mv, mv, "materializedView", {
|
|
65
|
+
Grant: GrantMaterializedViewPrivileges,
|
|
66
|
+
Revoke: RevokeMaterializedViewPrivileges,
|
|
67
|
+
RevokeGrantOption: RevokeGrantOptionMaterializedViewPrivileges,
|
|
68
|
+
}, effectiveDefaults, ctx.version));
|
|
138
69
|
}
|
|
139
70
|
for (const materializedViewId of dropped) {
|
|
140
71
|
changes.push(new DropMaterializedView({ materializedView: main[materializedViewId] }));
|
|
@@ -250,85 +181,12 @@ export function diffMaterializedViews(ctx, main, branch) {
|
|
|
250
181
|
// PRIVILEGES (unified object and column privileges)
|
|
251
182
|
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
252
183
|
// and shouldn't be compared. Use branch owner as the reference.
|
|
253
|
-
const privilegeResults = diffPrivileges(mainMaterializedView.privileges, branchMaterializedView.privileges, branchMaterializedView.owner
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
for (const [grantable, privSet] of group.byGrant) {
|
|
260
|
-
const privileges = Array.from(privSet).map((priv) => ({
|
|
261
|
-
privilege: priv,
|
|
262
|
-
grantable,
|
|
263
|
-
}));
|
|
264
|
-
changes.push(new GrantMaterializedViewPrivileges({
|
|
265
|
-
materializedView: branchMaterializedView,
|
|
266
|
-
grantee,
|
|
267
|
-
privileges,
|
|
268
|
-
columns: group.columns,
|
|
269
|
-
version: ctx.version,
|
|
270
|
-
}));
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
// Generate revoke changes
|
|
275
|
-
if (result.revokes.length > 0) {
|
|
276
|
-
const revokeGroups = groupPrivilegesByColumns(result.revokes);
|
|
277
|
-
for (const [, group] of revokeGroups) {
|
|
278
|
-
// Collapse all grantable groups into a single revoke (grantable: false)
|
|
279
|
-
const allPrivileges = new Set();
|
|
280
|
-
for (const [, privSet] of group.byGrant) {
|
|
281
|
-
for (const priv of privSet) {
|
|
282
|
-
allPrivileges.add(priv);
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
const privileges = Array.from(allPrivileges).map((priv) => ({
|
|
286
|
-
privilege: priv,
|
|
287
|
-
grantable: false,
|
|
288
|
-
}));
|
|
289
|
-
changes.push(new RevokeMaterializedViewPrivileges({
|
|
290
|
-
materializedView: mainMaterializedView,
|
|
291
|
-
grantee,
|
|
292
|
-
privileges,
|
|
293
|
-
columns: group.columns,
|
|
294
|
-
version: ctx.version,
|
|
295
|
-
}));
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
// Generate revoke grant option changes
|
|
299
|
-
if (result.revokeGrantOption.length > 0) {
|
|
300
|
-
const revokeGrantGroups = new Map();
|
|
301
|
-
for (const r of result.revokeGrantOption) {
|
|
302
|
-
// For revoke grant option, we need to find the columns from the original privilege
|
|
303
|
-
const originalPriv = mainMaterializedView.privileges.find((p) => p.grantee === grantee && p.privilege === r);
|
|
304
|
-
const key = originalPriv?.columns
|
|
305
|
-
? originalPriv.columns.sort().join(",")
|
|
306
|
-
: "";
|
|
307
|
-
if (!revokeGrantGroups.has(key)) {
|
|
308
|
-
revokeGrantGroups.set(key, {
|
|
309
|
-
columns: originalPriv?.columns
|
|
310
|
-
? [...originalPriv.columns]
|
|
311
|
-
: undefined,
|
|
312
|
-
privileges: new Set(),
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
|
-
const group = revokeGrantGroups.get(key);
|
|
316
|
-
if (!group)
|
|
317
|
-
continue;
|
|
318
|
-
group.privileges.add(r);
|
|
319
|
-
}
|
|
320
|
-
for (const [, group] of revokeGrantGroups) {
|
|
321
|
-
const privilegeNames = Array.from(group.privileges);
|
|
322
|
-
changes.push(new RevokeGrantOptionMaterializedViewPrivileges({
|
|
323
|
-
materializedView: mainMaterializedView,
|
|
324
|
-
grantee,
|
|
325
|
-
privilegeNames,
|
|
326
|
-
columns: group.columns,
|
|
327
|
-
version: ctx.version,
|
|
328
|
-
}));
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
}
|
|
184
|
+
const privilegeResults = diffPrivileges(mainMaterializedView.privileges, branchMaterializedView.privileges, branchMaterializedView.owner);
|
|
185
|
+
changes.push(...emitColumnPrivilegeChanges(privilegeResults, branchMaterializedView, mainMaterializedView, "materializedView", {
|
|
186
|
+
Grant: GrantMaterializedViewPrivileges,
|
|
187
|
+
Revoke: RevokeMaterializedViewPrivileges,
|
|
188
|
+
RevokeGrantOption: RevokeGrantOptionMaterializedViewPrivileges,
|
|
189
|
+
}, mainMaterializedView.privileges, ctx.version));
|
|
332
190
|
}
|
|
333
191
|
}
|
|
334
192
|
return changes;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Pool } from "pg";
|
|
2
2
|
import z from "zod";
|
|
3
3
|
import { BasePgModel, type TableLikeObject } from "../base.model.ts";
|
|
4
4
|
import { type PrivilegeProps } from "../base.privilege-diff.ts";
|
|
@@ -148,5 +148,5 @@ export declare class MaterializedView extends BasePgModel implements TableLikeOb
|
|
|
148
148
|
};
|
|
149
149
|
};
|
|
150
150
|
}
|
|
151
|
-
export declare function extractMaterializedViews(
|
|
151
|
+
export declare function extractMaterializedViews(pool: Pool): Promise<MaterializedView[]>;
|
|
152
152
|
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { sql } from "@ts-safeql/sql-tag";
|
|
1
2
|
import z from "zod";
|
|
2
3
|
import { BasePgModel, columnPropsSchema, } from "../base.model.js";
|
|
3
4
|
import { privilegePropsSchema, } from "../base.privilege-diff.js";
|
|
@@ -113,10 +114,8 @@ export class MaterializedView extends BasePgModel {
|
|
|
113
114
|
};
|
|
114
115
|
}
|
|
115
116
|
}
|
|
116
|
-
export async function extractMaterializedViews(
|
|
117
|
-
|
|
118
|
-
await sql `set search_path = ''`;
|
|
119
|
-
const mvRows = await sql `
|
|
117
|
+
export async function extractMaterializedViews(pool) {
|
|
118
|
+
const { rows: mvRows } = await pool.query(sql `
|
|
120
119
|
with extension_oids as (
|
|
121
120
|
select
|
|
122
121
|
objid
|
|
@@ -194,7 +193,7 @@ select
|
|
|
194
193
|
filter (where src.attname is not null) as cols
|
|
195
194
|
from (
|
|
196
195
|
-- one row for object ACL + one row per column ACL
|
|
197
|
-
select null::name as attname, c.relacl as acl
|
|
196
|
+
select null::name as attname, COALESCE(c.relacl, acldefault('r', c.relowner)) as acl
|
|
198
197
|
union all
|
|
199
198
|
select a2.attname, a2.attacl
|
|
200
199
|
from pg_attribute a2
|
|
@@ -219,10 +218,9 @@ where not c.relnamespace::regnamespace::text like any(array['pg\\_%', 'informati
|
|
|
219
218
|
group by
|
|
220
219
|
c.oid, c.relnamespace, c.relname, pg_get_viewdef(c.oid), c.relrowsecurity, c.relforcerowsecurity, c.relhasindex, c.relhasrules, c.relhastriggers, c.relhassubclass, c.relispopulated, c.relreplident, c.relispartition, c.reloptions, pg_get_expr(c.relpartbound, c.oid), c.relowner
|
|
221
220
|
order by
|
|
222
|
-
c.relnamespace::regnamespace, c.relname
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
});
|
|
221
|
+
c.relnamespace::regnamespace, c.relname
|
|
222
|
+
`);
|
|
223
|
+
// Validate and parse each row using the Zod schema
|
|
224
|
+
const validatedRows = mvRows.map((row) => materializedViewPropsSchema.parse(row));
|
|
225
|
+
return validatedRows.map((row) => new MaterializedView(row));
|
|
228
226
|
}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { formatConfigValue } from "../utils.js";
|
|
2
2
|
import { AlterProcedureChange } from "./procedure.base.js";
|
|
3
|
+
/** Build schema.name(args) for ALTER statements so overloaded functions are unambiguous. */
|
|
4
|
+
function procedureSignature(procedure) {
|
|
5
|
+
const args = procedure.argument_types?.join(", ") ?? "";
|
|
6
|
+
return `${procedure.schema}.${procedure.name}(${args})`;
|
|
7
|
+
}
|
|
3
8
|
/**
|
|
4
9
|
* ALTER FUNCTION/PROCEDURE ... OWNER TO ...
|
|
5
10
|
*/
|
|
@@ -20,7 +25,7 @@ export class AlterProcedureChangeOwner extends AlterProcedureChange {
|
|
|
20
25
|
return [
|
|
21
26
|
"ALTER",
|
|
22
27
|
objectType,
|
|
23
|
-
|
|
28
|
+
procedureSignature(this.procedure),
|
|
24
29
|
"OWNER TO",
|
|
25
30
|
this.owner,
|
|
26
31
|
].join(" ");
|
|
@@ -49,7 +54,7 @@ export class AlterProcedureSetSecurity extends AlterProcedureChange {
|
|
|
49
54
|
return [
|
|
50
55
|
"ALTER",
|
|
51
56
|
objectType,
|
|
52
|
-
|
|
57
|
+
procedureSignature(this.procedure),
|
|
53
58
|
security,
|
|
54
59
|
].join(" ");
|
|
55
60
|
}
|
|
@@ -78,7 +83,7 @@ export class AlterProcedureSetConfig extends AlterProcedureChange {
|
|
|
78
83
|
const head = [
|
|
79
84
|
"ALTER",
|
|
80
85
|
this.procedure.kind === "p" ? "PROCEDURE" : "FUNCTION",
|
|
81
|
-
|
|
86
|
+
procedureSignature(this.procedure),
|
|
82
87
|
].join(" ");
|
|
83
88
|
if (this.action === "reset_all")
|
|
84
89
|
return `${head} RESET ALL`;
|
|
@@ -113,7 +118,7 @@ export class AlterProcedureSetVolatility extends AlterProcedureChange {
|
|
|
113
118
|
return [
|
|
114
119
|
"ALTER",
|
|
115
120
|
objectType,
|
|
116
|
-
|
|
121
|
+
procedureSignature(this.procedure),
|
|
117
122
|
volMap[this.volatility],
|
|
118
123
|
].join(" ");
|
|
119
124
|
}
|
|
@@ -139,7 +144,7 @@ export class AlterProcedureSetStrictness extends AlterProcedureChange {
|
|
|
139
144
|
return [
|
|
140
145
|
"ALTER",
|
|
141
146
|
objectType,
|
|
142
|
-
|
|
147
|
+
procedureSignature(this.procedure),
|
|
143
148
|
strictness,
|
|
144
149
|
].join(" ");
|
|
145
150
|
}
|
|
@@ -162,12 +167,7 @@ export class AlterProcedureSetLeakproof extends AlterProcedureChange {
|
|
|
162
167
|
serialize() {
|
|
163
168
|
const objectType = this.procedure.kind === "p" ? "PROCEDURE" : "FUNCTION";
|
|
164
169
|
const leak = this.leakproof ? "LEAKPROOF" : "NOT LEAKPROOF";
|
|
165
|
-
return [
|
|
166
|
-
"ALTER",
|
|
167
|
-
objectType,
|
|
168
|
-
`${this.procedure.schema}.${this.procedure.name}`,
|
|
169
|
-
leak,
|
|
170
|
-
].join(" ");
|
|
170
|
+
return ["ALTER", objectType, procedureSignature(this.procedure), leak].join(" ");
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
/**
|
|
@@ -195,7 +195,7 @@ export class AlterProcedureSetParallel extends AlterProcedureChange {
|
|
|
195
195
|
return [
|
|
196
196
|
"ALTER",
|
|
197
197
|
objectType,
|
|
198
|
-
|
|
198
|
+
procedureSignature(this.procedure),
|
|
199
199
|
parallelMap[this.parallelSafety],
|
|
200
200
|
].join(" ");
|
|
201
201
|
}
|
|
@@ -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 { ProcedureChange } from "./changes/procedure.types.ts";
|
|
4
3
|
import type { Procedure } from "./procedure.model.ts";
|
|
5
4
|
/**
|
|
@@ -10,9 +9,4 @@ import type { Procedure } from "./procedure.model.ts";
|
|
|
10
9
|
* @param branch - The procedures 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 diffProcedures(ctx:
|
|
14
|
-
version: number;
|
|
15
|
-
currentUser: string;
|
|
16
|
-
defaultPrivilegeState: DefaultPrivilegeState;
|
|
17
|
-
mainRoles: Record<string, Role>;
|
|
18
|
-
}, main: Record<string, Procedure>, branch: Record<string, Procedure>): ProcedureChange[];
|
|
12
|
+
export declare function diffProcedures(ctx: Pick<ObjectDiffContext, "version" | "currentUser" | "defaultPrivilegeState">, main: Record<string, Procedure>, branch: Record<string, Procedure>): ProcedureChange[];
|
|
@@ -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 { AlterProcedureChangeOwner, AlterProcedureSetConfig, AlterProcedureSetLeakproof, AlterProcedureSetParallel, AlterProcedureSetSecurity, AlterProcedureSetStrictness, AlterProcedureSetVolatility, } from "./changes/procedure.alter.js";
|
|
5
5
|
import { CreateCommentOnProcedure, DropCommentOnProcedure, } from "./changes/procedure.comment.js";
|
|
@@ -37,6 +37,9 @@ export function diffProcedures(ctx, main, branch) {
|
|
|
37
37
|
// We compare default privileges against desired privileges to generate REVOKE/GRANT statements
|
|
38
38
|
// needed to reach the final desired state.
|
|
39
39
|
const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "procedure", proc.schema ?? "");
|
|
40
|
+
const creatorFilteredDefaults = proc.owner !== ctx.currentUser
|
|
41
|
+
? effectiveDefaults.filter((p) => p.grantee !== ctx.currentUser)
|
|
42
|
+
: effectiveDefaults;
|
|
40
43
|
// Filter out PUBLIC's built-in default EXECUTE privilege (PostgreSQL grants it automatically)
|
|
41
44
|
// Reference: https://www.postgresql.org/docs/17/ddl-priv.html Table 5.2
|
|
42
45
|
// This prevents generating unnecessary "GRANT EXECUTE TO PUBLIC" statements
|
|
@@ -44,44 +47,12 @@ export function diffProcedures(ctx, main, branch) {
|
|
|
44
47
|
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
45
48
|
// and shouldn't be compared. Note: we use the final owner (proc.owner), not the
|
|
46
49
|
// current user, because ownership change happens before privilege diffing.
|
|
47
|
-
const privilegeResults = diffPrivileges(
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
void grantable;
|
|
54
|
-
changes.push(new GrantProcedurePrivileges({
|
|
55
|
-
procedure: proc,
|
|
56
|
-
grantee,
|
|
57
|
-
privileges: list,
|
|
58
|
-
version: ctx.version,
|
|
59
|
-
}));
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
// Generate revoke changes
|
|
63
|
-
if (result.revokes.length > 0) {
|
|
64
|
-
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
65
|
-
for (const [grantable, list] of revokeGroups) {
|
|
66
|
-
void grantable;
|
|
67
|
-
changes.push(new RevokeProcedurePrivileges({
|
|
68
|
-
procedure: proc,
|
|
69
|
-
grantee,
|
|
70
|
-
privileges: list,
|
|
71
|
-
version: ctx.version,
|
|
72
|
-
}));
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
// Generate revoke grant option changes
|
|
76
|
-
if (result.revokeGrantOption.length > 0) {
|
|
77
|
-
changes.push(new RevokeGrantOptionProcedurePrivileges({
|
|
78
|
-
procedure: proc,
|
|
79
|
-
grantee,
|
|
80
|
-
privilegeNames: result.revokeGrantOption,
|
|
81
|
-
version: ctx.version,
|
|
82
|
-
}));
|
|
83
|
-
}
|
|
84
|
-
}
|
|
50
|
+
const privilegeResults = diffPrivileges(filterPublicBuiltInDefaults("procedure", creatorFilteredDefaults), desiredPrivileges, proc.owner);
|
|
51
|
+
changes.push(...emitObjectPrivilegeChanges(privilegeResults, proc, proc, "procedure", {
|
|
52
|
+
Grant: GrantProcedurePrivileges,
|
|
53
|
+
Revoke: RevokeProcedurePrivileges,
|
|
54
|
+
RevokeGrantOption: RevokeGrantOptionProcedurePrivileges,
|
|
55
|
+
}, ctx.version));
|
|
85
56
|
}
|
|
86
57
|
for (const procedureId of dropped) {
|
|
87
58
|
changes.push(new DropProcedure({ procedure: main[procedureId] }));
|
|
@@ -238,44 +209,12 @@ export function diffProcedures(ctx, main, branch) {
|
|
|
238
209
|
const branchPrivilegesFiltered = filterPublicBuiltInDefaults("procedure", branchProcedure.privileges);
|
|
239
210
|
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
240
211
|
// and shouldn't be compared. Use branch owner as the reference.
|
|
241
|
-
const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchProcedure.owner
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
void grantable;
|
|
248
|
-
changes.push(new GrantProcedurePrivileges({
|
|
249
|
-
procedure: branchProcedure,
|
|
250
|
-
grantee,
|
|
251
|
-
privileges: list,
|
|
252
|
-
version: ctx.version,
|
|
253
|
-
}));
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
// Generate revoke changes
|
|
257
|
-
if (result.revokes.length > 0) {
|
|
258
|
-
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
259
|
-
for (const [grantable, list] of revokeGroups) {
|
|
260
|
-
void grantable;
|
|
261
|
-
changes.push(new RevokeProcedurePrivileges({
|
|
262
|
-
procedure: mainProcedure,
|
|
263
|
-
grantee,
|
|
264
|
-
privileges: list,
|
|
265
|
-
version: ctx.version,
|
|
266
|
-
}));
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
// Generate revoke grant option changes
|
|
270
|
-
if (result.revokeGrantOption.length > 0) {
|
|
271
|
-
changes.push(new RevokeGrantOptionProcedurePrivileges({
|
|
272
|
-
procedure: mainProcedure,
|
|
273
|
-
grantee,
|
|
274
|
-
privilegeNames: result.revokeGrantOption,
|
|
275
|
-
version: ctx.version,
|
|
276
|
-
}));
|
|
277
|
-
}
|
|
278
|
-
}
|
|
212
|
+
const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchProcedure.owner);
|
|
213
|
+
changes.push(...emitObjectPrivilegeChanges(privilegeResults, branchProcedure, mainProcedure, "procedure", {
|
|
214
|
+
Grant: GrantProcedurePrivileges,
|
|
215
|
+
Revoke: RevokeProcedurePrivileges,
|
|
216
|
+
RevokeGrantOption: RevokeGrantOptionProcedurePrivileges,
|
|
217
|
+
}, ctx.version));
|
|
279
218
|
}
|
|
280
219
|
}
|
|
281
220
|
return changes;
|
|
@@ -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";
|
|
@@ -128,5 +128,5 @@ export declare class Procedure extends BasePgModel {
|
|
|
128
128
|
}[];
|
|
129
129
|
};
|
|
130
130
|
}
|
|
131
|
-
export declare function extractProcedures(
|
|
131
|
+
export declare function extractProcedures(pool: Pool): Promise<Procedure[]>;
|
|
132
132
|
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";
|
|
@@ -162,10 +163,8 @@ export class Procedure extends BasePgModel {
|
|
|
162
163
|
};
|
|
163
164
|
}
|
|
164
165
|
}
|
|
165
|
-
export async function extractProcedures(
|
|
166
|
-
|
|
167
|
-
await sql `set search_path = ''`;
|
|
168
|
-
const procedureRows = await sql `
|
|
166
|
+
export async function extractProcedures(pool) {
|
|
167
|
+
const { rows: procedureRows } = await pool.query(sql `
|
|
169
168
|
with extension_oids as (
|
|
170
169
|
select
|
|
171
170
|
objid
|
|
@@ -223,7 +222,7 @@ select
|
|
|
223
222
|
)
|
|
224
223
|
order by x.grantee, x.privilege_type
|
|
225
224
|
)
|
|
226
|
-
from lateral aclexplode(p.proacl) as x(grantor, grantee, privilege_type, is_grantable)
|
|
225
|
+
from lateral aclexplode(COALESCE(p.proacl, acldefault('f', p.proowner))) as x(grantor, grantee, privilege_type, is_grantable)
|
|
227
226
|
), '[]'
|
|
228
227
|
) as privileges
|
|
229
228
|
from
|
|
@@ -235,10 +234,9 @@ from
|
|
|
235
234
|
and e.objid is null
|
|
236
235
|
and l.lanname not in ('c', 'internal')
|
|
237
236
|
order by
|
|
238
|
-
1, 2
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
});
|
|
237
|
+
1, 2
|
|
238
|
+
`);
|
|
239
|
+
// Validate and parse each row using the Zod schema
|
|
240
|
+
const validatedRows = procedureRows.map((row) => procedurePropsSchema.parse(row));
|
|
241
|
+
return validatedRows.map((row) => new Procedure(row));
|
|
244
242
|
}
|
|
@@ -13,15 +13,6 @@ export declare class AlterPublicationSetOptions extends AlterPublicationChange {
|
|
|
13
13
|
get requires(): `publication:${string}`[];
|
|
14
14
|
serialize(): string;
|
|
15
15
|
}
|
|
16
|
-
export declare class AlterPublicationSetForAllTables extends AlterPublicationChange {
|
|
17
|
-
readonly publication: Publication;
|
|
18
|
-
readonly scope: "object";
|
|
19
|
-
constructor(props: {
|
|
20
|
-
publication: Publication;
|
|
21
|
-
});
|
|
22
|
-
get requires(): `publication:${string}`[];
|
|
23
|
-
serialize(): string;
|
|
24
|
-
}
|
|
25
16
|
export declare class AlterPublicationSetList extends AlterPublicationChange {
|
|
26
17
|
readonly publication: Publication;
|
|
27
18
|
readonly scope: "object";
|
|
@@ -27,20 +27,6 @@ export class AlterPublicationSetOptions extends AlterPublicationChange {
|
|
|
27
27
|
return `ALTER PUBLICATION ${this.publication.name} SET (${assignments.join(", ")})`;
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
export class AlterPublicationSetForAllTables extends AlterPublicationChange {
|
|
31
|
-
publication;
|
|
32
|
-
scope = "object";
|
|
33
|
-
constructor(props) {
|
|
34
|
-
super();
|
|
35
|
-
this.publication = props.publication;
|
|
36
|
-
}
|
|
37
|
-
get requires() {
|
|
38
|
-
return [this.publication.stableId];
|
|
39
|
-
}
|
|
40
|
-
serialize() {
|
|
41
|
-
return `ALTER PUBLICATION ${this.publication.name} SET FOR ALL TABLES`;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
30
|
export class AlterPublicationSetList extends AlterPublicationChange {
|
|
45
31
|
publication;
|
|
46
32
|
scope = "object";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { AlterPublicationAddSchemas, AlterPublicationAddTables, AlterPublicationDropSchemas, AlterPublicationDropTables,
|
|
1
|
+
import type { AlterPublicationAddSchemas, AlterPublicationAddTables, AlterPublicationDropSchemas, AlterPublicationDropTables, AlterPublicationSetList, AlterPublicationSetOptions, AlterPublicationSetOwner } from "./publication.alter.ts";
|
|
2
2
|
import type { CommentPublication } from "./publication.comment.ts";
|
|
3
3
|
import type { CreatePublication } from "./publication.create.ts";
|
|
4
4
|
import type { DropPublication } from "./publication.drop.ts";
|
|
5
|
-
export type PublicationChange = AlterPublicationAddSchemas | AlterPublicationAddTables | AlterPublicationDropSchemas | AlterPublicationDropTables |
|
|
5
|
+
export type PublicationChange = AlterPublicationAddSchemas | AlterPublicationAddTables | AlterPublicationDropSchemas | AlterPublicationDropTables | AlterPublicationSetList | AlterPublicationSetOptions | AlterPublicationSetOwner | CommentPublication | CreatePublication | DropPublication;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
+
import type { ObjectDiffContext } from "../diff-context.ts";
|
|
1
2
|
import type { PublicationChange } from "./changes/publication.types.ts";
|
|
2
3
|
import type { Publication } from "./publication.model.ts";
|
|
3
|
-
export declare function diffPublications(ctx:
|
|
4
|
-
currentUser: string;
|
|
5
|
-
}, main: Record<string, Publication>, branch: Record<string, Publication>): PublicationChange[];
|
|
4
|
+
export declare function diffPublications(ctx: Pick<ObjectDiffContext, "currentUser">, main: Record<string, Publication>, branch: Record<string, Publication>): PublicationChange[];
|