@@ -1009,26 +1009,26 @@ class Analyzer(
10091009 ! child.output.exists(a => resolver(a.name, attrName))
10101010 }
10111011
1012+ private def mayResolveAttrByAggregateExprs (
1013+ exprs : Seq [Expression ], aggs : Seq [NamedExpression ], child : LogicalPlan ): Seq [Expression ] = {
1014+ exprs.map { _.transform {
1015+ case u : UnresolvedAttribute if notResolvableByChild(u.name, child) =>
1016+ aggs.find(ne => resolver(ne.name, u.name)).getOrElse(u)
1017+ }}
1018+ }
1019+
10121020 override def apply (plan : LogicalPlan ): LogicalPlan = plan.resolveOperators {
10131021 case agg @ Aggregate (groups, aggs, child)
10141022 if conf.groupByAliases && child.resolved && aggs.forall(_.resolved) &&
10151023 groups.exists(! _.resolved) =>
1016- agg.copy(groupingExpressions = groups.map { _.transform {
1017- case u : UnresolvedAttribute if notResolvableByChild(u.name, child) =>
1018- aggs.find(ne => resolver(ne.name, u.name)).getOrElse(u)
1019- }
1020- })
1024+ agg.copy(groupingExpressions = mayResolveAttrByAggregateExprs(groups, aggs, child))
10211025
10221026 case gs @ GroupingSets (selectedGroups, groups, child, aggs)
10231027 if conf.groupByAliases && child.resolved && aggs.forall(_.resolved) &&
1024- (selectedGroups :+ groups).exists(_.exists(_.isInstanceOf [UnresolvedAttribute ])) =>
1025- def mayResolveAttrByAggregateExprs (exprs : Seq [Expression ]): Seq [Expression ] = exprs.map {
1026- case u : UnresolvedAttribute if notResolvableByChild(u.name, child) =>
1027- aggs.find(ne => resolver(ne.name, u.name)).getOrElse(u)
1028- case e => e
1029- }
1030- gs.copy(selectedGroupByExprs = selectedGroups.map(mayResolveAttrByAggregateExprs),
1031- groupByExprs = mayResolveAttrByAggregateExprs(groups))
1028+ groups.exists(_.isInstanceOf [UnresolvedAttribute ]) =>
1029+ gs.copy(
1030+ selectedGroupByExprs = selectedGroups.map(mayResolveAttrByAggregateExprs(_, aggs, child)),
1031+ groupByExprs = mayResolveAttrByAggregateExprs(groups, aggs, child))
10321032 }
10331033 }
10341034
0 commit comments