@supabase/pg-delta 1.0.0-alpha.24 → 1.0.0-alpha.25
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/dist/core/catalog.model.d.ts +2 -2
- package/dist/core/catalog.model.js +26 -21
- package/dist/core/integrations/supabase.js +84 -0
- package/dist/core/objects/aggregate/changes/aggregate.privilege.js +21 -9
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.js +4 -1
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.js +6 -3
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.d.ts +11 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +11 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.js +4 -1
- package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.js +6 -3
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.d.ts +11 -0
- package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +11 -0
- package/dist/core/objects/foreign-data-wrapper/sensitive-options.d.ts +32 -0
- package/dist/core/objects/foreign-data-wrapper/sensitive-options.js +129 -0
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.js +4 -1
- package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.js +6 -3
- package/dist/core/objects/foreign-data-wrapper/server/server.model.d.ts +10 -0
- package/dist/core/objects/foreign-data-wrapper/server/server.model.js +10 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.js +4 -1
- package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.js +6 -3
- package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.d.ts +10 -0
- package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.js +10 -0
- package/dist/core/objects/rls-policy/rls-policy.model.d.ts +2 -2
- package/dist/core/objects/table/table.model.js +7 -2
- package/package.json +1 -1
- package/src/core/catalog.model.ts +36 -20
- package/src/core/integrations/supabase.test.ts +198 -0
- package/src/core/integrations/supabase.ts +84 -0
- package/src/core/objects/aggregate/changes/aggregate.privilege.test.ts +79 -0
- package/src/core/objects/aggregate/changes/aggregate.privilege.ts +22 -9
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.test.ts +34 -4
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.ts +5 -1
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.test.ts +34 -0
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.ts +7 -5
- package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.ts +11 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.test.ts +25 -4
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.ts +5 -1
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.test.ts +54 -0
- package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.ts +7 -5
- package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.ts +11 -0
- package/src/core/objects/foreign-data-wrapper/sensitive-options.test.ts +98 -0
- package/src/core/objects/foreign-data-wrapper/sensitive-options.ts +133 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.test.ts +39 -4
- package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.ts +5 -1
- package/src/core/objects/foreign-data-wrapper/server/changes/server.create.test.ts +36 -0
- package/src/core/objects/foreign-data-wrapper/server/changes/server.create.ts +7 -5
- package/src/core/objects/foreign-data-wrapper/server/server.model.ts +10 -0
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.test.ts +39 -6
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.ts +5 -1
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.test.ts +38 -2
- package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.ts +7 -5
- package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.ts +10 -0
- package/src/core/objects/table/table.model.ts +7 -2
- package/src/core/plan/sql-format/format-off.test.ts +4 -4
- package/src/core/plan/sql-format/format-pretty-lower-leading.test.ts +4 -4
- package/src/core/plan/sql-format/format-pretty-narrow.test.ts +5 -4
- package/src/core/plan/sql-format/format-pretty-preserve.test.ts +4 -4
- package/src/core/plan/sql-format/format-pretty-upper.test.ts +4 -4
|
@@ -141,4 +141,40 @@ describe("server", () => {
|
|
|
141
141
|
"CREATE SERVER test_server TYPE 'postgres_fdw' VERSION '1.0' FOREIGN DATA WRAPPER test_fdw OPTIONS (host 'localhost', port '5432')",
|
|
142
142
|
);
|
|
143
143
|
});
|
|
144
|
+
|
|
145
|
+
test("redacts sensitive option values to prevent secret leakage (CLI-1467)", async () => {
|
|
146
|
+
const server = new Server({
|
|
147
|
+
name: "live_risk_server",
|
|
148
|
+
owner: "postgres",
|
|
149
|
+
foreign_data_wrapper: "postgres_fdw",
|
|
150
|
+
type: null,
|
|
151
|
+
version: null,
|
|
152
|
+
options: [
|
|
153
|
+
"host",
|
|
154
|
+
"remote.example.com",
|
|
155
|
+
"port",
|
|
156
|
+
"5432",
|
|
157
|
+
"password",
|
|
158
|
+
"server-shared-secret",
|
|
159
|
+
"passfile",
|
|
160
|
+
"/etc/secrets/passfile",
|
|
161
|
+
],
|
|
162
|
+
comment: null,
|
|
163
|
+
privileges: [],
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
const change = new CreateServer({
|
|
167
|
+
server,
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
await assertValidSql(change.serialize());
|
|
171
|
+
|
|
172
|
+
const sql = change.serialize();
|
|
173
|
+
expect(sql).not.toContain("server-shared-secret");
|
|
174
|
+
expect(sql).not.toContain("/etc/secrets/passfile");
|
|
175
|
+
expect(sql).toContain("host 'remote.example.com'");
|
|
176
|
+
expect(sql).toContain("port '5432'");
|
|
177
|
+
expect(sql).toContain("password '__OPTION_PASSWORD__'");
|
|
178
|
+
expect(sql).toContain("passfile '__OPTION_PASSFILE__'");
|
|
179
|
+
});
|
|
144
180
|
});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { SerializeOptions } from "../../../../integrations/serialize/serialize.types.ts";
|
|
2
2
|
import { quoteLiteral } from "../../../base.change.ts";
|
|
3
3
|
import { stableId } from "../../../utils.ts";
|
|
4
|
+
import { redactOptionValue } from "../../sensitive-options.ts";
|
|
4
5
|
import type { Server } from "../server.model.ts";
|
|
5
6
|
import { CreateServerChange } from "./server.base.ts";
|
|
6
7
|
|
|
@@ -66,11 +67,12 @@ export class CreateServer extends CreateServerChange {
|
|
|
66
67
|
if (this.server.options && this.server.options.length > 0) {
|
|
67
68
|
const optionPairs: string[] = [];
|
|
68
69
|
for (let i = 0; i < this.server.options.length; i += 2) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
const key = this.server.options[i];
|
|
71
|
+
const value = this.server.options[i + 1];
|
|
72
|
+
if (key === undefined || value === undefined) continue;
|
|
73
|
+
optionPairs.push(
|
|
74
|
+
`${key} ${quoteLiteral(redactOptionValue(key, value))}`,
|
|
75
|
+
);
|
|
74
76
|
}
|
|
75
77
|
if (optionPairs.length > 0) {
|
|
76
78
|
parts.push(`OPTIONS (${optionPairs.join(", ")})`);
|
|
@@ -80,6 +80,16 @@ export class Server extends BasePgModel {
|
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
+
/**
|
|
84
|
+
* Extract `pg_foreign_server` rows into `Server` models.
|
|
85
|
+
*
|
|
86
|
+
* The returned models carry option values **verbatim** from
|
|
87
|
+
* `pg_foreign_server.srvoptions`, which means cleartext secrets like
|
|
88
|
+
* `password` are present in memory. Always route through
|
|
89
|
+
* `extractCatalog` (which calls `normalizeCatalog`) before emitting
|
|
90
|
+
* options to any output channel — see CLI-1467 and
|
|
91
|
+
* `packages/pg-delta/src/core/objects/foreign-data-wrapper/sensitive-options.ts`.
|
|
92
|
+
*/
|
|
83
93
|
export async function extractServers(pool: Pool): Promise<Server[]> {
|
|
84
94
|
const { rows: serverRows } = await pool.query<ServerProps>(sql`
|
|
85
95
|
select
|
package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.test.ts
CHANGED
|
@@ -23,10 +23,43 @@ describe.concurrent("user-mapping", () => {
|
|
|
23
23
|
await assertValidSql(change.serialize());
|
|
24
24
|
|
|
25
25
|
expect(change.serialize()).toBe(
|
|
26
|
-
"ALTER USER MAPPING FOR test_user SERVER test_server OPTIONS (ADD user 'remote_user', ADD password '
|
|
26
|
+
"ALTER USER MAPPING FOR test_user SERVER test_server OPTIONS (ADD user 'remote_user', ADD password '__OPTION_PASSWORD__')",
|
|
27
27
|
);
|
|
28
28
|
});
|
|
29
29
|
|
|
30
|
+
test("redacts sensitive option values to prevent secret leakage (CLI-1467)", async () => {
|
|
31
|
+
const props: UserMappingProps = {
|
|
32
|
+
user: "postgres",
|
|
33
|
+
server: "live_risk_server",
|
|
34
|
+
options: null,
|
|
35
|
+
};
|
|
36
|
+
const userMapping = new UserMapping(props);
|
|
37
|
+
const change = new AlterUserMappingSetOptions({
|
|
38
|
+
userMapping,
|
|
39
|
+
options: [
|
|
40
|
+
{ action: "ADD", option: "password", value: "real-user-password" },
|
|
41
|
+
{ action: "SET", option: "user", value: "fdw_reader" },
|
|
42
|
+
{
|
|
43
|
+
action: "ADD",
|
|
44
|
+
option: "passfile",
|
|
45
|
+
value: "/etc/secrets/passfile",
|
|
46
|
+
},
|
|
47
|
+
{ action: "SET", option: "sslpassword", value: "ssl-secret" },
|
|
48
|
+
],
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
await assertValidSql(change.serialize());
|
|
52
|
+
|
|
53
|
+
const sql = change.serialize();
|
|
54
|
+
expect(sql).not.toContain("real-user-password");
|
|
55
|
+
expect(sql).not.toContain("/etc/secrets/passfile");
|
|
56
|
+
expect(sql).not.toContain("ssl-secret");
|
|
57
|
+
expect(sql).toContain("SET user 'fdw_reader'");
|
|
58
|
+
expect(sql).toContain("ADD password '__OPTION_PASSWORD__'");
|
|
59
|
+
expect(sql).toContain("ADD passfile '__OPTION_PASSFILE__'");
|
|
60
|
+
expect(sql).toContain("SET sslpassword '__OPTION_SSLPASSWORD__'");
|
|
61
|
+
});
|
|
62
|
+
|
|
30
63
|
test("set options SET", async () => {
|
|
31
64
|
const props: UserMappingProps = {
|
|
32
65
|
user: "test_user",
|
|
@@ -42,7 +75,7 @@ describe.concurrent("user-mapping", () => {
|
|
|
42
75
|
await assertValidSql(change.serialize());
|
|
43
76
|
|
|
44
77
|
expect(change.serialize()).toBe(
|
|
45
|
-
"ALTER USER MAPPING FOR test_user SERVER test_server OPTIONS (SET password '
|
|
78
|
+
"ALTER USER MAPPING FOR test_user SERVER test_server OPTIONS (SET password '__OPTION_PASSWORD__')",
|
|
46
79
|
);
|
|
47
80
|
});
|
|
48
81
|
|
|
@@ -75,16 +108,16 @@ describe.concurrent("user-mapping", () => {
|
|
|
75
108
|
const change = new AlterUserMappingSetOptions({
|
|
76
109
|
userMapping,
|
|
77
110
|
options: [
|
|
78
|
-
{ action: "ADD", option: "
|
|
79
|
-
{ action: "SET", option: "
|
|
80
|
-
{ action: "DROP", option: "
|
|
111
|
+
{ action: "ADD", option: "user", value: "remote_user" },
|
|
112
|
+
{ action: "SET", option: "sslmode", value: "require" },
|
|
113
|
+
{ action: "DROP", option: "application_name" },
|
|
81
114
|
],
|
|
82
115
|
});
|
|
83
116
|
|
|
84
117
|
await assertValidSql(change.serialize());
|
|
85
118
|
|
|
86
119
|
expect(change.serialize()).toBe(
|
|
87
|
-
"ALTER USER MAPPING FOR PUBLIC SERVER test_server OPTIONS (ADD
|
|
120
|
+
"ALTER USER MAPPING FOR PUBLIC SERVER test_server OPTIONS (ADD user 'remote_user', SET sslmode 'require', DROP application_name)",
|
|
88
121
|
);
|
|
89
122
|
});
|
|
90
123
|
});
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { SerializeOptions } from "../../../../integrations/serialize/serialize.types.ts";
|
|
2
2
|
import { quoteLiteral } from "../../../base.change.ts";
|
|
3
|
+
import { redactOptionValue } from "../../sensitive-options.ts";
|
|
3
4
|
import type { UserMapping } from "../user-mapping.model.ts";
|
|
4
5
|
import { AlterUserMappingChange } from "./user-mapping.base.ts";
|
|
5
6
|
|
|
@@ -53,7 +54,10 @@ export class AlterUserMappingSetOptions extends AlterUserMappingChange {
|
|
|
53
54
|
if (opt.action === "DROP") {
|
|
54
55
|
optionParts.push(`DROP ${opt.option}`);
|
|
55
56
|
} else {
|
|
56
|
-
const value =
|
|
57
|
+
const value =
|
|
58
|
+
opt.value !== undefined
|
|
59
|
+
? quoteLiteral(redactOptionValue(opt.option, opt.value))
|
|
60
|
+
: "''";
|
|
57
61
|
optionParts.push(`${opt.action} ${opt.option} ${value}`);
|
|
58
62
|
}
|
|
59
63
|
}
|
package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.test.ts
CHANGED
|
@@ -72,7 +72,7 @@ describe("user-mapping", () => {
|
|
|
72
72
|
await assertValidSql(change.serialize());
|
|
73
73
|
|
|
74
74
|
expect(change.serialize()).toBe(
|
|
75
|
-
"CREATE USER MAPPING FOR test_user SERVER test_server OPTIONS (user 'remote_user', password '
|
|
75
|
+
"CREATE USER MAPPING FOR test_user SERVER test_server OPTIONS (user 'remote_user', password '__OPTION_PASSWORD__')",
|
|
76
76
|
);
|
|
77
77
|
});
|
|
78
78
|
|
|
@@ -90,7 +90,43 @@ describe("user-mapping", () => {
|
|
|
90
90
|
await assertValidSql(change.serialize());
|
|
91
91
|
|
|
92
92
|
expect(change.serialize()).toBe(
|
|
93
|
-
"CREATE USER MAPPING FOR PUBLIC SERVER test_server OPTIONS (user 'remote_user', password '
|
|
93
|
+
"CREATE USER MAPPING FOR PUBLIC SERVER test_server OPTIONS (user 'remote_user', password '__OPTION_PASSWORD__')",
|
|
94
94
|
);
|
|
95
95
|
});
|
|
96
|
+
|
|
97
|
+
test("redacts sensitive option values to prevent secret leakage (CLI-1467)", async () => {
|
|
98
|
+
const userMapping = new UserMapping({
|
|
99
|
+
user: "postgres",
|
|
100
|
+
server: "live_risk_server",
|
|
101
|
+
options: [
|
|
102
|
+
"user",
|
|
103
|
+
"fdw_reader",
|
|
104
|
+
"password",
|
|
105
|
+
"real-user-password",
|
|
106
|
+
"passfile",
|
|
107
|
+
"/etc/secrets/passfile",
|
|
108
|
+
"sslpassword",
|
|
109
|
+
"ssl-secret",
|
|
110
|
+
"passcode",
|
|
111
|
+
"krb-passcode",
|
|
112
|
+
],
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
const change = new CreateUserMapping({
|
|
116
|
+
userMapping,
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
await assertValidSql(change.serialize());
|
|
120
|
+
|
|
121
|
+
const sql = change.serialize();
|
|
122
|
+
expect(sql).not.toContain("real-user-password");
|
|
123
|
+
expect(sql).not.toContain("/etc/secrets/passfile");
|
|
124
|
+
expect(sql).not.toContain("ssl-secret");
|
|
125
|
+
expect(sql).not.toContain("krb-passcode");
|
|
126
|
+
expect(sql).toContain("user 'fdw_reader'");
|
|
127
|
+
expect(sql).toContain("password '__OPTION_PASSWORD__'");
|
|
128
|
+
expect(sql).toContain("passfile '__OPTION_PASSFILE__'");
|
|
129
|
+
expect(sql).toContain("sslpassword '__OPTION_SSLPASSWORD__'");
|
|
130
|
+
expect(sql).toContain("passcode '__OPTION_PASSCODE__'");
|
|
131
|
+
});
|
|
96
132
|
});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { SerializeOptions } from "../../../../integrations/serialize/serialize.types.ts";
|
|
2
2
|
import { quoteLiteral } from "../../../base.change.ts";
|
|
3
3
|
import { stableId } from "../../../utils.ts";
|
|
4
|
+
import { redactOptionValue } from "../../sensitive-options.ts";
|
|
4
5
|
import type { UserMapping } from "../user-mapping.model.ts";
|
|
5
6
|
import { CreateUserMappingChange } from "./user-mapping.base.ts";
|
|
6
7
|
|
|
@@ -51,11 +52,12 @@ export class CreateUserMapping extends CreateUserMappingChange {
|
|
|
51
52
|
if (this.userMapping.options && this.userMapping.options.length > 0) {
|
|
52
53
|
const optionPairs: string[] = [];
|
|
53
54
|
for (let i = 0; i < this.userMapping.options.length; i += 2) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
const key = this.userMapping.options[i];
|
|
56
|
+
const value = this.userMapping.options[i + 1];
|
|
57
|
+
if (key === undefined || value === undefined) continue;
|
|
58
|
+
optionPairs.push(
|
|
59
|
+
`${key} ${quoteLiteral(redactOptionValue(key, value))}`,
|
|
60
|
+
);
|
|
59
61
|
}
|
|
60
62
|
if (optionPairs.length > 0) {
|
|
61
63
|
parts.push(`OPTIONS (${optionPairs.join(", ")})`);
|
|
@@ -56,6 +56,16 @@ export class UserMapping extends BasePgModel {
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Extract `pg_user_mapping` rows into `UserMapping` models.
|
|
61
|
+
*
|
|
62
|
+
* The returned models carry option values **verbatim** from
|
|
63
|
+
* `pg_user_mapping.umoptions`, which means cleartext secrets like
|
|
64
|
+
* `password` are present in memory. Always route through
|
|
65
|
+
* `extractCatalog` (which calls `normalizeCatalog`) before emitting
|
|
66
|
+
* options to any output channel — see CLI-1467 and
|
|
67
|
+
* `packages/pg-delta/src/core/objects/foreign-data-wrapper/sensitive-options.ts`.
|
|
68
|
+
*/
|
|
59
69
|
export async function extractUserMappings(pool: Pool): Promise<UserMapping[]> {
|
|
60
70
|
const { rows: mappingRows } = await pool.query<UserMappingProps>(sql`
|
|
61
71
|
select
|
|
@@ -341,8 +341,13 @@ select
|
|
|
341
341
|
'no_inherit', c.connoinherit,
|
|
342
342
|
'is_temporal', coalesce((to_jsonb(c)->>'conperiod')::boolean, false),
|
|
343
343
|
|
|
344
|
-
--
|
|
345
|
-
|
|
344
|
+
-- Inherited from a parent (partition or classical inheritance).
|
|
345
|
+
-- coninhcount > 0 is the canonical signal across every constraint
|
|
346
|
+
-- kind. We previously used conparentid <> 0, but PostgreSQL only
|
|
347
|
+
-- populates conparentid for PK / UNIQUE / FK on partitions; CHECK
|
|
348
|
+
-- constraints on partitions always have conparentid = 0 and were
|
|
349
|
+
-- being re-emitted on every child, failing apply with 42710.
|
|
350
|
+
'is_partition_clone', (c.coninhcount > 0),
|
|
346
351
|
'parent_constraint_schema', case when c.conparentid <> 0::oid then pc.connamespace::regnamespace::text end,
|
|
347
352
|
'parent_constraint_name', case when c.conparentid <> 0::oid then quote_ident(pc.conname) end,
|
|
348
353
|
'parent_table_schema', case when c.conparentid <> 0::oid then pc_rel.relnamespace::regnamespace::text end,
|
|
@@ -689,7 +689,7 @@ describe("sql formatting snapshots", () => {
|
|
|
689
689
|
COMMENT ON SUBSCRIPTION sub_replica IS NULL;
|
|
690
690
|
|
|
691
691
|
-- fdw.create
|
|
692
|
-
CREATE FOREIGN DATA WRAPPER postgres_fdw HANDLER postgres_fdw_handler VALIDATOR postgres_fdw_validator OPTIONS (debug '
|
|
692
|
+
CREATE FOREIGN DATA WRAPPER postgres_fdw HANDLER postgres_fdw_handler VALIDATOR postgres_fdw_validator OPTIONS (debug '__OPTION_DEBUG__');
|
|
693
693
|
|
|
694
694
|
-- fdw.drop
|
|
695
695
|
DROP FOREIGN DATA WRAPPER postgres_fdw;
|
|
@@ -698,7 +698,7 @@ describe("sql formatting snapshots", () => {
|
|
|
698
698
|
ALTER FOREIGN DATA WRAPPER postgres_fdw OWNER TO new_owner;
|
|
699
699
|
|
|
700
700
|
-- fdw.alter.set_options
|
|
701
|
-
ALTER FOREIGN DATA WRAPPER postgres_fdw OPTIONS (SET debug '
|
|
701
|
+
ALTER FOREIGN DATA WRAPPER postgres_fdw OPTIONS (SET debug '__OPTION_DEBUG__', ADD use_remote_estimate '');
|
|
702
702
|
|
|
703
703
|
-- fdw.comment
|
|
704
704
|
COMMENT ON FOREIGN DATA WRAPPER postgres_fdw IS 'PostgreSQL foreign data wrapper';
|
|
@@ -794,13 +794,13 @@ describe("sql formatting snapshots", () => {
|
|
|
794
794
|
REVOKE GRANT OPTION FOR ALL ON SERVER remote_server FROM app_user;
|
|
795
795
|
|
|
796
796
|
-- user_mapping.create
|
|
797
|
-
CREATE USER MAPPING FOR app_user SERVER remote_server OPTIONS (user 'remote_app', password '
|
|
797
|
+
CREATE USER MAPPING FOR app_user SERVER remote_server OPTIONS (user 'remote_app', password '__OPTION_PASSWORD__');
|
|
798
798
|
|
|
799
799
|
-- user_mapping.drop
|
|
800
800
|
DROP USER MAPPING FOR app_user SERVER remote_server;
|
|
801
801
|
|
|
802
802
|
-- user_mapping.alter.set_options
|
|
803
|
-
ALTER USER MAPPING FOR app_user SERVER remote_server OPTIONS (SET password '
|
|
803
|
+
ALTER USER MAPPING FOR app_user SERVER remote_server OPTIONS (SET password '__OPTION_PASSWORD__');"
|
|
804
804
|
`);
|
|
805
805
|
});
|
|
806
806
|
});
|
|
@@ -912,7 +912,7 @@ describe("sql formatting snapshots", () => {
|
|
|
912
912
|
create foreign data wrapper postgres_fdw
|
|
913
913
|
handler postgres_fdw_handler
|
|
914
914
|
validator postgres_fdw_validator
|
|
915
|
-
options (debug '
|
|
915
|
+
options (debug '__OPTION_DEBUG__');
|
|
916
916
|
|
|
917
917
|
-- fdw.drop
|
|
918
918
|
drop foreign data wrapper postgres_fdw;
|
|
@@ -924,7 +924,7 @@ describe("sql formatting snapshots", () => {
|
|
|
924
924
|
-- fdw.alter.set_options
|
|
925
925
|
alter foreign data wrapper postgres_fdw
|
|
926
926
|
options (
|
|
927
|
-
SET debug '
|
|
927
|
+
SET debug '__OPTION_DEBUG__'
|
|
928
928
|
, ADD use_remote_estimate ''
|
|
929
929
|
);
|
|
930
930
|
|
|
@@ -1049,13 +1049,13 @@ describe("sql formatting snapshots", () => {
|
|
|
1049
1049
|
|
|
1050
1050
|
-- user_mapping.create
|
|
1051
1051
|
create user mapping for app_user server remote_server
|
|
1052
|
-
options (user 'remote_app', password '
|
|
1052
|
+
options (user 'remote_app', password '__OPTION_PASSWORD__');
|
|
1053
1053
|
|
|
1054
1054
|
-- user_mapping.drop
|
|
1055
1055
|
drop user mapping for app_user server remote_server;
|
|
1056
1056
|
|
|
1057
1057
|
-- user_mapping.alter.set_options
|
|
1058
|
-
alter user mapping for app_user server remote_server options (SET password '
|
|
1058
|
+
alter user mapping for app_user server remote_server options (SET password '__OPTION_PASSWORD__');"
|
|
1059
1059
|
`);
|
|
1060
1060
|
});
|
|
1061
1061
|
});
|
|
@@ -1094,7 +1094,7 @@ describe("sql formatting snapshots", () => {
|
|
|
1094
1094
|
CREATE FOREIGN DATA WRAPPER postgres_fdw
|
|
1095
1095
|
HANDLER postgres_fdw_handler
|
|
1096
1096
|
VALIDATOR postgres_fdw_validator
|
|
1097
|
-
OPTIONS (debug '
|
|
1097
|
+
OPTIONS (debug '__OPTION_DEBUG__');
|
|
1098
1098
|
|
|
1099
1099
|
-- fdw.drop
|
|
1100
1100
|
DROP FOREIGN DATA WRAPPER postgres_fdw;
|
|
@@ -1106,7 +1106,7 @@ describe("sql formatting snapshots", () => {
|
|
|
1106
1106
|
-- fdw.alter.set_options
|
|
1107
1107
|
ALTER FOREIGN DATA WRAPPER postgres_fdw
|
|
1108
1108
|
OPTIONS (
|
|
1109
|
-
SET debug '
|
|
1109
|
+
SET debug '__OPTION_DEBUG__',
|
|
1110
1110
|
ADD use_remote_estimate ''
|
|
1111
1111
|
);
|
|
1112
1112
|
|
|
@@ -1264,7 +1264,7 @@ describe("sql formatting snapshots", () => {
|
|
|
1264
1264
|
remote_server
|
|
1265
1265
|
OPTIONS
|
|
1266
1266
|
(user 'remote_app', password
|
|
1267
|
-
'
|
|
1267
|
+
'__OPTION_PASSWORD__');
|
|
1268
1268
|
|
|
1269
1269
|
-- user_mapping.drop
|
|
1270
1270
|
DROP USER MAPPING FOR app_user SERVER
|
|
@@ -1273,7 +1273,8 @@ describe("sql formatting snapshots", () => {
|
|
|
1273
1273
|
-- user_mapping.alter.set_options
|
|
1274
1274
|
ALTER USER MAPPING FOR app_user SERVER
|
|
1275
1275
|
remote_server
|
|
1276
|
-
OPTIONS
|
|
1276
|
+
OPTIONS
|
|
1277
|
+
(SET password '__OPTION_PASSWORD__');"
|
|
1277
1278
|
`);
|
|
1278
1279
|
});
|
|
1279
1280
|
});
|
|
@@ -908,7 +908,7 @@ describe("sql formatting snapshots", () => {
|
|
|
908
908
|
CREATE FOREIGN DATA WRAPPER postgres_fdw
|
|
909
909
|
HANDLER postgres_fdw_handler
|
|
910
910
|
VALIDATOR postgres_fdw_validator
|
|
911
|
-
OPTIONS (debug '
|
|
911
|
+
OPTIONS (debug '__OPTION_DEBUG__');
|
|
912
912
|
|
|
913
913
|
-- fdw.drop
|
|
914
914
|
DROP FOREIGN DATA WRAPPER postgres_fdw;
|
|
@@ -920,7 +920,7 @@ describe("sql formatting snapshots", () => {
|
|
|
920
920
|
-- fdw.alter.set_options
|
|
921
921
|
ALTER FOREIGN DATA WRAPPER postgres_fdw
|
|
922
922
|
OPTIONS (
|
|
923
|
-
SET debug '
|
|
923
|
+
SET debug '__OPTION_DEBUG__',
|
|
924
924
|
ADD use_remote_estimate ''
|
|
925
925
|
);
|
|
926
926
|
|
|
@@ -1045,13 +1045,13 @@ describe("sql formatting snapshots", () => {
|
|
|
1045
1045
|
|
|
1046
1046
|
-- user_mapping.create
|
|
1047
1047
|
CREATE USER MAPPING FOR app_user SERVER remote_server
|
|
1048
|
-
OPTIONS (user 'remote_app', password '
|
|
1048
|
+
OPTIONS (user 'remote_app', password '__OPTION_PASSWORD__');
|
|
1049
1049
|
|
|
1050
1050
|
-- user_mapping.drop
|
|
1051
1051
|
DROP USER MAPPING FOR app_user SERVER remote_server;
|
|
1052
1052
|
|
|
1053
1053
|
-- user_mapping.alter.set_options
|
|
1054
|
-
ALTER USER MAPPING FOR app_user SERVER remote_server OPTIONS (SET password '
|
|
1054
|
+
ALTER USER MAPPING FOR app_user SERVER remote_server OPTIONS (SET password '__OPTION_PASSWORD__');"
|
|
1055
1055
|
`);
|
|
1056
1056
|
});
|
|
1057
1057
|
});
|
|
@@ -899,7 +899,7 @@ describe("sql formatting snapshots", () => {
|
|
|
899
899
|
CREATE FOREIGN DATA WRAPPER postgres_fdw
|
|
900
900
|
HANDLER postgres_fdw_handler
|
|
901
901
|
VALIDATOR postgres_fdw_validator
|
|
902
|
-
OPTIONS (debug '
|
|
902
|
+
OPTIONS (debug '__OPTION_DEBUG__');
|
|
903
903
|
|
|
904
904
|
-- fdw.drop
|
|
905
905
|
DROP FOREIGN DATA WRAPPER postgres_fdw;
|
|
@@ -911,7 +911,7 @@ describe("sql formatting snapshots", () => {
|
|
|
911
911
|
-- fdw.alter.set_options
|
|
912
912
|
ALTER FOREIGN DATA WRAPPER postgres_fdw
|
|
913
913
|
OPTIONS (
|
|
914
|
-
SET debug '
|
|
914
|
+
SET debug '__OPTION_DEBUG__',
|
|
915
915
|
ADD use_remote_estimate ''
|
|
916
916
|
);
|
|
917
917
|
|
|
@@ -1036,13 +1036,13 @@ describe("sql formatting snapshots", () => {
|
|
|
1036
1036
|
|
|
1037
1037
|
-- user_mapping.create
|
|
1038
1038
|
CREATE USER MAPPING FOR app_user SERVER remote_server
|
|
1039
|
-
OPTIONS (user 'remote_app', password '
|
|
1039
|
+
OPTIONS (user 'remote_app', password '__OPTION_PASSWORD__');
|
|
1040
1040
|
|
|
1041
1041
|
-- user_mapping.drop
|
|
1042
1042
|
DROP USER MAPPING FOR app_user SERVER remote_server;
|
|
1043
1043
|
|
|
1044
1044
|
-- user_mapping.alter.set_options
|
|
1045
|
-
ALTER USER MAPPING FOR app_user SERVER remote_server OPTIONS (SET password '
|
|
1045
|
+
ALTER USER MAPPING FOR app_user SERVER remote_server OPTIONS (SET password '__OPTION_PASSWORD__');"
|
|
1046
1046
|
`);
|
|
1047
1047
|
});
|
|
1048
1048
|
});
|