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")