Skip to content

Commit

Permalink
fix(frontend): make WITH optional for user create and alter (risingwa…
Browse files Browse the repository at this point in the history
…velabs#4414)

fix: make WITH optional for user create and alter

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
  • Loading branch information
2 people authored and nasnoisaac committed Aug 9, 2022
1 parent 07e4a41 commit c788975
Showing 1 changed file with 37 additions and 38 deletions.
75 changes: 37 additions & 38 deletions src/sqlparser/src/ast/statement.rs
Original file line number Diff line number Diff line change
Expand Up @@ -396,47 +396,46 @@ pub struct UserOptions(pub Vec<UserOption>);
impl ParseTo for UserOptions {
fn parse_to(parser: &mut Parser) -> Result<Self, ParserError> {
let mut options = vec![];
if parser.parse_keyword(Keyword::WITH) {
loop {
let token = parser.peek_token();
if token == Token::EOF || token == Token::SemiColon {
break;
}

if let Token::Word(ref w) = token {
parser.next_token();
let option = match w.keyword {
Keyword::SUPERUSER => UserOption::SuperUser,
Keyword::NOSUPERUSER => UserOption::NoSuperUser,
Keyword::CREATEDB => UserOption::CreateDB,
Keyword::NOCREATEDB => UserOption::NoCreateDB,
Keyword::LOGIN => UserOption::Login,
Keyword::NOLOGIN => UserOption::NoLogin,
Keyword::PASSWORD => {
if parser.parse_keyword(Keyword::NULL) {
UserOption::Password(None)
} else {
UserOption::Password(Some(AstString::parse_to(parser)?))
}
}
Keyword::ENCRYPTED => {
parser.expect_keyword(Keyword::PASSWORD)?;
UserOption::EncryptedPassword(AstString::parse_to(parser)?)
let _ = parser.parse_keyword(Keyword::WITH);
loop {
let token = parser.peek_token();
if token == Token::EOF || token == Token::SemiColon {
break;
}

if let Token::Word(ref w) = token {
parser.next_token();
let option = match w.keyword {
Keyword::SUPERUSER => UserOption::SuperUser,
Keyword::NOSUPERUSER => UserOption::NoSuperUser,
Keyword::CREATEDB => UserOption::CreateDB,
Keyword::NOCREATEDB => UserOption::NoCreateDB,
Keyword::LOGIN => UserOption::Login,
Keyword::NOLOGIN => UserOption::NoLogin,
Keyword::PASSWORD => {
if parser.parse_keyword(Keyword::NULL) {
UserOption::Password(None)
} else {
UserOption::Password(Some(AstString::parse_to(parser)?))
}
_ => parser.expected(
"SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | LOGIN \
}
Keyword::ENCRYPTED => {
parser.expect_keyword(Keyword::PASSWORD)?;
UserOption::EncryptedPassword(AstString::parse_to(parser)?)
}
_ => parser.expected(
"SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | LOGIN \
| NOLOGIN | ENCRYPTED | PASSWORD | NULL",
token,
)?,
};
options.push(option);
} else {
parser.expected(
"SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | LOGIN | NOLOGIN \
| ENCRYPTED | PASSWORD | NULL",
token,
)?
}
)?,
};
options.push(option);
} else {
parser.expected(
"SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | LOGIN | NOLOGIN \
| ENCRYPTED | PASSWORD | NULL",
token,
)?
}
}
Ok(Self(options))
Expand Down

0 comments on commit c788975

Please sign in to comment.