From 84e65afb5de5a001693b97b4ad47cbef380c3bef Mon Sep 17 00:00:00 2001 From: angerszhu Date: Wed, 2 Sep 2020 07:09:36 +0800 Subject: [PATCH] Update Analyzer.scala --- .../sql/catalyst/analysis/Analyzer.scala | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 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 1ec49571cbe19..be8af8cdcbf71 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 @@ -1456,11 +1456,7 @@ class Analyzer( val resolvedGroupingExprs = a.groupingExpressions .map(resolveExpressionTopDown(_, planForResolve, trimAlias = true)) - .map { - // trim Alias over top-level GetStructField - case Alias(s: GetStructField, _) => s - case other => other - } + .map(trimTopLevelGetStructFieldAlias) val resolvedAggExprs = a.aggregateExpressions .map(resolveExpressionTopDown(_, planForResolve, trimAlias = true)) @@ -1471,19 +1467,11 @@ class Analyzer( case g: GroupingSets => val resolvedSelectedExprs = g.selectedGroupByExprs .map(_.map(resolveExpressionTopDown(_, g, trimAlias = true)) - .map { - // trim Alias over top-level GetStructField - case Alias(s: GetStructField, _) => s - case other => other - }) + .map(trimTopLevelGetStructFieldAlias)) val resolvedGroupingExprs = g.groupByExprs .map(resolveExpressionTopDown(_, g, trimAlias = true)) - .map { - // trim Alias over top-level GetStructField - case Alias(s: GetStructField, _) => s - case other => other - } + .map(trimTopLevelGetStructFieldAlias) val resolvedAggExprs = g.aggregations .map(resolveExpressionTopDown(_, g, trimAlias = true)) @@ -1585,6 +1573,17 @@ class Analyzer( AttributeSet(projectList.collect { case a: Alias => a.toAttribute }) } + // This method is used to trim groupByExpressions/selectedGroupByExpressions's top-level + // GetStructField Alias. Since these expression are not NamedExpression originally, + // we are safely to trim top-level GetStructField Alias. + def trimTopLevelGetStructFieldAlias(e: Expression): Expression = { + e match { + // trim Alias over top-level GetStructField + case Alias(s: GetStructField, _) => s + case other => other + } + } + /** * Build a project list for Project/Aggregate and expand the star if possible */