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 004c1caaffec63ba4743b1dfa63c5eec87bde133..8368657b2ba2bf534006e0c1e1da567bcb071749 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 @@ -432,7 +432,8 @@ class Analyzer( case r if r == oldRelation => newRelation } transformUp { case other => other transformExpressions { - case a: Attribute => attributeRewrites.get(a).getOrElse(a) + case a: Attribute => + attributeRewrites.get(a).getOrElse(a).withQualifiers(a.qualifiers) } } newRight diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/AnalysisSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/AnalysisSuite.scala index f85ae24e0459b19e37a8e625884642beac22df63..92db02944c6ace9623e546cf5161eee912499134 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/AnalysisSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/AnalysisSuite.scala @@ -21,6 +21,7 @@ import org.apache.spark.sql.catalyst.TableIdentifier import org.apache.spark.sql.catalyst.dsl.expressions._ import org.apache.spark.sql.catalyst.dsl.plans._ import org.apache.spark.sql.catalyst.expressions._ +import org.apache.spark.sql.catalyst.plans.Inner import org.apache.spark.sql.catalyst.plans.logical._ import org.apache.spark.sql.types._ @@ -336,4 +337,17 @@ class AnalysisSuite extends AnalysisTest { val plan = relation.select(CaseWhen(Seq((Literal(true), 'a.attr)), 'b).as("val")) assertAnalysisSuccess(plan) } + + test("Keep attribute qualifiers after dedup") { + val input = LocalRelation('key.int, 'value.string) + + val query = + Project(Seq($"x.key", $"y.key"), + Join( + Project(Seq($"x.key"), Subquery("x", input)), + Project(Seq($"y.key"), Subquery("y", input)), + Inner, None)) + + assertAnalysisSuccess(query) + } }