@supabase/pg-delta 1.0.0-alpha.4 → 1.0.0-alpha.5
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,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 { diffRlsPolicies } from "../rls-policy.diff.ts";
|
|
3
4
|
import { RlsPolicy, type RlsPolicyProps } from "../rls-policy.model.ts";
|
|
4
5
|
import {
|
|
@@ -11,7 +12,7 @@ import { DropRlsPolicy } from "./rls-policy.drop.ts";
|
|
|
11
12
|
|
|
12
13
|
describe.concurrent("rls-policy", () => {
|
|
13
14
|
describe("alter", () => {
|
|
14
|
-
test("change roles", () => {
|
|
15
|
+
test("change roles", async () => {
|
|
15
16
|
const props: Omit<RlsPolicyProps, "roles"> = {
|
|
16
17
|
schema: "public",
|
|
17
18
|
name: "test_policy",
|
|
@@ -33,12 +34,14 @@ describe.concurrent("rls-policy", () => {
|
|
|
33
34
|
roles: ["role1", "role2"],
|
|
34
35
|
});
|
|
35
36
|
|
|
37
|
+
await assertValidSql(change.serialize());
|
|
38
|
+
|
|
36
39
|
expect(change.serialize()).toBe(
|
|
37
|
-
"ALTER POLICY
|
|
40
|
+
"ALTER POLICY test_policy ON public.test_table TO role1, role2",
|
|
38
41
|
);
|
|
39
42
|
});
|
|
40
43
|
|
|
41
|
-
test("change roles to PUBLIC (default)", () => {
|
|
44
|
+
test("change roles to PUBLIC (default)", async () => {
|
|
42
45
|
const props: Omit<RlsPolicyProps, "roles"> = {
|
|
43
46
|
schema: "public",
|
|
44
47
|
name: "test_policy",
|
|
@@ -60,12 +63,14 @@ describe.concurrent("rls-policy", () => {
|
|
|
60
63
|
roles: ["public"],
|
|
61
64
|
});
|
|
62
65
|
|
|
66
|
+
await assertValidSql(change.serialize());
|
|
67
|
+
|
|
63
68
|
expect(change.serialize()).toBe(
|
|
64
|
-
"ALTER POLICY
|
|
69
|
+
"ALTER POLICY test_policy ON public.test_table TO PUBLIC",
|
|
65
70
|
);
|
|
66
71
|
});
|
|
67
72
|
|
|
68
|
-
test("drop + create rls policy when command changes", () => {
|
|
73
|
+
test("drop + create rls policy when command changes", async () => {
|
|
69
74
|
const props: Omit<RlsPolicyProps, "command"> = {
|
|
70
75
|
schema: "public",
|
|
71
76
|
name: "test_policy",
|
|
@@ -94,15 +99,17 @@ describe.concurrent("rls-policy", () => {
|
|
|
94
99
|
expect(changes).toHaveLength(2);
|
|
95
100
|
expect(changes[0]).toBeInstanceOf(DropRlsPolicy);
|
|
96
101
|
expect(changes[1]).toBeInstanceOf(CreateRlsPolicy);
|
|
102
|
+
await assertValidSql(changes[0].serialize());
|
|
97
103
|
expect(changes[0].serialize()).toBe(
|
|
98
104
|
"DROP POLICY test_policy ON public.test_table",
|
|
99
105
|
);
|
|
106
|
+
await assertValidSql(changes[1].serialize());
|
|
100
107
|
expect(changes[1].serialize()).toBe(
|
|
101
108
|
"CREATE POLICY test_policy ON public.test_table FOR UPDATE USING (user_id = current_user_id())",
|
|
102
109
|
);
|
|
103
110
|
});
|
|
104
111
|
|
|
105
|
-
test("drop + create rls policy when permissive changes", () => {
|
|
112
|
+
test("drop + create rls policy when permissive changes", async () => {
|
|
106
113
|
const props: Omit<RlsPolicyProps, "permissive"> = {
|
|
107
114
|
schema: "public",
|
|
108
115
|
name: "test_policy",
|
|
@@ -131,15 +138,17 @@ describe.concurrent("rls-policy", () => {
|
|
|
131
138
|
expect(changes).toHaveLength(2);
|
|
132
139
|
expect(changes[0]).toBeInstanceOf(DropRlsPolicy);
|
|
133
140
|
expect(changes[1]).toBeInstanceOf(CreateRlsPolicy);
|
|
141
|
+
await assertValidSql(changes[0].serialize());
|
|
134
142
|
expect(changes[0].serialize()).toBe(
|
|
135
143
|
"DROP POLICY test_policy ON public.test_table",
|
|
136
144
|
);
|
|
145
|
+
await assertValidSql(changes[1].serialize());
|
|
137
146
|
expect(changes[1].serialize()).toBe(
|
|
138
147
|
"CREATE POLICY test_policy ON public.test_table AS RESTRICTIVE FOR SELECT USING (user_id = current_user_id())",
|
|
139
148
|
);
|
|
140
149
|
});
|
|
141
150
|
|
|
142
|
-
test("alter using expression", () => {
|
|
151
|
+
test("alter using expression", async () => {
|
|
143
152
|
const props: Omit<RlsPolicyProps, "using_expression"> = {
|
|
144
153
|
schema: "public",
|
|
145
154
|
name: "test_policy",
|
|
@@ -161,12 +170,14 @@ describe.concurrent("rls-policy", () => {
|
|
|
161
170
|
usingExpression: "new_expr",
|
|
162
171
|
});
|
|
163
172
|
|
|
173
|
+
await assertValidSql(change.serialize());
|
|
174
|
+
|
|
164
175
|
expect(change.serialize()).toBe(
|
|
165
|
-
"ALTER POLICY
|
|
176
|
+
"ALTER POLICY test_policy ON public.test_table USING (new_expr)",
|
|
166
177
|
);
|
|
167
178
|
});
|
|
168
179
|
|
|
169
|
-
test("clear using expression -> USING (true)", () => {
|
|
180
|
+
test("clear using expression -> USING (true)", async () => {
|
|
170
181
|
const props: Omit<RlsPolicyProps, "using_expression"> = {
|
|
171
182
|
schema: "public",
|
|
172
183
|
name: "test_policy",
|
|
@@ -188,12 +199,14 @@ describe.concurrent("rls-policy", () => {
|
|
|
188
199
|
usingExpression: null,
|
|
189
200
|
});
|
|
190
201
|
|
|
202
|
+
await assertValidSql(change.serialize());
|
|
203
|
+
|
|
191
204
|
expect(change.serialize()).toBe(
|
|
192
|
-
"ALTER POLICY
|
|
205
|
+
"ALTER POLICY test_policy ON public.test_table USING (true)",
|
|
193
206
|
);
|
|
194
207
|
});
|
|
195
208
|
|
|
196
|
-
test("alter with check expression", () => {
|
|
209
|
+
test("alter with check expression", async () => {
|
|
197
210
|
const props: Omit<RlsPolicyProps, "with_check_expression"> = {
|
|
198
211
|
schema: "public",
|
|
199
212
|
name: "test_policy",
|
|
@@ -215,12 +228,14 @@ describe.concurrent("rls-policy", () => {
|
|
|
215
228
|
withCheckExpression: "new_check",
|
|
216
229
|
});
|
|
217
230
|
|
|
231
|
+
await assertValidSql(change.serialize());
|
|
232
|
+
|
|
218
233
|
expect(change.serialize()).toBe(
|
|
219
|
-
"ALTER POLICY
|
|
234
|
+
"ALTER POLICY test_policy ON public.test_table WITH CHECK (new_check)",
|
|
220
235
|
);
|
|
221
236
|
});
|
|
222
237
|
|
|
223
|
-
test("clear with check expression -> WITH CHECK (true)", () => {
|
|
238
|
+
test("clear with check expression -> WITH CHECK (true)", async () => {
|
|
224
239
|
const props: Omit<RlsPolicyProps, "with_check_expression"> = {
|
|
225
240
|
schema: "public",
|
|
226
241
|
name: "test_policy",
|
|
@@ -242,8 +257,10 @@ describe.concurrent("rls-policy", () => {
|
|
|
242
257
|
withCheckExpression: null,
|
|
243
258
|
});
|
|
244
259
|
|
|
260
|
+
await assertValidSql(change.serialize());
|
|
261
|
+
|
|
245
262
|
expect(change.serialize()).toBe(
|
|
246
|
-
"ALTER POLICY
|
|
263
|
+
"ALTER POLICY test_policy ON public.test_table WITH CHECK (true)",
|
|
247
264
|
);
|
|
248
265
|
});
|
|
249
266
|
});
|
|
@@ -47,7 +47,7 @@ export class AlterRlsPolicySetRoles extends AlterRlsPolicyChange {
|
|
|
47
47
|
|
|
48
48
|
return [
|
|
49
49
|
"ALTER POLICY",
|
|
50
|
-
|
|
50
|
+
this.policy.name,
|
|
51
51
|
"ON",
|
|
52
52
|
`${this.policy.schema}.${this.policy.table_name}`,
|
|
53
53
|
"TO",
|
|
@@ -78,7 +78,7 @@ export class AlterRlsPolicySetUsingExpression extends AlterRlsPolicyChange {
|
|
|
78
78
|
const expr = this.usingExpression ?? "true";
|
|
79
79
|
return [
|
|
80
80
|
"ALTER POLICY",
|
|
81
|
-
|
|
81
|
+
this.policy.name,
|
|
82
82
|
"ON",
|
|
83
83
|
`${this.policy.schema}.${this.policy.table_name}`,
|
|
84
84
|
"USING",
|
|
@@ -112,7 +112,7 @@ export class AlterRlsPolicySetWithCheckExpression extends AlterRlsPolicyChange {
|
|
|
112
112
|
const expr = this.withCheckExpression ?? "true";
|
|
113
113
|
return [
|
|
114
114
|
"ALTER POLICY",
|
|
115
|
-
|
|
115
|
+
this.policy.name,
|
|
116
116
|
"ON",
|
|
117
117
|
`${this.policy.schema}.${this.policy.table_name}`,
|
|
118
118
|
"WITH CHECK",
|
|
@@ -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 { RlsPolicy } from "../rls-policy.model.ts";
|
|
3
4
|
import { CreateRlsPolicy } from "./rls-policy.create.ts";
|
|
4
5
|
|
|
5
6
|
describe("rls-policy", () => {
|
|
6
|
-
test("create minimal", () => {
|
|
7
|
+
test("create minimal", async () => {
|
|
7
8
|
const policy = new RlsPolicy({
|
|
8
9
|
schema: "public",
|
|
9
10
|
name: "test_policy_min",
|
|
@@ -21,12 +22,14 @@ describe("rls-policy", () => {
|
|
|
21
22
|
policy,
|
|
22
23
|
});
|
|
23
24
|
|
|
25
|
+
await assertValidSql(change.serialize());
|
|
26
|
+
|
|
24
27
|
expect(change.serialize()).toBe(
|
|
25
28
|
"CREATE POLICY test_policy_min ON public.test_table",
|
|
26
29
|
);
|
|
27
30
|
});
|
|
28
31
|
|
|
29
|
-
test("create", () => {
|
|
32
|
+
test("create", async () => {
|
|
30
33
|
const policy = new RlsPolicy({
|
|
31
34
|
schema: "public",
|
|
32
35
|
name: "test_policy",
|
|
@@ -44,12 +47,14 @@ describe("rls-policy", () => {
|
|
|
44
47
|
policy,
|
|
45
48
|
});
|
|
46
49
|
|
|
50
|
+
await assertValidSql(change.serialize());
|
|
51
|
+
|
|
47
52
|
expect(change.serialize()).toBe(
|
|
48
53
|
"CREATE POLICY test_policy ON public.test_table FOR SELECT USING (user_id = current_user_id())",
|
|
49
54
|
);
|
|
50
55
|
});
|
|
51
56
|
|
|
52
|
-
test("create with all options", () => {
|
|
57
|
+
test("create with all options", async () => {
|
|
53
58
|
const policy = new RlsPolicy({
|
|
54
59
|
schema: "public",
|
|
55
60
|
name: "test_policy_all",
|
|
@@ -67,6 +72,8 @@ describe("rls-policy", () => {
|
|
|
67
72
|
policy,
|
|
68
73
|
});
|
|
69
74
|
|
|
75
|
+
await assertValidSql(change.serialize());
|
|
76
|
+
|
|
70
77
|
expect(change.serialize()).toBe(
|
|
71
78
|
"CREATE POLICY test_policy_all ON public.test_table AS RESTRICTIVE FOR UPDATE TO role1, role2 USING (expr1) WITH CHECK (expr2)",
|
|
72
79
|
);
|
|
@@ -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 { RlsPolicy } from "../rls-policy.model.ts";
|
|
3
4
|
import { DropRlsPolicy } from "./rls-policy.drop.ts";
|
|
4
5
|
|
|
5
6
|
describe("rls-policy", () => {
|
|
6
|
-
test("drop", () => {
|
|
7
|
+
test("drop", async () => {
|
|
7
8
|
const policy = new RlsPolicy({
|
|
8
9
|
schema: "public",
|
|
9
10
|
name: "test_policy",
|
|
@@ -21,6 +22,8 @@ describe("rls-policy", () => {
|
|
|
21
22
|
policy,
|
|
22
23
|
});
|
|
23
24
|
|
|
25
|
+
await assertValidSql(change.serialize());
|
|
26
|
+
|
|
24
27
|
expect(change.serialize()).toBe(
|
|
25
28
|
"DROP POLICY test_policy ON public.test_table",
|
|
26
29
|
);
|
|
@@ -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 { Role, type RoleProps } from "../role.model.ts";
|
|
3
4
|
import { AlterRoleSetOptions } from "./role.alter.ts";
|
|
4
5
|
|
|
5
6
|
describe.concurrent("role", () => {
|
|
6
7
|
describe("alter", () => {
|
|
7
|
-
test("alter SUPERUSER", () => {
|
|
8
|
+
test("alter SUPERUSER", async () => {
|
|
8
9
|
const role = new Role({
|
|
9
10
|
name: "r",
|
|
10
11
|
is_superuser: false,
|
|
@@ -21,10 +22,11 @@ describe.concurrent("role", () => {
|
|
|
21
22
|
default_privileges: [],
|
|
22
23
|
});
|
|
23
24
|
const change = new AlterRoleSetOptions({ role, options: ["SUPERUSER"] });
|
|
25
|
+
await assertValidSql(change.serialize());
|
|
24
26
|
expect(change.serialize()).toBe("ALTER ROLE r WITH SUPERUSER");
|
|
25
27
|
});
|
|
26
28
|
|
|
27
|
-
test("alter NOSUPERUSER", () => {
|
|
29
|
+
test("alter NOSUPERUSER", async () => {
|
|
28
30
|
const role = new Role({
|
|
29
31
|
name: "r",
|
|
30
32
|
is_superuser: true,
|
|
@@ -44,10 +46,11 @@ describe.concurrent("role", () => {
|
|
|
44
46
|
role,
|
|
45
47
|
options: ["NOSUPERUSER"],
|
|
46
48
|
});
|
|
49
|
+
await assertValidSql(change.serialize());
|
|
47
50
|
expect(change.serialize()).toBe("ALTER ROLE r WITH NOSUPERUSER");
|
|
48
51
|
});
|
|
49
52
|
|
|
50
|
-
test("alter NOCREATEDB", () => {
|
|
53
|
+
test("alter NOCREATEDB", async () => {
|
|
51
54
|
const role = new Role({
|
|
52
55
|
name: "r",
|
|
53
56
|
is_superuser: false,
|
|
@@ -64,10 +67,11 @@ describe.concurrent("role", () => {
|
|
|
64
67
|
default_privileges: [],
|
|
65
68
|
});
|
|
66
69
|
const change = new AlterRoleSetOptions({ role, options: ["NOCREATEDB"] });
|
|
70
|
+
await assertValidSql(change.serialize());
|
|
67
71
|
expect(change.serialize()).toBe("ALTER ROLE r WITH NOCREATEDB");
|
|
68
72
|
});
|
|
69
73
|
|
|
70
|
-
test("alter NOCREATEROLE", () => {
|
|
74
|
+
test("alter NOCREATEROLE", async () => {
|
|
71
75
|
const role = new Role({
|
|
72
76
|
name: "r",
|
|
73
77
|
is_superuser: false,
|
|
@@ -87,10 +91,11 @@ describe.concurrent("role", () => {
|
|
|
87
91
|
role,
|
|
88
92
|
options: ["NOCREATEROLE"],
|
|
89
93
|
});
|
|
94
|
+
await assertValidSql(change.serialize());
|
|
90
95
|
expect(change.serialize()).toBe("ALTER ROLE r WITH NOCREATEROLE");
|
|
91
96
|
});
|
|
92
97
|
|
|
93
|
-
test("alter INHERIT", () => {
|
|
98
|
+
test("alter INHERIT", async () => {
|
|
94
99
|
const role = new Role({
|
|
95
100
|
name: "r",
|
|
96
101
|
is_superuser: false,
|
|
@@ -107,10 +112,11 @@ describe.concurrent("role", () => {
|
|
|
107
112
|
default_privileges: [],
|
|
108
113
|
});
|
|
109
114
|
const change = new AlterRoleSetOptions({ role, options: ["INHERIT"] });
|
|
115
|
+
await assertValidSql(change.serialize());
|
|
110
116
|
expect(change.serialize()).toBe("ALTER ROLE r WITH INHERIT");
|
|
111
117
|
});
|
|
112
118
|
|
|
113
|
-
test("alter LOGIN", () => {
|
|
119
|
+
test("alter LOGIN", async () => {
|
|
114
120
|
const role = new Role({
|
|
115
121
|
name: "r",
|
|
116
122
|
is_superuser: false,
|
|
@@ -127,10 +133,11 @@ describe.concurrent("role", () => {
|
|
|
127
133
|
default_privileges: [],
|
|
128
134
|
});
|
|
129
135
|
const change = new AlterRoleSetOptions({ role, options: ["LOGIN"] });
|
|
136
|
+
await assertValidSql(change.serialize());
|
|
130
137
|
expect(change.serialize()).toBe("ALTER ROLE r WITH LOGIN");
|
|
131
138
|
});
|
|
132
139
|
|
|
133
|
-
test("alter NOREPLICATION", () => {
|
|
140
|
+
test("alter NOREPLICATION", async () => {
|
|
134
141
|
const role = new Role({
|
|
135
142
|
name: "r",
|
|
136
143
|
is_superuser: false,
|
|
@@ -150,10 +157,11 @@ describe.concurrent("role", () => {
|
|
|
150
157
|
role,
|
|
151
158
|
options: ["NOREPLICATION"],
|
|
152
159
|
});
|
|
160
|
+
await assertValidSql(change.serialize());
|
|
153
161
|
expect(change.serialize()).toBe("ALTER ROLE r WITH NOREPLICATION");
|
|
154
162
|
});
|
|
155
163
|
|
|
156
|
-
test("alter NOBYPASSRLS", () => {
|
|
164
|
+
test("alter NOBYPASSRLS", async () => {
|
|
157
165
|
const role = new Role({
|
|
158
166
|
name: "r",
|
|
159
167
|
is_superuser: false,
|
|
@@ -173,10 +181,11 @@ describe.concurrent("role", () => {
|
|
|
173
181
|
role,
|
|
174
182
|
options: ["NOBYPASSRLS"],
|
|
175
183
|
});
|
|
184
|
+
await assertValidSql(change.serialize());
|
|
176
185
|
expect(change.serialize()).toBe("ALTER ROLE r WITH NOBYPASSRLS");
|
|
177
186
|
});
|
|
178
187
|
|
|
179
|
-
test("alter CREATEROLE", () => {
|
|
188
|
+
test("alter CREATEROLE", async () => {
|
|
180
189
|
const role = new Role({
|
|
181
190
|
name: "r",
|
|
182
191
|
is_superuser: false,
|
|
@@ -193,10 +202,11 @@ describe.concurrent("role", () => {
|
|
|
193
202
|
default_privileges: [],
|
|
194
203
|
});
|
|
195
204
|
const change = new AlterRoleSetOptions({ role, options: ["CREATEROLE"] });
|
|
205
|
+
await assertValidSql(change.serialize());
|
|
196
206
|
expect(change.serialize()).toBe("ALTER ROLE r WITH CREATEROLE");
|
|
197
207
|
});
|
|
198
208
|
|
|
199
|
-
test("alter NOINHERIT", () => {
|
|
209
|
+
test("alter NOINHERIT", async () => {
|
|
200
210
|
const role = new Role({
|
|
201
211
|
name: "r",
|
|
202
212
|
is_superuser: false,
|
|
@@ -213,10 +223,11 @@ describe.concurrent("role", () => {
|
|
|
213
223
|
default_privileges: [],
|
|
214
224
|
});
|
|
215
225
|
const change = new AlterRoleSetOptions({ role, options: ["NOINHERIT"] });
|
|
226
|
+
await assertValidSql(change.serialize());
|
|
216
227
|
expect(change.serialize()).toBe("ALTER ROLE r WITH NOINHERIT");
|
|
217
228
|
});
|
|
218
229
|
|
|
219
|
-
test("alter NOLOGIN", () => {
|
|
230
|
+
test("alter NOLOGIN", async () => {
|
|
220
231
|
const role = new Role({
|
|
221
232
|
name: "r",
|
|
222
233
|
is_superuser: false,
|
|
@@ -233,10 +244,11 @@ describe.concurrent("role", () => {
|
|
|
233
244
|
default_privileges: [],
|
|
234
245
|
});
|
|
235
246
|
const change = new AlterRoleSetOptions({ role, options: ["NOLOGIN"] });
|
|
247
|
+
await assertValidSql(change.serialize());
|
|
236
248
|
expect(change.serialize()).toBe("ALTER ROLE r WITH NOLOGIN");
|
|
237
249
|
});
|
|
238
250
|
|
|
239
|
-
test("alter REPLICATION", () => {
|
|
251
|
+
test("alter REPLICATION", async () => {
|
|
240
252
|
const role = new Role({
|
|
241
253
|
name: "r",
|
|
242
254
|
is_superuser: false,
|
|
@@ -256,10 +268,11 @@ describe.concurrent("role", () => {
|
|
|
256
268
|
role,
|
|
257
269
|
options: ["REPLICATION"],
|
|
258
270
|
});
|
|
271
|
+
await assertValidSql(change.serialize());
|
|
259
272
|
expect(change.serialize()).toBe("ALTER ROLE r WITH REPLICATION");
|
|
260
273
|
});
|
|
261
274
|
|
|
262
|
-
test("alter BYPASSRLS", () => {
|
|
275
|
+
test("alter BYPASSRLS", async () => {
|
|
263
276
|
const role = new Role({
|
|
264
277
|
name: "r",
|
|
265
278
|
is_superuser: false,
|
|
@@ -276,10 +289,11 @@ describe.concurrent("role", () => {
|
|
|
276
289
|
default_privileges: [],
|
|
277
290
|
});
|
|
278
291
|
const change = new AlterRoleSetOptions({ role, options: ["BYPASSRLS"] });
|
|
292
|
+
await assertValidSql(change.serialize());
|
|
279
293
|
expect(change.serialize()).toBe("ALTER ROLE r WITH BYPASSRLS");
|
|
280
294
|
});
|
|
281
295
|
|
|
282
|
-
test("alter multiple options ordering", () => {
|
|
296
|
+
test("alter multiple options ordering", async () => {
|
|
283
297
|
const role = new Role({
|
|
284
298
|
name: "r",
|
|
285
299
|
is_superuser: false,
|
|
@@ -308,11 +322,12 @@ describe.concurrent("role", () => {
|
|
|
308
322
|
"CONNECTION LIMIT 10",
|
|
309
323
|
],
|
|
310
324
|
});
|
|
325
|
+
await assertValidSql(change.serialize());
|
|
311
326
|
expect(change.serialize()).toBe(
|
|
312
327
|
"ALTER ROLE r WITH SUPERUSER CREATEDB CREATEROLE NOINHERIT LOGIN REPLICATION BYPASSRLS CONNECTION LIMIT 10",
|
|
313
328
|
);
|
|
314
329
|
});
|
|
315
|
-
test("alter flags and connection limit", () => {
|
|
330
|
+
test("alter flags and connection limit", async () => {
|
|
316
331
|
const props: Omit<
|
|
317
332
|
RoleProps,
|
|
318
333
|
"can_create_databases" | "connection_limit"
|
|
@@ -338,6 +353,7 @@ describe.concurrent("role", () => {
|
|
|
338
353
|
role,
|
|
339
354
|
options: ["CREATEDB", "CONNECTION LIMIT 3"],
|
|
340
355
|
});
|
|
356
|
+
await assertValidSql(change.serialize());
|
|
341
357
|
expect(change.serialize()).toBe(
|
|
342
358
|
"ALTER ROLE r WITH CREATEDB CONNECTION LIMIT 3",
|
|
343
359
|
);
|
|
@@ -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 { Role } from "../role.model.ts";
|
|
3
4
|
import { CreateRole } from "./role.create.ts";
|
|
4
5
|
|
|
5
6
|
describe("role", () => {
|
|
6
|
-
test("create minimal (omit defaults)", () => {
|
|
7
|
+
test("create minimal (omit defaults)", async () => {
|
|
7
8
|
const role = new Role({
|
|
8
9
|
name: "test_role",
|
|
9
10
|
is_superuser: false,
|
|
@@ -24,10 +25,12 @@ describe("role", () => {
|
|
|
24
25
|
role,
|
|
25
26
|
});
|
|
26
27
|
|
|
28
|
+
await assertValidSql(change.serialize());
|
|
29
|
+
|
|
27
30
|
expect(change.serialize()).toBe("CREATE ROLE test_role WITH LOGIN");
|
|
28
31
|
});
|
|
29
32
|
|
|
30
|
-
test("create with all options (non-defaults only)", () => {
|
|
33
|
+
test("create with all options (non-defaults only)", async () => {
|
|
31
34
|
const role = new Role({
|
|
32
35
|
name: "r_all",
|
|
33
36
|
is_superuser: true,
|
|
@@ -45,6 +48,7 @@ describe("role", () => {
|
|
|
45
48
|
});
|
|
46
49
|
|
|
47
50
|
const change = new CreateRole({ role });
|
|
51
|
+
await assertValidSql(change.serialize());
|
|
48
52
|
expect(change.serialize()).toBe(
|
|
49
53
|
"CREATE ROLE r_all WITH SUPERUSER CREATEDB CREATEROLE NOINHERIT LOGIN REPLICATION BYPASSRLS CONNECTION LIMIT 5",
|
|
50
54
|
);
|
|
@@ -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 { Role } from "../role.model.ts";
|
|
3
4
|
import { DropRole } from "./role.drop.ts";
|
|
4
5
|
|
|
5
6
|
describe("role", () => {
|
|
6
|
-
test("drop", () => {
|
|
7
|
+
test("drop", async () => {
|
|
7
8
|
const role = new Role({
|
|
8
9
|
name: "test_role",
|
|
9
10
|
is_superuser: false,
|
|
@@ -24,6 +25,8 @@ describe("role", () => {
|
|
|
24
25
|
role,
|
|
25
26
|
});
|
|
26
27
|
|
|
28
|
+
await assertValidSql(change.serialize());
|
|
29
|
+
|
|
27
30
|
expect(change.serialize()).toBe("DROP ROLE test_role");
|
|
28
31
|
});
|
|
29
32
|
});
|