@supabase/pg-delta 1.0.0-alpha.1 → 1.0.0-alpha.11
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 +240 -0
- package/dist/cli/commands/plan.js +47 -16
- package/dist/cli/commands/sync.js +8 -12
- 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 +30 -6
- package/dist/cli/utils/integrations.js +98 -6
- 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/change-utils.d.ts +9 -0
- package/dist/core/change-utils.js +71 -0
- package/dist/core/change.types.d.ts +22 -0
- package/dist/core/change.types.js +37 -1
- 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 +33 -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 +82 -41
- package/dist/core/integrations/filter/dsl.js +127 -61
- package/dist/core/integrations/filter/flatten.d.ts +51 -0
- package/dist/core/integrations/filter/flatten.js +116 -0
- package/dist/core/integrations/integration-dsl.d.ts +27 -1
- package/dist/core/integrations/merge.d.ts +20 -0
- package/dist/core/integrations/merge.js +60 -0
- package/dist/core/integrations/serialize/dsl.d.ts +7 -4
- package/dist/core/integrations/serialize/dsl.js +2 -2
- package/dist/core/integrations/supabase.d.ts +8 -0
- package/dist/core/integrations/supabase.js +34 -8
- 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/aggregate/changes/aggregate.types.d.ts +1 -0
- package/dist/core/objects/base.change.d.ts +10 -0
- package/dist/core/objects/base.change.js +10 -0
- package/dist/core/objects/base.model.d.ts +4 -1
- package/dist/core/objects/base.model.js +5 -2
- 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/changes/collation.types.d.ts +1 -0
- 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.d.ts +1 -1
- package/dist/core/objects/domain/changes/domain.create.js +11 -3
- package/dist/core/objects/domain/changes/domain.types.d.ts +1 -0
- 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/changes/event-trigger.types.d.ts +1 -0
- 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/changes/extension.types.d.ts +1 -0
- 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/changes/foreign-data-wrapper.types.d.ts +1 -0
- 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-data-wrapper.types.d.ts +1 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.d.ts +1 -0
- 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/changes/server.types.d.ts +1 -0
- 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/changes/user-mapping.types.d.ts +1 -0
- 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/changes/index.types.d.ts +1 -0
- 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/changes/language.types.d.ts +1 -0
- 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/changes/materialized-view.types.d.ts +1 -0
- 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/changes/procedure.types.d.ts +1 -0
- 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 +3 -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/changes/rls-policy.types.d.ts +1 -0
- 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/changes/role.types.d.ts +1 -0
- 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/changes/rule.types.d.ts +1 -0
- 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/changes/schema.types.d.ts +1 -0
- 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/changes/sequence.types.d.ts +1 -0
- 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/changes/subscription.types.d.ts +1 -0
- 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/changes/table.types.d.ts +1 -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/changes/trigger.types.d.ts +1 -0
- 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/changes/composite-type.types.d.ts +1 -0
- package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +2 -8
- package/dist/core/objects/type/composite-type/composite-type.diff.js +16 -77
- package/dist/core/objects/type/composite-type/composite-type.model.d.ts +5 -5
- package/dist/core/objects/type/composite-type/composite-type.model.js +10 -11
- package/dist/core/objects/type/enum/changes/enum.types.d.ts +1 -0
- 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/changes/range.types.d.ts +1 -0
- 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/type/type.types.d.ts +1 -0
- package/dist/core/objects/view/changes/view.types.d.ts +1 -0
- package/dist/core/objects/view/view.diff.d.ts +2 -8
- package/dist/core/objects/view/view.diff.js +37 -168
- 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/custom-constraints.js +1 -1
- package/dist/core/sort/graph-builder.js +10 -0
- package/dist/core/sort/logical-sort.js +34 -47
- 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 +60 -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 +322 -0
- package/src/cli/commands/plan.ts +210 -0
- package/src/cli/commands/sync.ts +178 -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 +251 -0
- package/src/cli/utils/integrations.ts +170 -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 +486 -0
- package/src/core/catalog.snapshot.ts +289 -0
- package/src/core/change-utils.test.ts +61 -0
- package/src/core/change-utils.ts +73 -0
- package/src/core/change.types.ts +94 -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 +1895 -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 +579 -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 +450 -0
- package/src/core/integrations/filter/dsl.ts +305 -0
- package/src/core/integrations/filter/filter.types.ts +3 -0
- package/src/core/integrations/filter/flatten.test.ts +282 -0
- package/src/core/integrations/filter/flatten.ts +150 -0
- package/src/core/integrations/integration-dsl.ts +50 -0
- package/src/core/integrations/integration.types.ts +7 -0
- package/src/core/integrations/merge.test.ts +128 -0
- package/src/core/integrations/merge.ts +72 -0
- package/src/core/integrations/serialize/dsl.test.ts +91 -0
- package/src/core/integrations/serialize/dsl.ts +80 -0
- package/src/core/integrations/serialize/serialize.types.ts +3 -0
- package/src/core/integrations/supabase.ts +145 -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 +13 -0
- package/src/core/objects/base.change.ts +72 -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.test.ts +43 -0
- package/src/core/objects/base.model.ts +85 -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 +11 -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 +140 -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 +13 -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 +11 -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 +11 -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 +13 -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 +11 -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 +13 -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 +13 -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 +9 -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 +7 -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 +13 -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 +13 -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 +13 -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 +25 -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 +11 -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 +13 -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 +13 -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 +13 -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 +13 -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 +23 -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 +13 -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 +11 -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 +13 -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 +13 -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 +13 -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 +6 -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 +13 -0
- package/src/core/objects/view/view.diff.test.ts +269 -0
- package/src/core/objects/view/view.diff.ts +230 -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 +573 -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/src/typedoc.ts +248 -0
- package/dist/core/integrations/filter/extractors.d.ts +0 -12
- package/dist/core/integrations/filter/extractors.js +0 -136
|
@@ -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 membershipInfoSchema = z.object({
|
|
@@ -12,6 +13,7 @@ const defaultPrivilegeSchema = z.object({
|
|
|
12
13
|
objtype: z.enum(["r", "S", "f", "T", "n"]),
|
|
13
14
|
grantee: z.string(),
|
|
14
15
|
privileges: z.array(z.object({ privilege: z.string(), grantable: z.boolean() })),
|
|
16
|
+
is_implicit: z.boolean(),
|
|
15
17
|
});
|
|
16
18
|
const rolePropsSchema = z.object({
|
|
17
19
|
name: z.string(),
|
|
@@ -57,7 +59,7 @@ export class Role extends BasePgModel {
|
|
|
57
59
|
this.can_bypass_rls = props.can_bypass_rls;
|
|
58
60
|
this.config = props.config;
|
|
59
61
|
this.comment = props.comment;
|
|
60
|
-
this.members = props.members;
|
|
62
|
+
this.members = deduplicateMembers(props.members);
|
|
61
63
|
this.default_privileges = props.default_privileges;
|
|
62
64
|
}
|
|
63
65
|
get stableId() {
|
|
@@ -76,13 +78,16 @@ export class Role extends BasePgModel {
|
|
|
76
78
|
Number(a.inherit_option ?? false) - Number(b.inherit_option ?? false) ||
|
|
77
79
|
Number(a.set_option ?? false) - Number(b.set_option ?? false));
|
|
78
80
|
});
|
|
79
|
-
const sortedDefaultPrivs = [...this.default_privileges].map((dp) =>
|
|
80
|
-
...dp
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
81
|
+
const sortedDefaultPrivs = [...this.default_privileges].map((dp) => {
|
|
82
|
+
const { is_implicit: _, ...rest } = dp;
|
|
83
|
+
return {
|
|
84
|
+
...rest,
|
|
85
|
+
privileges: [...dp.privileges].sort((a, b) => {
|
|
86
|
+
return (a.privilege.localeCompare(b.privilege) ||
|
|
87
|
+
Number(a.grantable) - Number(b.grantable));
|
|
88
|
+
}),
|
|
89
|
+
};
|
|
90
|
+
});
|
|
86
91
|
sortedDefaultPrivs.sort((a, b) => {
|
|
87
92
|
return ((a.in_schema ?? "").localeCompare(b.in_schema ?? "") ||
|
|
88
93
|
a.objtype.localeCompare(b.objtype) ||
|
|
@@ -104,11 +109,49 @@ export class Role extends BasePgModel {
|
|
|
104
109
|
};
|
|
105
110
|
}
|
|
106
111
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
+
/**
|
|
113
|
+
* Deduplicate members by member name.
|
|
114
|
+
*
|
|
115
|
+
* In PostgreSQL 16+, `pg_auth_members` can have multiple rows for the same
|
|
116
|
+
* (roleid, member) pair with different grantors. Merge them into a single
|
|
117
|
+
* entry per member, combining options with OR so the most permissive wins.
|
|
118
|
+
*
|
|
119
|
+
* When merging, prefer a non-self grantor (grantor !== member) so that
|
|
120
|
+
* downstream code can detect true self-grants (auto-created by CREATE ROLE)
|
|
121
|
+
* by checking `grantor === member`.
|
|
122
|
+
*/
|
|
123
|
+
function deduplicateMembers(members) {
|
|
124
|
+
const map = new Map();
|
|
125
|
+
for (const m of members) {
|
|
126
|
+
const existing = map.get(m.member);
|
|
127
|
+
if (existing) {
|
|
128
|
+
// admin_option is always boolean (non-nullable in schema)
|
|
129
|
+
existing.admin_option = existing.admin_option || m.admin_option;
|
|
130
|
+
// inherit_option and set_option are nullish (only available in PG 16+)
|
|
131
|
+
if (m.inherit_option != null) {
|
|
132
|
+
existing.inherit_option =
|
|
133
|
+
(existing.inherit_option ?? false) || m.inherit_option;
|
|
134
|
+
}
|
|
135
|
+
if (m.set_option != null) {
|
|
136
|
+
existing.set_option = (existing.set_option ?? false) || m.set_option;
|
|
137
|
+
}
|
|
138
|
+
// Prefer a non-self grantor so diff can detect true self-grants.
|
|
139
|
+
// Once a non-self grantor is chosen the value is kept (the specific
|
|
140
|
+
// non-self grantor doesn't matter — only the self vs non-self
|
|
141
|
+
// distinction is used downstream).
|
|
142
|
+
if (existing.grantor === existing.member && m.grantor !== m.member) {
|
|
143
|
+
existing.grantor = m.grantor;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
map.set(m.member, { ...m });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return [...map.values()];
|
|
151
|
+
}
|
|
152
|
+
export async function extractRoles(pool) {
|
|
153
|
+
// Check PostgreSQL version capabilities for membership options
|
|
154
|
+
const { rows: capabilitiesRows } = await pool.query(sql `
|
|
112
155
|
select
|
|
113
156
|
exists (
|
|
114
157
|
select 1
|
|
@@ -122,23 +165,25 @@ export async function extractRoles(sql) {
|
|
|
122
165
|
where attrelid = 'pg_auth_members'::regclass
|
|
123
166
|
and attname = 'set_option'
|
|
124
167
|
) as has_set
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
168
|
+
`);
|
|
169
|
+
const capabilities = capabilitiesRows[0];
|
|
170
|
+
let roleRows;
|
|
171
|
+
if (capabilities?.has_inherit && capabilities?.has_set) {
|
|
172
|
+
const result = await pool.query(sql `
|
|
128
173
|
WITH role_memberships AS (
|
|
129
|
-
SELECT
|
|
174
|
+
SELECT
|
|
130
175
|
r.rolname AS role_name,
|
|
131
176
|
json_agg(
|
|
132
177
|
json_build_object(
|
|
133
178
|
'member', m.rolname,
|
|
134
179
|
'grantor', g.rolname,
|
|
135
180
|
'admin_option', am.admin_option,
|
|
136
|
-
'inherit_option', am.inherit_option,
|
|
137
|
-
'set_option', am.set_option
|
|
181
|
+
'inherit_option', am.inherit_option,
|
|
182
|
+
'set_option', am.set_option
|
|
138
183
|
)
|
|
139
184
|
) FILTER (WHERE m.rolname IS NOT NULL) AS members
|
|
140
185
|
FROM pg_catalog.pg_roles r
|
|
141
|
-
LEFT JOIN pg_auth_members am ON am.roleid = r.oid
|
|
186
|
+
LEFT JOIN pg_auth_members am ON am.roleid = r.oid
|
|
142
187
|
LEFT JOIN pg_roles m ON m.oid = am.member
|
|
143
188
|
LEFT JOIN pg_roles g ON g.oid = am.grantor
|
|
144
189
|
GROUP BY r.rolname
|
|
@@ -171,13 +216,15 @@ export async function extractRoles(sql) {
|
|
|
171
216
|
THEN 'PUBLIC'
|
|
172
217
|
ELSE s.grantee::regrole::text
|
|
173
218
|
END,
|
|
174
|
-
'privileges', s.privileges
|
|
219
|
+
'privileges', s.privileges,
|
|
220
|
+
'is_implicit', s.is_implicit
|
|
175
221
|
)
|
|
176
222
|
ORDER BY s.defaclnamespace NULLS FIRST,
|
|
177
223
|
s.defaclobjtype,
|
|
178
224
|
s.grantee
|
|
179
225
|
)
|
|
180
226
|
FROM (
|
|
227
|
+
-- Explicit entries from pg_default_acl
|
|
181
228
|
SELECT
|
|
182
229
|
d.defaclnamespace,
|
|
183
230
|
d.defaclobjtype,
|
|
@@ -188,12 +235,41 @@ export async function extractRoles(sql) {
|
|
|
188
235
|
'grantable', x.is_grantable
|
|
189
236
|
)
|
|
190
237
|
ORDER BY x.privilege_type, x.is_grantable
|
|
191
|
-
) AS privileges
|
|
238
|
+
) AS privileges,
|
|
239
|
+
false AS is_implicit
|
|
192
240
|
FROM pg_default_acl d
|
|
193
241
|
CROSS JOIN LATERAL aclexplode(COALESCE(d.defaclacl, ARRAY[]::aclitem[]))
|
|
194
242
|
AS x(grantor, grantee, privilege_type, is_grantable)
|
|
195
243
|
WHERE d.defaclrole = r.oid
|
|
196
244
|
GROUP BY d.defaclnamespace, d.defaclobjtype, x.grantee
|
|
245
|
+
UNION ALL
|
|
246
|
+
-- Implicit defaults from acldefault() for objtypes without a
|
|
247
|
+
-- global pg_default_acl entry. PostgreSQL applies these implicit
|
|
248
|
+
-- defaults (e.g. PUBLIC gets EXECUTE on functions) when no
|
|
249
|
+
-- explicit ALTER DEFAULT PRIVILEGES has been issued. Including
|
|
250
|
+
-- them lets the diff detect REVOKEs of implicit grants.
|
|
251
|
+
SELECT
|
|
252
|
+
0 AS defaclnamespace,
|
|
253
|
+
v.t::"char" AS defaclobjtype,
|
|
254
|
+
x.grantee,
|
|
255
|
+
json_agg(
|
|
256
|
+
json_build_object(
|
|
257
|
+
'privilege', x.privilege_type,
|
|
258
|
+
'grantable', x.is_grantable
|
|
259
|
+
)
|
|
260
|
+
ORDER BY x.privilege_type, x.is_grantable
|
|
261
|
+
) AS privileges,
|
|
262
|
+
true AS is_implicit
|
|
263
|
+
FROM (VALUES ('r'), ('S'), ('f'), ('T'), ('n')) AS v(t)
|
|
264
|
+
CROSS JOIN LATERAL aclexplode(acldefault(v.t::"char", r.oid))
|
|
265
|
+
AS x(grantor, grantee, privilege_type, is_grantable)
|
|
266
|
+
WHERE NOT EXISTS (
|
|
267
|
+
SELECT 1 FROM pg_default_acl d2
|
|
268
|
+
WHERE d2.defaclrole = r.oid
|
|
269
|
+
AND d2.defaclobjtype = v.t::"char"
|
|
270
|
+
AND d2.defaclnamespace = 0
|
|
271
|
+
)
|
|
272
|
+
GROUP BY v.t, x.grantee
|
|
197
273
|
) AS s
|
|
198
274
|
),
|
|
199
275
|
'[]'
|
|
@@ -201,9 +277,7 @@ export async function extractRoles(sql) {
|
|
|
201
277
|
FROM pg_catalog.pg_roles r
|
|
202
278
|
LEFT JOIN role_memberships rm ON rm.role_name = r.rolname
|
|
203
279
|
WHERE
|
|
204
|
-
-- 1) drop built-in/internal roles (anything starting with pg_)
|
|
205
280
|
r.rolname !~ '^pg_'
|
|
206
|
-
-- 2) drop roles directly tracked as extension members in pg_shdepend (if any)
|
|
207
281
|
AND NOT EXISTS (
|
|
208
282
|
SELECT 1
|
|
209
283
|
FROM pg_catalog.pg_shdepend d
|
|
@@ -212,24 +286,26 @@ export async function extractRoles(sql) {
|
|
|
212
286
|
AND d.refclassid = 'pg_extension'::regclass
|
|
213
287
|
AND d.deptype IN ('e','x')
|
|
214
288
|
)
|
|
215
|
-
ORDER BY 1
|
|
216
|
-
|
|
217
|
-
|
|
289
|
+
ORDER BY 1
|
|
290
|
+
`);
|
|
291
|
+
roleRows = result.rows;
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
const result = await pool.query(sql `
|
|
218
295
|
WITH role_memberships AS (
|
|
219
|
-
SELECT
|
|
296
|
+
SELECT
|
|
220
297
|
r.rolname AS role_name,
|
|
221
298
|
json_agg(
|
|
222
299
|
json_build_object(
|
|
223
300
|
'member', m.rolname,
|
|
224
301
|
'grantor', g.rolname,
|
|
225
302
|
'admin_option', am.admin_option,
|
|
226
|
-
-- PG15: these columns don't exist; emit them as nulls
|
|
227
303
|
'inherit_option', NULL,
|
|
228
304
|
'set_option', NULL
|
|
229
305
|
)
|
|
230
306
|
) FILTER (WHERE m.rolname IS NOT NULL) AS members
|
|
231
307
|
FROM pg_catalog.pg_roles r
|
|
232
|
-
LEFT JOIN pg_auth_members am ON am.roleid = r.oid
|
|
308
|
+
LEFT JOIN pg_auth_members am ON am.roleid = r.oid
|
|
233
309
|
LEFT JOIN pg_roles m ON m.oid = am.member
|
|
234
310
|
LEFT JOIN pg_roles g ON g.oid = am.grantor
|
|
235
311
|
GROUP BY r.rolname
|
|
@@ -262,13 +338,15 @@ export async function extractRoles(sql) {
|
|
|
262
338
|
THEN 'PUBLIC'
|
|
263
339
|
ELSE s.grantee::regrole::text
|
|
264
340
|
END,
|
|
265
|
-
'privileges', s.privileges
|
|
341
|
+
'privileges', s.privileges,
|
|
342
|
+
'is_implicit', s.is_implicit
|
|
266
343
|
)
|
|
267
344
|
ORDER BY s.defaclnamespace NULLS FIRST,
|
|
268
345
|
s.defaclobjtype,
|
|
269
346
|
s.grantee
|
|
270
347
|
)
|
|
271
348
|
FROM (
|
|
349
|
+
-- Explicit entries from pg_default_acl
|
|
272
350
|
SELECT
|
|
273
351
|
d.defaclnamespace,
|
|
274
352
|
d.defaclobjtype,
|
|
@@ -279,12 +357,41 @@ export async function extractRoles(sql) {
|
|
|
279
357
|
'grantable', x.is_grantable
|
|
280
358
|
)
|
|
281
359
|
ORDER BY x.privilege_type, x.is_grantable
|
|
282
|
-
) AS privileges
|
|
360
|
+
) AS privileges,
|
|
361
|
+
false AS is_implicit
|
|
283
362
|
FROM pg_default_acl d
|
|
284
363
|
CROSS JOIN LATERAL aclexplode(COALESCE(d.defaclacl, ARRAY[]::aclitem[]))
|
|
285
364
|
AS x(grantor, grantee, privilege_type, is_grantable)
|
|
286
365
|
WHERE d.defaclrole = r.oid
|
|
287
366
|
GROUP BY d.defaclnamespace, d.defaclobjtype, x.grantee
|
|
367
|
+
UNION ALL
|
|
368
|
+
-- Implicit defaults from acldefault() for objtypes without a
|
|
369
|
+
-- global pg_default_acl entry. PostgreSQL applies these implicit
|
|
370
|
+
-- defaults (e.g. PUBLIC gets EXECUTE on functions) when no
|
|
371
|
+
-- explicit ALTER DEFAULT PRIVILEGES has been issued. Including
|
|
372
|
+
-- them lets the diff detect REVOKEs of implicit grants.
|
|
373
|
+
SELECT
|
|
374
|
+
0 AS defaclnamespace,
|
|
375
|
+
v.t::"char" AS defaclobjtype,
|
|
376
|
+
x.grantee,
|
|
377
|
+
json_agg(
|
|
378
|
+
json_build_object(
|
|
379
|
+
'privilege', x.privilege_type,
|
|
380
|
+
'grantable', x.is_grantable
|
|
381
|
+
)
|
|
382
|
+
ORDER BY x.privilege_type, x.is_grantable
|
|
383
|
+
) AS privileges,
|
|
384
|
+
true AS is_implicit
|
|
385
|
+
FROM (VALUES ('r'), ('S'), ('f'), ('T'), ('n')) AS v(t)
|
|
386
|
+
CROSS JOIN LATERAL aclexplode(acldefault(v.t::"char", r.oid))
|
|
387
|
+
AS x(grantor, grantee, privilege_type, is_grantable)
|
|
388
|
+
WHERE NOT EXISTS (
|
|
389
|
+
SELECT 1 FROM pg_default_acl d2
|
|
390
|
+
WHERE d2.defaclrole = r.oid
|
|
391
|
+
AND d2.defaclobjtype = v.t::"char"
|
|
392
|
+
AND d2.defaclnamespace = 0
|
|
393
|
+
)
|
|
394
|
+
GROUP BY v.t, x.grantee
|
|
288
395
|
) AS s
|
|
289
396
|
),
|
|
290
397
|
'[]'
|
|
@@ -292,9 +399,7 @@ export async function extractRoles(sql) {
|
|
|
292
399
|
FROM pg_catalog.pg_roles r
|
|
293
400
|
LEFT JOIN role_memberships rm ON rm.role_name = r.rolname
|
|
294
401
|
WHERE
|
|
295
|
-
-- drop built-in/internal roles
|
|
296
402
|
r.rolname !~ '^pg_'
|
|
297
|
-
-- drop roles directly tracked as extension members in pg_shdepend (if any)
|
|
298
403
|
AND NOT EXISTS (
|
|
299
404
|
SELECT 1
|
|
300
405
|
FROM pg_catalog.pg_shdepend d
|
|
@@ -303,10 +408,11 @@ export async function extractRoles(sql) {
|
|
|
303
408
|
AND d.refclassid = 'pg_extension'::regclass
|
|
304
409
|
AND d.deptype IN ('e','x')
|
|
305
410
|
)
|
|
306
|
-
ORDER BY 1
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
411
|
+
ORDER BY 1
|
|
412
|
+
`);
|
|
413
|
+
roleRows = result.rows;
|
|
414
|
+
}
|
|
415
|
+
// Validate and parse each row using the Zod schema
|
|
416
|
+
const validatedRows = roleRows.map((row) => rolePropsSchema.parse(row));
|
|
417
|
+
return validatedRows.map((row) => new Role(row));
|
|
312
418
|
}
|
|
@@ -2,4 +2,5 @@ import type { ReplaceRule, SetRuleEnabledState } from "./rule.alter.ts";
|
|
|
2
2
|
import type { CreateCommentOnRule, DropCommentOnRule } from "./rule.comment.ts";
|
|
3
3
|
import type { CreateRule } from "./rule.create.ts";
|
|
4
4
|
import type { DropRule } from "./rule.drop.ts";
|
|
5
|
+
/** Union of all rule-related change variants (`objectType: "rule"`). @category Change Types */
|
|
5
6
|
export type RuleChange = CreateRule | DropRule | ReplaceRule | SetRuleEnabledState | CreateCommentOnRule | DropCommentOnRule;
|
|
@@ -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 RuleEnabledStateSchema: z.ZodEnum<{
|
|
@@ -13,10 +13,10 @@ declare const rulePropsSchema: z.ZodObject<{
|
|
|
13
13
|
table_name: z.ZodString;
|
|
14
14
|
relation_kind: z.ZodEnum<{
|
|
15
15
|
r: "r";
|
|
16
|
-
f: "f";
|
|
17
16
|
v: "v";
|
|
18
17
|
m: "m";
|
|
19
18
|
p: "p";
|
|
19
|
+
f: "f";
|
|
20
20
|
}>;
|
|
21
21
|
event: z.ZodEnum<{
|
|
22
22
|
DELETE: "DELETE";
|
|
@@ -68,5 +68,5 @@ export declare class Rule extends BasePgModel {
|
|
|
68
68
|
};
|
|
69
69
|
get relationStableId(): string;
|
|
70
70
|
}
|
|
71
|
-
export declare function extractRules(
|
|
71
|
+
export declare function extractRules(pool: Pool): Promise<Rule[]>;
|
|
72
72
|
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 { stableId } from "../utils.js";
|
|
@@ -81,10 +82,8 @@ export class Rule extends BasePgModel {
|
|
|
81
82
|
}
|
|
82
83
|
}
|
|
83
84
|
}
|
|
84
|
-
export async function extractRules(
|
|
85
|
-
|
|
86
|
-
await sql `set search_path = ''`;
|
|
87
|
-
const ruleRows = await sql `
|
|
85
|
+
export async function extractRules(pool) {
|
|
86
|
+
const { rows: ruleRows } = await pool.query(sql `
|
|
88
87
|
WITH extension_rule_oids AS (
|
|
89
88
|
SELECT
|
|
90
89
|
objid
|
|
@@ -148,9 +147,8 @@ export async function extractRules(sql) {
|
|
|
148
147
|
AND e_rel.objid IS NULL
|
|
149
148
|
AND r.rulename <> '_RETURN'
|
|
150
149
|
ORDER BY
|
|
151
|
-
1, 3, 2
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
});
|
|
150
|
+
1, 3, 2
|
|
151
|
+
`);
|
|
152
|
+
const validatedRows = ruleRows.map((row) => rulePropsSchema.parse(row));
|
|
153
|
+
return validatedRows.map((row) => new Rule(row));
|
|
156
154
|
}
|
|
@@ -3,4 +3,5 @@ import type { CommentSchema } from "./schema.comment.ts";
|
|
|
3
3
|
import type { CreateSchema } from "./schema.create.ts";
|
|
4
4
|
import type { DropSchema } from "./schema.drop.ts";
|
|
5
5
|
import type { SchemaPrivilege } from "./schema.privilege.ts";
|
|
6
|
+
/** Union of all schema-related change variants (`objectType: "schema"`). @category Change Types */
|
|
6
7
|
export type SchemaChange = AlterSchema | CommentSchema | CreateSchema | DropSchema | SchemaPrivilege;
|
|
@@ -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 { SchemaChange } from "./changes/schema.types.ts";
|
|
4
3
|
import type { Schema } from "./schema.model.ts";
|
|
5
4
|
/**
|
|
@@ -10,9 +9,4 @@ import type { Schema } from "./schema.model.ts";
|
|
|
10
9
|
* @param branch - The schemas 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 diffSchemas(ctx:
|
|
14
|
-
version: number;
|
|
15
|
-
currentUser: string;
|
|
16
|
-
defaultPrivilegeState: DefaultPrivilegeState;
|
|
17
|
-
mainRoles: Record<string, Role>;
|
|
18
|
-
}, main: Record<string, Schema>, branch: Record<string, Schema>): SchemaChange[];
|
|
12
|
+
export declare function diffSchemas(ctx: Pick<ObjectDiffContext, "version" | "currentUser" | "defaultPrivilegeState">, main: Record<string, Schema>, branch: Record<string, Schema>): SchemaChange[];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { diffObjects } from "../base.diff.js";
|
|
2
|
-
import { diffPrivileges,
|
|
2
|
+
import { diffPrivileges, emitObjectPrivilegeChanges, } from "../base.privilege-diff.js";
|
|
3
3
|
import { AlterSchemaChangeOwner } from "./changes/schema.alter.js";
|
|
4
4
|
import { CreateCommentOnSchema, DropCommentOnSchema, } from "./changes/schema.comment.js";
|
|
5
5
|
import { CreateSchema } from "./changes/schema.create.js";
|
|
@@ -29,47 +29,18 @@ export function diffSchemas(ctx, main, branch) {
|
|
|
29
29
|
// needed to reach the final desired state.
|
|
30
30
|
// Note: Schemas don't have a schema property, so we pass empty string
|
|
31
31
|
const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "schema", "");
|
|
32
|
+
const creatorFilteredDefaults = sc.owner !== ctx.currentUser
|
|
33
|
+
? effectiveDefaults.filter((p) => p.grantee !== ctx.currentUser)
|
|
34
|
+
: effectiveDefaults;
|
|
32
35
|
const desiredPrivileges = sc.privileges;
|
|
33
36
|
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
34
37
|
// and shouldn't be compared. Use the schema owner as the reference.
|
|
35
|
-
const privilegeResults = diffPrivileges(
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
void grantable;
|
|
42
|
-
changes.push(new GrantSchemaPrivileges({
|
|
43
|
-
schema: sc,
|
|
44
|
-
grantee,
|
|
45
|
-
privileges: list,
|
|
46
|
-
version: ctx.version,
|
|
47
|
-
}));
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
// Generate revoke changes
|
|
51
|
-
if (result.revokes.length > 0) {
|
|
52
|
-
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
53
|
-
for (const [grantable, list] of revokeGroups) {
|
|
54
|
-
void grantable;
|
|
55
|
-
changes.push(new RevokeSchemaPrivileges({
|
|
56
|
-
schema: sc,
|
|
57
|
-
grantee,
|
|
58
|
-
privileges: list,
|
|
59
|
-
version: ctx.version,
|
|
60
|
-
}));
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
// Generate revoke grant option changes
|
|
64
|
-
if (result.revokeGrantOption.length > 0) {
|
|
65
|
-
changes.push(new RevokeGrantOptionSchemaPrivileges({
|
|
66
|
-
schema: sc,
|
|
67
|
-
grantee,
|
|
68
|
-
privilegeNames: result.revokeGrantOption,
|
|
69
|
-
version: ctx.version,
|
|
70
|
-
}));
|
|
71
|
-
}
|
|
72
|
-
}
|
|
38
|
+
const privilegeResults = diffPrivileges(creatorFilteredDefaults, desiredPrivileges, sc.owner);
|
|
39
|
+
changes.push(...emitObjectPrivilegeChanges(privilegeResults, sc, sc, "schema", {
|
|
40
|
+
Grant: GrantSchemaPrivileges,
|
|
41
|
+
Revoke: RevokeSchemaPrivileges,
|
|
42
|
+
RevokeGrantOption: RevokeGrantOptionSchemaPrivileges,
|
|
43
|
+
}, ctx.version));
|
|
73
44
|
}
|
|
74
45
|
for (const schemaId of dropped) {
|
|
75
46
|
changes.push(new DropSchema({ schema: main[schemaId] }));
|
|
@@ -96,44 +67,12 @@ export function diffSchemas(ctx, main, branch) {
|
|
|
96
67
|
// PRIVILEGES
|
|
97
68
|
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
98
69
|
// and shouldn't be compared. Use branch owner as the reference.
|
|
99
|
-
const privilegeResults = diffPrivileges(mainSchema.privileges, branchSchema.privileges, branchSchema.owner
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
void grantable;
|
|
106
|
-
changes.push(new GrantSchemaPrivileges({
|
|
107
|
-
schema: branchSchema,
|
|
108
|
-
grantee,
|
|
109
|
-
privileges: list,
|
|
110
|
-
version: ctx.version,
|
|
111
|
-
}));
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
// Generate revoke changes
|
|
115
|
-
if (result.revokes.length > 0) {
|
|
116
|
-
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
117
|
-
for (const [grantable, list] of revokeGroups) {
|
|
118
|
-
void grantable;
|
|
119
|
-
changes.push(new RevokeSchemaPrivileges({
|
|
120
|
-
schema: mainSchema,
|
|
121
|
-
grantee,
|
|
122
|
-
privileges: list,
|
|
123
|
-
version: ctx.version,
|
|
124
|
-
}));
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
// Generate revoke grant option changes
|
|
128
|
-
if (result.revokeGrantOption.length > 0) {
|
|
129
|
-
changes.push(new RevokeGrantOptionSchemaPrivileges({
|
|
130
|
-
schema: mainSchema,
|
|
131
|
-
grantee,
|
|
132
|
-
privilegeNames: result.revokeGrantOption,
|
|
133
|
-
version: ctx.version,
|
|
134
|
-
}));
|
|
135
|
-
}
|
|
136
|
-
}
|
|
70
|
+
const privilegeResults = diffPrivileges(mainSchema.privileges, branchSchema.privileges, branchSchema.owner);
|
|
71
|
+
changes.push(...emitObjectPrivilegeChanges(privilegeResults, branchSchema, mainSchema, "schema", {
|
|
72
|
+
Grant: GrantSchemaPrivileges,
|
|
73
|
+
Revoke: RevokeSchemaPrivileges,
|
|
74
|
+
RevokeGrantOption: RevokeGrantOptionSchemaPrivileges,
|
|
75
|
+
}, ctx.version));
|
|
137
76
|
// Note: Schema renaming would also use ALTER SCHEMA ... RENAME TO ...
|
|
138
77
|
// But since our Schema model uses 'schema' as the identity field,
|
|
139
78
|
// a name change would be handled as drop + create by diffObjects()
|
|
@@ -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";
|
|
@@ -43,5 +43,5 @@ export declare class Schema extends BasePgModel {
|
|
|
43
43
|
}[];
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
|
-
export declare function extractSchemas(
|
|
46
|
+
export declare function extractSchemas(pool: Pool): Promise<Schema[]>;
|
|
47
47
|
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";
|
|
@@ -44,10 +45,8 @@ export class Schema extends BasePgModel {
|
|
|
44
45
|
};
|
|
45
46
|
}
|
|
46
47
|
}
|
|
47
|
-
export async function extractSchemas(
|
|
48
|
-
|
|
49
|
-
await sql `set search_path = ''`;
|
|
50
|
-
const schemaRows = await sql `
|
|
48
|
+
export async function extractSchemas(pool) {
|
|
49
|
+
const { rows: schemaRows } = await pool.query(sql `
|
|
51
50
|
with extension_oids as (
|
|
52
51
|
select
|
|
53
52
|
objid
|
|
@@ -71,7 +70,7 @@ export async function extractSchemas(sql) {
|
|
|
71
70
|
)
|
|
72
71
|
order by x.grantee, x.privilege_type
|
|
73
72
|
)
|
|
74
|
-
from lateral aclexplode(nspacl) as x(grantor, grantee, privilege_type, is_grantable)
|
|
73
|
+
from lateral aclexplode(COALESCE(nspacl, acldefault('n', nspowner))) as x(grantor, grantee, privilege_type, is_grantable)
|
|
75
74
|
), '[]'
|
|
76
75
|
) as privileges
|
|
77
76
|
from
|
|
@@ -82,10 +81,9 @@ export async function extractSchemas(sql) {
|
|
|
82
81
|
and e.objid is null
|
|
83
82
|
-- </EXCLUDE_INTERNAL>
|
|
84
83
|
order by
|
|
85
|
-
1
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
});
|
|
84
|
+
1
|
|
85
|
+
`);
|
|
86
|
+
// Validate and parse each row using the Zod schema
|
|
87
|
+
const validatedRows = schemaRows.map((row) => schemaPropsSchema.parse(row));
|
|
88
|
+
return validatedRows.map((row) => new Schema(row));
|
|
91
89
|
}
|
|
@@ -3,4 +3,5 @@ import type { CommentSequence } from "./sequence.comment.ts";
|
|
|
3
3
|
import type { CreateSequence } from "./sequence.create.ts";
|
|
4
4
|
import type { DropSequence } from "./sequence.drop.ts";
|
|
5
5
|
import type { SequencePrivilege } from "./sequence.privilege.ts";
|
|
6
|
+
/** Union of all sequence-related change variants (`objectType: "sequence"`). @category Change Types */
|
|
6
7
|
export type SequenceChange = AlterSequence | CommentSequence | CreateSequence | DropSequence | SequencePrivilege;
|
|
@@ -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 { Table } from "../table/table.model.ts";
|
|
4
3
|
import type { SequenceChange } from "./changes/sequence.types.ts";
|
|
5
4
|
import type { Sequence } from "./sequence.model.ts";
|
|
@@ -12,9 +11,4 @@ import type { Sequence } from "./sequence.model.ts";
|
|
|
12
11
|
* @param branchTables - The tables in the branch catalog (used to check if owning tables are being dropped).
|
|
13
12
|
* @returns A list of changes to apply to main to make it match branch.
|
|
14
13
|
*/
|
|
15
|
-
export declare function diffSequences(ctx:
|
|
16
|
-
version: number;
|
|
17
|
-
currentUser: string;
|
|
18
|
-
defaultPrivilegeState: DefaultPrivilegeState;
|
|
19
|
-
mainRoles: Record<string, Role>;
|
|
20
|
-
}, main: Record<string, Sequence>, branch: Record<string, Sequence>, branchTables?: Record<string, Table>): SequenceChange[];
|
|
14
|
+
export declare function diffSequences(ctx: Pick<ObjectDiffContext, "version" | "currentUser" | "defaultPrivilegeState">, main: Record<string, Sequence>, branch: Record<string, Sequence>, branchTables?: Record<string, Table>): SequenceChange[];
|