diff --git a/ast/misc.go b/ast/misc.go index c068cbbcd..0dbed05a2 100755 --- a/ast/misc.go +++ b/ast/misc.go @@ -1314,7 +1314,7 @@ func (n ObjectTypeType) Restore(ctx *RestoreCtx) error { case ObjectTypeNone: // do nothing case ObjectTypeTable: - ctx.WriteKeyWord("TABLE ") + ctx.WriteKeyWord("TABLE") default: return errors.New("Unsupported object type") } @@ -1386,8 +1386,11 @@ func (n *RevokeStmt) Restore(ctx *RestoreCtx) error { } } ctx.WriteKeyWord(" ON ") - if err := n.ObjectType.Restore(ctx); err != nil { - return errors.Annotate(err, "An error occurred while restore RevokeStmt.ObjectType") + if n.ObjectType != ObjectTypeNone { + if err := n.ObjectType.Restore(ctx); err != nil { + return errors.Annotate(err, "An error occurred while restore RevokeStmt.ObjectType") + } + ctx.WritePlain(" ") } if err := n.Level.Restore(ctx); err != nil { return errors.Annotate(err, "An error occurred while restore RevokeStmt.Level") @@ -1444,8 +1447,11 @@ func (n *GrantStmt) Restore(ctx *RestoreCtx) error { } } ctx.WriteKeyWord(" ON ") - if err := n.ObjectType.Restore(ctx); err != nil { - return errors.Annotate(err, "An error occurred while restore GrantStmt.ObjectType") + if n.ObjectType != ObjectTypeNone { + if err := n.ObjectType.Restore(ctx); err != nil { + return errors.Annotate(err, "An error occurred while restore GrantStmt.ObjectType") + } + ctx.WritePlain(" ") } if err := n.Level.Restore(ctx); err != nil { return errors.Annotate(err, "An error occurred while restore GrantStmt.Level") diff --git a/parser_test.go b/parser_test.go index 1395b9bbe..6452a6269 100755 --- a/parser_test.go +++ b/parser_test.go @@ -2103,6 +2103,7 @@ func (s *testParserSuite) TestPrivilege(c *C) { // for grant statement {"GRANT ALL ON db1.* TO 'jeffrey'@'localhost';", true, "GRANT ALL ON `db1`.* TO `jeffrey`@`localhost`"}, + {"GRANT ALL ON TABLE db1.* TO 'jeffrey'@'localhost';", true, "GRANT ALL ON TABLE `db1`.* TO `jeffrey`@`localhost`"}, {"GRANT ALL ON db1.* TO 'jeffrey'@'localhost' WITH GRANT OPTION;", true, "GRANT ALL ON `db1`.* TO `jeffrey`@`localhost` WITH GRANT OPTION"}, {"GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost';", true, "GRANT SELECT ON `db2`.`invoice` TO `jeffrey`@`localhost`"}, {"GRANT ALL ON *.* TO 'someuser'@'somehost';", true, "GRANT ALL ON *.* TO `someuser`@`somehost`"},