From ad09914e24a84ca0e2b3e147983918eb79731f2b Mon Sep 17 00:00:00 2001 From: Peter Toth Date: Wed, 1 Oct 2025 12:54:34 +0200 Subject: [PATCH] fix --- .../spark/sql/catalyst/expressions/SortOrder.scala | 13 +++---------- .../plans/AliasAwareOutputExpression.scala | 14 +++----------- .../sql/execution/columnar/InMemoryRelation.scala | 9 +++++++-- .../spark/sql/execution/datasources/V1Writes.scala | 11 ++--------- 4 files changed, 15 insertions(+), 32 deletions(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/SortOrder.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/SortOrder.scala index 13fe6cde59637..c476a0e098068 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/SortOrder.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/SortOrder.scala @@ -130,16 +130,9 @@ object SortOrder { } val effectiveRequiredOrdering = requiredOrdering.filterNot { requiredOrder => - constantProvidedOrdering.exists { - case s @ SortOrder(alias: Alias, Constant, _, _) => - val providedOrder = s.copy(child = alias.toAttribute) - providedOrder.satisfies(requiredOrder) - case providedOrder => - providedOrder.satisfies(requiredOrder) - } - // constantProvidedOrdering.exists { providedOrder => - // providedOrder.satisfies(requiredOrder) - // } + constantProvidedOrdering.exists { providedOrder => + providedOrder.satisfies(requiredOrder) + } } if (effectiveRequiredOrdering.length > nonConstantProvidedOrdering.length) { diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/AliasAwareOutputExpression.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/AliasAwareOutputExpression.scala index a4184be3e958b..efbd7b0c8b810 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/AliasAwareOutputExpression.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/AliasAwareOutputExpression.scala @@ -128,16 +128,8 @@ trait AliasAwareQueryOutputOrdering[T <: QueryPlan[T]] } } } - newOrdering.takeWhile(_.isDefined).flatten.toSeq ++ outputExpressions.filter { - case Alias(child, _) => child.foldable - case expr => expr.foldable - }.map(SortOrder(_, Constant)) -// newOrdering.takeWhile(_.isDefined).flatten.toSeq ++ outputExpressions.flatMap { -// case alias @ Alias(child, _) if child.foldable => -// Some(SortOrder(alias.toAttribute, Constant)) -// case expr if expr.foldable => -// Some(SortOrder(expr, Constant)) -// case _ => None -// } + newOrdering.takeWhile(_.isDefined).flatten.toSeq ++ outputExpressions.collect { + case a @ Alias(child, _) if child.foldable => SortOrder(a.toAttribute, Constant) + } } } diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/columnar/InMemoryRelation.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/columnar/InMemoryRelation.scala index 332da0f6717f7..9acca95bd6424 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/execution/columnar/InMemoryRelation.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/columnar/InMemoryRelation.scala @@ -469,8 +469,13 @@ case class InMemoryRelation( } } - def withOutput(newOutput: Seq[Attribute]): InMemoryRelation = - InMemoryRelation(newOutput, cacheBuilder, outputOrdering, statsOfPlanToCache) + def withOutput(newOutput: Seq[Attribute]): InMemoryRelation = { + val map = AttributeMap(output.zip(newOutput)) + val newOutputOrdering = outputOrdering + .map(_.transform { case a: Attribute => map(a) }) + .asInstanceOf[Seq[SortOrder]] + InMemoryRelation(newOutput, cacheBuilder, newOutputOrdering, statsOfPlanToCache) + } override def newInstance(): this.type = { InMemoryRelation( diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/V1Writes.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/V1Writes.scala index cafe0bb1b8cd3..59a02e92d6e80 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/V1Writes.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/V1Writes.scala @@ -208,16 +208,9 @@ object V1WritesUtils { } val effectiveRequiredOrdering = requiredOrdering.filterNot { requiredOrder => - constantOutputOrdering.exists { - case s @ SortOrder(alias: Alias, Constant, _, _) => - val outputOrder = s.copy(child = alias.toAttribute) - outputOrder.satisfies(outputOrder.copy(child = requiredOrder)) - case outputOrder => - outputOrder.satisfies(outputOrder.copy(child = requiredOrder)) + constantOutputOrdering.exists { outputOrder => + outputOrder.satisfies(outputOrder.copy(child = requiredOrder)) } -// constantOutputOrdering.exists { outputOrder => -// outputOrder.satisfies(outputOrder.copy(child = requiredOrder)) -// } } if (effectiveRequiredOrdering.length > nonConstantOutputOrdering.length) {