@@ -575,6 +575,10 @@ impl<'a> Parser<'a> {
575575 Keyword::SHOW => self.parse_show(),
576576 Keyword::USE => self.parse_use(),
577577 Keyword::GRANT => self.parse_grant(),
578+ Keyword::DENY => {
579+ self.prev_token();
580+ self.parse_deny()
581+ }
578582 Keyword::REVOKE => self.parse_revoke(),
579583 Keyword::START => self.parse_start_transaction(),
580584 Keyword::BEGIN => self.parse_begin(),
@@ -12987,7 +12991,7 @@ impl<'a> Parser<'a> {
1298712991
1298812992 /// Parse a GRANT statement.
1298912993 pub fn parse_grant(&mut self) -> Result<Statement, ParserError> {
12990- let (privileges, objects) = self.parse_grant_revoke_privileges_objects ()?;
12994+ let (privileges, objects) = self.parse_grant_deny_revoke_privileges_objects ()?;
1299112995
1299212996 self.expect_keyword_is(Keyword::TO)?;
1299312997 let grantees = self.parse_grantees()?;
@@ -13066,7 +13070,7 @@ impl<'a> Parser<'a> {
1306613070 Ok(values)
1306713071 }
1306813072
13069- pub fn parse_grant_revoke_privileges_objects (
13073+ pub fn parse_grant_deny_revoke_privileges_objects (
1307013074 &mut self,
1307113075 ) -> Result<(Privileges, Option<GrantObjects>), ParserError> {
1307213076 let privileges = if self.parse_keyword(Keyword::ALL) {
@@ -13116,7 +13120,6 @@ impl<'a> Parser<'a> {
1311613120 let object_type = self.parse_one_of_keywords(&[
1311713121 Keyword::SEQUENCE,
1311813122 Keyword::DATABASE,
13119- Keyword::DATABASE,
1312013123 Keyword::SCHEMA,
1312113124 Keyword::TABLE,
1312213125 Keyword::VIEW,
@@ -13409,9 +13412,40 @@ impl<'a> Parser<'a> {
1340913412 }
1341013413 }
1341113414
13415+ /// Parse [`Statement::Deny`]
13416+ pub fn parse_deny(&mut self) -> Result<Statement, ParserError> {
13417+ self.expect_keyword(Keyword::DENY)?;
13418+
13419+ let (privileges, objects) = self.parse_grant_deny_revoke_privileges_objects()?;
13420+ let objects = match objects {
13421+ Some(o) => o,
13422+ None => {
13423+ return parser_err!(
13424+ "DENY statements must specify an object",
13425+ self.peek_token().span.start
13426+ )
13427+ }
13428+ };
13429+
13430+ self.expect_keyword_is(Keyword::TO)?;
13431+ let grantees = self.parse_grantees()?;
13432+ let cascade = self.parse_cascade_option();
13433+ let granted_by = self
13434+ .parse_keywords(&[Keyword::AS])
13435+ .then(|| self.parse_identifier().unwrap());
13436+
13437+ Ok(Statement::Deny(DenyStatement {
13438+ privileges,
13439+ objects,
13440+ grantees,
13441+ cascade,
13442+ granted_by,
13443+ }))
13444+ }
13445+
1341213446 /// Parse a REVOKE statement
1341313447 pub fn parse_revoke(&mut self) -> Result<Statement, ParserError> {
13414- let (privileges, objects) = self.parse_grant_revoke_privileges_objects ()?;
13448+ let (privileges, objects) = self.parse_grant_deny_revoke_privileges_objects ()?;
1341513449
1341613450 self.expect_keyword_is(Keyword::FROM)?;
1341713451 let grantees = self.parse_grantees()?;
0 commit comments