This is an automated email from the ASF dual-hosted git repository.

iffyio pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion-sqlparser-rs.git


The following commit(s) were added to refs/heads/main by this push:
     new a3398223 DuckDB: Add support for multiple `TRIM` arguments (#1916)
a3398223 is described below

commit a3398223d7d6fcc0e5329aec76ceef040aeabaa9
Author: Ryan Schneider <ryanleeschnei...@gmail.com>
AuthorDate: Wed Jul 2 05:57:08 2025 -0700

    DuckDB: Add support for multiple `TRIM` arguments (#1916)
    
    Co-authored-by: Ifeanyi Ubah <ify1...@yahoo.com>
---
 src/parser/mod.rs         |  2 +-
 tests/sqlparser_common.rs |  1 -
 tests/sqlparser_duckdb.rs | 30 ++++++++++++++++++++++++++++++
 3 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/src/parser/mod.rs b/src/parser/mod.rs
index 4f8f1b85..a3856d70 100644
--- a/src/parser/mod.rs
+++ b/src/parser/mod.rs
@@ -2576,7 +2576,7 @@ impl<'a> Parser<'a> {
                 trim_characters: None,
             })
         } else if self.consume_token(&Token::Comma)
-            && dialect_of!(self is SnowflakeDialect | BigQueryDialect | 
GenericDialect)
+            && dialect_of!(self is DuckDbDialect | SnowflakeDialect | 
BigQueryDialect | GenericDialect)
         {
             let characters = self.parse_comma_separated(Parser::parse_expr)?;
             self.expect_token(&Token::RParen)?;
diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs
index 10a79252..61a4de40 100644
--- a/tests/sqlparser_common.rs
+++ b/tests/sqlparser_common.rs
@@ -7762,7 +7762,6 @@ fn parse_trim() {
         Box::new(MySqlDialect {}),
         //Box::new(BigQueryDialect {}),
         Box::new(SQLiteDialect {}),
-        Box::new(DuckDbDialect {}),
     ]);
 
     assert_eq!(
diff --git a/tests/sqlparser_duckdb.rs b/tests/sqlparser_duckdb.rs
index 44cb22ce..371d3aac 100644
--- a/tests/sqlparser_duckdb.rs
+++ b/tests/sqlparser_duckdb.rs
@@ -24,6 +24,7 @@ use test_utils::*;
 
 use sqlparser::ast::*;
 use sqlparser::dialect::{DuckDbDialect, GenericDialect};
+use sqlparser::parser::ParserError;
 
 fn duckdb() -> TestedDialects {
     TestedDialects::new(vec![Box::new(DuckDbDialect {})])
@@ -830,3 +831,32 @@ fn parse_use() {
         ])))
     );
 }
+
+#[test]
+fn test_duckdb_trim() {
+    let real_sql = r#"SELECT customer_id, TRIM(item_price_id, '"', "a") AS 
item_price_id FROM models_staging.subscriptions"#;
+    assert_eq!(duckdb().verified_stmt(real_sql).to_string(), real_sql);
+
+    let sql_only_select = "SELECT TRIM('xyz', 'a')";
+    let select = duckdb().verified_only_select(sql_only_select);
+    assert_eq!(
+        &Expr::Trim {
+            expr: Box::new(Expr::Value(
+                Value::SingleQuotedString("xyz".to_owned()).with_empty_span()
+            )),
+            trim_where: None,
+            trim_what: None,
+            trim_characters: Some(vec![Expr::Value(
+                Value::SingleQuotedString("a".to_owned()).with_empty_span()
+            )]),
+        },
+        expr_from_projection(only(&select.projection))
+    );
+
+    // missing comma separation
+    let error_sql = "SELECT TRIM('xyz' 'a')";
+    assert_eq!(
+        ParserError::ParserError("Expected: ), found: 'a'".to_owned()),
+        duckdb().parse_sql_statements(error_sql).unwrap_err()
+    );
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@datafusion.apache.org
For additional commands, e-mail: commits-h...@datafusion.apache.org

Reply via email to