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 number Diff line number Diff line change
@@ -0,0 +1,2 @@
/* name: GetFoo :many */
SELECT qux, quux FROM foo;
Original file line number Diff line number Diff 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 number Diff line number Diff 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 number Diff line number Diff 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 number Diff line number Diff 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 number Diff line number Diff 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 Down Expand 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 Down Expand 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