From db69ccf2c60679c4ca111a618190258d5b5cef62 Mon Sep 17 00:00:00 2001 From: Xiao Li Date: Fri, 30 Oct 2015 15:12:19 -0700 Subject: [PATCH 1/2] cleanup the subquery name after eliminating subquery --- .../apache/spark/sql/catalyst/analysis/Analyzer.scala | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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 beabacfc88e3..76eb91cab909 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 @@ -1019,7 +1019,16 @@ class Analyzer( * scoping information for attributes and can be removed once analysis is complete. */ object EliminateSubQueries extends Rule[LogicalPlan] { - def apply(plan: LogicalPlan): LogicalPlan = plan transform { + def apply(plan: LogicalPlan): LogicalPlan = plan transformDown { + case Project(projectList, child: Subquery) => { + Project( + projectList.flatMap { + case ar: AttributeReference if ar.qualifiers.contains(child.alias) => + ar.withQualifiers(ar.qualifiers.filter(_!=child.alias)) :: Nil + case o => o :: Nil + }, + child) + } case Subquery(_, child) => child } } From a26763d758bc58dacf81be171428ede215775532 Mon Sep 17 00:00:00 2001 From: gatorsmile Date: Tue, 3 Nov 2015 16:04:31 -0800 Subject: [PATCH 2/2] flatmap->map --- .../apache/spark/sql/catalyst/analysis/Analyzer.scala | 9 ++++----- 1 file changed, 4 insertions(+), 5 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 76eb91cab909..b07f412cfa35 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 @@ -1020,15 +1020,14 @@ class Analyzer( */ object EliminateSubQueries extends Rule[LogicalPlan] { def apply(plan: LogicalPlan): LogicalPlan = plan transformDown { - case Project(projectList, child: Subquery) => { + case Project(projectList, child: Subquery) => Project( - projectList.flatMap { + projectList.map { case ar: AttributeReference if ar.qualifiers.contains(child.alias) => - ar.withQualifiers(ar.qualifiers.filter(_!=child.alias)) :: Nil - case o => o :: Nil + ar.withQualifiers(ar.qualifiers.filter(_!=child.alias)) + case o => o }, child) - } case Subquery(_, child) => child } }