Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
/* name: GetFoo :many */
SELECT qux, quux FROM foo;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
CREATE TABLE foo (bar text, baz text);
ALTER TABLE foo
RENAME COLUMN bar TO qux,
RENAME COLUMN baz TO quux;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
{
"version": "1",
"packages": [
{
"path": "go",
"engine": "mysql",
"name": "querytest",
"schema": "schema.sql",
"queries": "query.sql"
}
]
}
11 changes: 5 additions & 6 deletions internal/engine/dolphin/convert.go
Original file line numberDiff line numberDiff line change
Expand Up@@ -95,14 +95,13 @@ func (c *cc) convertAlterTableStmt(n *pcast.AlterTableStmt) ast.Node {
// spew.Dump("add const", spec)

case pcast.AlterTableRenameColumn:
// TODO: Returning here may be incorrect if there are multiple specs
oldName := spec.OldColumnName.String()
newName := spec.NewColumnName.String()
return &ast.RenameColumnStmt{
Table: parseTableName(n.Table),
Col: &ast.ColumnRef{Name: oldName},
NewName: &newName,
}
alt.Cmds.Items = append(alt.Cmds.Items, &ast.AlterTableCmd{
Name: &oldName,
Newname: &newName,
Subtype: ast.AT_RenameColumn,
})

case pcast.AlterTableRenameTable:
// TODO: Returning here may be incorrect if there are multiple specs
Expand Down
4 changes: 4 additions & 0 deletions internal/sql/ast/alter_table_cmd.go
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,6 +8,7 @@ const (
AT_DropColumn
AT_DropNotNull
AT_SetNotNull
AT_RenameColumn
)

type AlterTableType int
Expand All@@ -24,6 +25,8 @@ func (t AlterTableType) String() string {
return "DropNotNull"
case AT_SetNotNull:
return "SetNotNull"
case AT_RenameColumn:
return "RenameColumn"
default:
return "Unknown"
}
Expand All@@ -32,6 +35,7 @@ func (t AlterTableType) String() string {
type AlterTableCmd struct {
Subtype AlterTableType
Name *string
Newname *string
Def *ColumnDef
Newowner *RoleSpec
Behavior DropBehavior
Expand Down
22 changes: 16 additions & 6 deletions internal/sql/catalog/table.go
Original file line numberDiff line numberDiff line change
Expand Up@@ -177,6 +177,8 @@ func isStmtImplemented(stmt *ast.AlterTableStmt) bool {
implemented = true
case ast.AT_SetNotNull:
implemented = true
case ast.AT_RenameColumn:
implemented = true
}
}
}
Expand DownExpand Up@@ -215,6 +217,10 @@ func (c *Catalog) alterTable(stmt *ast.AlterTableStmt) error {
if err := table.setNotNull(cmd); err != nil {
return err
}
case ast.AT_RenameColumn:
if err := c.renameColumnOnTable(table, *cmd.Name, *cmd.Newname); err != nil {
return err
}
}
}
}
Expand DownExpand Up@@ -394,22 +400,26 @@ func (c *Catalog) renameColumn(stmt *ast.RenameColumnStmt) error {
if err != nil {
return checkMissing(err, stmt.MissingOk)
}
return c.renameColumnOnTable(tbl, stmt.Col.Name, *stmt.NewName)
}

func (c *Catalog) renameColumnOnTable(tbl *Table, oldName, newName string) error {
idx := -1
for i := range tbl.Columns {
if tbl.Columns[i].Name == stmt.Col.Name {
if tbl.Columns[i].Name == oldName {
idx = i
}
if tbl.Columns[i].Name == *stmt.NewName {
return sqlerr.ColumnExists(tbl.Rel.Name, *stmt.NewName)
if tbl.Columns[i].Name == newName {
return sqlerr.ColumnExists(tbl.Rel.Name, newName)
}
}
if idx == -1 {
return sqlerr.ColumnNotFound(tbl.Rel.Name, stmt.Col.Name)
return sqlerr.ColumnNotFound(tbl.Rel.Name, oldName)
}
tbl.Columns[idx].Name = *stmt.NewName
tbl.Columns[idx].Name = newName

if tbl.Columns[idx].linkedType {
name := fmt.Sprintf("%s_%s", tbl.Rel.Name, *stmt.NewName)
name := fmt.Sprintf("%s_%s", tbl.Rel.Name, newName)
rename := &ast.RenameTypeStmt{
Type: &tbl.Columns[idx].Type,
NewName: &name,
Expand Down
Loading