@@ -9416,27 +9416,35 @@ impl<'a> Parser<'a> {
94169416 }
94179417 }
94189418
9419+ /// Parse a `SET ROLE` statement. Expects SET to be consumed already.
9420+ fn parse_set_role ( & mut self , modifier : Option < Keyword > ) -> Result < Statement , ParserError > {
9421+ self . expect_keyword ( Keyword :: ROLE ) ?;
9422+ let context_modifier = match modifier {
9423+ Some ( Keyword :: LOCAL ) => ContextModifier :: Local ,
9424+ Some ( Keyword :: SESSION ) => ContextModifier :: Session ,
9425+ _ => ContextModifier :: None ,
9426+ } ;
9427+
9428+ let role_name = if self . parse_keyword ( Keyword :: NONE ) {
9429+ None
9430+ } else {
9431+ Some ( self . parse_identifier ( false ) ?)
9432+ } ;
9433+ Ok ( Statement :: SetRole {
9434+ context_modifier,
9435+ role_name,
9436+ } )
9437+ }
9438+
94199439 pub fn parse_set ( & mut self ) -> Result < Statement , ParserError > {
94209440 let modifier =
94219441 self . parse_one_of_keywords ( & [ Keyword :: SESSION , Keyword :: LOCAL , Keyword :: HIVEVAR ] ) ;
94229442 if let Some ( Keyword :: HIVEVAR ) = modifier {
94239443 self . expect_token ( & Token :: Colon ) ?;
9424- } else if self . parse_keyword ( Keyword :: ROLE ) {
9425- let context_modifier = match modifier {
9426- Some ( Keyword :: LOCAL ) => ContextModifier :: Local ,
9427- Some ( Keyword :: SESSION ) => ContextModifier :: Session ,
9428- _ => ContextModifier :: None ,
9429- } ;
9430-
9431- let role_name = if self . parse_keyword ( Keyword :: NONE ) {
9432- None
9433- } else {
9434- Some ( self . parse_identifier ( false ) ?)
9435- } ;
9436- return Ok ( Statement :: SetRole {
9437- context_modifier,
9438- role_name,
9439- } ) ;
9444+ } else if let Some ( set_role_stmt) =
9445+ self . maybe_parse ( |parser| parser. parse_set_role ( modifier) )
9446+ {
9447+ return Ok ( set_role_stmt) ;
94409448 }
94419449
94429450 let variables = if self . parse_keywords ( & [ Keyword :: TIME , Keyword :: ZONE ] ) {
0 commit comments