public override SqlStatement VisitGrantPrivilegeStatement(PlSqlParser.GrantPrivilegeStatementContext context)
        {
            var privs = Privileges.None;

            if (context.ALL() != null)
            {
                privs = PrivilegeSets.TableAll;
            }
            else
            {
                var privNames = context.privilegeName().Select(x => x.GetText());
                foreach (var privName in privNames)
                {
                    Privileges priv;

                    try {
                        priv = (Privileges)Enum.Parse(typeof(Privileges), privName, true);
                    } catch (Exception) {
                        throw new ParseCanceledException("Invalid privilege specified.");
                    }

                    privs |= priv;
                }
            }

            var withGrant  = context.WITH() != null && context.GRANT() != null;
            var grantee    = Name.Simple(context.granteeName());
            var objectName = Name.Object(context.objectName());

            return(new GrantPrivilegesStatement(grantee, privs, withGrant, objectName));
        }
        public override SqlStatement VisitGrantPrivilegeStatement(PlSqlParser.GrantPrivilegeStatementContext context)
        {
            var privs = Privilege.None;

            if (context.ALL() != null)
            {
                privs = SqlPrivileges.TableAll;
            }
            else
            {
                var privNames = context.privilegeName().Select(x => x.GetText());
                foreach (var privName in privNames)
                {
                    try {
                        var priv = SqlPrivileges.Resolver.ResolvePrivilege(privName);
                        privs += priv;
                    } catch (Exception) {
                        throw new ParseCanceledException("Invalid privilege specified.");
                    }
                }
            }

            var withGrant  = context.WITH() != null && context.GRANT() != null;
            var grantee    = SqlParseUtil.Name.Simple(context.granteeName());
            var objectName = SqlParseUtil.Name.Object(context.objectName());

            AddStatement(context, new GrantObjectPrivilegesStatement(grantee, privs, objectName, withGrant, new string[0]));

            return(base.VisitGrantPrivilegeStatement(context));
        }