@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,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 } from "../utils.js";
|
|
4
4
|
import { AlterTableAddColumn, AlterTableAddConstraint, AlterTableAlterColumnDropDefault, AlterTableAlterColumnDropNotNull, AlterTableAlterColumnSetDefault, AlterTableAlterColumnSetNotNull, AlterTableAlterColumnType, AlterTableAttachPartition, AlterTableChangeOwner, AlterTableDetachPartition, AlterTableDisableRowLevelSecurity, AlterTableDropColumn, AlterTableDropConstraint, AlterTableEnableRowLevelSecurity, AlterTableForceRowLevelSecurity, AlterTableNoForceRowLevelSecurity, AlterTableResetStorageParams, AlterTableSetLogged, AlterTableSetReplicaIdentity, AlterTableSetStorageParams, AlterTableSetUnlogged, AlterTableValidateConstraint, } from "./changes/table.alter.js";
|
|
5
5
|
import { CreateCommentOnColumn, CreateCommentOnConstraint, CreateCommentOnTable, DropCommentOnColumn, DropCommentOnConstraint, DropCommentOnTable, } from "./changes/table.comment.js";
|
|
@@ -149,6 +149,16 @@ export function diffTables(ctx, main, branch) {
|
|
|
149
149
|
if (branchTable.force_row_security) {
|
|
150
150
|
changes.push(new AlterTableForceRowLevelSecurity({ table: branchTable }));
|
|
151
151
|
}
|
|
152
|
+
// REPLICA IDENTITY: If non-default, emit ALTER TABLE ... REPLICA IDENTITY
|
|
153
|
+
if (branchTable.replica_identity !== "d") {
|
|
154
|
+
// Skip 'i' (USING INDEX) — handled by index changes
|
|
155
|
+
if (branchTable.replica_identity !== "i") {
|
|
156
|
+
changes.push(new AlterTableSetReplicaIdentity({
|
|
157
|
+
table: branchTable,
|
|
158
|
+
mode: branchTable.replica_identity,
|
|
159
|
+
}));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
152
162
|
changes.push(...createAlterConstraintChange(
|
|
153
163
|
// Create a dummy table with no constraints do diff constraints against
|
|
154
164
|
new Table({
|
|
@@ -171,86 +181,18 @@ export function diffTables(ctx, main, branch) {
|
|
|
171
181
|
// We compare default privileges against desired privileges to generate REVOKE/GRANT statements
|
|
172
182
|
// needed to reach the final desired state.
|
|
173
183
|
const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "table", branchTable.schema ?? "");
|
|
184
|
+
const creatorFilteredDefaults = branchTable.owner !== ctx.currentUser
|
|
185
|
+
? effectiveDefaults.filter((p) => p.grantee !== ctx.currentUser)
|
|
186
|
+
: effectiveDefaults;
|
|
174
187
|
const desiredPrivileges = branchTable.privileges;
|
|
175
188
|
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
176
189
|
// and shouldn't be compared. Use the table owner as the reference.
|
|
177
|
-
const privilegeResults = diffPrivileges(
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
for (const [grantable, privSet] of group.byGrant) {
|
|
184
|
-
const privileges = Array.from(privSet).map((priv) => ({
|
|
185
|
-
privilege: priv,
|
|
186
|
-
grantable,
|
|
187
|
-
}));
|
|
188
|
-
changes.push(new GrantTablePrivileges({
|
|
189
|
-
table: branchTable,
|
|
190
|
-
grantee,
|
|
191
|
-
privileges,
|
|
192
|
-
columns: group.columns,
|
|
193
|
-
version: ctx.version,
|
|
194
|
-
}));
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
// Generate revoke changes
|
|
199
|
-
if (result.revokes.length > 0) {
|
|
200
|
-
const revokeGroups = groupPrivilegesByColumns(result.revokes);
|
|
201
|
-
for (const [, group] of revokeGroups) {
|
|
202
|
-
const allPrivileges = new Set();
|
|
203
|
-
for (const [, privSet] of group.byGrant) {
|
|
204
|
-
for (const priv of privSet) {
|
|
205
|
-
allPrivileges.add(priv);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
const privileges = Array.from(allPrivileges).map((priv) => ({
|
|
209
|
-
privilege: priv,
|
|
210
|
-
grantable: false,
|
|
211
|
-
}));
|
|
212
|
-
changes.push(new RevokeTablePrivileges({
|
|
213
|
-
table: branchTable,
|
|
214
|
-
grantee,
|
|
215
|
-
privileges,
|
|
216
|
-
columns: group.columns,
|
|
217
|
-
version: ctx.version,
|
|
218
|
-
}));
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
// Generate revoke grant option changes
|
|
222
|
-
if (result.revokeGrantOption.length > 0) {
|
|
223
|
-
const revokeGrantGroups = new Map();
|
|
224
|
-
for (const r of result.revokeGrantOption) {
|
|
225
|
-
const originalPriv = effectiveDefaults.find((p) => p.grantee === grantee && p.privilege === r);
|
|
226
|
-
const key = originalPriv?.columns
|
|
227
|
-
? originalPriv.columns.sort().join(",")
|
|
228
|
-
: "";
|
|
229
|
-
if (!revokeGrantGroups.has(key)) {
|
|
230
|
-
revokeGrantGroups.set(key, {
|
|
231
|
-
columns: originalPriv?.columns
|
|
232
|
-
? [...originalPriv.columns]
|
|
233
|
-
: undefined,
|
|
234
|
-
privileges: new Set(),
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
const group = revokeGrantGroups.get(key);
|
|
238
|
-
if (!group)
|
|
239
|
-
continue;
|
|
240
|
-
group.privileges.add(r);
|
|
241
|
-
}
|
|
242
|
-
for (const [, group] of revokeGrantGroups) {
|
|
243
|
-
const privilegeNames = Array.from(group.privileges);
|
|
244
|
-
changes.push(new RevokeGrantOptionTablePrivileges({
|
|
245
|
-
table: branchTable,
|
|
246
|
-
grantee,
|
|
247
|
-
privilegeNames,
|
|
248
|
-
columns: group.columns,
|
|
249
|
-
version: ctx.version,
|
|
250
|
-
}));
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
}
|
|
190
|
+
const privilegeResults = diffPrivileges(creatorFilteredDefaults, desiredPrivileges, branchTable.owner);
|
|
191
|
+
changes.push(...emitColumnPrivilegeChanges(privilegeResults, branchTable, branchTable, "table", {
|
|
192
|
+
Grant: GrantTablePrivileges,
|
|
193
|
+
Revoke: RevokeTablePrivileges,
|
|
194
|
+
RevokeGrantOption: RevokeGrantOptionTablePrivileges,
|
|
195
|
+
}, effectiveDefaults, ctx.version));
|
|
254
196
|
}
|
|
255
197
|
for (const tableId of dropped) {
|
|
256
198
|
changes.push(new DropTable({ table: main[tableId] }));
|
|
@@ -584,85 +526,12 @@ export function diffTables(ctx, main, branch) {
|
|
|
584
526
|
// PRIVILEGES (unified object and column privileges)
|
|
585
527
|
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
586
528
|
// and shouldn't be compared. Use branch owner as the reference.
|
|
587
|
-
const privilegeResults = diffPrivileges(mainTable.privileges, branchTable.privileges, branchTable.owner
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
for (const [grantable, privSet] of group.byGrant) {
|
|
594
|
-
const privileges = Array.from(privSet).map((priv) => ({
|
|
595
|
-
privilege: priv,
|
|
596
|
-
grantable,
|
|
597
|
-
}));
|
|
598
|
-
changes.push(new GrantTablePrivileges({
|
|
599
|
-
table: branchTable,
|
|
600
|
-
grantee,
|
|
601
|
-
privileges,
|
|
602
|
-
columns: group.columns,
|
|
603
|
-
version: ctx.version,
|
|
604
|
-
}));
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
}
|
|
608
|
-
// Generate revoke changes
|
|
609
|
-
if (result.revokes.length > 0) {
|
|
610
|
-
const revokeGroups = groupPrivilegesByColumns(result.revokes);
|
|
611
|
-
for (const [, group] of revokeGroups) {
|
|
612
|
-
// Collapse all grantable groups into a single revoke (grantable: false)
|
|
613
|
-
const allPrivileges = new Set();
|
|
614
|
-
for (const [, privSet] of group.byGrant) {
|
|
615
|
-
for (const priv of privSet) {
|
|
616
|
-
allPrivileges.add(priv);
|
|
617
|
-
}
|
|
618
|
-
}
|
|
619
|
-
const privileges = Array.from(allPrivileges).map((priv) => ({
|
|
620
|
-
privilege: priv,
|
|
621
|
-
grantable: false,
|
|
622
|
-
}));
|
|
623
|
-
changes.push(new RevokeTablePrivileges({
|
|
624
|
-
table: mainTable,
|
|
625
|
-
grantee,
|
|
626
|
-
privileges,
|
|
627
|
-
columns: group.columns,
|
|
628
|
-
version: ctx.version,
|
|
629
|
-
}));
|
|
630
|
-
}
|
|
631
|
-
}
|
|
632
|
-
// Generate revoke grant option changes
|
|
633
|
-
if (result.revokeGrantOption.length > 0) {
|
|
634
|
-
const revokeGrantGroups = new Map();
|
|
635
|
-
for (const r of result.revokeGrantOption) {
|
|
636
|
-
// For revoke grant option, we need to find the columns from the original privilege
|
|
637
|
-
const originalPriv = mainTable.privileges.find((p) => p.grantee === grantee && p.privilege === r);
|
|
638
|
-
const key = originalPriv?.columns
|
|
639
|
-
? originalPriv.columns.sort().join(",")
|
|
640
|
-
: "";
|
|
641
|
-
if (!revokeGrantGroups.has(key)) {
|
|
642
|
-
revokeGrantGroups.set(key, {
|
|
643
|
-
columns: originalPriv?.columns
|
|
644
|
-
? [...originalPriv.columns]
|
|
645
|
-
: undefined,
|
|
646
|
-
privileges: new Set(),
|
|
647
|
-
});
|
|
648
|
-
}
|
|
649
|
-
const group = revokeGrantGroups.get(key);
|
|
650
|
-
if (!group)
|
|
651
|
-
continue;
|
|
652
|
-
group.privileges.add(r);
|
|
653
|
-
}
|
|
654
|
-
for (const [, group] of revokeGrantGroups) {
|
|
655
|
-
const privilegeNames = Array.from(group.privileges);
|
|
656
|
-
changes.push(new RevokeGrantOptionTablePrivileges({
|
|
657
|
-
table: mainTable,
|
|
658
|
-
grantee,
|
|
659
|
-
privilegeNames,
|
|
660
|
-
columns: group.columns,
|
|
661
|
-
version: ctx.version,
|
|
662
|
-
}));
|
|
663
|
-
}
|
|
664
|
-
}
|
|
665
|
-
}
|
|
529
|
+
const privilegeResults = diffPrivileges(mainTable.privileges, branchTable.privileges, branchTable.owner);
|
|
530
|
+
changes.push(...emitColumnPrivilegeChanges(privilegeResults, branchTable, mainTable, "table", {
|
|
531
|
+
Grant: GrantTablePrivileges,
|
|
532
|
+
Revoke: RevokeTablePrivileges,
|
|
533
|
+
RevokeGrantOption: RevokeGrantOptionTablePrivileges,
|
|
534
|
+
}, mainTable.privileges, ctx.version));
|
|
666
535
|
}
|
|
667
536
|
return changes;
|
|
668
537
|
}
|
|
@@ -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";
|
|
@@ -12,6 +12,7 @@ declare const tableConstraintPropsSchema: z.ZodObject<{
|
|
|
12
12
|
name: z.ZodString;
|
|
13
13
|
constraint_type: z.ZodEnum<{
|
|
14
14
|
u: "u";
|
|
15
|
+
t: "t";
|
|
15
16
|
c: "c";
|
|
16
17
|
p: "p";
|
|
17
18
|
f: "f";
|
|
@@ -113,6 +114,7 @@ declare const tablePropsSchema: z.ZodObject<{
|
|
|
113
114
|
name: z.ZodString;
|
|
114
115
|
constraint_type: z.ZodEnum<{
|
|
115
116
|
u: "u";
|
|
117
|
+
t: "t";
|
|
116
118
|
c: "c";
|
|
117
119
|
p: "p";
|
|
118
120
|
f: "f";
|
|
@@ -231,7 +233,7 @@ export declare class Table extends BasePgModel implements TableLikeObject {
|
|
|
231
233
|
}[];
|
|
232
234
|
constraints: {
|
|
233
235
|
name: string;
|
|
234
|
-
constraint_type: "u" | "c" | "p" | "f" | "x";
|
|
236
|
+
constraint_type: "u" | "t" | "c" | "p" | "f" | "x";
|
|
235
237
|
deferrable: boolean;
|
|
236
238
|
initially_deferred: boolean;
|
|
237
239
|
validated: boolean;
|
|
@@ -292,7 +294,7 @@ export declare class Table extends BasePgModel implements TableLikeObject {
|
|
|
292
294
|
options: string[] | null;
|
|
293
295
|
constraints: {
|
|
294
296
|
name: string;
|
|
295
|
-
constraint_type: "u" | "c" | "p" | "f" | "x";
|
|
297
|
+
constraint_type: "u" | "t" | "c" | "p" | "f" | "x";
|
|
296
298
|
deferrable: boolean;
|
|
297
299
|
initially_deferred: boolean;
|
|
298
300
|
validated: boolean;
|
|
@@ -324,6 +326,7 @@ export declare class Table extends BasePgModel implements TableLikeObject {
|
|
|
324
326
|
grantee: string;
|
|
325
327
|
privilege: string;
|
|
326
328
|
grantable: boolean;
|
|
329
|
+
columns: string[] | null | undefined;
|
|
327
330
|
}[];
|
|
328
331
|
persistence: "u" | "t" | "p";
|
|
329
332
|
row_security: boolean;
|
|
@@ -337,5 +340,5 @@ export declare class Table extends BasePgModel implements TableLikeObject {
|
|
|
337
340
|
};
|
|
338
341
|
};
|
|
339
342
|
}
|
|
340
|
-
export declare function extractTables(
|
|
343
|
+
export declare function extractTables(pool: Pool): Promise<Table[]>;
|
|
341
344
|
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { sql } from "@ts-safeql/sql-tag";
|
|
1
2
|
import z from "zod";
|
|
2
3
|
import { BasePgModel, columnPropsSchema, normalizeColumns, } from "../base.model.js";
|
|
3
4
|
import { normalizePrivileges } from "../base.privilege.js";
|
|
@@ -32,6 +33,7 @@ const tableConstraintPropsSchema = z.object({
|
|
|
32
33
|
"c", // CHECK constraint
|
|
33
34
|
"f", // FOREIGN KEY constraint
|
|
34
35
|
"p", // PRIMARY KEY constraint
|
|
36
|
+
"t", // TRIGGER constraint
|
|
35
37
|
"u", // UNIQUE constraint
|
|
36
38
|
"x", // EXCLUDE constraint
|
|
37
39
|
]),
|
|
@@ -182,10 +184,8 @@ export class Table extends BasePgModel {
|
|
|
182
184
|
};
|
|
183
185
|
}
|
|
184
186
|
}
|
|
185
|
-
export async function extractTables(
|
|
186
|
-
|
|
187
|
-
await sql `set search_path = ''`;
|
|
188
|
-
const tableRows = await sql `
|
|
187
|
+
export async function extractTables(pool) {
|
|
188
|
+
const { rows: tableRows } = await pool.query(sql `
|
|
189
189
|
with extension_oids as (
|
|
190
190
|
select objid
|
|
191
191
|
from pg_depend d
|
|
@@ -339,6 +339,8 @@ select
|
|
|
339
339
|
and de.refclassid = 'pg_extension'::regclass
|
|
340
340
|
|
|
341
341
|
where c.conrelid = t.oid
|
|
342
|
+
-- Skip constraint triggers and PG18 NOT NULL constraints; they are modeled elsewhere
|
|
343
|
+
and c.contype not in ('t', 'n')
|
|
342
344
|
and not c.connamespace::regnamespace::text like any(array['pg\\_%', 'information\\_schema'])
|
|
343
345
|
and de.objid is null
|
|
344
346
|
),
|
|
@@ -395,7 +397,7 @@ select
|
|
|
395
397
|
from (
|
|
396
398
|
-- one row for object ACL + one row per column ACL
|
|
397
399
|
select null::name as attname, t.oid as relacl_oid, (
|
|
398
|
-
select c_rel.relacl from pg_class c_rel where c_rel.oid = t.oid
|
|
400
|
+
select COALESCE(c_rel.relacl, acldefault('r', c_rel.relowner)) from pg_class c_rel where c_rel.oid = t.oid
|
|
399
401
|
) as acl
|
|
400
402
|
union all
|
|
401
403
|
select a2.attname, t.oid as relacl_oid, a2.attacl
|
|
@@ -417,10 +419,9 @@ from
|
|
|
417
419
|
group by
|
|
418
420
|
t.oid, t.schema, t.name, t.persistence, t.row_security, t.force_row_security, t.has_indexes, t.has_rules, t.has_triggers, t.has_subclasses, t.is_populated, t.replica_identity, t.is_partition, t.options, t.partition_bound, t.partition_by, t.owner, t.parent_schema, t.parent_name
|
|
419
421
|
order by
|
|
420
|
-
t.schema, t.name
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
});
|
|
422
|
+
t.schema, t.name
|
|
423
|
+
`);
|
|
424
|
+
// Validate and parse each row using the Zod schema
|
|
425
|
+
const validatedRows = tableRows.map((row) => tablePropsSchema.parse(row));
|
|
426
|
+
return validatedRows.map((row) => new Table(row));
|
|
426
427
|
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { quoteLiteral } from "../../base.change.js";
|
|
1
2
|
import { AlterTriggerChange } from "./trigger.base.js";
|
|
2
3
|
import { CreateTrigger } from "./trigger.create.js";
|
|
4
|
+
import { DropTrigger } from "./trigger.drop.js";
|
|
3
5
|
/**
|
|
4
6
|
* Replace a trigger by dropping and recreating it.
|
|
5
7
|
* This is used when properties that cannot be altered via ALTER TRIGGER change.
|
|
@@ -17,6 +19,27 @@ export class ReplaceTrigger extends AlterTriggerChange {
|
|
|
17
19
|
return [this.trigger.stableId];
|
|
18
20
|
}
|
|
19
21
|
serialize() {
|
|
22
|
+
if (this.trigger.isConstraintTrigger) {
|
|
23
|
+
const dropChange = new DropTrigger({ trigger: this.trigger });
|
|
24
|
+
const createChange = new CreateTrigger({
|
|
25
|
+
trigger: this.trigger,
|
|
26
|
+
indexableObject: this.indexableObject,
|
|
27
|
+
orReplace: false,
|
|
28
|
+
});
|
|
29
|
+
const commentSql = this.trigger.comment !== null
|
|
30
|
+
? [
|
|
31
|
+
"COMMENT ON TRIGGER",
|
|
32
|
+
this.trigger.name,
|
|
33
|
+
"ON",
|
|
34
|
+
`${this.trigger.schema}.${this.trigger.table_name}`,
|
|
35
|
+
"IS",
|
|
36
|
+
quoteLiteral(this.trigger.comment),
|
|
37
|
+
].join(" ")
|
|
38
|
+
: null;
|
|
39
|
+
return [dropChange.serialize(), createChange.serialize(), commentSql]
|
|
40
|
+
.filter(Boolean)
|
|
41
|
+
.join(";\n");
|
|
42
|
+
}
|
|
20
43
|
const createChange = new CreateTrigger({
|
|
21
44
|
trigger: this.trigger,
|
|
22
45
|
indexableObject: this.indexableObject,
|
|
@@ -45,17 +45,16 @@ export class CreateTrigger extends CreateTriggerChange {
|
|
|
45
45
|
// Table dependency
|
|
46
46
|
dependencies.add(stableId.table(this.trigger.schema, this.trigger.table_name));
|
|
47
47
|
// Function dependency
|
|
48
|
-
//
|
|
49
|
-
|
|
50
|
-
// For now, we rely on pg_depend extraction for procedure dependencies.
|
|
51
|
-
// If needed, we could parse the trigger definition to extract the full function signature.
|
|
48
|
+
// Trigger functions always have signature () RETURNS trigger, so no arguments.
|
|
49
|
+
dependencies.add(stableId.procedure(this.trigger.function_schema, this.trigger.function_name));
|
|
52
50
|
// Owner dependency
|
|
53
51
|
dependencies.add(stableId.role(this.trigger.owner));
|
|
54
52
|
return Array.from(dependencies);
|
|
55
53
|
}
|
|
56
54
|
serialize() {
|
|
57
55
|
let definition = this.trigger.definition.trim();
|
|
58
|
-
|
|
56
|
+
const isConstraintTrigger = this.trigger.isConstraintTrigger;
|
|
57
|
+
definition = definition.replace(/^CREATE\s+(?:OR\s+REPLACE\s+)?/i, `CREATE ${this.orReplace && !isConstraintTrigger ? "OR REPLACE " : ""}`);
|
|
59
58
|
return definition;
|
|
60
59
|
}
|
|
61
60
|
}
|
|
@@ -1,10 +1,17 @@
|
|
|
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 triggerPropsSchema: z.ZodObject<{
|
|
5
5
|
schema: z.ZodString;
|
|
6
6
|
name: z.ZodString;
|
|
7
7
|
table_name: z.ZodString;
|
|
8
|
+
table_relkind: z.ZodEnum<{
|
|
9
|
+
r: "r";
|
|
10
|
+
v: "v";
|
|
11
|
+
m: "m";
|
|
12
|
+
p: "p";
|
|
13
|
+
f: "f";
|
|
14
|
+
}>;
|
|
8
15
|
function_schema: z.ZodString;
|
|
9
16
|
function_name: z.ZodString;
|
|
10
17
|
trigger_type: z.ZodNumber;
|
|
@@ -37,6 +44,7 @@ export declare class Trigger extends BasePgModel {
|
|
|
37
44
|
readonly schema: TriggerProps["schema"];
|
|
38
45
|
readonly name: TriggerProps["name"];
|
|
39
46
|
readonly table_name: TriggerProps["table_name"];
|
|
47
|
+
readonly table_relkind: TriggerProps["table_relkind"];
|
|
40
48
|
readonly function_schema: TriggerProps["function_schema"];
|
|
41
49
|
readonly function_name: TriggerProps["function_name"];
|
|
42
50
|
readonly trigger_type: TriggerProps["trigger_type"];
|
|
@@ -59,6 +67,7 @@ export declare class Trigger extends BasePgModel {
|
|
|
59
67
|
readonly definition: TriggerProps["definition"];
|
|
60
68
|
readonly comment: TriggerProps["comment"];
|
|
61
69
|
constructor(props: TriggerProps);
|
|
70
|
+
get isConstraintTrigger(): boolean;
|
|
62
71
|
get stableId(): `trigger:${string}`;
|
|
63
72
|
get identityFields(): {
|
|
64
73
|
schema: string;
|
|
@@ -88,5 +97,5 @@ export declare class Trigger extends BasePgModel {
|
|
|
88
97
|
comment: string | null;
|
|
89
98
|
};
|
|
90
99
|
}
|
|
91
|
-
export declare function extractTriggers(
|
|
100
|
+
export declare function extractTriggers(pool: Pool): Promise<Trigger[]>;
|
|
92
101
|
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { sql } from "@ts-safeql/sql-tag";
|
|
1
2
|
import z from "zod";
|
|
2
3
|
import { BasePgModel } from "../base.model.js";
|
|
3
4
|
const TriggerEnabledSchema = z.enum([
|
|
@@ -6,10 +7,18 @@ const TriggerEnabledSchema = z.enum([
|
|
|
6
7
|
"R", // REPLICA - trigger fires only in "replica" mode
|
|
7
8
|
"A", // ALWAYS - trigger fires regardless of replication mode
|
|
8
9
|
]);
|
|
10
|
+
const TriggerTableRelkindSchema = z.enum([
|
|
11
|
+
"r", // ordinary table
|
|
12
|
+
"p", // partitioned table
|
|
13
|
+
"f", // foreign table
|
|
14
|
+
"v", // view
|
|
15
|
+
"m", // materialized view
|
|
16
|
+
]);
|
|
9
17
|
const triggerPropsSchema = z.object({
|
|
10
18
|
schema: z.string(),
|
|
11
19
|
name: z.string(),
|
|
12
20
|
table_name: z.string(),
|
|
21
|
+
table_relkind: TriggerTableRelkindSchema,
|
|
13
22
|
function_schema: z.string(),
|
|
14
23
|
function_name: z.string(),
|
|
15
24
|
trigger_type: z.number(),
|
|
@@ -36,6 +45,7 @@ export class Trigger extends BasePgModel {
|
|
|
36
45
|
schema;
|
|
37
46
|
name;
|
|
38
47
|
table_name;
|
|
48
|
+
table_relkind;
|
|
39
49
|
function_schema;
|
|
40
50
|
function_name;
|
|
41
51
|
trigger_type;
|
|
@@ -63,6 +73,7 @@ export class Trigger extends BasePgModel {
|
|
|
63
73
|
this.schema = props.schema;
|
|
64
74
|
this.name = props.name;
|
|
65
75
|
this.table_name = props.table_name;
|
|
76
|
+
this.table_relkind = props.table_relkind;
|
|
66
77
|
// Data fields
|
|
67
78
|
this.function_schema = props.function_schema;
|
|
68
79
|
this.function_name = props.function_name;
|
|
@@ -86,6 +97,9 @@ export class Trigger extends BasePgModel {
|
|
|
86
97
|
this.definition = props.definition;
|
|
87
98
|
this.comment = props.comment;
|
|
88
99
|
}
|
|
100
|
+
get isConstraintTrigger() {
|
|
101
|
+
return /^CREATE\s+CONSTRAINT\s+TRIGGER/i.test(this.definition.trim());
|
|
102
|
+
}
|
|
89
103
|
get stableId() {
|
|
90
104
|
return `trigger:${this.schema}.${this.table_name}.${this.name}`;
|
|
91
105
|
}
|
|
@@ -121,10 +135,8 @@ export class Trigger extends BasePgModel {
|
|
|
121
135
|
};
|
|
122
136
|
}
|
|
123
137
|
}
|
|
124
|
-
export async function extractTriggers(
|
|
125
|
-
|
|
126
|
-
await sql `set search_path = ''`;
|
|
127
|
-
const triggerRows = await sql `
|
|
138
|
+
export async function extractTriggers(pool) {
|
|
139
|
+
const { rows: triggerRows } = await pool.query(sql `
|
|
128
140
|
with extension_trigger_oids as (
|
|
129
141
|
select objid
|
|
130
142
|
from pg_depend d
|
|
@@ -148,6 +160,7 @@ export async function extractTriggers(sql) {
|
|
|
148
160
|
tc.relnamespace::regnamespace::text as schema,
|
|
149
161
|
quote_ident(t.tgname) as name,
|
|
150
162
|
quote_ident(tc.relname) as table_name,
|
|
163
|
+
tc.relkind as table_relkind,
|
|
151
164
|
|
|
152
165
|
fc.pronamespace::regnamespace::text as function_schema,
|
|
153
166
|
quote_ident(fc.proname) as function_name,
|
|
@@ -226,10 +239,9 @@ export async function extractTriggers(sql) {
|
|
|
226
239
|
and e_function.objid is null
|
|
227
240
|
and not t.tgisinternal
|
|
228
241
|
|
|
229
|
-
order by 1, 2
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
});
|
|
242
|
+
order by 1, 2
|
|
243
|
+
`);
|
|
244
|
+
// Validate and parse each row using the Zod schema
|
|
245
|
+
const validatedRows = triggerRows.map((row) => triggerPropsSchema.parse(row));
|
|
246
|
+
return validatedRows.map((row) => new Trigger(row));
|
|
235
247
|
}
|
|
@@ -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 { CompositeTypeChange } from "./changes/composite-type.types.ts";
|
|
4
3
|
import type { CompositeType } from "./composite-type.model.ts";
|
|
5
4
|
/**
|
|
@@ -10,9 +9,4 @@ import type { CompositeType } from "./composite-type.model.ts";
|
|
|
10
9
|
* @param branch - The composite types 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 diffCompositeTypes(ctx:
|
|
14
|
-
version: number;
|
|
15
|
-
currentUser: string;
|
|
16
|
-
defaultPrivilegeState: DefaultPrivilegeState;
|
|
17
|
-
mainRoles: Record<string, Role>;
|
|
18
|
-
}, main: Record<string, CompositeType>, branch: Record<string, CompositeType>): CompositeTypeChange[];
|
|
12
|
+
export declare function diffCompositeTypes(ctx: Pick<ObjectDiffContext, "version" | "currentUser" | "defaultPrivilegeState">, main: Record<string, CompositeType>, branch: Record<string, CompositeType>): CompositeTypeChange[];
|
|
@@ -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 { AlterCompositeTypeAddAttribute, AlterCompositeTypeAlterAttributeType, AlterCompositeTypeChangeOwner, AlterCompositeTypeDropAttribute, } from "./changes/composite-type.alter.js";
|
|
5
5
|
import { CreateCommentOnCompositeType, CreateCommentOnCompositeTypeAttribute, DropCommentOnCompositeType, DropCommentOnCompositeTypeAttribute, } from "./changes/composite-type.comment.js";
|
|
@@ -47,50 +47,21 @@ export function diffCompositeTypes(ctx, main, branch) {
|
|
|
47
47
|
// We compare default privileges against desired privileges to generate REVOKE/GRANT statements
|
|
48
48
|
// needed to reach the final desired state.
|
|
49
49
|
const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "composite_type", ct.schema ?? "");
|
|
50
|
+
const creatorFilteredDefaults = ct.owner !== ctx.currentUser
|
|
51
|
+
? effectiveDefaults.filter((p) => p.grantee !== ctx.currentUser)
|
|
52
|
+
: effectiveDefaults;
|
|
50
53
|
// Filter out PUBLIC's built-in default USAGE privilege (PostgreSQL grants it automatically)
|
|
51
54
|
// Reference: https://www.postgresql.org/docs/17/ddl-priv.html Table 5.2
|
|
52
55
|
// This prevents generating unnecessary "GRANT USAGE TO PUBLIC" statements
|
|
53
56
|
const desiredPrivileges = filterPublicBuiltInDefaults("composite_type", ct.privileges);
|
|
54
57
|
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
55
58
|
// and shouldn't be compared. Use the composite type owner as the reference.
|
|
56
|
-
const privilegeResults = diffPrivileges(
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
void grantable;
|
|
63
|
-
changes.push(new GrantCompositeTypePrivileges({
|
|
64
|
-
compositeType: ct,
|
|
65
|
-
grantee,
|
|
66
|
-
privileges: list,
|
|
67
|
-
version: ctx.version,
|
|
68
|
-
}));
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
// Generate revoke changes
|
|
72
|
-
if (result.revokes.length > 0) {
|
|
73
|
-
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
74
|
-
for (const [grantable, list] of revokeGroups) {
|
|
75
|
-
void grantable;
|
|
76
|
-
changes.push(new RevokeCompositeTypePrivileges({
|
|
77
|
-
compositeType: ct,
|
|
78
|
-
grantee,
|
|
79
|
-
privileges: list,
|
|
80
|
-
version: ctx.version,
|
|
81
|
-
}));
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
// Generate revoke grant option changes
|
|
85
|
-
if (result.revokeGrantOption.length > 0) {
|
|
86
|
-
changes.push(new RevokeGrantOptionCompositeTypePrivileges({
|
|
87
|
-
compositeType: ct,
|
|
88
|
-
grantee,
|
|
89
|
-
privilegeNames: result.revokeGrantOption,
|
|
90
|
-
version: ctx.version,
|
|
91
|
-
}));
|
|
92
|
-
}
|
|
93
|
-
}
|
|
59
|
+
const privilegeResults = diffPrivileges(filterPublicBuiltInDefaults("composite_type", creatorFilteredDefaults), desiredPrivileges, ct.owner);
|
|
60
|
+
changes.push(...emitObjectPrivilegeChanges(privilegeResults, ct, ct, "compositeType", {
|
|
61
|
+
Grant: GrantCompositeTypePrivileges,
|
|
62
|
+
Revoke: RevokeCompositeTypePrivileges,
|
|
63
|
+
RevokeGrantOption: RevokeGrantOptionCompositeTypePrivileges,
|
|
64
|
+
}, ctx.version));
|
|
94
65
|
}
|
|
95
66
|
for (const compositeTypeId of dropped) {
|
|
96
67
|
changes.push(new DropCompositeType({ compositeType: main[compositeTypeId] }));
|
|
@@ -203,44 +174,12 @@ export function diffCompositeTypes(ctx, main, branch) {
|
|
|
203
174
|
const branchPrivilegesFiltered = filterPublicBuiltInDefaults("composite_type", branchCompositeType.privileges);
|
|
204
175
|
// Filter out owner privileges - owner always has ALL privileges implicitly
|
|
205
176
|
// and shouldn't be compared. Use branch owner as the reference.
|
|
206
|
-
const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchCompositeType.owner
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
void grantable;
|
|
213
|
-
changes.push(new GrantCompositeTypePrivileges({
|
|
214
|
-
compositeType: branchCompositeType,
|
|
215
|
-
grantee,
|
|
216
|
-
privileges: list,
|
|
217
|
-
version: ctx.version,
|
|
218
|
-
}));
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
// Generate revoke changes
|
|
222
|
-
if (result.revokes.length > 0) {
|
|
223
|
-
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
224
|
-
for (const [grantable, list] of revokeGroups) {
|
|
225
|
-
void grantable;
|
|
226
|
-
changes.push(new RevokeCompositeTypePrivileges({
|
|
227
|
-
compositeType: mainCompositeType,
|
|
228
|
-
grantee,
|
|
229
|
-
privileges: list,
|
|
230
|
-
version: ctx.version,
|
|
231
|
-
}));
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
// Generate revoke grant option changes
|
|
235
|
-
if (result.revokeGrantOption.length > 0) {
|
|
236
|
-
changes.push(new RevokeGrantOptionCompositeTypePrivileges({
|
|
237
|
-
compositeType: mainCompositeType,
|
|
238
|
-
grantee,
|
|
239
|
-
privilegeNames: result.revokeGrantOption,
|
|
240
|
-
version: ctx.version,
|
|
241
|
-
}));
|
|
242
|
-
}
|
|
243
|
-
}
|
|
177
|
+
const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchCompositeType.owner);
|
|
178
|
+
changes.push(...emitObjectPrivilegeChanges(privilegeResults, branchCompositeType, mainCompositeType, "compositeType", {
|
|
179
|
+
Grant: GrantCompositeTypePrivileges,
|
|
180
|
+
Revoke: RevokeCompositeTypePrivileges,
|
|
181
|
+
RevokeGrantOption: RevokeGrantOptionCompositeTypePrivileges,
|
|
182
|
+
}, ctx.version));
|
|
244
183
|
// Note: Composite type renaming would also use ALTER TYPE ... RENAME TO ...
|
|
245
184
|
// But since our CompositeType model uses 'name' as the identity field,
|
|
246
185
|
// 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, type TableLikeObject } from "../../base.model.ts";
|
|
4
4
|
import { type PrivilegeProps } from "../../base.privilege-diff.ts";
|
|
@@ -144,5 +144,5 @@ export declare class CompositeType extends BasePgModel implements TableLikeObjec
|
|
|
144
144
|
};
|
|
145
145
|
};
|
|
146
146
|
}
|
|
147
|
-
export declare function extractCompositeTypes(
|
|
147
|
+
export declare function extractCompositeTypes(pool: Pool): Promise<CompositeType[]>;
|
|
148
148
|
export {};
|