@@ -43,7 +43,7 @@ import org.apache.spark.sql.catalyst.trees.AlwaysProcess
4343import org .apache .spark .sql .catalyst .trees .CurrentOrigin .withOrigin
4444import org .apache .spark .sql .catalyst .trees .TreePattern ._
4545import org .apache .spark .sql .catalyst .types .DataTypeUtils
46- import org .apache .spark .sql .catalyst .util .{toPrettySQL , AUTO_GENERATED_ALIAS , CharVarcharUtils }
46+ import org .apache .spark .sql .catalyst .util .{toPrettySQL , CharVarcharUtils }
4747import org .apache .spark .sql .catalyst .util .ResolveDefaultColumns ._
4848import org .apache .spark .sql .connector .catalog .{View => _ , _ }
4949import org .apache .spark .sql .connector .catalog .CatalogV2Implicits ._
@@ -444,62 +444,42 @@ class Analyzer(override val catalogManager: CatalogManager) extends RuleExecutor
444444 * Replaces [[UnresolvedAlias ]]s with concrete aliases.
445445 */
446446 object ResolveAliases extends Rule [LogicalPlan ] {
447- private def assignAliases (exprs : Seq [NamedExpression ]) = {
448- exprs.map(_.transformUpWithPruning(_.containsPattern(UNRESOLVED_ALIAS )) {
449- case u : UnresolvedAlias => resolve(u)
450- }
451- ).asInstanceOf [Seq [NamedExpression ]]
452- }
453-
454- private [analysis] def resolve (u : UnresolvedAlias ): Expression = {
455- val UnresolvedAlias (child, optGenAliasFunc) = u
456- child match {
457- case ne : NamedExpression => ne
458- case go @ GeneratorOuter (g : Generator ) if g.resolved => MultiAlias (go, Nil )
459- case e if ! e.resolved => u
460- case g : Generator => MultiAlias (g, Nil )
461- case c @ Cast (ne : NamedExpression , _, _, _) => Alias (c, ne.name)()
462- case e : ExtractValue if extractOnly(e) => Alias (e, toPrettySQL(e))()
463- case e if optGenAliasFunc.isDefined =>
464- Alias (child, optGenAliasFunc.get.apply(e))()
465- case l : Literal => Alias (l, toPrettySQL(l))()
466- case e =>
467- val metaForAutoGeneratedAlias = new MetadataBuilder ()
468- .putString(AUTO_GENERATED_ALIAS , " true" )
469- .build()
470- Alias (e, toPrettySQL(e))(explicitMetadata = Some (metaForAutoGeneratedAlias))
471- }
472- }
473-
474- private def extractOnly (e : Expression ): Boolean = e match {
475- case _ : ExtractValue => e.children.forall(extractOnly)
476- case _ : Literal => true
477- case _ : Attribute => true
478- case _ => false
479- }
480-
481- private def hasUnresolvedAlias (exprs : Seq [NamedExpression ]) =
482- exprs.exists(_.exists(_.isInstanceOf [UnresolvedAlias ]))
483-
484- def apply (plan : LogicalPlan ): LogicalPlan = plan.resolveOperatorsUpWithPruning(
485- _.containsPattern(UNRESOLVED_ALIAS ), ruleId) {
486- case Aggregate (groups, aggs, child, _) if child.resolved && hasUnresolvedAlias(aggs) =>
487- Aggregate (groups, assignAliases(aggs), child)
488-
489- case Pivot (groupByOpt, pivotColumn, pivotValues, aggregates, child)
490- if child.resolved && groupByOpt.isDefined && hasUnresolvedAlias(groupByOpt.get) =>
491- Pivot (Some (assignAliases(groupByOpt.get)), pivotColumn, pivotValues, aggregates, child)
447+ def apply (plan : LogicalPlan ): LogicalPlan =
448+ plan.resolveOperatorsUpWithPruning(_.containsPattern(UNRESOLVED_ALIAS ), ruleId) {
449+ case Aggregate (groups, aggs, child, _)
450+ if child.resolved && AliasResolution .hasUnresolvedAlias(aggs) =>
451+ Aggregate (groups, AliasResolution .assignAliases(aggs), child)
452+
453+ case Pivot (groupByOpt, pivotColumn, pivotValues, aggregates, child)
454+ if child.resolved &&
455+ groupByOpt.isDefined &&
456+ AliasResolution .hasUnresolvedAlias(groupByOpt.get) =>
457+ Pivot (
458+ Some (AliasResolution .assignAliases(groupByOpt.get)),
459+ pivotColumn,
460+ pivotValues,
461+ aggregates,
462+ child
463+ )
492464
493- case up : Unpivot if up.child.resolved &&
494- (up.ids.exists(hasUnresolvedAlias) || up.values.exists(_.exists(hasUnresolvedAlias))) =>
495- up.copy(ids = up.ids.map(assignAliases), values = up.values.map(_.map(assignAliases)))
465+ case up : Unpivot
466+ if up.child.resolved &&
467+ (up.ids.exists(AliasResolution .hasUnresolvedAlias) || up.values.exists(
468+ _.exists(AliasResolution .hasUnresolvedAlias)
469+ )) =>
470+ up.copy(
471+ ids = up.ids.map(AliasResolution .assignAliases),
472+ values = up.values.map(_.map(AliasResolution .assignAliases))
473+ )
496474
497- case Project (projectList, child) if child.resolved && hasUnresolvedAlias(projectList) =>
498- Project (assignAliases(projectList), child)
475+ case Project (projectList, child)
476+ if child.resolved && AliasResolution .hasUnresolvedAlias(projectList) =>
477+ Project (AliasResolution .assignAliases(projectList), child)
499478
500- case c : CollectMetrics if c.child.resolved && hasUnresolvedAlias(c.metrics) =>
501- c.copy(metrics = assignAliases(c.metrics))
502- }
479+ case c : CollectMetrics
480+ if c.child.resolved && AliasResolution .hasUnresolvedAlias(c.metrics) =>
481+ c.copy(metrics = AliasResolution .assignAliases(c.metrics))
482+ }
503483 }
504484
505485 object ResolveGroupingAnalytics extends Rule [LogicalPlan ] {
0 commit comments