Skip to content

Commit 535870b

Browse files
Refactored parsing to using keywords instead of strings
1 parent d6a6a44 commit 535870b

File tree

2 files changed

+33
-20
lines changed

2 files changed

+33
-20
lines changed

src/keywords.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ define_keywords!(
214214
COMMENT,
215215
COMMIT,
216216
COMMITTED,
217+
COMMUTATOR,
217218
COMPATIBLE,
218219
COMPRESSION,
219220
COMPUPDATE,
@@ -444,6 +445,7 @@ define_keywords!(
444445
GROUPS,
445446
GZIP,
446447
HASH,
448+
HASHES,
447449
HAVING,
448450
HEADER,
449451
HEAP,
@@ -536,7 +538,10 @@ define_keywords!(
536538
LATERAL,
537539
LEAD,
538540
LEADING,
541+
LEAKPROOF,
542+
LEAST,
539543
LEFT,
544+
LEFTARG,
540545
LEVEL,
541546
LIKE,
542547
LIKE_REGEX,
@@ -590,6 +595,7 @@ define_keywords!(
590595
MEDIUMTEXT,
591596
MEMBER,
592597
MERGE,
598+
MERGES,
593599
MESSAGE,
594600
METADATA,
595601
METHOD,
@@ -627,6 +633,7 @@ define_keywords!(
627633
NATURAL,
628634
NCHAR,
629635
NCLOB,
636+
NEGATOR,
630637
NEST,
631638
NESTED,
632639
NETWORK,
@@ -834,6 +841,7 @@ define_keywords!(
834841
RETURNS,
835842
REVOKE,
836843
RIGHT,
844+
RIGHTARG,
837845
RLIKE,
838846
RM,
839847
ROLE,

src/parser/mod.rs

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6470,35 +6470,45 @@ impl<'a> Parser<'a> {
64706470
let mut merges = false;
64716471

64726472
loop {
6473-
// Parse parameter name
6474-
let param_name = self.parse_identifier()?;
6475-
let param_name_upper = param_name.value.to_uppercase();
6473+
// Parse parameter name as keyword
6474+
let keyword = self.expect_one_of_keywords(&[
6475+
Keyword::FUNCTION,
6476+
Keyword::PROCEDURE,
6477+
Keyword::LEFTARG,
6478+
Keyword::RIGHTARG,
6479+
Keyword::COMMUTATOR,
6480+
Keyword::NEGATOR,
6481+
Keyword::RESTRICT,
6482+
Keyword::JOIN,
6483+
Keyword::HASHES,
6484+
Keyword::MERGES,
6485+
])?;
64766486

64776487
// Check if this is a flag (HASHES or MERGES) - no '=' expected
6478-
match param_name_upper.as_str() {
6479-
"HASHES" => {
6488+
match keyword {
6489+
Keyword::HASHES => {
64806490
hashes = true;
64816491
}
6482-
"MERGES" => {
6492+
Keyword::MERGES => {
64836493
merges = true;
64846494
}
6485-
"FUNCTION" | "PROCEDURE" => {
6495+
Keyword::FUNCTION | Keyword::PROCEDURE => {
64866496
self.expect_token(&Token::Eq)?;
64876497
let func_name = self.parse_object_name(false)?;
64886498
function = Some(func_name);
6489-
is_procedure = param_name_upper == "PROCEDURE";
6499+
is_procedure = keyword == Keyword::PROCEDURE;
64906500
}
6491-
"LEFTARG" => {
6501+
Keyword::LEFTARG => {
64926502
self.expect_token(&Token::Eq)?;
64936503
let data_type = self.parse_data_type()?;
64946504
left_arg = Some(data_type);
64956505
}
6496-
"RIGHTARG" => {
6506+
Keyword::RIGHTARG => {
64976507
self.expect_token(&Token::Eq)?;
64986508
let data_type = self.parse_data_type()?;
64996509
right_arg = Some(data_type);
65006510
}
6501-
"COMMUTATOR" => {
6511+
Keyword::COMMUTATOR => {
65026512
self.expect_token(&Token::Eq)?;
65036513
let op_name = if self.parse_keyword(Keyword::OPERATOR) {
65046514
self.expect_token(&Token::LParen)?;
@@ -6510,7 +6520,7 @@ impl<'a> Parser<'a> {
65106520
};
65116521
commutator = Some(op_name);
65126522
}
6513-
"NEGATOR" => {
6523+
Keyword::NEGATOR => {
65146524
self.expect_token(&Token::Eq)?;
65156525
let op_name = if self.parse_keyword(Keyword::OPERATOR) {
65166526
self.expect_token(&Token::LParen)?;
@@ -6522,22 +6532,17 @@ impl<'a> Parser<'a> {
65226532
};
65236533
negator = Some(op_name);
65246534
}
6525-
"RESTRICT" => {
6535+
Keyword::RESTRICT => {
65266536
self.expect_token(&Token::Eq)?;
65276537
let func_name = self.parse_object_name(false)?;
65286538
restrict = Some(func_name);
65296539
}
6530-
"JOIN" => {
6540+
Keyword::JOIN => {
65316541
self.expect_token(&Token::Eq)?;
65326542
let func_name = self.parse_object_name(false)?;
65336543
join = Some(func_name);
65346544
}
6535-
_ => {
6536-
return Err(ParserError::ParserError(format!(
6537-
"Unknown CREATE OPERATOR parameter: {}",
6538-
param_name_upper
6539-
)))
6540-
}
6545+
_ => unreachable!("unexpected keyword in CREATE OPERATOR"),
65416546
}
65426547

65436548
// Check for comma or closing parenthesis

0 commit comments

Comments
 (0)