Skip to content

Commit 783d282

Browse files
Fix ALTER TABLE ADD COLUMN default nullability (#558)
Columns added by `ALTER TABLE ADD COLUMN` are nullable by default. For the `pgroll` `Column` type, these means we need to set `Nullable` to `true` by default when converting such SQL statements with `sql2pgroll`.
1 parent e04850e commit 783d282

File tree

3 files changed

+40
-19
lines changed

3 files changed

+40
-19
lines changed

pkg/sql2pgroll/alter_table.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -418,8 +418,9 @@ func convertAlterTableAddColumn(stmt *pgq.AlterTableStmt, cmd *pgq.AlterTableCmd
418418

419419
operation := &migrations.OpAddColumn{
420420
Column: migrations.Column{
421-
Name: columnDef.GetColname(),
422-
Type: columnType,
421+
Name: columnDef.GetColname(),
422+
Type: columnType,
423+
Nullable: true,
423424
},
424425
Table: getQualifiedRelationName(stmt.GetRelation()),
425426
Up: PlaceHolderSQL,
@@ -430,8 +431,11 @@ func convertAlterTableAddColumn(stmt *pgq.AlterTableStmt, cmd *pgq.AlterTableCmd
430431
switch constraint.GetConstraint().GetContype() {
431432
case pgq.ConstrType_CONSTR_NULL:
432433
operation.Column.Nullable = true
434+
case pgq.ConstrType_CONSTR_NOTNULL:
435+
operation.Column.Nullable = false
433436
case pgq.ConstrType_CONSTR_PRIMARY:
434437
operation.Column.Pk = true
438+
operation.Column.Nullable = false
435439
case pgq.ConstrType_CONSTR_UNIQUE:
436440
operation.Column.Unique = true
437441
case pgq.ConstrType_CONSTR_CHECK:

pkg/sql2pgroll/alter_table_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ func TestConvertAlterTableStatements(t *testing.T) {
148148
},
149149
{
150150
sql: "ALTER TABLE foo ADD COLUMN bar int NOT NULL",
151-
expectedOp: expect.AddColumnOp1,
151+
expectedOp: expect.AddColumnOp8,
152152
},
153153
{
154154
sql: "ALTER TABLE schema.foo ADD COLUMN bar int",

pkg/sql2pgroll/expect/add_column.go

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,19 @@ var AddColumnOp1 = &migrations.OpAddColumn{
1111
Table: "foo",
1212
Up: sql2pgroll.PlaceHolderSQL,
1313
Column: migrations.Column{
14-
Name: "bar",
15-
Type: "int",
14+
Name: "bar",
15+
Type: "int",
16+
Nullable: true,
1617
},
1718
}
1819

1920
var AddColumnOp2 = &migrations.OpAddColumn{
2021
Table: "schema.foo",
2122
Up: sql2pgroll.PlaceHolderSQL,
2223
Column: migrations.Column{
23-
Name: "bar",
24-
Type: "int",
24+
Name: "bar",
25+
Type: "int",
26+
Nullable: true,
2527
},
2628
}
2729

@@ -30,9 +32,10 @@ func AddColumnOp1WithDefault(def *string) *migrations.OpAddColumn {
3032
Table: "foo",
3133
Up: sql2pgroll.PlaceHolderSQL,
3234
Column: migrations.Column{
33-
Name: "bar",
34-
Type: "int",
35-
Default: def,
35+
Name: "bar",
36+
Type: "int",
37+
Default: def,
38+
Nullable: true,
3639
},
3740
}
3841
}
@@ -51,9 +54,10 @@ var AddColumnOp4 = &migrations.OpAddColumn{
5154
Table: "foo",
5255
Up: sql2pgroll.PlaceHolderSQL,
5356
Column: migrations.Column{
54-
Name: "bar",
55-
Type: "int",
56-
Unique: true,
57+
Name: "bar",
58+
Type: "int",
59+
Unique: true,
60+
Nullable: true,
5761
},
5862
}
5963

@@ -71,8 +75,9 @@ var AddColumnOp6 = &migrations.OpAddColumn{
7175
Table: "foo",
7276
Up: sql2pgroll.PlaceHolderSQL,
7377
Column: migrations.Column{
74-
Name: "bar",
75-
Type: "int",
78+
Name: "bar",
79+
Type: "int",
80+
Nullable: true,
7681
Check: &migrations.CheckConstraint{
7782
Constraint: "bar > 0",
7883
Name: "",
@@ -84,22 +89,34 @@ var AddColumnOp7 = &migrations.OpAddColumn{
8489
Table: "foo",
8590
Up: sql2pgroll.PlaceHolderSQL,
8691
Column: migrations.Column{
87-
Name: "bar",
88-
Type: "int",
92+
Name: "bar",
93+
Type: "int",
94+
Nullable: true,
8995
Check: &migrations.CheckConstraint{
9096
Constraint: "bar > 0",
9197
Name: "check_bar",
9298
},
9399
},
94100
}
95101

102+
var AddColumnOp8 = &migrations.OpAddColumn{
103+
Table: "foo",
104+
Up: sql2pgroll.PlaceHolderSQL,
105+
Column: migrations.Column{
106+
Name: "bar",
107+
Type: "int",
108+
Nullable: false,
109+
},
110+
}
111+
96112
func AddColumnOp8WithOnDeleteAction(action migrations.ForeignKeyReferenceOnDelete) *migrations.OpAddColumn {
97113
return &migrations.OpAddColumn{
98114
Table: "foo",
99115
Up: sql2pgroll.PlaceHolderSQL,
100116
Column: migrations.Column{
101-
Name: "bar",
102-
Type: "int",
117+
Name: "bar",
118+
Type: "int",
119+
Nullable: true,
103120
References: &migrations.ForeignKeyReference{
104121
Column: "bar",
105122
Name: "fk_baz",

0 commit comments

Comments
 (0)