Add support for RAISE statement (#1766)

This commit is contained in:
Ifeanyi Ubah 2025-03-18 15:19:51 +01:00 committed by GitHub
parent da5892802f
commit e3e88290cd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 124 additions and 5 deletions

View file

@ -536,6 +536,10 @@ impl<'a> Parser<'a> {
self.prev_token();
self.parse_if_stmt()
}
Keyword::RAISE => {
self.prev_token();
self.parse_raise_stmt()
}
Keyword::SELECT | Keyword::WITH | Keyword::VALUES | Keyword::FROM => {
self.prev_token();
self.parse_query().map(Statement::Query)
@ -719,6 +723,22 @@ impl<'a> Parser<'a> {
})
}
/// Parse a `RAISE` statement.
///
/// See [Statement::Raise]
pub fn parse_raise_stmt(&mut self) -> Result<Statement, ParserError> {
self.expect_keyword_is(Keyword::RAISE)?;
let value = if self.parse_keywords(&[Keyword::USING, Keyword::MESSAGE]) {
self.expect_token(&Token::Eq)?;
Some(RaiseStatementValue::UsingMessage(self.parse_expr()?))
} else {
self.maybe_parse(|parser| parser.parse_expr().map(RaiseStatementValue::Expr))?
};
Ok(Statement::Raise(RaiseStatement { value }))
}
pub fn parse_comment(&mut self) -> Result<Statement, ParserError> {
let if_exists = self.parse_keywords(&[Keyword::IF, Keyword::EXISTS]);