Skip to content

Commit 15684cc

Browse files
tianzhouclaude
andauthored
fix: quote camelCase column names in online NOT NULL rewrite DDL (#313) (#315)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 7a0cb3a commit 15684cc

7 files changed

Lines changed: 79 additions & 2 deletions

File tree

internal/plan/rewrite.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,17 +298,19 @@ func generateColumnNotNullRewrite(_ *diff.ColumnDiff, path string) []RewriteStep
298298
tableName := getTableNameWithSchema(schema, table)
299299
constraintName := fmt.Sprintf("%s_not_null", column)
300300

301+
quotedColumn := ir.QuoteIdentifier(column)
302+
301303
// Step 1: Add CHECK constraint with NOT VALID
302304
addConstraintSQL := fmt.Sprintf("ALTER TABLE %s ADD CONSTRAINT %s CHECK (%s IS NOT NULL) NOT VALID;",
303-
tableName, ir.QuoteIdentifier(constraintName), column)
305+
tableName, ir.QuoteIdentifier(constraintName), quotedColumn)
304306

305307
// Step 2: Validate the constraint
306308
validateConstraintSQL := fmt.Sprintf("ALTER TABLE %s VALIDATE CONSTRAINT %s;",
307309
tableName, ir.QuoteIdentifier(constraintName))
308310

309311
// Step 3: Set column to NOT NULL
310312
setNotNullSQL := fmt.Sprintf("ALTER TABLE %s ALTER COLUMN %s SET NOT NULL;",
311-
tableName, column)
313+
tableName, quotedColumn)
312314

313315
// Step 4: Drop CHECK constraint
314316
dropConstraintSQL := fmt.Sprintf("ALTER TABLE %s DROP CONSTRAINT %s;",
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE "Planning" ALTER COLUMN "offersValidUntil" SET NOT NULL;
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
CREATE TABLE public."Planning" (
2+
id integer NOT NULL,
3+
"offersValidUntil" timestamp with time zone NOT NULL,
4+
CONSTRAINT "Planning_pkey" PRIMARY KEY (id)
5+
);
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
CREATE TABLE public."Planning" (
2+
id integer NOT NULL,
3+
"offersValidUntil" timestamp with time zone,
4+
CONSTRAINT "Planning_pkey" PRIMARY KEY (id)
5+
);
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
{
2+
"version": "1.0.0",
3+
"pgschema_version": "1.7.2",
4+
"created_at": "1970-01-01T00:00:00Z",
5+
"source_fingerprint": {
6+
"hash": "59ecc7fdab924e513eb6acdc93543167379bf64b4c6b5e1fe1d8e98fa48fdb9f"
7+
},
8+
"groups": [
9+
{
10+
"steps": [
11+
{
12+
"sql": "ALTER TABLE \"Planning\" ADD CONSTRAINT \"offersValidUntil_not_null\" CHECK (\"offersValidUntil\" IS NOT NULL) NOT VALID;",
13+
"type": "table.column",
14+
"operation": "alter",
15+
"path": "public.Planning.offersValidUntil"
16+
},
17+
{
18+
"sql": "ALTER TABLE \"Planning\" VALIDATE CONSTRAINT \"offersValidUntil_not_null\";",
19+
"type": "table.column",
20+
"operation": "alter",
21+
"path": "public.Planning.offersValidUntil"
22+
},
23+
{
24+
"sql": "ALTER TABLE \"Planning\" ALTER COLUMN \"offersValidUntil\" SET NOT NULL;",
25+
"type": "table.column",
26+
"operation": "alter",
27+
"path": "public.Planning.offersValidUntil"
28+
},
29+
{
30+
"sql": "ALTER TABLE \"Planning\" DROP CONSTRAINT \"offersValidUntil_not_null\";",
31+
"type": "table.column",
32+
"operation": "alter",
33+
"path": "public.Planning.offersValidUntil"
34+
}
35+
]
36+
}
37+
]
38+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
ALTER TABLE "Planning" ADD CONSTRAINT "offersValidUntil_not_null" CHECK ("offersValidUntil" IS NOT NULL) NOT VALID;
2+
3+
ALTER TABLE "Planning" VALIDATE CONSTRAINT "offersValidUntil_not_null";
4+
5+
ALTER TABLE "Planning" ALTER COLUMN "offersValidUntil" SET NOT NULL;
6+
7+
ALTER TABLE "Planning" DROP CONSTRAINT "offersValidUntil_not_null";
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
Plan: 1 to modify.
2+
3+
Summary by type:
4+
tables: 1 to modify
5+
6+
Tables:
7+
~ Planning
8+
~ offersValidUntil (column)
9+
10+
DDL to be executed:
11+
--------------------------------------------------
12+
13+
ALTER TABLE "Planning" ADD CONSTRAINT "offersValidUntil_not_null" CHECK ("offersValidUntil" IS NOT NULL) NOT VALID;
14+
15+
ALTER TABLE "Planning" VALIDATE CONSTRAINT "offersValidUntil_not_null";
16+
17+
ALTER TABLE "Planning" ALTER COLUMN "offersValidUntil" SET NOT NULL;
18+
19+
ALTER TABLE "Planning" DROP CONSTRAINT "offersValidUntil_not_null";

0 commit comments

Comments
 (0)