Skip to content

Commit 8f632db

Browse files
author
Alexander Beedie
committed
take advantage of maybe_parse, make normalization forms keywords
1 parent 458729e commit 8f632db

File tree

3 files changed

+19
-26
lines changed

3 files changed

+19
-26
lines changed

src/keywords.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,10 @@ define_keywords!(
529529
NESTED,
530530
NEW,
531531
NEXT,
532+
NFC,
533+
NFD,
534+
NFKC,
535+
NFKD,
532536
NO,
533537
NOBYPASSRLS,
534538
NOCREATEDB,

src/parser/mod.rs

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8463,35 +8463,24 @@ impl<'a> Parser<'a> {
84638463
&mut self,
84648464
) -> Result<(Option<NormalizationForm>, bool), ParserError> {
84658465
let neg = self.parse_keyword(Keyword::NOT);
8466-
if self.parse_keyword(Keyword::NORMALIZED) {
8467-
return Ok((None, neg));
8468-
}
8469-
let index = self.index;
8470-
let next_token = self.next_token();
8471-
let normalized_form = if let Token::Word(Word {
8472-
value: ref s,
8473-
quote_style: None,
8474-
keyword: Keyword::NoKeyword,
8475-
}) = next_token.token
8476-
{
8477-
match s.to_uppercase().as_str() {
8478-
"NFC" => Some(NormalizationForm::NFC),
8479-
"NFD" => Some(NormalizationForm::NFD),
8480-
"NFKC" => Some(NormalizationForm::NFKC),
8481-
"NFKD" => Some(NormalizationForm::NFKD),
8482-
_ => {
8483-
self.index = index;
8484-
return self.expected("unicode normalization", next_token);
8485-
}
8466+
let normalized_form = self.maybe_parse(|parser| {
8467+
match parser.parse_one_of_keywords(&[
8468+
Keyword::NFC,
8469+
Keyword::NFD,
8470+
Keyword::NFKC,
8471+
Keyword::NFKD,
8472+
]) {
8473+
Some(Keyword::NFC) => Ok(NormalizationForm::NFC),
8474+
Some(Keyword::NFD) => Ok(NormalizationForm::NFD),
8475+
Some(Keyword::NFKC) => Ok(NormalizationForm::NFKC),
8476+
Some(Keyword::NFKD) => Ok(NormalizationForm::NFKD),
8477+
_ => parser.expected("unicode normalization form", parser.peek_token()),
84868478
}
8487-
} else {
8488-
None
8489-
};
8479+
})?;
84908480
if self.parse_keyword(Keyword::NORMALIZED) {
84918481
return Ok((normalized_form, neg));
84928482
}
8493-
self.index = index;
8494-
self.expected("unicode normalization", self.peek_token())
8483+
self.expected("unicode normalization form", self.peek_token())
84958484
}
84968485

84978486
pub fn parse_enum_values(&mut self) -> Result<Vec<EnumMember>, ParserError> {

tests/sqlparser_common.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9387,7 +9387,7 @@ fn parse_is_boolean() {
93879387
let res = parse_sql_statements(sql);
93889388
assert_eq!(
93899389
ParserError::ParserError(
9390-
"Expected: [NOT] NULL | TRUE | FALSE | DISTINCT | [form] NORMALIZED FROM after IS, found: NFKC"
9390+
"Expected: [NOT] NULL | TRUE | FALSE | DISTINCT | [form] NORMALIZED FROM after IS, found: FROM"
93919391
.to_string()
93929392
),
93939393
res.unwrap_err()

0 commit comments

Comments
 (0)