diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala index 282cb37d514f..d14450f87d9f 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala @@ -1499,6 +1499,10 @@ class Analyzer(override val catalogManager: CatalogManager) .nonEmpty => Seq((oldVersion, oldVersion.copy(windowExpressions = newAliases(windowExpressions)))) + case oldVersion @ ScriptTransformation(_, _, output, _, _) + if AttributeSet(output).intersect(conflictingAttributes).nonEmpty => + Seq((oldVersion, oldVersion.copy(output = output.map(_.newInstance())))) + case _ => plan.children.flatMap(collectConflictPlans) } diff --git a/sql/core/src/test/resources/sql-tests/inputs/transform.sql b/sql/core/src/test/resources/sql-tests/inputs/transform.sql index 3f39700a9591..bfb2474eb4ae 100644 --- a/sql/core/src/test/resources/sql-tests/inputs/transform.sql +++ b/sql/core/src/test/resources/sql-tests/inputs/transform.sql @@ -183,3 +183,9 @@ SELECT a, b, decode(c, 'UTF-8'), d, e, f, g, h, i, j, k, l FROM ( NULL DEFINED AS 'NULL' FROM t ) tmp; + +-- SPARK-34634: self join using CTE contains transform +WITH temp AS ( + SELECT TRANSFORM(a) USING 'cat' AS (b string) FROM t +) +SELECT t1.b FROM temp t1 JOIN temp t2 ON t1.b = t2.b diff --git a/sql/core/src/test/resources/sql-tests/results/transform.sql.out b/sql/core/src/test/resources/sql-tests/results/transform.sql.out index 3267a7625a7d..16cab8ab495a 100644 --- a/sql/core/src/test/resources/sql-tests/results/transform.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/transform.sql.out @@ -1,5 +1,5 @@ -- Automatically generated by SQLQueryTestSuite --- Number of queries: 16 +-- Number of queries: 17 -- !query @@ -333,3 +333,16 @@ SELECT a, b, decode(c, 'UTF-8'), d, e, f, g, h, i, j, k, l FROM ( NULL DEFINED AS 'NULL' FROM t ) tmp + + +-- !query +WITH temp AS ( + SELECT TRANSFORM(a) USING 'cat' AS (b string) FROM t +) +SELECT t1.b FROM temp t1 JOIN temp t2 ON t1.b = t2.b +-- !query schema +struct +-- !query output +1 +2 +3