diff --git a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
index a38ebf0b3be2..98b0c5c134dd 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
@@ -4934,6 +4934,30 @@ void checkUserDefinedOrderByOver(NullCollation nullCollation) {
.convertsTo("${planNotExpanded}");
}
+ /**
+ * Test case for
+ * [CALCITE-6028]
+ * SqlToRelConverter#substituteSubQuery gives NullPointerException when convert
+ * IN-subquery within JOIN if value size of IN exceeds IN_SUBQUERY_THRESHOLD.
+ */
+ @Test void testInSubQueryWithinJoin0() {
+ String sql = "SELECT t1.x FROM (values (1, 'a')) as t1(x, y)\n" +
+ "left join (values (1, 'b')) as t2(x, y)\n" +
+ "ON t1.x=t2.x AND t1.x IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21)";
+ sql(sql).ok();
+ }
+
+ /**
+ * As {@link #testInSubQueryWithinJoin0()} but size of IN value list < 20
+ */
+ @Test void testInSubQueryWithinJoin1() {
+ String sql = "SELECT t1.x FROM (values (1, 'a')) as t1(x, y)\n" +
+ "left join (values (1, 'b')) as t2(x, y)\n" +
+ "ON t1.x=t2.x AND t1.x IN (1,2,3,4,5)";
+ sql(sql).ok();
+ }
+
+
/**
* Test case for
* [CALCITE-4295]
diff --git a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
index b914e14dc749..3c1b92ea54bf 100644
--- a/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
@@ -2779,6 +2779,36 @@ FROM dept, emp WHERE emp.deptno = dept.deptno AND emp.sal < (
)]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+