mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-22 23:14:07 +00:00
Add TrimWhereField for parse_trim_expr
(#334)
* Remove Box from `trim_where` * Add TrimWhereField for `parse_trim_expr` * Add negative test case
This commit is contained in:
parent
5ce67177b3
commit
af1ac865b1
4 changed files with 41 additions and 5 deletions
|
@ -666,10 +666,10 @@ impl<'a> Parser<'a> {
|
|||
.iter()
|
||||
.any(|d| word.keyword == *d)
|
||||
{
|
||||
let ident = self.parse_identifier()?;
|
||||
let trim_where = self.parse_trim_where()?;
|
||||
let sub_expr = self.parse_expr()?;
|
||||
self.expect_keyword(Keyword::FROM)?;
|
||||
where_expr = Some((ident, sub_expr))
|
||||
where_expr = Some((trim_where, Box::new(sub_expr)));
|
||||
}
|
||||
}
|
||||
let expr = self.parse_expr()?;
|
||||
|
@ -677,10 +677,22 @@ impl<'a> Parser<'a> {
|
|||
|
||||
Ok(Expr::Trim {
|
||||
expr: Box::new(expr),
|
||||
trim_where: where_expr.map(|(ident, expr)| (Box::new(ident), Box::new(expr))),
|
||||
trim_where: where_expr,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn parse_trim_where(&mut self) -> Result<TrimWhereField, ParserError> {
|
||||
match self.next_token() {
|
||||
Token::Word(w) => match w.keyword {
|
||||
Keyword::BOTH => Ok(TrimWhereField::Both),
|
||||
Keyword::LEADING => Ok(TrimWhereField::Leading),
|
||||
Keyword::TRAILING => Ok(TrimWhereField::Trailing),
|
||||
_ => self.expected("trim_where field", Token::Word(w))?,
|
||||
},
|
||||
unexpected => self.expected("trim_where field", unexpected),
|
||||
}
|
||||
}
|
||||
|
||||
/// Parse a SQL LISTAGG expression, e.g. `LISTAGG(...) WITHIN GROUP (ORDER BY ...)`.
|
||||
pub fn parse_listagg_expr(&mut self) -> Result<Expr, ParserError> {
|
||||
self.expect_token(&Token::LParen)?;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue