mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-10-27 05:36:23 +00:00
parent
749b061fbf
commit
7c20d4ae1f
2 changed files with 48 additions and 16 deletions
|
|
@ -9416,27 +9416,35 @@ impl<'a> Parser<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
/// Parse a `SET ROLE` statement. Expects SET to be consumed already.
|
||||
fn parse_set_role(&mut self, modifier: Option<Keyword>) -> Result<Statement, ParserError> {
|
||||
self.expect_keyword(Keyword::ROLE)?;
|
||||
let context_modifier = match modifier {
|
||||
Some(Keyword::LOCAL) => ContextModifier::Local,
|
||||
Some(Keyword::SESSION) => ContextModifier::Session,
|
||||
_ => ContextModifier::None,
|
||||
};
|
||||
|
||||
let role_name = if self.parse_keyword(Keyword::NONE) {
|
||||
None
|
||||
} else {
|
||||
Some(self.parse_identifier(false)?)
|
||||
};
|
||||
Ok(Statement::SetRole {
|
||||
context_modifier,
|
||||
role_name,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn parse_set(&mut self) -> Result<Statement, ParserError> {
|
||||
let modifier =
|
||||
self.parse_one_of_keywords(&[Keyword::SESSION, Keyword::LOCAL, Keyword::HIVEVAR]);
|
||||
if let Some(Keyword::HIVEVAR) = modifier {
|
||||
self.expect_token(&Token::Colon)?;
|
||||
} else if self.parse_keyword(Keyword::ROLE) {
|
||||
let context_modifier = match modifier {
|
||||
Some(Keyword::LOCAL) => ContextModifier::Local,
|
||||
Some(Keyword::SESSION) => ContextModifier::Session,
|
||||
_ => ContextModifier::None,
|
||||
};
|
||||
|
||||
let role_name = if self.parse_keyword(Keyword::NONE) {
|
||||
None
|
||||
} else {
|
||||
Some(self.parse_identifier(false)?)
|
||||
};
|
||||
return Ok(Statement::SetRole {
|
||||
context_modifier,
|
||||
role_name,
|
||||
});
|
||||
} else if let Some(set_role_stmt) =
|
||||
self.maybe_parse(|parser| parser.parse_set_role(modifier))
|
||||
{
|
||||
return Ok(set_role_stmt);
|
||||
}
|
||||
|
||||
let variables = if self.parse_keywords(&[Keyword::TIME, Keyword::ZONE]) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue