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

xuzifu666 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/main by this push:
     new b37906810a [CALCITE-6068] Whitespaces are removed from filter values
b37906810a is described below

commit b37906810abf1206755242d420ccc6bfa0d3dee8
Author: Yu Xu <[email protected]>
AuthorDate: Wed Oct 7 10:48:23 2026 +0800

    [CALCITE-6068] Whitespaces are removed from filter values
---
 .../calcite/rel/rel2sql/RelToSqlConverterTest.java | 54 ++++++++++++++++++++++
 1 file changed, 54 insertions(+)

diff --git 
a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java 
b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
index 1e15dfb6ec..23c30f42bf 100644
--- 
a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
+++ 
b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
@@ -1094,6 +1094,60 @@ private static RelNode sqlToRel(String sql, SchemaPlus 
defaultSchema,
     relFn(relFn).ok(expected);
   }
 
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-6068";>[CALCITE-6068]
+   * Whitespaces are removed from filter values</a>. */
+  @Test void testSelectWhereInTrailingWhitespace() {
+    final Function<RelBuilder, RelNode> relFn = b -> b
+        .scan("EMP")
+        .filter(b.in(b.field("ENAME"), b.literal("value 1 "), b.literal("value 
2 ")))
+        .build();
+    final String expected = "SELECT *\n"
+        + "FROM \"scott\".\"EMP\"\n"
+        + "WHERE \"ENAME\" IN ('value 1 ', 'value 2 ')";
+    relFn(relFn).ok(expected);
+  }
+
+  /** Values of different lengths in the IN list, each with trailing
+   * whitespace, must be preserved as-is. */
+  @Test void testSelectWhereInTrailingWhitespace2() {
+    final Function<RelBuilder, RelNode> relFn = b -> b
+        .scan("EMP")
+        .filter(b.in(b.field("ENAME"), b.literal("value 1 "), b.literal("value 
2  ")))
+        .build();
+    final String expected = "SELECT *\n"
+        + "FROM \"scott\".\"EMP\"\n"
+        + "WHERE \"ENAME\" IN ('value 1 ', 'value 2  ')";
+    relFn(relFn).ok(expected);
+  }
+
+  /** End-to-end: IN values with trailing whitespace survive the
+   * SQL → RelNode → SQL round trip. */
+  @Test void testSelectWhereInTrailingWhitespace3() {
+    sql("select \"product_id\"\n"
+        + "from \"product\"\n"
+        + "where \"brand_name\" in ('value 1 ', 'value 2 ')")
+        .ok("SELECT \"product_id\"\n"
+            + "FROM \"foodmart\".\"product\"\n"
+            + "WHERE \"brand_name\" = 'value 1 ' OR \"brand_name\" = 'value 2 
'");
+  }
+
+  /** The OR form of the same filter (which RelBuilder simplifies to SEARCH)
+   * must also preserve trailing whitespace; this is the workaround mentioned
+   * in CALCITE-6068 that used to be trimmed as well. */
+  @Test void testSelectWhereInTrailingWhitespace4() {
+    final Function<RelBuilder, RelNode> relFn = b -> b
+        .scan("EMP")
+        .filter(
+            b.or(b.equals(b.field("ENAME"), b.literal("value 1 ")),
+                b.equals(b.field("ENAME"), b.literal("value 2 "))))
+        .build();
+    final String expected = "SELECT *\n"
+        + "FROM \"scott\".\"EMP\"\n"
+        + "WHERE \"ENAME\" IN ('value 1 ', 'value 2 ')";
+    relFn(relFn).ok(expected);
+  }
+
   @Test void testUsesSubqueryWhenSortingByIdThenOrdinal() {
     final Function<RelBuilder, RelNode> relFn = b -> b
         .scan("EMP")

Reply via email to