Support Snowflake/BigQuery TRIM. (#975)

This commit is contained in:
Zdenko Nevrala 2023-10-06 20:48:18 +02:00 committed by GitHub
parent 5263da68cd
commit 83cb734b3c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 95 additions and 0 deletions

View file

@ -1315,6 +1315,7 @@ impl<'a> Parser<'a> {
/// ```sql
/// TRIM ([WHERE] ['text' FROM] 'text')
/// TRIM ('text')
/// TRIM(<expr>, [, characters]) -- only Snowflake or BigQuery
/// ```
pub fn parse_trim_expr(&mut self) -> Result<Expr, ParserError> {
self.expect_token(&Token::LParen)?;
@ -1336,6 +1337,18 @@ impl<'a> Parser<'a> {
expr: Box::new(expr),
trim_where,
trim_what: Some(trim_what),
trim_characters: None,
})
} else if self.consume_token(&Token::Comma)
&& dialect_of!(self is SnowflakeDialect | BigQueryDialect | GenericDialect)
{
let characters = self.parse_comma_separated(Parser::parse_expr)?;
self.expect_token(&Token::RParen)?;
Ok(Expr::Trim {
expr: Box::new(expr),
trim_where: None,
trim_what: None,
trim_characters: Some(characters),
})
} else {
self.expect_token(&Token::RParen)?;
@ -1343,6 +1356,7 @@ impl<'a> Parser<'a> {
expr: Box::new(expr),
trim_where,
trim_what: None,
trim_characters: None,
})
}
}