From 95e2acedf21a1292cfff6e30b0046b9665d1f3e0 Mon Sep 17 00:00:00 2001 From: exialin Date: Tue, 12 Feb 2019 22:05:32 +0800 Subject: [PATCH] parser: minor fix of #198 (#203) --- ast/misc.go | 16 +++++++++++----- parser_test.go | 1 + 2 files changed, 12 insertions(+), 5 deletions(-) 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`"},