Skip to content

Commit 3512f76

Browse files
Convert ALTER TABLE foo RENAME TO bar SQL to pgroll operation (#513)
Convert SQL statements of the form: ```sql ALTER TABLE foo RENAME TO bar ``` to the corresponding `OpRenameTable` operation: ```json [ { "rename_table": { "from": "foo", "to": "bar" } } ] ``` Part of #504
1 parent 3b8c56e commit 3512f76

File tree

3 files changed

+44
-5
lines changed

3 files changed

+44
-5
lines changed

pkg/sql2pgroll/expect/rename_table.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
3+
package expect
4+
5+
import "github.com/xataio/pgroll/pkg/migrations"
6+
7+
var RenameTableOp1 = &migrations.OpRenameTable{
8+
From: "foo",
9+
To: "bar",
10+
}

pkg/sql2pgroll/rename.go

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,25 @@ import (
77
"github.com/xataio/pgroll/pkg/migrations"
88
)
99

10+
// convertRenameStmt converts RenameStmt nodes to pgroll operations.
1011
func convertRenameStmt(stmt *pgq.RenameStmt) (migrations.Operations, error) {
11-
if stmt.GetRelationType() != pgq.ObjectType_OBJECT_TABLE {
12-
return nil, nil
13-
}
14-
if stmt.GetRenameType() != pgq.ObjectType_OBJECT_COLUMN {
12+
switch stmt.GetRenameType() {
13+
case pgq.ObjectType_OBJECT_TABLE:
14+
return convertRenameTable(stmt)
15+
case pgq.ObjectType_OBJECT_COLUMN:
16+
return convertRenameColumn(stmt)
17+
default:
1518
return nil, nil
1619
}
20+
}
1721

22+
// convertRenameColumn converts SQL statements like:
23+
//
24+
// `ALTER TABLE foo RENAME COLUMN a TO b`
25+
// `ALTER TABLE foo RENAME a TO b`
26+
//
27+
// to an OpAlterColumn operation.
28+
func convertRenameColumn(stmt *pgq.RenameStmt) (migrations.Operations, error) {
1829
return migrations.Operations{
1930
&migrations.OpAlterColumn{
2031
Table: stmt.GetRelation().GetRelname(),
@@ -23,3 +34,17 @@ func convertRenameStmt(stmt *pgq.RenameStmt) (migrations.Operations, error) {
2334
},
2435
}, nil
2536
}
37+
38+
// convertRenameTable converts SQL statements like:
39+
//
40+
// `ALTER TABLE foo RENAME TO bar`
41+
//
42+
// to an OpRenameTable operation.
43+
func convertRenameTable(stmt *pgq.RenameStmt) (migrations.Operations, error) {
44+
return migrations.Operations{
45+
&migrations.OpRenameTable{
46+
From: stmt.GetRelation().GetRelname(),
47+
To: stmt.GetNewname(),
48+
},
49+
}, nil
50+
}

pkg/sql2pgroll/rename_test.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
"github.com/xataio/pgroll/pkg/sql2pgroll/expect"
1313
)
1414

15-
func TestConvertRenameColumnStatements(t *testing.T) {
15+
func TestConvertRenameStatements(t *testing.T) {
1616
t.Parallel()
1717

1818
tests := []struct {
@@ -27,6 +27,10 @@ func TestConvertRenameColumnStatements(t *testing.T) {
2727
sql: "ALTER TABLE foo RENAME a TO b",
2828
expectedOp: expect.AlterColumnOp4,
2929
},
30+
{
31+
sql: "ALTER TABLE foo RENAME TO bar",
32+
expectedOp: expect.RenameTableOp1,
33+
},
3034
}
3135

3236
for _, tc := range tests {

0 commit comments

Comments
 (0)