From 9ada3931a9b495de411062ca2e33eceb430e55fc Mon Sep 17 00:00:00 2001
From: xuzifu666 <1206332514@qq.com>
Date: Thu, 16 Jul 2026 11:24:05 +0800
Subject: [PATCH] Test case for [CALCITE-5216] Cannot parse parenthesized
nested WITH clause
---
core/src/test/resources/sql/sub-query.iq | 12 ++++++++++++
.../org/apache/calcite/sql/parser/SqlParserTest.java | 10 ++++++++++
2 files changed, 22 insertions(+)
diff --git a/core/src/test/resources/sql/sub-query.iq b/core/src/test/resources/sql/sub-query.iq
index 84f9aa5183f5..daa85b96538b 100644
--- a/core/src/test/resources/sql/sub-query.iq
+++ b/core/src/test/resources/sql/sub-query.iq
@@ -937,6 +937,18 @@ where sal + 100 not in (
!ok
!}
+# [CALCITE-5216] Cannot parse parenthesized nested WITH clause
+# This sql program was validated in PostgreSQL
+with a as (with b as (select 1)(select 1)) select * from a;
++--------+
+| EXPR$0 |
++--------+
+| 1 |
++--------+
+(1 row)
+
+!ok
+
# [CALCITE-356] AssertionError while translating query with WITH and correlated sub-query
!if (use_old_decorr) {
with t (a, b) as (select * from (values (1, 2)))
diff --git a/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java b/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java
index bb7566c9904c..9e9a971b5d90 100644
--- a/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java
+++ b/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java
@@ -2858,6 +2858,16 @@ void checkPeriodPredicate(Checker checker) {
sql(sql).ok(expected);
}
+ /** Test case for
+ * [CALCITE-5216]
+ * Cannot parse parenthesized nested WITH clause. */
+ @Test void testNestedWithParenthesized() {
+ final String sql = "with a as (with b as (select 1)(select 1)) select * from a";
+ final String expected = "WITH `A` AS (WITH `B` AS (SELECT 1) SELECT 1) SELECT *\n"
+ + "FROM `A`";
+ sql(sql).ok(expected);
+ }
+
/** Test case for
* [CALCITE-5252]
* JDBC adapter sometimes miss parentheses around SELECT in WITH_ITEM body. */