Skip to content

Commit 6dd898a

Browse files
Convert column DEFAULTs in CREATE TABLE statements (#553)
Convert inline `DEFAULT` values in `CREATE TABLE` statements like this: ```sql CREATE TABLE foo(a text DEFAULT 'foo') ``` into `OpCreateTable` operations like this: ```json [ { "create_table": { "columns": [ { "default": "'foo'", "name": "a", "nullable": true, "type": "text" } ], "name": "foo" } } ] ```
1 parent 5450d7a commit 6dd898a

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

pkg/sql2pgroll/create_table.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ func convertColumnDef(tableName string, col *pgq.ColumnDef) (*migrations.Column,
9898
// Convert column constraints
9999
var notNull, pk, unique bool
100100
var check *migrations.CheckConstraint
101+
var defaultValue *string
101102
for _, c := range col.GetConstraints() {
102103
switch c.GetConstraint().GetContype() {
103104
case pgq.ConstrType_CONSTR_NULL:
@@ -123,6 +124,12 @@ func convertColumnDef(tableName string, col *pgq.ColumnDef) (*migrations.Column,
123124
if check == nil {
124125
return nil, nil
125126
}
127+
case pgq.ConstrType_CONSTR_DEFAULT:
128+
d, err := pgq.DeparseExpr(c.GetConstraint().GetRawExpr())
129+
if err != nil {
130+
return nil, fmt.Errorf("error deparsing default value: %w", err)
131+
}
132+
defaultValue = &d
126133
case pgq.ConstrType_CONSTR_FOREIGN:
127134
if !canConvertForeignKeyConstraint(c.GetConstraint()) {
128135
return nil, nil
@@ -136,6 +143,7 @@ func convertColumnDef(tableName string, col *pgq.ColumnDef) (*migrations.Column,
136143
Nullable: !notNull,
137144
Pk: pk,
138145
Check: check,
146+
Default: defaultValue,
139147
Unique: unique,
140148
}, nil
141149
}

pkg/sql2pgroll/create_table_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ func TestConvertCreateTableStatements(t *testing.T) {
4444
sql: "CREATE TABLE foo(a int CHECK (a > 0))",
4545
expectedOp: expect.CreateTableOp10,
4646
},
47+
{
48+
sql: "CREATE TABLE foo(a timestamptz DEFAULT now())",
49+
expectedOp: expect.CreateTableOp11,
50+
},
4751
{
4852
sql: "CREATE TABLE foo(a varchar(255))",
4953
expectedOp: expect.CreateTableOp3,

pkg/sql2pgroll/expect/create_table.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,3 +117,15 @@ var CreateTableOp10 = &migrations.OpCreateTable{
117117
},
118118
},
119119
}
120+
121+
var CreateTableOp11 = &migrations.OpCreateTable{
122+
Name: "foo",
123+
Columns: []migrations.Column{
124+
{
125+
Name: "a",
126+
Type: "timestamptz",
127+
Nullable: true,
128+
Default: ptr("now()"),
129+
},
130+
},
131+
}

0 commit comments

Comments
 (0)