From 2aa4c267e74b79a162c9d7d58bcdacd7b2900e6f Mon Sep 17 00:00:00 2001 From: Nickolay Ponomarev Date: Sat, 27 Apr 2019 18:15:36 +0300 Subject: [PATCH] Simplify CASE parsing --- src/sqlparser.rs | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/sqlparser.rs b/src/sqlparser.rs index f52d11b8..cffe3ed3 100644 --- a/src/sqlparser.rs +++ b/src/sqlparser.rs @@ -336,27 +336,23 @@ impl Parser { } pub fn parse_case_expression(&mut self) -> Result { - if self.parse_keywords(vec!["WHEN"]) { + if self.parse_keyword("WHEN") { let mut conditions = vec![]; let mut results = vec![]; - let mut else_result = None; loop { conditions.push(self.parse_expr()?); self.expect_keyword("THEN")?; results.push(self.parse_expr()?); - if self.parse_keywords(vec!["ELSE"]) { - else_result = Some(Box::new(self.parse_expr()?)); - if self.parse_keywords(vec!["END"]) { - break; - } else { - return parser_err!("Expecting END after a CASE..ELSE"); - } - } - if self.parse_keywords(vec!["END"]) { + if !self.parse_keyword("WHEN") { break; } - self.expect_keyword("WHEN")?; } + let else_result = if self.parse_keyword("ELSE") { + Some(Box::new(self.parse_expr()?)) + } else { + None + }; + self.expect_keyword("END")?; Ok(ASTNode::SQLCase { conditions, results,