diff options
author | Liang-Chi Hsieh <viirya@gmail.com> | 2016-02-19 12:22:22 -0800 |
---|---|---|
committer | Michael Armbrust <michael@databricks.com> | 2016-02-19 12:22:22 -0800 |
commit | c7c55637bfc523237f5cc5c5b61837b1e3d5fdfc (patch) | |
tree | 43a29935c6d61f7852cef79b5f743c2c12ccffd9 /sql/catalyst | |
parent | 6915cc23b3166088eab3f7cff2b6adc2a0e6739d (diff) | |
download | spark-c7c55637bfc523237f5cc5c5b61837b1e3d5fdfc.tar.gz spark-c7c55637bfc523237f5cc5c5b61837b1e3d5fdfc.tar.bz2 spark-c7c55637bfc523237f5cc5c5b61837b1e3d5fdfc.zip |
[SPARK-13384][SQL] Keep attribute qualifiers after dedup in Analyzer
JIRA: https://issues.apache.org/jira/browse/SPARK-13384
## What changes were proposed in this pull request?
When we de-duplicate attributes in Analyzer, we create new attributes. However, we don't keep original qualifiers. Some plans will be failed to analysed. We should keep original qualifiers in new attributes.
## How was the this patch tested?
Unit test is added.
Author: Liang-Chi Hsieh <viirya@gmail.com>
Closes #11261 from viirya/keep-attr-qualifiers.
Diffstat (limited to 'sql/catalyst')
-rw-r--r-- | sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala | 3 | ||||
-rw-r--r-- | sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/AnalysisSuite.scala | 14 |
2 files changed, 16 insertions, 1 deletions
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 004c1caaff..8368657b2b 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 f85ae24e04..92db02944c 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) + } } |