Skip to content

Commit bf4b4e8

Browse files
Add pretty printing for ALTER TABLE ADD CONSTRAINT
- Place ADD CONSTRAINT on new line with indentation when pretty printing enabled - Maintains existing behavior for non-pretty mode - Follows existing pretty printing patterns in codebase - Updated constraint test snapshots to reflect new formatting Co-Authored-By: Dan Lynch <[email protected]>
1 parent d4ec49b commit bf4b4e8

File tree

2 files changed

+71
-22
lines changed

2 files changed

+71
-22
lines changed

packages/deparser/__tests__/pretty/__snapshots__/constraints-pretty.test.ts.snap

Lines changed: 53 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,28 +28,56 @@ exports[`non-pretty: pretty/constraints-13.sql 1`] = `"ALTER TABLE products ADD
2828

2929
exports[`non-pretty: pretty/constraints-14.sql 1`] = `"ALTER TABLE users ADD CONSTRAINT unique_email UNIQUE (email)"`;
3030

31-
exports[`pretty: pretty/constraints-1.sql 1`] = `"ALTER TABLE public.users ADD CONSTRAINT users_pkey PRIMARY KEY (id)"`;
31+
exports[`pretty: pretty/constraints-1.sql 1`] = `
32+
"ALTER TABLE public.users
33+
ADD CONSTRAINT users_pkey PRIMARY KEY (id)"
34+
`;
3235

33-
exports[`pretty: pretty/constraints-2.sql 1`] = `"ALTER TABLE "App"."User Data" ADD CONSTRAINT "Unique_Full Name" UNIQUE ("Full Name")"`;
36+
exports[`pretty: pretty/constraints-2.sql 1`] = `
37+
"ALTER TABLE "App"."User Data"
38+
ADD CONSTRAINT "Unique_Full Name" UNIQUE ("Full Name")"
39+
`;
3440

35-
exports[`pretty: pretty/constraints-3.sql 1`] = `"ALTER TABLE school.attendance ADD CONSTRAINT attendance_unique UNIQUE ("Student ID", "Class ID")"`;
41+
exports[`pretty: pretty/constraints-3.sql 1`] = `
42+
"ALTER TABLE school.attendance
43+
ADD CONSTRAINT attendance_unique UNIQUE ("Student ID", "Class ID")"
44+
`;
3645

37-
exports[`pretty: pretty/constraints-4.sql 1`] = `"ALTER TABLE "Orders"."OrderLines" ADD CONSTRAINT "FK_Order_Ref" FOREIGN KEY (order_id) REFERENCES "Orders"."Order" ("OrderID")"`;
46+
exports[`pretty: pretty/constraints-4.sql 1`] = `
47+
"ALTER TABLE "Orders"."OrderLines"
48+
ADD CONSTRAINT "FK_Order_Ref" FOREIGN KEY (order_id) REFERENCES "Orders"."Order" ("OrderID")"
49+
`;
3850

39-
exports[`pretty: pretty/constraints-5.sql 1`] = `"ALTER TABLE "x-Schema"."z-Table" ADD CONSTRAINT "zNameFormatCheck" CHECK ("Z-Name" ~ '^[A-Z]')"`;
51+
exports[`pretty: pretty/constraints-5.sql 1`] = `
52+
"ALTER TABLE "x-Schema"."z-Table"
53+
ADD CONSTRAINT "zNameFormatCheck" CHECK ("Z-Name" ~ '^[A-Z]')"
54+
`;
4055

41-
exports[`pretty: pretty/constraints-6.sql 1`] = `"ALTER TABLE data.snapshots ADD CONSTRAINT metadata_has_key CHECK (metadata ? 'type')"`;
56+
exports[`pretty: pretty/constraints-6.sql 1`] = `
57+
"ALTER TABLE data.snapshots
58+
ADD CONSTRAINT metadata_has_key CHECK (metadata ? 'type')"
59+
`;
4260

43-
exports[`pretty: pretty/constraints-7.sql 1`] = `"ALTER TABLE "Billing"."Invoices" ADD CONSTRAINT "FK_Client_ID" FOREIGN KEY ("Client ID") REFERENCES "Clients"."ClientBase" ("Client ID")"`;
61+
exports[`pretty: pretty/constraints-7.sql 1`] = `
62+
"ALTER TABLE "Billing"."Invoices"
63+
ADD CONSTRAINT "FK_Client_ID" FOREIGN KEY ("Client ID") REFERENCES "Clients"."ClientBase" ("Client ID")"
64+
`;
4465

45-
exports[`pretty: pretty/constraints-8.sql 1`] = `"ALTER TABLE "API Keys" ADD CONSTRAINT "PK_KeyID" PRIMARY KEY ("KeyID")"`;
66+
exports[`pretty: pretty/constraints-8.sql 1`] = `
67+
"ALTER TABLE "API Keys"
68+
ADD CONSTRAINT "PK_KeyID" PRIMARY KEY ("KeyID")"
69+
`;
4670

4771
exports[`pretty: pretty/constraints-9.sql 1`] = `
48-
"ALTER TABLE finance.transactions ADD CONSTRAINT tax_rate_range CHECK (tax_rate >= 0
49-
AND tax_rate <= 1)"
72+
"ALTER TABLE finance.transactions
73+
ADD CONSTRAINT tax_rate_range CHECK (tax_rate >= 0
74+
AND tax_rate <= 1)"
5075
`;
5176

52-
exports[`pretty: pretty/constraints-10.sql 1`] = `"ALTER TABLE school.enrollments ADD CONSTRAINT fk_student_course FOREIGN KEY (student_id, course_id) REFERENCES school.courses_students (student_id, course_id)"`;
77+
exports[`pretty: pretty/constraints-10.sql 1`] = `
78+
"ALTER TABLE school.enrollments
79+
ADD CONSTRAINT fk_student_course FOREIGN KEY (student_id, course_id) REFERENCES school.courses_students (student_id, course_id)"
80+
`;
5381

5482
exports[`pretty: pretty/constraints-11.sql 1`] = `
5583
"CREATE TABLE orders (
@@ -66,13 +94,20 @@ exports[`pretty: pretty/constraints-11.sql 1`] = `
6694
`;
6795

6896
exports[`pretty: pretty/constraints-12.sql 1`] = `
69-
"ALTER TABLE products ADD CONSTRAINT fk_category FOREIGN KEY (category_id) REFERENCES categories (id)
70-
ON UPDATE CASCADE
71-
ON DELETE SET NULL
72-
DEFERRABLE
73-
INITIALLY DEFERRED"
97+
"ALTER TABLE products
98+
ADD CONSTRAINT fk_category FOREIGN KEY (category_id) REFERENCES categories (id)
99+
ON UPDATE CASCADE
100+
ON DELETE SET NULL
101+
DEFERRABLE
102+
INITIALLY DEFERRED"
74103
`;
75104

76-
exports[`pretty: pretty/constraints-13.sql 1`] = `"ALTER TABLE products ADD CONSTRAINT check_price CHECK (price > 0)"`;
105+
exports[`pretty: pretty/constraints-13.sql 1`] = `
106+
"ALTER TABLE products
107+
ADD CONSTRAINT check_price CHECK (price > 0)"
108+
`;
77109

78-
exports[`pretty: pretty/constraints-14.sql 1`] = `"ALTER TABLE users ADD CONSTRAINT unique_email UNIQUE (email)"`;
110+
exports[`pretty: pretty/constraints-14.sql 1`] = `
111+
"ALTER TABLE users
112+
ADD CONSTRAINT unique_email UNIQUE (email)"
113+
`;

packages/deparser/src/deparser.ts

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4571,10 +4571,24 @@ export class Deparser implements DeparserVisitor {
45714571
}
45724572

45734573
if (node.cmds && node.cmds.length > 0) {
4574-
const commandsStr = ListUtils.unwrapList(node.cmds)
4575-
.map(cmd => this.visit(cmd, alterContext))
4576-
.join(', ');
4577-
output.push(commandsStr);
4574+
const commands = ListUtils.unwrapList(node.cmds);
4575+
if (this.formatter.isPretty()) {
4576+
const commandsStr = commands
4577+
.map(cmd => {
4578+
const cmdStr = this.visit(cmd, alterContext);
4579+
if (cmdStr.startsWith('ADD CONSTRAINT') || cmdStr.startsWith('ADD ')) {
4580+
return this.formatter.newline() + this.formatter.indent(cmdStr);
4581+
}
4582+
return cmdStr;
4583+
})
4584+
.join(',');
4585+
output.push(commandsStr);
4586+
} else {
4587+
const commandsStr = commands
4588+
.map(cmd => this.visit(cmd, alterContext))
4589+
.join(', ');
4590+
output.push(commandsStr);
4591+
}
45784592
}
45794593

45804594
return output.join(' ');

0 commit comments

Comments
 (0)