@supabase/pg-delta 1.0.0-alpha.4 → 1.0.0-alpha.6
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 +40 -23
- 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 +19 -6
- package/dist/cli/exit-code.d.ts +2 -0
- package/dist/cli/exit-code.js +7 -0
- package/dist/cli/formatters/tree/tree.js +3 -2
- package/dist/cli/utils/apply-display.d.ts +52 -0
- package/dist/cli/utils/apply-display.js +183 -0
- package/dist/cli/utils/export-display.d.ts +43 -0
- package/dist/cli/utils/export-display.js +202 -0
- package/dist/cli/utils/resolve-input.d.ts +7 -0
- package/dist/cli/utils/resolve-input.js +13 -0
- package/dist/core/catalog-export/index.d.ts +11 -0
- package/dist/core/catalog-export/index.js +10 -0
- package/dist/core/catalog.diff.d.ts +1 -0
- package/dist/core/catalog.diff.js +64 -48
- package/dist/core/catalog.model.d.ts +14 -1
- package/dist/core/catalog.model.js +103 -1
- package/dist/core/catalog.snapshot.d.ts +66 -0
- package/dist/core/catalog.snapshot.js +206 -0
- package/dist/core/declarative-apply/discover-sql.d.ts +18 -0
- package/dist/core/declarative-apply/discover-sql.js +86 -0
- package/dist/core/declarative-apply/extract-catalog-providers.d.ts +23 -0
- package/dist/core/declarative-apply/extract-catalog-providers.js +159 -0
- package/dist/core/declarative-apply/index.d.ts +49 -0
- package/dist/core/declarative-apply/index.js +134 -0
- package/dist/core/declarative-apply/round-apply.d.ts +100 -0
- package/dist/core/declarative-apply/round-apply.js +378 -0
- package/dist/core/export/file-mapper.d.ts +71 -0
- package/dist/core/export/file-mapper.js +474 -0
- package/dist/core/export/grouper.d.ts +13 -0
- package/dist/core/export/grouper.js +76 -0
- package/dist/core/export/index.d.ts +45 -0
- package/dist/core/export/index.js +63 -0
- package/dist/core/export/types.d.ts +84 -0
- package/dist/core/export/types.js +25 -0
- package/dist/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
- package/dist/core/integrations/filter/dsl.d.ts +38 -1
- package/dist/core/integrations/filter/dsl.js +20 -2
- package/dist/core/integrations/filter/extractors.js +42 -0
- package/dist/core/integrations/integration-dsl.d.ts +10 -0
- package/dist/core/integrations/supabase.d.ts +8 -0
- package/dist/core/integrations/supabase.js +9 -0
- package/dist/core/objects/aggregate/aggregate.diff.d.ts +2 -8
- package/dist/core/objects/aggregate/aggregate.diff.js +16 -70
- package/dist/core/objects/aggregate/aggregate.model.d.ts +8 -8
- package/dist/core/objects/aggregate/aggregate.model.js +1 -1
- package/dist/core/objects/aggregate/changes/aggregate.create.js +1 -1
- package/dist/core/objects/aggregate/changes/aggregate.drop.js +1 -1
- package/dist/core/objects/base.privilege-diff.d.ts +38 -13
- package/dist/core/objects/base.privilege-diff.js +104 -22
- package/dist/core/objects/base.privilege.d.ts +1 -0
- package/dist/core/objects/base.privilege.js +9 -2
- package/dist/core/objects/collation/collation.diff.d.ts +2 -3
- package/dist/core/objects/diff-context.d.ts +15 -0
- package/dist/core/objects/diff-context.js +1 -0
- package/dist/core/objects/domain/changes/domain.create.js +4 -2
- package/dist/core/objects/domain/domain.diff.d.ts +2 -8
- package/dist/core/objects/domain/domain.diff.js +16 -77
- package/dist/core/objects/domain/domain.model.js +1 -1
- package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +2 -3
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts +2 -8
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js +13 -77
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +2 -2
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.d.ts +2 -8
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +16 -77
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +1 -1
- package/dist/core/objects/foreign-data-wrapper/server/server.diff.d.ts +2 -8
- package/dist/core/objects/foreign-data-wrapper/server/server.diff.js +13 -77
- package/dist/core/objects/language/language.diff.d.ts +2 -5
- package/dist/core/objects/language/language.diff.js +7 -39
- package/dist/core/objects/materialized-view/materialized-view.diff.d.ts +2 -8
- package/dist/core/objects/materialized-view/materialized-view.diff.js +16 -158
- package/dist/core/objects/materialized-view/materialized-view.model.d.ts +3 -3
- package/dist/core/objects/materialized-view/materialized-view.model.js +1 -1
- package/dist/core/objects/procedure/changes/procedure.alter.js +12 -12
- package/dist/core/objects/procedure/procedure.diff.d.ts +2 -8
- package/dist/core/objects/procedure/procedure.diff.js +16 -77
- package/dist/core/objects/procedure/procedure.model.d.ts +9 -9
- package/dist/core/objects/procedure/procedure.model.js +1 -1
- package/dist/core/objects/publication/changes/publication.alter.d.ts +0 -9
- package/dist/core/objects/publication/changes/publication.alter.js +0 -14
- package/dist/core/objects/publication/changes/publication.types.d.ts +2 -2
- package/dist/core/objects/publication/publication.diff.d.ts +2 -3
- package/dist/core/objects/publication/publication.diff.js +8 -13
- package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +3 -3
- package/dist/core/objects/rls-policy/rls-policy.model.d.ts +2 -2
- package/dist/core/objects/role/role.diff.js +22 -1
- package/dist/core/objects/role/role.model.d.ts +4 -3
- package/dist/core/objects/role/role.model.js +118 -12
- package/dist/core/objects/rule/rule.model.d.ts +1 -1
- package/dist/core/objects/schema/schema.diff.d.ts +2 -8
- package/dist/core/objects/schema/schema.diff.js +16 -77
- package/dist/core/objects/schema/schema.model.js +1 -1
- package/dist/core/objects/sequence/sequence.diff.d.ts +2 -8
- package/dist/core/objects/sequence/sequence.diff.js +16 -79
- package/dist/core/objects/sequence/sequence.model.js +1 -1
- package/dist/core/objects/subscription/subscription.diff.d.ts +2 -3
- package/dist/core/objects/table/changes/table.create.js +3 -0
- package/dist/core/objects/table/table.diff.d.ts +2 -8
- package/dist/core/objects/table/table.diff.js +26 -157
- package/dist/core/objects/table/table.model.d.ts +23 -22
- package/dist/core/objects/table/table.model.js +1 -1
- package/dist/core/objects/trigger/changes/trigger.create.js +2 -4
- package/dist/core/objects/trigger/trigger.model.d.ts +8 -0
- package/dist/core/objects/trigger/trigger.model.js +11 -0
- package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +2 -8
- package/dist/core/objects/type/composite-type/composite-type.diff.js +16 -77
- package/dist/core/objects/type/composite-type/composite-type.model.d.ts +3 -3
- package/dist/core/objects/type/composite-type/composite-type.model.js +2 -1
- package/dist/core/objects/type/enum/enum.diff.d.ts +2 -8
- package/dist/core/objects/type/enum/enum.diff.js +25 -112
- package/dist/core/objects/type/enum/enum.model.js +1 -1
- package/dist/core/objects/type/range/changes/range.create.js +6 -3
- package/dist/core/objects/type/range/range.diff.d.ts +2 -8
- package/dist/core/objects/type/range/range.diff.js +16 -77
- package/dist/core/objects/type/range/range.model.js +1 -1
- package/dist/core/objects/view/view.diff.d.ts +2 -8
- package/dist/core/objects/view/view.diff.js +16 -158
- package/dist/core/objects/view/view.model.d.ts +18 -4
- package/dist/core/objects/view/view.model.js +3 -13
- package/dist/core/plan/apply.js +9 -26
- package/dist/core/plan/create.d.ts +19 -6
- package/dist/core/plan/create.js +134 -174
- package/dist/core/plan/serialize.js +16 -4
- package/dist/core/plan/sql-format/fixtures.js +3 -5
- package/dist/core/plan/sql-format/keyword-case.js +26 -1
- package/dist/core/plan/ssl-config.d.ts +32 -0
- package/dist/core/plan/ssl-config.js +115 -0
- package/dist/core/plan/types.d.ts +6 -0
- package/dist/core/postgres-config.d.ts +14 -0
- package/dist/core/postgres-config.js +53 -2
- package/dist/core/sort/graph-builder.js +10 -0
- package/dist/core/sort/logical-sort.js +31 -23
- package/dist/core/test-utils/assert-valid-sql.d.ts +10 -0
- package/dist/core/test-utils/assert-valid-sql.js +19 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +6 -1
- package/package.json +21 -4
- package/src/cli/app.ts +27 -3
- package/src/cli/bin/cli.ts +6 -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 +28 -7
- package/src/cli/exit-code.test.ts +19 -0
- package/src/cli/exit-code.ts +7 -0
- package/src/cli/formatters/tree/tree.ts +3 -2
- 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/resolve-input.test.ts +38 -0
- package/src/cli/utils/resolve-input.ts +17 -0
- package/src/core/catalog-export/index.ts +20 -0
- package/src/core/catalog.diff.ts +79 -78
- package/src/core/catalog.model.test.ts +122 -0
- package/src/core/catalog.model.ts +127 -1
- package/src/core/catalog.snapshot.test.ts +464 -0
- package/src/core/catalog.snapshot.ts +289 -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/expand-replace-dependencies.test.ts +70 -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/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 +65 -3
- package/src/core/integrations/filter/extractors.test.ts +244 -0
- package/src/core/integrations/filter/extractors.ts +42 -0
- package/src/core/integrations/integration-dsl.ts +10 -0
- package/src/core/integrations/serialize/dsl.test.ts +91 -0
- package/src/core/integrations/supabase.ts +9 -0
- package/src/core/objects/aggregate/aggregate.diff.ts +39 -95
- package/src/core/objects/aggregate/aggregate.model.ts +1 -1
- package/src/core/objects/aggregate/changes/aggregate.alter.test.ts +3 -1
- package/src/core/objects/aggregate/changes/aggregate.comment.test.ts +5 -2
- package/src/core/objects/aggregate/changes/aggregate.create.test.ts +6 -3
- package/src/core/objects/aggregate/changes/aggregate.create.ts +1 -1
- package/src/core/objects/aggregate/changes/aggregate.drop.test.ts +7 -3
- package/src/core/objects/aggregate/changes/aggregate.drop.ts +1 -1
- package/src/core/objects/aggregate/changes/aggregate.privilege.test.ts +9 -3
- package/src/core/objects/base.privilege-diff.ts +178 -30
- package/src/core/objects/base.privilege.ts +9 -2
- package/src/core/objects/collation/changes/collation.alter.test.ts +7 -2
- package/src/core/objects/collation/changes/collation.create.test.ts +7 -2
- package/src/core/objects/collation/changes/collation.drop.test.ts +4 -1
- package/src/core/objects/collation/collation.diff.test.ts +9 -12
- package/src/core/objects/collation/collation.diff.ts +2 -1
- package/src/core/objects/diff-context.ts +16 -0
- package/src/core/objects/domain/changes/domain.alter.test.ts +28 -9
- package/src/core/objects/domain/changes/domain.create.test.ts +32 -2
- package/src/core/objects/domain/changes/domain.create.ts +7 -1
- package/src/core/objects/domain/changes/domain.drop.test.ts +4 -1
- package/src/core/objects/domain/domain.diff.ts +39 -102
- package/src/core/objects/domain/domain.model.ts +1 -1
- package/src/core/objects/event-trigger/changes/event-trigger.alter.test.ts +10 -3
- package/src/core/objects/event-trigger/changes/event-trigger.create.test.ts +4 -1
- package/src/core/objects/event-trigger/changes/event-trigger.drop.test.ts +4 -1
- package/src/core/objects/event-trigger/event-trigger.diff.test.ts +12 -7
- package/src/core/objects/event-trigger/event-trigger.diff.ts +2 -1
- package/src/core/objects/extension/changes/extension.alter.test.ts +7 -2
- package/src/core/objects/extension/changes/extension.create.test.ts +4 -1
- package/src/core/objects/extension/changes/extension.drop.test.ts +4 -1
- package/src/core/objects/extension/extension.model.test.ts +98 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.test.ts +16 -5
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.test.ts +51 -16
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.test.ts +4 -1
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.test.ts +111 -4
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.ts +31 -101
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.ts +2 -2
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.test.ts +46 -15
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.test.ts +13 -4
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.test.ts +4 -1
- package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.ts +39 -102
- package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.ts +1 -1
- package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.test.ts +22 -7
- package/src/core/objects/foreign-data-wrapper/server/changes/server.create.test.ts +19 -6
- package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.test.ts +4 -1
- package/src/core/objects/foreign-data-wrapper/server/server.diff.test.ts +95 -0
- package/src/core/objects/foreign-data-wrapper/server/server.diff.ts +31 -101
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.test.ts +13 -4
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.test.ts +16 -5
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.test.ts +10 -3
- package/src/core/objects/index/changes/index.alter.test.ts +13 -4
- package/src/core/objects/index/changes/index.create.test.ts +4 -1
- package/src/core/objects/index/changes/index.drop.test.ts +4 -1
- package/src/core/objects/language/changes/language.alter.test.ts +4 -1
- package/src/core/objects/language/changes/language.create.test.ts +4 -1
- package/src/core/objects/language/changes/language.drop.test.ts +4 -1
- package/src/core/objects/language/language.diff.test.ts +86 -4
- package/src/core/objects/language/language.diff.ts +17 -49
- package/src/core/objects/materialized-view/changes/materialized-view.alter.test.ts +10 -3
- package/src/core/objects/materialized-view/changes/materialized-view.create.test.ts +7 -2
- package/src/core/objects/materialized-view/changes/materialized-view.drop.test.ts +4 -1
- package/src/core/objects/materialized-view/materialized-view.diff.test.ts +162 -0
- package/src/core/objects/materialized-view/materialized-view.diff.ts +41 -191
- package/src/core/objects/materialized-view/materialized-view.model.ts +1 -1
- package/src/core/objects/procedure/changes/procedure.alter.test.ts +121 -49
- package/src/core/objects/procedure/changes/procedure.alter.ts +15 -12
- package/src/core/objects/procedure/changes/procedure.create.test.ts +4 -1
- package/src/core/objects/procedure/changes/procedure.drop.test.ts +7 -2
- package/src/core/objects/procedure/procedure.diff.ts +39 -102
- package/src/core/objects/procedure/procedure.model.ts +1 -1
- package/src/core/objects/publication/changes/publication.alter.test.ts +15 -21
- package/src/core/objects/publication/changes/publication.alter.ts +0 -18
- package/src/core/objects/publication/changes/publication.comment.test.ts +5 -2
- package/src/core/objects/publication/changes/publication.create.test.ts +5 -2
- package/src/core/objects/publication/changes/publication.drop.test.ts +3 -1
- package/src/core/objects/publication/changes/publication.types.ts +0 -2
- package/src/core/objects/publication/publication.diff.test.ts +24 -19
- package/src/core/objects/publication/publication.diff.ts +9 -15
- package/src/core/objects/rls-policy/changes/rls-policy.alter.test.ts +31 -14
- package/src/core/objects/rls-policy/changes/rls-policy.alter.ts +3 -3
- package/src/core/objects/rls-policy/changes/rls-policy.create.test.ts +10 -3
- package/src/core/objects/rls-policy/changes/rls-policy.drop.test.ts +4 -1
- package/src/core/objects/role/changes/role.alter.test.ts +31 -15
- package/src/core/objects/role/changes/role.create.test.ts +6 -2
- package/src/core/objects/role/changes/role.drop.test.ts +4 -1
- package/src/core/objects/role/role.diff.test.ts +235 -0
- package/src/core/objects/role/role.diff.ts +21 -1
- package/src/core/objects/role/role.model.ts +122 -14
- package/src/core/objects/rule/changes/rule.alter.test.ts +7 -3
- package/src/core/objects/rule/changes/rule.comment.test.ts +5 -2
- package/src/core/objects/rule/changes/rule.create.test.ts +6 -2
- package/src/core/objects/rule/changes/rule.drop.test.ts +3 -1
- package/src/core/objects/schema/changes/schema.alter.test.ts +4 -1
- package/src/core/objects/schema/changes/schema.create.test.ts +4 -1
- package/src/core/objects/schema/changes/schema.drop.test.ts +4 -1
- package/src/core/objects/schema/schema.diff.ts +39 -102
- package/src/core/objects/schema/schema.model.ts +1 -1
- package/src/core/objects/sequence/changes/sequence.alter.test.ts +11 -5
- package/src/core/objects/sequence/changes/sequence.create.test.ts +8 -3
- package/src/core/objects/sequence/changes/sequence.drop.test.ts +4 -1
- package/src/core/objects/sequence/sequence.diff.test.ts +114 -0
- package/src/core/objects/sequence/sequence.diff.ts +39 -104
- package/src/core/objects/sequence/sequence.model.ts +1 -1
- package/src/core/objects/subscription/changes/subscription.alter.test.ts +15 -5
- package/src/core/objects/subscription/changes/subscription.comment.test.ts +5 -2
- package/src/core/objects/subscription/changes/subscription.create.test.ts +5 -2
- package/src/core/objects/subscription/changes/subscription.drop.test.ts +3 -1
- package/src/core/objects/subscription/subscription.diff.test.ts +16 -11
- package/src/core/objects/subscription/subscription.diff.ts +2 -1
- package/src/core/objects/table/changes/table.alter.test.ts +38 -15
- package/src/core/objects/table/changes/table.create.test.ts +41 -3
- package/src/core/objects/table/changes/table.create.ts +4 -0
- package/src/core/objects/table/changes/table.drop.test.ts +3 -1
- package/src/core/objects/table/table.diff.test.ts +157 -0
- package/src/core/objects/table/table.diff.ts +54 -190
- package/src/core/objects/table/table.model.ts +1 -1
- package/src/core/objects/trigger/changes/trigger.alter.test.ts +8 -4
- package/src/core/objects/trigger/changes/trigger.create.test.ts +5 -1
- package/src/core/objects/trigger/changes/trigger.create.ts +7 -4
- package/src/core/objects/trigger/changes/trigger.drop.test.ts +5 -1
- package/src/core/objects/trigger/trigger.diff.test.ts +1 -0
- package/src/core/objects/trigger/trigger.model.ts +12 -0
- package/src/core/objects/type/composite-type/changes/composite-type.alter.test.ts +10 -4
- package/src/core/objects/type/composite-type/changes/composite-type.create.test.ts +7 -2
- package/src/core/objects/type/composite-type/changes/composite-type.drop.test.ts +4 -1
- package/src/core/objects/type/composite-type/composite-type.diff.test.ts +78 -0
- package/src/core/objects/type/composite-type/composite-type.diff.ts +39 -101
- package/src/core/objects/type/composite-type/composite-type.model.ts +2 -1
- package/src/core/objects/type/enum/changes/enum.alter.test.ts +14 -5
- package/src/core/objects/type/enum/changes/enum.create.test.ts +4 -1
- package/src/core/objects/type/enum/changes/enum.drop.test.ts +4 -1
- package/src/core/objects/type/enum/enum.diff.test.ts +181 -0
- package/src/core/objects/type/enum/enum.diff.ts +58 -146
- package/src/core/objects/type/enum/enum.model.ts +1 -1
- package/src/core/objects/type/range/changes/range.alter.test.ts +3 -1
- package/src/core/objects/type/range/changes/range.create.test.ts +5 -2
- package/src/core/objects/type/range/changes/range.create.ts +6 -2
- package/src/core/objects/type/range/changes/range.drop.test.ts +3 -1
- package/src/core/objects/type/range/range.diff.test.ts +77 -0
- package/src/core/objects/type/range/range.diff.ts +39 -101
- package/src/core/objects/type/range/range.model.ts +1 -1
- package/src/core/objects/view/changes/view.alter.test.ts +8 -3
- package/src/core/objects/view/changes/view.create.test.ts +7 -2
- package/src/core/objects/view/changes/view.drop.test.ts +4 -1
- package/src/core/objects/view/view.diff.test.ts +82 -0
- package/src/core/objects/view/view.diff.ts +41 -191
- package/src/core/objects/view/view.model.ts +3 -17
- package/src/core/plan/apply.ts +9 -27
- package/src/core/plan/create.ts +173 -237
- package/src/core/plan/serialize.test.ts +317 -0
- package/src/core/plan/serialize.ts +18 -4
- package/src/core/plan/sql-format/fixtures.ts +2 -5
- package/src/core/plan/sql-format/format-lowercase-coverage.test.ts +52 -0
- package/src/core/plan/sql-format/format-off.test.ts +14 -17
- package/src/core/plan/sql-format/format-pretty-lower-leading.test.ts +27 -22
- package/src/core/plan/sql-format/format-pretty-narrow.test.ts +17 -21
- package/src/core/plan/sql-format/format-pretty-preserve.test.ts +25 -20
- package/src/core/plan/sql-format/format-pretty-upper.test.ts +23 -20
- package/src/core/plan/sql-format/keyword-case.ts +36 -1
- package/src/core/plan/ssl-config.ts +172 -0
- package/src/core/plan/types.ts +6 -0
- package/src/core/postgres-config.ts +71 -2
- package/src/core/sort/graph-builder.ts +12 -0
- package/src/core/sort/logical-sort.test.ts +371 -0
- package/src/core/sort/logical-sort.ts +32 -25
- package/src/core/sort/topological-sort.test.ts +275 -0
- package/src/core/test-utils/assert-valid-sql.ts +20 -0
- package/src/index.ts +26 -2
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import { assertValidSql } from "../../../../test-utils/assert-valid-sql.ts";
|
|
2
3
|
import { Server } from "../server.model.ts";
|
|
3
4
|
import { CreateServer } from "./server.create.ts";
|
|
4
5
|
|
|
5
6
|
describe("server", () => {
|
|
6
|
-
test("create basic", () => {
|
|
7
|
+
test("create basic", async () => {
|
|
7
8
|
const server = new Server({
|
|
8
9
|
name: "test_server",
|
|
9
10
|
owner: "test",
|
|
@@ -19,12 +20,14 @@ describe("server", () => {
|
|
|
19
20
|
server,
|
|
20
21
|
});
|
|
21
22
|
|
|
23
|
+
await assertValidSql(change.serialize());
|
|
24
|
+
|
|
22
25
|
expect(change.serialize()).toBe(
|
|
23
26
|
"CREATE SERVER test_server FOREIGN DATA WRAPPER test_fdw",
|
|
24
27
|
);
|
|
25
28
|
});
|
|
26
29
|
|
|
27
|
-
test("create with type", () => {
|
|
30
|
+
test("create with type", async () => {
|
|
28
31
|
const server = new Server({
|
|
29
32
|
name: "test_server",
|
|
30
33
|
owner: "test",
|
|
@@ -40,12 +43,14 @@ describe("server", () => {
|
|
|
40
43
|
server,
|
|
41
44
|
});
|
|
42
45
|
|
|
46
|
+
await assertValidSql(change.serialize());
|
|
47
|
+
|
|
43
48
|
expect(change.serialize()).toBe(
|
|
44
49
|
"CREATE SERVER test_server TYPE 'postgres_fdw' FOREIGN DATA WRAPPER test_fdw",
|
|
45
50
|
);
|
|
46
51
|
});
|
|
47
52
|
|
|
48
|
-
test("create with version", () => {
|
|
53
|
+
test("create with version", async () => {
|
|
49
54
|
const server = new Server({
|
|
50
55
|
name: "test_server",
|
|
51
56
|
owner: "test",
|
|
@@ -61,12 +66,14 @@ describe("server", () => {
|
|
|
61
66
|
server,
|
|
62
67
|
});
|
|
63
68
|
|
|
69
|
+
await assertValidSql(change.serialize());
|
|
70
|
+
|
|
64
71
|
expect(change.serialize()).toBe(
|
|
65
72
|
"CREATE SERVER test_server VERSION '1.0' FOREIGN DATA WRAPPER test_fdw",
|
|
66
73
|
);
|
|
67
74
|
});
|
|
68
75
|
|
|
69
|
-
test("create with type and version", () => {
|
|
76
|
+
test("create with type and version", async () => {
|
|
70
77
|
const server = new Server({
|
|
71
78
|
name: "test_server",
|
|
72
79
|
owner: "test",
|
|
@@ -82,12 +89,14 @@ describe("server", () => {
|
|
|
82
89
|
server,
|
|
83
90
|
});
|
|
84
91
|
|
|
92
|
+
await assertValidSql(change.serialize());
|
|
93
|
+
|
|
85
94
|
expect(change.serialize()).toBe(
|
|
86
95
|
"CREATE SERVER test_server TYPE 'postgres_fdw' VERSION '1.0' FOREIGN DATA WRAPPER test_fdw",
|
|
87
96
|
);
|
|
88
97
|
});
|
|
89
98
|
|
|
90
|
-
test("create with options", () => {
|
|
99
|
+
test("create with options", async () => {
|
|
91
100
|
const server = new Server({
|
|
92
101
|
name: "test_server",
|
|
93
102
|
owner: "test",
|
|
@@ -103,12 +112,14 @@ describe("server", () => {
|
|
|
103
112
|
server,
|
|
104
113
|
});
|
|
105
114
|
|
|
115
|
+
await assertValidSql(change.serialize());
|
|
116
|
+
|
|
106
117
|
expect(change.serialize()).toBe(
|
|
107
118
|
"CREATE SERVER test_server FOREIGN DATA WRAPPER test_fdw OPTIONS (host 'localhost', port '5432')",
|
|
108
119
|
);
|
|
109
120
|
});
|
|
110
121
|
|
|
111
|
-
test("create with all properties", () => {
|
|
122
|
+
test("create with all properties", async () => {
|
|
112
123
|
const server = new Server({
|
|
113
124
|
name: "test_server",
|
|
114
125
|
owner: "test",
|
|
@@ -124,6 +135,8 @@ describe("server", () => {
|
|
|
124
135
|
server,
|
|
125
136
|
});
|
|
126
137
|
|
|
138
|
+
await assertValidSql(change.serialize());
|
|
139
|
+
|
|
127
140
|
expect(change.serialize()).toBe(
|
|
128
141
|
"CREATE SERVER test_server TYPE 'postgres_fdw' VERSION '1.0' FOREIGN DATA WRAPPER test_fdw OPTIONS (host 'localhost', port '5432')",
|
|
129
142
|
);
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import { assertValidSql } from "../../../../test-utils/assert-valid-sql.ts";
|
|
2
3
|
import { Server } from "../server.model.ts";
|
|
3
4
|
import { DropServer } from "./server.drop.ts";
|
|
4
5
|
|
|
5
6
|
describe("server", () => {
|
|
6
|
-
test("drop", () => {
|
|
7
|
+
test("drop", async () => {
|
|
7
8
|
const server = new Server({
|
|
8
9
|
name: "test_server",
|
|
9
10
|
owner: "test",
|
|
@@ -19,6 +20,8 @@ describe("server", () => {
|
|
|
19
20
|
server,
|
|
20
21
|
});
|
|
21
22
|
|
|
23
|
+
await assertValidSql(change.serialize());
|
|
24
|
+
|
|
22
25
|
expect(change.serialize()).toBe("DROP SERVER test_server");
|
|
23
26
|
});
|
|
24
27
|
});
|
|
@@ -5,8 +5,17 @@ import {
|
|
|
5
5
|
AlterServerSetOptions,
|
|
6
6
|
AlterServerSetVersion,
|
|
7
7
|
} from "./changes/server.alter.ts";
|
|
8
|
+
import {
|
|
9
|
+
CreateCommentOnServer,
|
|
10
|
+
DropCommentOnServer,
|
|
11
|
+
} from "./changes/server.comment.ts";
|
|
8
12
|
import { CreateServer } from "./changes/server.create.ts";
|
|
9
13
|
import { DropServer } from "./changes/server.drop.ts";
|
|
14
|
+
import {
|
|
15
|
+
GrantServerPrivileges,
|
|
16
|
+
RevokeGrantOptionServerPrivileges,
|
|
17
|
+
RevokeServerPrivileges,
|
|
18
|
+
} from "./changes/server.privilege.ts";
|
|
10
19
|
import { diffServers } from "./server.diff.ts";
|
|
11
20
|
import { Server, type ServerProps } from "./server.model.ts";
|
|
12
21
|
|
|
@@ -164,4 +173,90 @@ describe.concurrent("server.diff", () => {
|
|
|
164
173
|
expect(changes.some((c) => c instanceof DropServer)).toBe(true);
|
|
165
174
|
expect(changes.some((c) => c instanceof CreateServer)).toBe(true);
|
|
166
175
|
});
|
|
176
|
+
|
|
177
|
+
test("created with privileges emits grant", () => {
|
|
178
|
+
const server = new Server({
|
|
179
|
+
name: "srv1",
|
|
180
|
+
owner: "o1",
|
|
181
|
+
foreign_data_wrapper: "fdw1",
|
|
182
|
+
type: null,
|
|
183
|
+
version: null,
|
|
184
|
+
options: null,
|
|
185
|
+
comment: null,
|
|
186
|
+
privileges: [
|
|
187
|
+
{ grantee: "role_usage", privilege: "USAGE", grantable: false },
|
|
188
|
+
],
|
|
189
|
+
});
|
|
190
|
+
const changes = diffServers(testContext, {}, { [server.stableId]: server });
|
|
191
|
+
expect(changes[0]).toBeInstanceOf(CreateServer);
|
|
192
|
+
expect(changes.some((c) => c instanceof GrantServerPrivileges)).toBe(true);
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
test("altered comment emits create/drop comment", () => {
|
|
196
|
+
const base: ServerProps = {
|
|
197
|
+
name: "srv1",
|
|
198
|
+
owner: "o1",
|
|
199
|
+
foreign_data_wrapper: "fdw1",
|
|
200
|
+
type: null,
|
|
201
|
+
version: null,
|
|
202
|
+
options: null,
|
|
203
|
+
comment: null,
|
|
204
|
+
privileges: [],
|
|
205
|
+
};
|
|
206
|
+
const main = new Server(base);
|
|
207
|
+
const withComment = new Server({ ...base, comment: "my server" });
|
|
208
|
+
|
|
209
|
+
const addComment = diffServers(
|
|
210
|
+
testContext,
|
|
211
|
+
{ [main.stableId]: main },
|
|
212
|
+
{ [withComment.stableId]: withComment },
|
|
213
|
+
);
|
|
214
|
+
expect(addComment[0]).toBeInstanceOf(CreateCommentOnServer);
|
|
215
|
+
|
|
216
|
+
const dropComment = diffServers(
|
|
217
|
+
testContext,
|
|
218
|
+
{ [withComment.stableId]: withComment },
|
|
219
|
+
{ [main.stableId]: main },
|
|
220
|
+
);
|
|
221
|
+
expect(dropComment[0]).toBeInstanceOf(DropCommentOnServer);
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
test("altered privileges emit grant, revoke, and revoke grant option", () => {
|
|
225
|
+
const base: ServerProps = {
|
|
226
|
+
name: "srv1",
|
|
227
|
+
owner: "o1",
|
|
228
|
+
foreign_data_wrapper: "fdw1",
|
|
229
|
+
type: null,
|
|
230
|
+
version: null,
|
|
231
|
+
options: null,
|
|
232
|
+
comment: null,
|
|
233
|
+
privileges: [],
|
|
234
|
+
};
|
|
235
|
+
const main = new Server({
|
|
236
|
+
...base,
|
|
237
|
+
privileges: [
|
|
238
|
+
{ grantee: "role_usage", privilege: "USAGE", grantable: false },
|
|
239
|
+
{ grantee: "role_with_option", privilege: "USAGE", grantable: true },
|
|
240
|
+
{ grantee: "role_removed", privilege: "USAGE", grantable: false },
|
|
241
|
+
],
|
|
242
|
+
});
|
|
243
|
+
const branch = new Server({
|
|
244
|
+
...base,
|
|
245
|
+
privileges: [
|
|
246
|
+
{ grantee: "role_usage", privilege: "USAGE", grantable: true },
|
|
247
|
+
{ grantee: "role_with_option", privilege: "USAGE", grantable: false },
|
|
248
|
+
{ grantee: "role_new", privilege: "USAGE", grantable: false },
|
|
249
|
+
],
|
|
250
|
+
});
|
|
251
|
+
const changes = diffServers(
|
|
252
|
+
testContext,
|
|
253
|
+
{ [main.stableId]: main },
|
|
254
|
+
{ [branch.stableId]: branch },
|
|
255
|
+
);
|
|
256
|
+
expect(changes.some((c) => c instanceof GrantServerPrivileges)).toBe(true);
|
|
257
|
+
expect(changes.some((c) => c instanceof RevokeServerPrivileges)).toBe(true);
|
|
258
|
+
expect(
|
|
259
|
+
changes.some((c) => c instanceof RevokeGrantOptionServerPrivileges),
|
|
260
|
+
).toBe(true);
|
|
261
|
+
});
|
|
167
262
|
});
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import type { DefaultPrivilegeState } from "../../base.default-privileges.ts";
|
|
2
1
|
import { diffObjects } from "../../base.diff.ts";
|
|
3
2
|
import {
|
|
4
3
|
diffPrivileges,
|
|
4
|
+
emitObjectPrivilegeChanges,
|
|
5
5
|
filterPublicBuiltInDefaults,
|
|
6
|
-
groupPrivilegesByGrantable,
|
|
7
6
|
} from "../../base.privilege-diff.ts";
|
|
8
|
-
import type {
|
|
7
|
+
import type { ObjectDiffContext } from "../../diff-context.ts";
|
|
9
8
|
import {
|
|
10
9
|
AlterServerChangeOwner,
|
|
11
10
|
AlterServerSetOptions,
|
|
@@ -34,12 +33,7 @@ import type { Server } from "./server.model.ts";
|
|
|
34
33
|
* @returns A list of changes to apply to main to make it match branch.
|
|
35
34
|
*/
|
|
36
35
|
export function diffServers(
|
|
37
|
-
ctx:
|
|
38
|
-
version: number;
|
|
39
|
-
currentUser: string;
|
|
40
|
-
defaultPrivilegeState: DefaultPrivilegeState;
|
|
41
|
-
mainRoles: Record<string, Role>;
|
|
42
|
-
},
|
|
36
|
+
ctx: Pick<ObjectDiffContext, "version" | "currentUser">,
|
|
43
37
|
main: Record<string, Server>,
|
|
44
38
|
branch: Record<string, Server>,
|
|
45
39
|
): ServerChange[] {
|
|
@@ -80,54 +74,22 @@ export function diffServers(
|
|
|
80
74
|
effectiveDefaults,
|
|
81
75
|
desiredPrivileges,
|
|
82
76
|
createdServer.owner,
|
|
83
|
-
ctx.mainRoles,
|
|
84
77
|
);
|
|
85
78
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// Generate revoke changes
|
|
104
|
-
if (result.revokes.length > 0) {
|
|
105
|
-
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
106
|
-
for (const [grantable, list] of revokeGroups) {
|
|
107
|
-
void grantable;
|
|
108
|
-
changes.push(
|
|
109
|
-
new RevokeServerPrivileges({
|
|
110
|
-
server: createdServer,
|
|
111
|
-
grantee,
|
|
112
|
-
privileges: list,
|
|
113
|
-
version: ctx.version,
|
|
114
|
-
}),
|
|
115
|
-
);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// Generate revoke grant option changes
|
|
120
|
-
if (result.revokeGrantOption.length > 0) {
|
|
121
|
-
changes.push(
|
|
122
|
-
new RevokeGrantOptionServerPrivileges({
|
|
123
|
-
server: createdServer,
|
|
124
|
-
grantee,
|
|
125
|
-
privilegeNames: result.revokeGrantOption,
|
|
126
|
-
version: ctx.version,
|
|
127
|
-
}),
|
|
128
|
-
);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
79
|
+
changes.push(
|
|
80
|
+
...(emitObjectPrivilegeChanges(
|
|
81
|
+
privilegeResults,
|
|
82
|
+
createdServer,
|
|
83
|
+
createdServer,
|
|
84
|
+
"server",
|
|
85
|
+
{
|
|
86
|
+
Grant: GrantServerPrivileges,
|
|
87
|
+
Revoke: RevokeServerPrivileges,
|
|
88
|
+
RevokeGrantOption: RevokeGrantOptionServerPrivileges,
|
|
89
|
+
},
|
|
90
|
+
ctx.version,
|
|
91
|
+
) as ServerChange[]),
|
|
92
|
+
);
|
|
131
93
|
}
|
|
132
94
|
|
|
133
95
|
for (const serverId of dropped) {
|
|
@@ -204,54 +166,22 @@ export function diffServers(
|
|
|
204
166
|
mainPrivilegesFiltered,
|
|
205
167
|
branchPrivilegesFiltered,
|
|
206
168
|
branchServer.owner,
|
|
207
|
-
ctx.mainRoles,
|
|
208
169
|
);
|
|
209
170
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
// Generate revoke changes
|
|
228
|
-
if (result.revokes.length > 0) {
|
|
229
|
-
const revokeGroups = groupPrivilegesByGrantable(result.revokes);
|
|
230
|
-
for (const [grantable, list] of revokeGroups) {
|
|
231
|
-
void grantable;
|
|
232
|
-
changes.push(
|
|
233
|
-
new RevokeServerPrivileges({
|
|
234
|
-
server: mainServer,
|
|
235
|
-
grantee,
|
|
236
|
-
privileges: list,
|
|
237
|
-
version: ctx.version,
|
|
238
|
-
}),
|
|
239
|
-
);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
// Generate revoke grant option changes
|
|
244
|
-
if (result.revokeGrantOption.length > 0) {
|
|
245
|
-
changes.push(
|
|
246
|
-
new RevokeGrantOptionServerPrivileges({
|
|
247
|
-
server: mainServer,
|
|
248
|
-
grantee,
|
|
249
|
-
privilegeNames: result.revokeGrantOption,
|
|
250
|
-
version: ctx.version,
|
|
251
|
-
}),
|
|
252
|
-
);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
171
|
+
changes.push(
|
|
172
|
+
...(emitObjectPrivilegeChanges(
|
|
173
|
+
privilegeResults,
|
|
174
|
+
branchServer,
|
|
175
|
+
mainServer,
|
|
176
|
+
"server",
|
|
177
|
+
{
|
|
178
|
+
Grant: GrantServerPrivileges,
|
|
179
|
+
Revoke: RevokeServerPrivileges,
|
|
180
|
+
RevokeGrantOption: RevokeGrantOptionServerPrivileges,
|
|
181
|
+
},
|
|
182
|
+
ctx.version,
|
|
183
|
+
) as ServerChange[]),
|
|
184
|
+
);
|
|
255
185
|
|
|
256
186
|
// Note: Server renaming would also use ALTER SERVER ... RENAME TO ...
|
|
257
187
|
// But since our Server model uses 'name' as the identity field,
|
package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.test.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import { assertValidSql } from "../../../../test-utils/assert-valid-sql.ts";
|
|
2
3
|
import { UserMapping, type UserMappingProps } from "../user-mapping.model.ts";
|
|
3
4
|
import { AlterUserMappingSetOptions } from "./user-mapping.alter.ts";
|
|
4
5
|
|
|
5
6
|
describe.concurrent("user-mapping", () => {
|
|
6
7
|
describe("alter", () => {
|
|
7
|
-
test("set options ADD", () => {
|
|
8
|
+
test("set options ADD", async () => {
|
|
8
9
|
const props: UserMappingProps = {
|
|
9
10
|
user: "test_user",
|
|
10
11
|
server: "test_server",
|
|
@@ -19,12 +20,14 @@ describe.concurrent("user-mapping", () => {
|
|
|
19
20
|
],
|
|
20
21
|
});
|
|
21
22
|
|
|
23
|
+
await assertValidSql(change.serialize());
|
|
24
|
+
|
|
22
25
|
expect(change.serialize()).toBe(
|
|
23
26
|
"ALTER USER MAPPING FOR test_user SERVER test_server OPTIONS (ADD user 'remote_user', ADD password 'secret')",
|
|
24
27
|
);
|
|
25
28
|
});
|
|
26
29
|
|
|
27
|
-
test("set options SET", () => {
|
|
30
|
+
test("set options SET", async () => {
|
|
28
31
|
const props: UserMappingProps = {
|
|
29
32
|
user: "test_user",
|
|
30
33
|
server: "test_server",
|
|
@@ -36,12 +39,14 @@ describe.concurrent("user-mapping", () => {
|
|
|
36
39
|
options: [{ action: "SET", option: "password", value: "new_secret" }],
|
|
37
40
|
});
|
|
38
41
|
|
|
42
|
+
await assertValidSql(change.serialize());
|
|
43
|
+
|
|
39
44
|
expect(change.serialize()).toBe(
|
|
40
45
|
"ALTER USER MAPPING FOR test_user SERVER test_server OPTIONS (SET password 'new_secret')",
|
|
41
46
|
);
|
|
42
47
|
});
|
|
43
48
|
|
|
44
|
-
test("set options DROP", () => {
|
|
49
|
+
test("set options DROP", async () => {
|
|
45
50
|
const props: UserMappingProps = {
|
|
46
51
|
user: "test_user",
|
|
47
52
|
server: "test_server",
|
|
@@ -53,12 +58,14 @@ describe.concurrent("user-mapping", () => {
|
|
|
53
58
|
options: [{ action: "DROP", option: "password" }],
|
|
54
59
|
});
|
|
55
60
|
|
|
61
|
+
await assertValidSql(change.serialize());
|
|
62
|
+
|
|
56
63
|
expect(change.serialize()).toBe(
|
|
57
64
|
"ALTER USER MAPPING FOR test_user SERVER test_server OPTIONS (DROP password)",
|
|
58
65
|
);
|
|
59
66
|
});
|
|
60
67
|
|
|
61
|
-
test("set options mixed ADD/SET/DROP", () => {
|
|
68
|
+
test("set options mixed ADD/SET/DROP", async () => {
|
|
62
69
|
const props: UserMappingProps = {
|
|
63
70
|
user: "PUBLIC",
|
|
64
71
|
server: "test_server",
|
|
@@ -74,6 +81,8 @@ describe.concurrent("user-mapping", () => {
|
|
|
74
81
|
],
|
|
75
82
|
});
|
|
76
83
|
|
|
84
|
+
await assertValidSql(change.serialize());
|
|
85
|
+
|
|
77
86
|
expect(change.serialize()).toBe(
|
|
78
87
|
"ALTER USER MAPPING FOR PUBLIC SERVER test_server OPTIONS (ADD new_option 'new_value', SET existing_option 'updated_value', DROP old_option)",
|
|
79
88
|
);
|
package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.test.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import { assertValidSql } from "../../../../test-utils/assert-valid-sql.ts";
|
|
2
3
|
import { UserMapping } from "../user-mapping.model.ts";
|
|
3
4
|
import { CreateUserMapping } from "./user-mapping.create.ts";
|
|
4
5
|
|
|
5
6
|
describe("user-mapping", () => {
|
|
6
|
-
test("create basic", () => {
|
|
7
|
+
test("create basic", async () => {
|
|
7
8
|
const userMapping = new UserMapping({
|
|
8
9
|
user: "test_user",
|
|
9
10
|
server: "test_server",
|
|
@@ -14,12 +15,14 @@ describe("user-mapping", () => {
|
|
|
14
15
|
userMapping,
|
|
15
16
|
});
|
|
16
17
|
|
|
18
|
+
await assertValidSql(change.serialize());
|
|
19
|
+
|
|
17
20
|
expect(change.serialize()).toBe(
|
|
18
21
|
"CREATE USER MAPPING FOR test_user SERVER test_server",
|
|
19
22
|
);
|
|
20
23
|
});
|
|
21
24
|
|
|
22
|
-
test("create with PUBLIC user", () => {
|
|
25
|
+
test("create with PUBLIC user", async () => {
|
|
23
26
|
const userMapping = new UserMapping({
|
|
24
27
|
user: "PUBLIC",
|
|
25
28
|
server: "test_server",
|
|
@@ -30,12 +33,14 @@ describe("user-mapping", () => {
|
|
|
30
33
|
userMapping,
|
|
31
34
|
});
|
|
32
35
|
|
|
36
|
+
await assertValidSql(change.serialize());
|
|
37
|
+
|
|
33
38
|
expect(change.serialize()).toBe(
|
|
34
39
|
"CREATE USER MAPPING FOR PUBLIC SERVER test_server",
|
|
35
40
|
);
|
|
36
41
|
});
|
|
37
42
|
|
|
38
|
-
test("create with CURRENT_USER", () => {
|
|
43
|
+
test("create with CURRENT_USER", async () => {
|
|
39
44
|
const userMapping = new UserMapping({
|
|
40
45
|
user: "CURRENT_USER",
|
|
41
46
|
server: "test_server",
|
|
@@ -46,12 +51,14 @@ describe("user-mapping", () => {
|
|
|
46
51
|
userMapping,
|
|
47
52
|
});
|
|
48
53
|
|
|
54
|
+
await assertValidSql(change.serialize());
|
|
55
|
+
|
|
49
56
|
expect(change.serialize()).toBe(
|
|
50
57
|
"CREATE USER MAPPING FOR CURRENT_USER SERVER test_server",
|
|
51
58
|
);
|
|
52
59
|
});
|
|
53
60
|
|
|
54
|
-
test("create with options", () => {
|
|
61
|
+
test("create with options", async () => {
|
|
55
62
|
const userMapping = new UserMapping({
|
|
56
63
|
user: "test_user",
|
|
57
64
|
server: "test_server",
|
|
@@ -62,12 +69,14 @@ describe("user-mapping", () => {
|
|
|
62
69
|
userMapping,
|
|
63
70
|
});
|
|
64
71
|
|
|
72
|
+
await assertValidSql(change.serialize());
|
|
73
|
+
|
|
65
74
|
expect(change.serialize()).toBe(
|
|
66
75
|
"CREATE USER MAPPING FOR test_user SERVER test_server OPTIONS (user 'remote_user', password 'secret')",
|
|
67
76
|
);
|
|
68
77
|
});
|
|
69
78
|
|
|
70
|
-
test("create with all properties", () => {
|
|
79
|
+
test("create with all properties", async () => {
|
|
71
80
|
const userMapping = new UserMapping({
|
|
72
81
|
user: "PUBLIC",
|
|
73
82
|
server: "test_server",
|
|
@@ -78,6 +87,8 @@ describe("user-mapping", () => {
|
|
|
78
87
|
userMapping,
|
|
79
88
|
});
|
|
80
89
|
|
|
90
|
+
await assertValidSql(change.serialize());
|
|
91
|
+
|
|
81
92
|
expect(change.serialize()).toBe(
|
|
82
93
|
"CREATE USER MAPPING FOR PUBLIC SERVER test_server OPTIONS (user 'remote_user', password 'secret')",
|
|
83
94
|
);
|
package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.test.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import { assertValidSql } from "../../../../test-utils/assert-valid-sql.ts";
|
|
2
3
|
import { UserMapping } from "../user-mapping.model.ts";
|
|
3
4
|
import { DropUserMapping } from "./user-mapping.drop.ts";
|
|
4
5
|
|
|
5
6
|
describe("user-mapping", () => {
|
|
6
|
-
test("drop", () => {
|
|
7
|
+
test("drop", async () => {
|
|
7
8
|
const userMapping = new UserMapping({
|
|
8
9
|
user: "test_user",
|
|
9
10
|
server: "test_server",
|
|
@@ -14,12 +15,14 @@ describe("user-mapping", () => {
|
|
|
14
15
|
userMapping,
|
|
15
16
|
});
|
|
16
17
|
|
|
18
|
+
await assertValidSql(change.serialize());
|
|
19
|
+
|
|
17
20
|
expect(change.serialize()).toBe(
|
|
18
21
|
"DROP USER MAPPING FOR test_user SERVER test_server",
|
|
19
22
|
);
|
|
20
23
|
});
|
|
21
24
|
|
|
22
|
-
test("drop PUBLIC user mapping", () => {
|
|
25
|
+
test("drop PUBLIC user mapping", async () => {
|
|
23
26
|
const userMapping = new UserMapping({
|
|
24
27
|
user: "PUBLIC",
|
|
25
28
|
server: "test_server",
|
|
@@ -30,12 +33,14 @@ describe("user-mapping", () => {
|
|
|
30
33
|
userMapping,
|
|
31
34
|
});
|
|
32
35
|
|
|
36
|
+
await assertValidSql(change.serialize());
|
|
37
|
+
|
|
33
38
|
expect(change.serialize()).toBe(
|
|
34
39
|
"DROP USER MAPPING FOR PUBLIC SERVER test_server",
|
|
35
40
|
);
|
|
36
41
|
});
|
|
37
42
|
|
|
38
|
-
test("drop CURRENT_USER mapping", () => {
|
|
43
|
+
test("drop CURRENT_USER mapping", async () => {
|
|
39
44
|
const userMapping = new UserMapping({
|
|
40
45
|
user: "CURRENT_USER",
|
|
41
46
|
server: "test_server",
|
|
@@ -46,6 +51,8 @@ describe("user-mapping", () => {
|
|
|
46
51
|
userMapping,
|
|
47
52
|
});
|
|
48
53
|
|
|
54
|
+
await assertValidSql(change.serialize());
|
|
55
|
+
|
|
49
56
|
expect(change.serialize()).toBe(
|
|
50
57
|
"DROP USER MAPPING FOR CURRENT_USER SERVER test_server",
|
|
51
58
|
);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import { assertValidSql } from "../../../test-utils/assert-valid-sql.ts";
|
|
2
3
|
import { Index, type IndexProps } from "../index.model.ts";
|
|
3
4
|
import {
|
|
4
5
|
AlterIndexSetStatistics,
|
|
@@ -8,7 +9,7 @@ import {
|
|
|
8
9
|
|
|
9
10
|
describe.concurrent("index", () => {
|
|
10
11
|
describe("alter", () => {
|
|
11
|
-
test("set storage params", () => {
|
|
12
|
+
test("set storage params", async () => {
|
|
12
13
|
const props: Omit<IndexProps, "storage_params"> = {
|
|
13
14
|
schema: "public",
|
|
14
15
|
table_name: "test_table",
|
|
@@ -50,12 +51,14 @@ describe.concurrent("index", () => {
|
|
|
50
51
|
keysToReset: [],
|
|
51
52
|
});
|
|
52
53
|
|
|
54
|
+
await assertValidSql(change.serialize());
|
|
55
|
+
|
|
53
56
|
expect(change.serialize()).toBe(
|
|
54
57
|
"ALTER INDEX public.test_index SET (fillfactor=90)",
|
|
55
58
|
);
|
|
56
59
|
});
|
|
57
60
|
|
|
58
|
-
test("reset and set storage params", () => {
|
|
61
|
+
test("reset and set storage params", async () => {
|
|
59
62
|
const props: Omit<IndexProps, "storage_params"> = {
|
|
60
63
|
schema: "public",
|
|
61
64
|
table_name: "test_table",
|
|
@@ -97,6 +100,8 @@ describe.concurrent("index", () => {
|
|
|
97
100
|
keysToReset: ["fastupdate"],
|
|
98
101
|
});
|
|
99
102
|
|
|
103
|
+
await assertValidSql(change.serialize());
|
|
104
|
+
|
|
100
105
|
expect(change.serialize()).toBe(
|
|
101
106
|
[
|
|
102
107
|
"ALTER INDEX public.test_index RESET (fastupdate)",
|
|
@@ -105,7 +110,7 @@ describe.concurrent("index", () => {
|
|
|
105
110
|
);
|
|
106
111
|
});
|
|
107
112
|
|
|
108
|
-
test("set statistics", () => {
|
|
113
|
+
test("set statistics", async () => {
|
|
109
114
|
const props: Omit<IndexProps, "statistics_target"> = {
|
|
110
115
|
schema: "public",
|
|
111
116
|
table_name: "test_table",
|
|
@@ -146,12 +151,14 @@ describe.concurrent("index", () => {
|
|
|
146
151
|
columnTargets: [{ columnNumber: 1, statistics: 100 }],
|
|
147
152
|
});
|
|
148
153
|
|
|
154
|
+
await assertValidSql(change.serialize());
|
|
155
|
+
|
|
149
156
|
expect(change.serialize()).toBe(
|
|
150
157
|
"ALTER INDEX public.test_index ALTER COLUMN 1 SET STATISTICS 100",
|
|
151
158
|
);
|
|
152
159
|
});
|
|
153
160
|
|
|
154
|
-
test("set tablespace", () => {
|
|
161
|
+
test("set tablespace", async () => {
|
|
155
162
|
const props: Omit<IndexProps, "tablespace"> = {
|
|
156
163
|
schema: "public",
|
|
157
164
|
table_name: "test_table",
|
|
@@ -192,6 +199,8 @@ describe.concurrent("index", () => {
|
|
|
192
199
|
tablespace: "fast_space",
|
|
193
200
|
});
|
|
194
201
|
|
|
202
|
+
await assertValidSql(change.serialize());
|
|
203
|
+
|
|
195
204
|
expect(change.serialize()).toBe(
|
|
196
205
|
"ALTER INDEX public.test_index SET TABLESPACE fast_space",
|
|
197
206
|
);
|