@@ -535,46 +535,70 @@ index ed182322aec..1ae6afa686a 100644
535535 spark.range(100).write.saveAsTable(s"$dbName.$table2Name")
536536
537537diff --git a/sql/core/src/test/scala/org/apache/spark/sql/DataFrameSetOperationsSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/DataFrameSetOperationsSuite.scala
538- index 93ff7becaec..7b2871cc656 100644
538+ index 93ff7becaec..87537a25b3b 100644
539539--- a/sql/core/src/test/scala/org/apache/spark/sql/DataFrameSetOperationsSuite.scala
540540+++ b/sql/core/src/test/scala/org/apache/spark/sql/DataFrameSetOperationsSuite.scala
541- @@ -20,6 +20,7 @@ package org.apache.spark.sql
542- import java.sql.{Date, Timestamp}
543- import java.util.Locale
544-
545- + import org.apache.spark.sql.IgnoreComet
541+ @@ -23,10 +23,11 @@ import java.util.Locale
546542 import org.apache.spark.sql.catalyst.optimizer.RemoveNoopUnion
547543 import org.apache.spark.sql.catalyst.plans.logical.Union
548544 import org.apache.spark.sql.catalyst.plans.physical.UnknownPartitioning
549- @@ -1511,7 +1512,8 @@ class DataFrameSetOperationsSuite extends QueryTest
550- }
551- }
545+ + import org.apache.spark.sql.comet.CometUnionExec
546+ import org.apache.spark.sql.execution.{SparkPlan, UnionExec}
547+ import org.apache.spark.sql.execution.adaptive.AdaptiveSparkPlanHelper
548+ import org.apache.spark.sql.execution.columnar.InMemoryTableScanExec
549+ - import org.apache.spark.sql.execution.exchange.{ReusedExchangeExec, ShuffleExchangeExec}
550+ + import org.apache.spark.sql.execution.exchange.{ReusedExchangeExec, ShuffleExchangeLike}
551+ import org.apache.spark.sql.functions._
552+ import org.apache.spark.sql.internal.SQLConf
553+ import org.apache.spark.sql.test.{ExamplePoint, ExamplePointUDT, SharedSparkSession, SQLTestData}
554+ @@ -1519,11 +1520,12 @@ class DataFrameSetOperationsSuite extends QueryTest
555+ val union = df1.repartition($"a").union(df2.repartition($"a"))
556+ val unionExec = union.queryExecution.executedPlan.collect {
557+ case u: UnionExec => u
558+ + case u: CometUnionExec => u
559+ }
560+ assert(unionExec.size == 1)
552561
553- - test("SPARK-52921: union partitioning - reused shuffle") {
554- + test("SPARK-52921: union partitioning - reused shuffle",
555- + IgnoreComet("https://github.com/apache/datafusion-comet/issues/4098")) {
556- withSQLConf(SQLConf.ADAPTIVE_EXECUTION_ENABLED.key -> "false") {
557- val df1 = Seq((1, 2, 4), (1, 3, 5), (2, 2, 3), (2, 4, 5)).toDF("a", "b", "c")
558- val df2 = Seq((1, 2, 4), (1, 3, 5), (2, 2, 3), (2, 4, 5)).toDF("a", "b", "c")
559- @@ -1538,7 +1540,8 @@ class DataFrameSetOperationsSuite extends QueryTest
560- }
561- }
562+ val shuffle = df1.repartition($"a").queryExecution.executedPlan.collect {
563+ - case s: ShuffleExchangeExec => s
564+ + case s: ShuffleExchangeLike => s
565+ }
566+ assert(shuffle.size == 1)
562567
563- - test("SPARK-52921: union partitioning - semantic equality") {
564- + test("SPARK-52921: union partitioning - semantic equality",
565- + IgnoreComet("https://github.com/apache/datafusion-comet/issues/4098")) {
566- val df1 = Seq((1, 2, 4), (1, 3, 5), (2, 2, 3), (2, 4, 5)).toDF("a", "b", "c")
567- val df2 = Seq((4, 1, 5), (2, 4, 6), (1, 4, 2), (3, 5, 1)).toDF("d", "e", "f")
568+ @@ -1554,11 +1556,12 @@ class DataFrameSetOperationsSuite extends QueryTest
569+ val union = df1.repartition($"a").union(df2.repartition($"d"))
570+ val unionExec = union.queryExecution.executedPlan.collect {
571+ case u: UnionExec => u
572+ + case u: CometUnionExec => u
573+ }
574+ assert(unionExec.size == 1)
568575
569- @@ -1589,7 +1592,8 @@ class DataFrameSetOperationsSuite extends QueryTest
570- }
571- }
576+ val shuffle = df1.repartition($"a").queryExecution.executedPlan.collect {
577+ - case s: ShuffleExchangeExec => s
578+ + case s: ShuffleExchangeLike => s
579+ }
580+ assert(shuffle.size == 1)
581+
582+ @@ -1573,10 +1576,10 @@ class DataFrameSetOperationsSuite extends QueryTest
583+ // Avoid unnecessary shuffle if union output partitioning is enabled
584+ val shuffledUnion = union.repartition($"a")
585+ val shuffleNumBefore = union.queryExecution.executedPlan.collect {
586+ - case s: ShuffleExchangeExec => s
587+ + case s: ShuffleExchangeLike => s
588+ }
589+ val shuffleNumAfter = shuffledUnion.queryExecution.executedPlan.collect {
590+ - case s: ShuffleExchangeExec => s
591+ + case s: ShuffleExchangeLike => s
592+ }
572593
573- - test("SPARK-52921: union partitioning - range partitioning") {
574- + test("SPARK-52921: union partitioning - range partitioning",
575- + IgnoreComet("https://github.com/apache/datafusion-comet/issues/4098")) {
576- val df1 = Seq((1, 2, 4), (1, 3, 5), (2, 2, 3), (2, 4, 5)).toDF("a", "b", "c")
577- val df2 = Seq((4, 1, 5), (2, 4, 6), (1, 4, 2), (3, 5, 1)).toDF("d", "e", "f")
594+ if (enabled) {
595+ @@ -1605,6 +1608,7 @@ class DataFrameSetOperationsSuite extends QueryTest
596+ val union = df1.repartitionByRange($"a").union(df2.repartitionByRange($"d"))
597+ val unionExec = union.queryExecution.executedPlan.collect {
598+ case u: UnionExec => u
599+ + case u: CometUnionExec => u
600+ }
601+ assert(unionExec.size == 1)
578602
579603diff --git a/sql/core/src/test/scala/org/apache/spark/sql/DataFrameSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/DataFrameSuite.scala
580604index 5b88eeefeca..d4f07bc182a 100644
0 commit comments