diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/CheckAnalysis.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/CheckAnalysis.scala index 8309186d5665..4dc0bf98a541 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/CheckAnalysis.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/CheckAnalysis.scala @@ -923,7 +923,7 @@ trait CheckAnalysis extends PredicateHelper with LookupCatalog with QueryErrorsB } // Validate the subquery plan. - checkAnalysis(expr.plan) + checkAnalysis0(expr.plan) // Check if there is outer attribute that cannot be found from the plan. checkOuterReference(plan, expr) diff --git a/sql/core/src/test/scala/org/apache/spark/sql/SubquerySuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/SubquerySuite.scala index 3d4a629f7a9f..86a0c4d1799d 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/SubquerySuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/SubquerySuite.scala @@ -1019,6 +1019,17 @@ class SubquerySuite extends QueryTest } } + test("SPARK-41912: Subquery does not validate CTE") { + val df = sql(""" + | WITH + | cte1 as (SELECT 1 col1), + | cte2 as (SELECT (SELECT MAX(col1) FROM cte1)) + | SELECT * FROM cte1 + |""".stripMargin + ) + checkAnswer(df, Row(1) :: Nil) + } + test("SPARK-21835: Join in correlated subquery should be duplicateResolved: case 1") { withTable("t1") { withTempPath { path =>