@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
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import type { Change } from "../change.types.ts";
|
|
3
|
+
import { getObjectName, getObjectSchema, getParentInfo } from "./serialize.ts";
|
|
4
|
+
|
|
5
|
+
describe("getObjectName", () => {
|
|
6
|
+
const cases: [string, unknown, string][] = [
|
|
7
|
+
[
|
|
8
|
+
"aggregate",
|
|
9
|
+
{ objectType: "aggregate", aggregate: { name: "my_agg" } },
|
|
10
|
+
"my_agg",
|
|
11
|
+
],
|
|
12
|
+
[
|
|
13
|
+
"collation",
|
|
14
|
+
{ objectType: "collation", collation: { name: "my_coll" } },
|
|
15
|
+
"my_coll",
|
|
16
|
+
],
|
|
17
|
+
[
|
|
18
|
+
"composite_type",
|
|
19
|
+
{ objectType: "composite_type", compositeType: { name: "my_comp" } },
|
|
20
|
+
"my_comp",
|
|
21
|
+
],
|
|
22
|
+
[
|
|
23
|
+
"domain",
|
|
24
|
+
{ objectType: "domain", domain: { name: "my_domain" } },
|
|
25
|
+
"my_domain",
|
|
26
|
+
],
|
|
27
|
+
["enum", { objectType: "enum", enum: { name: "my_enum" } }, "my_enum"],
|
|
28
|
+
[
|
|
29
|
+
"event_trigger",
|
|
30
|
+
{ objectType: "event_trigger", eventTrigger: { name: "my_evt" } },
|
|
31
|
+
"my_evt",
|
|
32
|
+
],
|
|
33
|
+
[
|
|
34
|
+
"extension",
|
|
35
|
+
{ objectType: "extension", extension: { name: "my_ext" } },
|
|
36
|
+
"my_ext",
|
|
37
|
+
],
|
|
38
|
+
[
|
|
39
|
+
"foreign_data_wrapper",
|
|
40
|
+
{
|
|
41
|
+
objectType: "foreign_data_wrapper",
|
|
42
|
+
foreignDataWrapper: { name: "my_fdw" },
|
|
43
|
+
},
|
|
44
|
+
"my_fdw",
|
|
45
|
+
],
|
|
46
|
+
[
|
|
47
|
+
"foreign_table",
|
|
48
|
+
{ objectType: "foreign_table", foreignTable: { name: "my_ft" } },
|
|
49
|
+
"my_ft",
|
|
50
|
+
],
|
|
51
|
+
["index", { objectType: "index", index: { name: "my_idx" } }, "my_idx"],
|
|
52
|
+
[
|
|
53
|
+
"language",
|
|
54
|
+
{ objectType: "language", language: { name: "plpgsql" } },
|
|
55
|
+
"plpgsql",
|
|
56
|
+
],
|
|
57
|
+
[
|
|
58
|
+
"materialized_view",
|
|
59
|
+
{ objectType: "materialized_view", materializedView: { name: "my_mv" } },
|
|
60
|
+
"my_mv",
|
|
61
|
+
],
|
|
62
|
+
[
|
|
63
|
+
"procedure",
|
|
64
|
+
{ objectType: "procedure", procedure: { name: "my_proc" } },
|
|
65
|
+
"my_proc",
|
|
66
|
+
],
|
|
67
|
+
[
|
|
68
|
+
"publication",
|
|
69
|
+
{ objectType: "publication", publication: { name: "my_pub" } },
|
|
70
|
+
"my_pub",
|
|
71
|
+
],
|
|
72
|
+
["range", { objectType: "range", range: { name: "my_range" } }, "my_range"],
|
|
73
|
+
[
|
|
74
|
+
"rls_policy",
|
|
75
|
+
{ objectType: "rls_policy", policy: { name: "my_policy" } },
|
|
76
|
+
"my_policy",
|
|
77
|
+
],
|
|
78
|
+
["role", { objectType: "role", role: { name: "my_role" } }, "my_role"],
|
|
79
|
+
["rule", { objectType: "rule", rule: { name: "my_rule" } }, "my_rule"],
|
|
80
|
+
[
|
|
81
|
+
"schema",
|
|
82
|
+
{ objectType: "schema", schema: { name: "my_schema" } },
|
|
83
|
+
"my_schema",
|
|
84
|
+
],
|
|
85
|
+
[
|
|
86
|
+
"sequence",
|
|
87
|
+
{ objectType: "sequence", sequence: { name: "my_seq" } },
|
|
88
|
+
"my_seq",
|
|
89
|
+
],
|
|
90
|
+
[
|
|
91
|
+
"server",
|
|
92
|
+
{ objectType: "server", server: { name: "my_server" } },
|
|
93
|
+
"my_server",
|
|
94
|
+
],
|
|
95
|
+
[
|
|
96
|
+
"subscription",
|
|
97
|
+
{ objectType: "subscription", subscription: { name: "my_sub" } },
|
|
98
|
+
"my_sub",
|
|
99
|
+
],
|
|
100
|
+
["table", { objectType: "table", table: { name: "my_table" } }, "my_table"],
|
|
101
|
+
[
|
|
102
|
+
"trigger",
|
|
103
|
+
{ objectType: "trigger", trigger: { name: "my_trigger" } },
|
|
104
|
+
"my_trigger",
|
|
105
|
+
],
|
|
106
|
+
[
|
|
107
|
+
"user_mapping",
|
|
108
|
+
{
|
|
109
|
+
objectType: "user_mapping",
|
|
110
|
+
userMapping: { user: "alice", server: "remote" },
|
|
111
|
+
},
|
|
112
|
+
"alice@remote",
|
|
113
|
+
],
|
|
114
|
+
["view", { objectType: "view", view: { name: "my_view" } }, "my_view"],
|
|
115
|
+
];
|
|
116
|
+
|
|
117
|
+
for (const [label, stub, expected] of cases) {
|
|
118
|
+
test(label, () => {
|
|
119
|
+
expect(getObjectName(stub as unknown as Change)).toBe(expected);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
describe("getObjectSchema", () => {
|
|
125
|
+
const withSchema: [string, unknown, string][] = [
|
|
126
|
+
[
|
|
127
|
+
"aggregate",
|
|
128
|
+
{ objectType: "aggregate", aggregate: { schema: "public" } },
|
|
129
|
+
"public",
|
|
130
|
+
],
|
|
131
|
+
[
|
|
132
|
+
"collation",
|
|
133
|
+
{ objectType: "collation", collation: { schema: "pg_catalog" } },
|
|
134
|
+
"pg_catalog",
|
|
135
|
+
],
|
|
136
|
+
[
|
|
137
|
+
"composite_type",
|
|
138
|
+
{ objectType: "composite_type", compositeType: { schema: "public" } },
|
|
139
|
+
"public",
|
|
140
|
+
],
|
|
141
|
+
[
|
|
142
|
+
"domain",
|
|
143
|
+
{ objectType: "domain", domain: { schema: "public" } },
|
|
144
|
+
"public",
|
|
145
|
+
],
|
|
146
|
+
["enum", { objectType: "enum", enum: { schema: "public" } }, "public"],
|
|
147
|
+
[
|
|
148
|
+
"extension",
|
|
149
|
+
{ objectType: "extension", extension: { schema: "public" } },
|
|
150
|
+
"public",
|
|
151
|
+
],
|
|
152
|
+
[
|
|
153
|
+
"foreign_table",
|
|
154
|
+
{ objectType: "foreign_table", foreignTable: { schema: "public" } },
|
|
155
|
+
"public",
|
|
156
|
+
],
|
|
157
|
+
["index", { objectType: "index", index: { schema: "public" } }, "public"],
|
|
158
|
+
[
|
|
159
|
+
"materialized_view",
|
|
160
|
+
{
|
|
161
|
+
objectType: "materialized_view",
|
|
162
|
+
materializedView: { schema: "public" },
|
|
163
|
+
},
|
|
164
|
+
"public",
|
|
165
|
+
],
|
|
166
|
+
[
|
|
167
|
+
"procedure",
|
|
168
|
+
{ objectType: "procedure", procedure: { schema: "public" } },
|
|
169
|
+
"public",
|
|
170
|
+
],
|
|
171
|
+
["range", { objectType: "range", range: { schema: "public" } }, "public"],
|
|
172
|
+
[
|
|
173
|
+
"rls_policy",
|
|
174
|
+
{ objectType: "rls_policy", policy: { schema: "public" } },
|
|
175
|
+
"public",
|
|
176
|
+
],
|
|
177
|
+
["rule", { objectType: "rule", rule: { schema: "public" } }, "public"],
|
|
178
|
+
[
|
|
179
|
+
"schema",
|
|
180
|
+
{ objectType: "schema", schema: { name: "my_schema" } },
|
|
181
|
+
"my_schema",
|
|
182
|
+
],
|
|
183
|
+
[
|
|
184
|
+
"sequence",
|
|
185
|
+
{ objectType: "sequence", sequence: { schema: "public" } },
|
|
186
|
+
"public",
|
|
187
|
+
],
|
|
188
|
+
["table", { objectType: "table", table: { schema: "public" } }, "public"],
|
|
189
|
+
[
|
|
190
|
+
"trigger",
|
|
191
|
+
{ objectType: "trigger", trigger: { schema: "public" } },
|
|
192
|
+
"public",
|
|
193
|
+
],
|
|
194
|
+
["view", { objectType: "view", view: { schema: "public" } }, "public"],
|
|
195
|
+
];
|
|
196
|
+
|
|
197
|
+
for (const [label, stub, expected] of withSchema) {
|
|
198
|
+
test(`${label} returns schema`, () => {
|
|
199
|
+
expect(getObjectSchema(stub as unknown as Change)).toBe(expected);
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const withoutSchema: [string, unknown][] = [
|
|
204
|
+
["event_trigger", { objectType: "event_trigger" }],
|
|
205
|
+
["foreign_data_wrapper", { objectType: "foreign_data_wrapper" }],
|
|
206
|
+
["language", { objectType: "language" }],
|
|
207
|
+
["publication", { objectType: "publication" }],
|
|
208
|
+
["role", { objectType: "role" }],
|
|
209
|
+
["server", { objectType: "server" }],
|
|
210
|
+
["subscription", { objectType: "subscription" }],
|
|
211
|
+
["user_mapping", { objectType: "user_mapping" }],
|
|
212
|
+
];
|
|
213
|
+
|
|
214
|
+
for (const [label, stub] of withoutSchema) {
|
|
215
|
+
test(`${label} returns null`, () => {
|
|
216
|
+
expect(getObjectSchema(stub as unknown as Change)).toBeNull();
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
describe("getParentInfo", () => {
|
|
222
|
+
test("index on table", () => {
|
|
223
|
+
const change = {
|
|
224
|
+
objectType: "index",
|
|
225
|
+
index: { table_name: "users", table_relkind: "r" },
|
|
226
|
+
} as unknown as Change;
|
|
227
|
+
expect(getParentInfo(change)).toEqual({ type: "table", name: "users" });
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
test("index on materialized view", () => {
|
|
231
|
+
const change = {
|
|
232
|
+
objectType: "index",
|
|
233
|
+
index: { table_name: "user_stats", table_relkind: "m" },
|
|
234
|
+
} as unknown as Change;
|
|
235
|
+
expect(getParentInfo(change)).toEqual({
|
|
236
|
+
type: "materialized_view",
|
|
237
|
+
name: "user_stats",
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
test("trigger on table", () => {
|
|
242
|
+
const change = {
|
|
243
|
+
objectType: "trigger",
|
|
244
|
+
trigger: { table_name: "orders", table_relkind: "r" },
|
|
245
|
+
} as unknown as Change;
|
|
246
|
+
expect(getParentInfo(change)).toEqual({ type: "table", name: "orders" });
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
test("trigger on view", () => {
|
|
250
|
+
const change = {
|
|
251
|
+
objectType: "trigger",
|
|
252
|
+
trigger: { table_name: "order_view", table_relkind: "v" },
|
|
253
|
+
} as unknown as Change;
|
|
254
|
+
expect(getParentInfo(change)).toEqual({ type: "view", name: "order_view" });
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
test("trigger on materialized view", () => {
|
|
258
|
+
const change = {
|
|
259
|
+
objectType: "trigger",
|
|
260
|
+
trigger: { table_name: "order_mv", table_relkind: "m" },
|
|
261
|
+
} as unknown as Change;
|
|
262
|
+
expect(getParentInfo(change)).toEqual({
|
|
263
|
+
type: "materialized_view",
|
|
264
|
+
name: "order_mv",
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
test("rule on table", () => {
|
|
269
|
+
const change = {
|
|
270
|
+
objectType: "rule",
|
|
271
|
+
rule: { table_name: "items", relation_kind: "r" },
|
|
272
|
+
} as unknown as Change;
|
|
273
|
+
expect(getParentInfo(change)).toEqual({ type: "table", name: "items" });
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
test("rule on view", () => {
|
|
277
|
+
const change = {
|
|
278
|
+
objectType: "rule",
|
|
279
|
+
rule: { table_name: "item_view", relation_kind: "v" },
|
|
280
|
+
} as unknown as Change;
|
|
281
|
+
expect(getParentInfo(change)).toEqual({ type: "view", name: "item_view" });
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
test("rule on materialized view", () => {
|
|
285
|
+
const change = {
|
|
286
|
+
objectType: "rule",
|
|
287
|
+
rule: { table_name: "item_mv", relation_kind: "m" },
|
|
288
|
+
} as unknown as Change;
|
|
289
|
+
expect(getParentInfo(change)).toEqual({
|
|
290
|
+
type: "materialized_view",
|
|
291
|
+
name: "item_mv",
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
test("rls_policy", () => {
|
|
296
|
+
const change = {
|
|
297
|
+
objectType: "rls_policy",
|
|
298
|
+
policy: { table_name: "secrets" },
|
|
299
|
+
} as unknown as Change;
|
|
300
|
+
expect(getParentInfo(change)).toEqual({ type: "table", name: "secrets" });
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
const nullCases = [
|
|
304
|
+
"table",
|
|
305
|
+
"view",
|
|
306
|
+
"schema",
|
|
307
|
+
"sequence",
|
|
308
|
+
"role",
|
|
309
|
+
"extension",
|
|
310
|
+
] as const;
|
|
311
|
+
for (const objectType of nullCases) {
|
|
312
|
+
test(`${objectType} returns null`, () => {
|
|
313
|
+
const change = { objectType } as unknown as Change;
|
|
314
|
+
expect(getParentInfo(change)).toBeNull();
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
});
|
|
@@ -158,10 +158,24 @@ export function getParentInfo(change: Change): ParentInfo | null {
|
|
|
158
158
|
change.index.table_relkind === "m" ? "materialized_view" : "table";
|
|
159
159
|
return { type: parentType, name: change.index.table_name };
|
|
160
160
|
}
|
|
161
|
-
case "trigger":
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
161
|
+
case "trigger": {
|
|
162
|
+
const parentType =
|
|
163
|
+
change.trigger.table_relkind === "v"
|
|
164
|
+
? "view"
|
|
165
|
+
: change.trigger.table_relkind === "m"
|
|
166
|
+
? "materialized_view"
|
|
167
|
+
: "table";
|
|
168
|
+
return { type: parentType, name: change.trigger.table_name };
|
|
169
|
+
}
|
|
170
|
+
case "rule": {
|
|
171
|
+
const parentType =
|
|
172
|
+
change.rule.relation_kind === "v"
|
|
173
|
+
? "view"
|
|
174
|
+
: change.rule.relation_kind === "m"
|
|
175
|
+
? "materialized_view"
|
|
176
|
+
: "table";
|
|
177
|
+
return { type: parentType, name: change.rule.table_name };
|
|
178
|
+
}
|
|
165
179
|
case "rls_policy":
|
|
166
180
|
return { type: "table", name: change.policy.table_name };
|
|
167
181
|
case "aggregate":
|
|
@@ -213,7 +213,6 @@ import {
|
|
|
213
213
|
AlterPublicationAddTables,
|
|
214
214
|
AlterPublicationDropSchemas,
|
|
215
215
|
AlterPublicationDropTables,
|
|
216
|
-
AlterPublicationSetForAllTables,
|
|
217
216
|
AlterPublicationSetList,
|
|
218
217
|
AlterPublicationSetOptions,
|
|
219
218
|
AlterPublicationSetOwner,
|
|
@@ -1080,6 +1079,7 @@ const trigger = new Trigger({
|
|
|
1080
1079
|
schema: "public",
|
|
1081
1080
|
name: "trg_audit",
|
|
1082
1081
|
table_name: "table_with_very_long_name_for_formatting_and_wrapping_test",
|
|
1082
|
+
table_relkind: "r",
|
|
1083
1083
|
function_schema: "public",
|
|
1084
1084
|
function_name: "audit_trigger_fn",
|
|
1085
1085
|
trigger_type: 7,
|
|
@@ -1252,6 +1252,7 @@ const role = new Role({
|
|
|
1252
1252
|
objtype: "r",
|
|
1253
1253
|
grantee: "app_reader",
|
|
1254
1254
|
privileges: [{ privilege: "SELECT", grantable: false }],
|
|
1255
|
+
is_implicit: false,
|
|
1255
1256
|
},
|
|
1256
1257
|
],
|
|
1257
1258
|
});
|
|
@@ -1908,10 +1909,6 @@ const changeCases: ChangeCase[] = [
|
|
|
1908
1909
|
setPublishViaPartitionRoot: true,
|
|
1909
1910
|
}),
|
|
1910
1911
|
},
|
|
1911
|
-
{
|
|
1912
|
-
label: "publication.alter.set_all_tables",
|
|
1913
|
-
change: new AlterPublicationSetForAllTables({ publication }),
|
|
1914
|
-
},
|
|
1915
1912
|
{
|
|
1916
1913
|
label: "publication.alter.set_list",
|
|
1917
1914
|
change: new AlterPublicationSetList({ publication }),
|
|
@@ -52,6 +52,58 @@ describe("lowercase coverage formatting", () => {
|
|
|
52
52
|
);
|
|
53
53
|
});
|
|
54
54
|
|
|
55
|
+
test("lowercases all ALTER DEFAULT PRIVILEGES object-type keywords", () => {
|
|
56
|
+
const statements = [
|
|
57
|
+
"ALTER DEFAULT PRIVILEGES FOR ROLE app_user IN SCHEMA public GRANT ALL ON TABLES TO app_reader;",
|
|
58
|
+
"ALTER DEFAULT PRIVILEGES FOR ROLE app_user GRANT ALL ON SEQUENCES TO app_reader;",
|
|
59
|
+
"ALTER DEFAULT PRIVILEGES FOR ROLE app_user GRANT ALL ON ROUTINES TO PUBLIC;",
|
|
60
|
+
"ALTER DEFAULT PRIVILEGES FOR ROLE app_user GRANT ALL ON TYPES TO PUBLIC;",
|
|
61
|
+
"ALTER DEFAULT PRIVILEGES FOR ROLE app_user IN SCHEMA api GRANT ALL ON SCHEMAS TO app_admin;",
|
|
62
|
+
"ALTER DEFAULT PRIVILEGES FOR ROLE app_user REVOKE ALL ON SEQUENCES FROM app_reader;",
|
|
63
|
+
"ALTER DEFAULT PRIVILEGES FOR ROLE app_user REVOKE ALL ON TYPES FROM PUBLIC;",
|
|
64
|
+
];
|
|
65
|
+
|
|
66
|
+
const formatted = formatSqlStatements(statements, {
|
|
67
|
+
keywordCase: "lower",
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
const normalized = formatted.map((v) => v.replace(/\s+/g, " ").trim());
|
|
71
|
+
expect(normalized).toMatchInlineSnapshot(`
|
|
72
|
+
[
|
|
73
|
+
"alter default privileges for role app_user in schema public grant all on tables to app_reader",
|
|
74
|
+
"alter default privileges for role app_user grant all on sequences to app_reader",
|
|
75
|
+
"alter default privileges for role app_user grant all on routines to public",
|
|
76
|
+
"alter default privileges for role app_user grant all on types to public",
|
|
77
|
+
"alter default privileges for role app_user in schema api grant all on schemas to app_admin",
|
|
78
|
+
"alter default privileges for role app_user revoke all on sequences from app_reader",
|
|
79
|
+
"alter default privileges for role app_user revoke all on types from public",
|
|
80
|
+
]
|
|
81
|
+
`);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
test("lowercases PUBLIC in standalone GRANT/REVOKE statements", () => {
|
|
85
|
+
const statements = [
|
|
86
|
+
"GRANT ALL ON SCHEMA public TO PUBLIC;",
|
|
87
|
+
"GRANT EXECUTE ON FUNCTION public.my_fn() TO PUBLIC;",
|
|
88
|
+
"REVOKE ALL ON SCHEMA public FROM PUBLIC;",
|
|
89
|
+
"GRANT USAGE ON TYPE public.my_type TO PUBLIC;",
|
|
90
|
+
];
|
|
91
|
+
|
|
92
|
+
const formatted = formatSqlStatements(statements, {
|
|
93
|
+
keywordCase: "lower",
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
const normalized = formatted.map((v) => v.replace(/\s+/g, " ").trim());
|
|
97
|
+
expect(normalized).toMatchInlineSnapshot(`
|
|
98
|
+
[
|
|
99
|
+
"grant all on schema public to public",
|
|
100
|
+
"grant execute on function public.my_fn() to public",
|
|
101
|
+
"revoke all on schema public from public",
|
|
102
|
+
"grant usage on type public.my_type to public",
|
|
103
|
+
]
|
|
104
|
+
`);
|
|
105
|
+
});
|
|
106
|
+
|
|
55
107
|
test("preserves full CHECK clause text while casing surrounding structure", () => {
|
|
56
108
|
const [formatted] = formatSqlStatements(
|
|
57
109
|
[
|
|
@@ -314,9 +314,6 @@ describe("sql formatting snapshots", () => {
|
|
|
314
314
|
-- publication.alter.set_options
|
|
315
315
|
ALTER PUBLICATION pub_custom SET (publish = 'insert, update, delete, truncate', publish_via_partition_root = false);
|
|
316
316
|
|
|
317
|
-
-- publication.alter.set_all_tables
|
|
318
|
-
ALTER PUBLICATION pub_custom SET FOR ALL TABLES;
|
|
319
|
-
|
|
320
317
|
-- publication.alter.set_list
|
|
321
318
|
ALTER PUBLICATION pub_custom SET TABLE public.articles_with_a_very_long_name_very_very_long_name_that_will_go_above_the_wrapping_limit (id, title) WHERE (published = true), TABLE public.comments_a_little_smaller_name_than_the_previous_one, TABLES IN SCHEMA analytics;
|
|
322
319
|
|
|
@@ -403,25 +400,25 @@ describe("sql formatting snapshots", () => {
|
|
|
403
400
|
DROP FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(IN "p_schema_name_for_analytics" text, IN "p_table_name_for_metrics" text, IN "p_limit_count_default" integer);
|
|
404
401
|
|
|
405
402
|
-- function.alter.change_owner
|
|
406
|
-
ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name OWNER TO new_admin;
|
|
403
|
+
ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) OWNER TO new_admin;
|
|
407
404
|
|
|
408
405
|
-- function.alter.set_security
|
|
409
|
-
ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name SECURITY INVOKER;
|
|
406
|
+
ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) SECURITY INVOKER;
|
|
410
407
|
|
|
411
408
|
-- function.alter.set_config
|
|
412
|
-
ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name SET work_mem TO '256MB';
|
|
409
|
+
ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) SET work_mem TO '256MB';
|
|
413
410
|
|
|
414
411
|
-- function.alter.set_volatility
|
|
415
|
-
ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name IMMUTABLE;
|
|
412
|
+
ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) IMMUTABLE;
|
|
416
413
|
|
|
417
414
|
-- function.alter.set_strictness
|
|
418
|
-
ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name CALLED ON NULL INPUT;
|
|
415
|
+
ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) CALLED ON NULL INPUT;
|
|
419
416
|
|
|
420
417
|
-- function.alter.set_leakproof
|
|
421
|
-
ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name LEAKPROOF;
|
|
418
|
+
ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) LEAKPROOF;
|
|
422
419
|
|
|
423
420
|
-- function.alter.set_parallel
|
|
424
|
-
ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name PARALLEL RESTRICTED;
|
|
421
|
+
ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) PARALLEL RESTRICTED;
|
|
425
422
|
|
|
426
423
|
-- function.comment
|
|
427
424
|
COMMENT ON FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text,text,integer) IS 'Calculate metrics for a given table';
|
|
@@ -475,13 +472,13 @@ describe("sql formatting snapshots", () => {
|
|
|
475
472
|
DROP POLICY allow_select_own ON public.table_with_very_long_name_for_formatting_and_wrapping_test;
|
|
476
473
|
|
|
477
474
|
-- policy.alter.set_roles
|
|
478
|
-
ALTER POLICY
|
|
475
|
+
ALTER POLICY allow_select_own ON public.table_with_very_long_name_for_formatting_and_wrapping_test TO authenticated, anon;
|
|
479
476
|
|
|
480
477
|
-- policy.alter.set_using
|
|
481
|
-
ALTER POLICY
|
|
478
|
+
ALTER POLICY allow_select_own ON public.table_with_very_long_name_for_formatting_and_wrapping_test USING (auth.uid() = user_id AND status = 'active');
|
|
482
479
|
|
|
483
480
|
-- policy.alter.set_with_check
|
|
484
|
-
ALTER POLICY
|
|
481
|
+
ALTER POLICY allow_select_own ON public.table_with_very_long_name_for_formatting_and_wrapping_test WITH CHECK (auth.uid() = user_id);
|
|
485
482
|
|
|
486
483
|
-- policy.comment
|
|
487
484
|
COMMENT ON POLICY allow_select_own ON public.table_with_very_long_name_for_formatting_and_wrapping_test IS 'rls policy comment';
|
|
@@ -563,7 +560,7 @@ describe("sql formatting snapshots", () => {
|
|
|
563
560
|
REVOKE GRANT OPTION FOR SELECT ON analytics.daily_stats FROM app_reader;
|
|
564
561
|
|
|
565
562
|
-- aggregate.create
|
|
566
|
-
CREATE AGGREGATE public.array_cat_agg(anycompatiblearray) (SFUNC = array_cat, STYPE = anycompatiblearray, COMBINEFUNC = array_cat, INITCOND = '{}', PARALLEL SAFE, STRICT);
|
|
563
|
+
CREATE AGGREGATE public.array_cat_agg(anycompatiblearray) (SFUNC = array_cat, STYPE = anycompatiblearray, COMBINEFUNC = array_cat, INITCOND = '{}', PARALLEL = SAFE, STRICT);
|
|
567
564
|
|
|
568
565
|
-- aggregate.drop
|
|
569
566
|
DROP AGGREGATE public.array_cat_agg(anycompatiblearray);
|
|
@@ -758,13 +755,13 @@ describe("sql formatting snapshots", () => {
|
|
|
758
755
|
COMMENT ON FOREIGN TABLE public.remote_users IS NULL;
|
|
759
756
|
|
|
760
757
|
-- foreign_table.grant
|
|
761
|
-
GRANT SELECT ON
|
|
758
|
+
GRANT SELECT ON TABLE public.remote_users TO app_reader;
|
|
762
759
|
|
|
763
760
|
-- foreign_table.revoke
|
|
764
|
-
REVOKE SELECT ON
|
|
761
|
+
REVOKE SELECT ON TABLE public.remote_users FROM app_reader;
|
|
765
762
|
|
|
766
763
|
-- foreign_table.revoke_grant_option
|
|
767
|
-
REVOKE GRANT OPTION FOR SELECT ON
|
|
764
|
+
REVOKE GRANT OPTION FOR SELECT ON TABLE public.remote_users FROM app_reader;
|
|
768
765
|
|
|
769
766
|
-- server.create
|
|
770
767
|
CREATE SERVER remote_server TYPE 'postgresql' VERSION '16.0' FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'remote.host', port '5432', dbname 'remote_db');
|
|
@@ -403,9 +403,6 @@ describe("sql formatting snapshots", () => {
|
|
|
403
403
|
alter publication pub_custom
|
|
404
404
|
set (publish = 'insert, update, delete, truncate', publish_via_partition_root = false);
|
|
405
405
|
|
|
406
|
-
-- publication.alter.set_all_tables
|
|
407
|
-
alter publication pub_custom set for all tables;
|
|
408
|
-
|
|
409
406
|
-- publication.alter.set_list
|
|
410
407
|
alter publication pub_custom
|
|
411
408
|
set table
|
|
@@ -520,29 +517,39 @@ describe("sql formatting snapshots", () => {
|
|
|
520
517
|
in "p_table_name_for_metrics" text, in "p_limit_count_default" integer);
|
|
521
518
|
|
|
522
519
|
-- function.alter.change_owner
|
|
523
|
-
alter function
|
|
524
|
-
|
|
520
|
+
alter function
|
|
521
|
+
public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) owner
|
|
522
|
+
to new_admin;
|
|
525
523
|
|
|
526
524
|
-- function.alter.set_security
|
|
527
|
-
alter function
|
|
525
|
+
alter function
|
|
526
|
+
public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer)
|
|
527
|
+
security invoker;
|
|
528
528
|
|
|
529
529
|
-- function.alter.set_config
|
|
530
|
-
alter function
|
|
530
|
+
alter function
|
|
531
|
+
public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer)
|
|
531
532
|
set work_mem to '256MB';
|
|
532
533
|
|
|
533
534
|
-- function.alter.set_volatility
|
|
534
|
-
alter function
|
|
535
|
+
alter function
|
|
536
|
+
public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer)
|
|
537
|
+
immutable;
|
|
535
538
|
|
|
536
539
|
-- function.alter.set_strictness
|
|
537
|
-
alter function
|
|
540
|
+
alter function
|
|
541
|
+
public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) called
|
|
538
542
|
on null input;
|
|
539
543
|
|
|
540
544
|
-- function.alter.set_leakproof
|
|
541
|
-
alter function
|
|
545
|
+
alter function
|
|
546
|
+
public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer)
|
|
547
|
+
leakproof;
|
|
542
548
|
|
|
543
549
|
-- function.alter.set_parallel
|
|
544
|
-
alter function
|
|
545
|
-
|
|
550
|
+
alter function
|
|
551
|
+
public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer)
|
|
552
|
+
parallel restricted;
|
|
546
553
|
|
|
547
554
|
-- function.comment
|
|
548
555
|
comment on function
|
|
@@ -622,18 +629,16 @@ describe("sql formatting snapshots", () => {
|
|
|
622
629
|
drop policy allow_select_own on public.table_with_very_long_name_for_formatting_and_wrapping_test;
|
|
623
630
|
|
|
624
631
|
-- policy.alter.set_roles
|
|
625
|
-
alter policy
|
|
632
|
+
alter policy allow_select_own
|
|
626
633
|
on public.table_with_very_long_name_for_formatting_and_wrapping_test to authenticated, anon;
|
|
627
634
|
|
|
628
635
|
-- policy.alter.set_using
|
|
629
|
-
alter policy public.
|
|
630
|
-
on public.table_with_very_long_name_for_formatting_and_wrapping_test
|
|
636
|
+
alter policy allow_select_own on public.table_with_very_long_name_for_formatting_and_wrapping_test
|
|
631
637
|
using (auth.uid() = user_id AND status = 'active');
|
|
632
638
|
|
|
633
639
|
-- policy.alter.set_with_check
|
|
634
|
-
alter policy public.
|
|
635
|
-
|
|
636
|
-
check (auth.uid() = user_id);
|
|
640
|
+
alter policy allow_select_own on public.table_with_very_long_name_for_formatting_and_wrapping_test
|
|
641
|
+
with check (auth.uid() = user_id);
|
|
637
642
|
|
|
638
643
|
-- policy.comment
|
|
639
644
|
comment on policy allow_select_own
|
|
@@ -745,7 +750,7 @@ describe("sql formatting snapshots", () => {
|
|
|
745
750
|
, stype = anycompatiblearray
|
|
746
751
|
, combinefunc = array_cat
|
|
747
752
|
, initcond = '{}'
|
|
748
|
-
, parallel
|
|
753
|
+
, parallel = SAFE
|
|
749
754
|
, strict
|
|
750
755
|
);
|
|
751
756
|
|
|
@@ -990,13 +995,13 @@ describe("sql formatting snapshots", () => {
|
|
|
990
995
|
comment on foreign table public.remote_users is null;
|
|
991
996
|
|
|
992
997
|
-- foreign_table.grant
|
|
993
|
-
grant select on
|
|
998
|
+
grant select on table public.remote_users to app_reader;
|
|
994
999
|
|
|
995
1000
|
-- foreign_table.revoke
|
|
996
|
-
revoke select on
|
|
1001
|
+
revoke select on table public.remote_users from app_reader;
|
|
997
1002
|
|
|
998
1003
|
-- foreign_table.revoke_grant_option
|
|
999
|
-
revoke grant option for select on
|
|
1004
|
+
revoke grant option for select on table public.remote_users from app_reader;
|
|
1000
1005
|
|
|
1001
1006
|
-- server.create
|
|
1002
1007
|
create server remote_server
|