aboutsummaryrefslogtreecommitdiff
path: root/sql/catalyst
diff options
context:
space:
mode:
authorLiang-Chi Hsieh <viirya@appier.com>2015-10-12 09:16:14 -0700
committerYin Huai <yhuai@databricks.com>2015-10-12 09:16:14 -0700
commitfcb37a04177edc2376e39dd0b910f0268f7c72ec (patch)
tree5996f49bd8b368e963f6f91f840a04d5d4fd3b54 /sql/catalyst
parent595012ea8b9c6afcc2fc024d5a5e198df765bd75 (diff)
downloadspark-fcb37a04177edc2376e39dd0b910f0268f7c72ec.tar.gz
spark-fcb37a04177edc2376e39dd0b910f0268f7c72ec.tar.bz2
spark-fcb37a04177edc2376e39dd0b910f0268f7c72ec.zip
[SPARK-10960] [SQL] SQL with windowing function should be able to refer column in inner select
JIRA: https://issues.apache.org/jira/browse/SPARK-10960 When accessing a column in inner select from a select with window function, `AnalysisException` will be thrown. For example, an query like this: select area, rank() over (partition by area order by tmp.month) + tmp.tmp1 as c1 from (select month, area, product, 1 as tmp1 from windowData) tmp Currently, the rule `ExtractWindowExpressions` in `Analyzer` only extracts regular expressions from `WindowFunction`, `WindowSpecDefinition` and `AggregateExpression`. We need to also extract other attributes as the one in `Alias` as shown in the above query. Author: Liang-Chi Hsieh <viirya@appier.com> Closes #9011 from viirya/fix-window-inner-column.
Diffstat (limited to 'sql/catalyst')
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala4
1 files changed, 4 insertions, 0 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 bf72d47ce1..f5597a08d3 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
@@ -831,6 +831,10 @@ class Analyzer(
val withName = Alias(agg, s"_w${extractedExprBuffer.length}")()
extractedExprBuffer += withName
withName.toAttribute
+
+ // Extracts other attributes
+ case attr: Attribute => extractExpr(attr)
+
}.asInstanceOf[NamedExpression]
}