diff --git a/parser/ast/ddl.go b/parser/ast/ddl.go index 98c815d954..3d47697278 100644 --- a/parser/ast/ddl.go +++ b/parser/ast/ddl.go @@ -714,7 +714,14 @@ type TableToTable struct { // Restore implements Node interface. func (n *TableToTable) Restore(ctx *RestoreCtx) error { - return errors.New("Not implemented") + if err := n.OldTable.Restore(ctx); err != nil { + return errors.Annotate(err, "An error occurred while restore TableToTable.OldTable") + } + ctx.WriteKeyWord(" TO ") + if err := n.NewTable.Restore(ctx); err != nil { + return errors.Annotate(err, "An error occurred while restore TableToTable.NewTable") + } + return nil } // Accept implements Node Accept interface. diff --git a/parser/ast/ddl_test.go b/parser/ast/ddl_test.go index be26ff3b65..9cd4c70111 100644 --- a/parser/ast/ddl_test.go +++ b/parser/ast/ddl_test.go @@ -118,6 +118,16 @@ func (ts *testDDLSuite) TestDDLIndexOption(c *C) { RunNodeRestoreTest(c, testCases, "CREATE INDEX idx ON t (a) %s", extractNodeFunc) } +func (ts *testDDLSuite) TestTableToTableRestore(c *C) { + testCases := []NodeRestoreTestCase{ + {"t1 to t2", "`t1` TO `t2`"}, + } + extractNodeFunc := func(node Node) Node { + return node.(*RenameTableStmt).TableToTables[0] + } + RunNodeRestoreTest(c, testCases, "rename table %s", extractNodeFunc) +} + func (ts *testDDLSuite) TestDDLReferenceDefRestore(c *C) { testCases := []NodeRestoreTestCase{ {"REFERENCES parent(id) ON DELETE CASCADE ON UPDATE RESTRICT", "REFERENCES `parent`(`id`) ON DELETE CASCADE ON UPDATE RESTRICT"},