File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -15140,6 +15140,7 @@ impl<'a> Parser<'a> {
1514015140 modifier: Option<ContextModifier>,
1514115141 ) -> Result<Statement, ParserError> {
1514215142 self.expect_keyword_is(Keyword::ROLE)?;
15143+ let _ = self.consume_token(&Token::Eq) || self.parse_keyword(Keyword::TO);
1514315144
1514415145 let role_name = if self.parse_keyword(Keyword::NONE) {
1514515146 None
Original file line number Diff line number Diff line change @@ -9316,22 +9316,16 @@ fn parse_set_variable() {
93169316
93179317#[test]
93189318fn parse_set_role_as_variable() {
9319- match verified_stmt("SET role = 'foobar'") {
9320- Statement::Set(Set::SingleAssignment {
9321- scope,
9322- hivevar,
9323- variable,
9324- values,
9319+ // In this fork, `SET ROLE` (including the `=`/`TO` forms) is always parsed as a
9320+ // dedicated SET ROLE statement rather than a generic variable assignment, so
9321+ // `SET role = 'foobar'` becomes a `Set::SetRole` and round-trips to `SET ROLE 'foobar'`.
9322+ match one_statement_parses_to("SET role = 'foobar'", "SET ROLE 'foobar'") {
9323+ Statement::Set(Set::SetRole {
9324+ context_modifier,
9325+ role_name,
93259326 }) => {
9326- assert_eq!(scope, None);
9327- assert!(!hivevar);
9328- assert_eq!(variable, ObjectName::from(vec!["role".into()]));
9329- assert_eq!(
9330- values,
9331- vec![Expr::Value(
9332- (Value::SingleQuotedString("foobar".into())).with_empty_span()
9333- )]
9334- );
9327+ assert_eq!(context_modifier, None);
9328+ assert_eq!(role_name, Some(Ident::with_quote('\'', "foobar")));
93359329 }
93369330 _ => unreachable!(),
93379331 }
Original file line number Diff line number Diff line change @@ -1878,6 +1878,10 @@ fn parse_set_role() {
18781878
18791879 let query = "SET LOCAL ROLE \" rolename\" " ;
18801880 let stmt = pg_and_generic ( ) . verified_stmt ( query) ;
1881+ pg_and_generic ( ) . one_statement_parses_to (
1882+ "SET LOCAL ROLE = \" rolename\" " ,
1883+ "SET LOCAL ROLE \" rolename\" " ,
1884+ ) ;
18811885 assert_eq ! (
18821886 stmt,
18831887 Statement :: Set ( Set :: SetRole {
@@ -1893,6 +1897,7 @@ fn parse_set_role() {
18931897
18941898 let query = "SET ROLE 'rolename'" ;
18951899 let stmt = pg_and_generic ( ) . verified_stmt ( query) ;
1900+ pg_and_generic ( ) . one_statement_parses_to ( "SET ROLE TO 'rolename'" , "SET ROLE 'rolename'" ) ;
18961901 assert_eq ! (
18971902 stmt,
18981903 Statement :: Set ( Set :: SetRole {
You can’t perform that action at this time.
0 commit comments