diff --git a/gluten-ut/common/src/test/scala/org/apache/spark/sql/GlutenTestsTrait.scala b/gluten-ut/common/src/test/scala/org/apache/spark/sql/GlutenTestsTrait.scala index 14455a7e97c4..b5f05dd22d58 100644 --- a/gluten-ut/common/src/test/scala/org/apache/spark/sql/GlutenTestsTrait.scala +++ b/gluten-ut/common/src/test/scala/org/apache/spark/sql/GlutenTestsTrait.scala @@ -22,6 +22,7 @@ import org.apache.gluten.execution.ProjectExecTransformer import org.apache.gluten.test.TestStats import org.apache.gluten.utils.BackendTestUtils +import org.apache.spark.SparkException import org.apache.spark.sql.GlutenQueryTestUtil.isNaNOrInf import org.apache.spark.sql.catalyst.{CatalystTypeConverters, InternalRow} import org.apache.spark.sql.catalyst.analysis.ResolveTimeZone @@ -250,7 +251,19 @@ trait GlutenTestsTrait extends GlutenTestsCommonTrait { _spark.createDataFrame(_spark.sparkContext.parallelize(empData), schema) } val resultDF = df.select(ClassicColumn(expression)) - val result = resultDF.collect() + val result = + try { + resultDF.collect() + } catch { + // Match Spark's checkEvaluationWithoutCodegen behavior: wrap exceptions with fail(). + // Gluten's DataFrame path wraps execution errors in SparkException, so unwrap it + // to expose the root cause (e.g. ArithmeticException) directly as fail()'s cause, + // just like Spark's interpreted path does. + case e: SparkException if e.getCause != null => + fail(s"Exception evaluating $expression", e.getCause) + case e: Exception => + fail(s"Exception evaluating $expression", e) + } TestStats.testUnitNumber = TestStats.testUnitNumber + 1 if ( checkDataTypeSupported(expression) && diff --git a/gluten-ut/spark40/src/test/scala/org/apache/gluten/utils/velox/VeloxTestSettings.scala b/gluten-ut/spark40/src/test/scala/org/apache/gluten/utils/velox/VeloxTestSettings.scala index 160fcae2a95b..6d6ee8df1841 100644 --- a/gluten-ut/spark40/src/test/scala/org/apache/gluten/utils/velox/VeloxTestSettings.scala +++ b/gluten-ut/spark40/src/test/scala/org/apache/gluten/utils/velox/VeloxTestSettings.scala @@ -224,7 +224,7 @@ class VeloxTestSettings extends BackendTestSettings { enableSuite[GlutenCodeGeneratorWithInterpretedFallbackSuite] enableSuite[GlutenCollationExpressionSuite] enableSuite[GlutenCollationRegexpExpressionsSuite] - // TODO: 4.x enableSuite[GlutenCsvExpressionsSuite] // failures with GlutenPlugin + enableSuite[GlutenCsvExpressionsSuite] enableSuite[GlutenDynamicPruningSubquerySuite] enableSuite[GlutenExprIdSuite] // TODO: 4.x enableSuite[GlutenExpressionEvalHelperSuite] // 2 failures diff --git a/gluten-ut/spark41/src/test/scala/org/apache/gluten/utils/velox/VeloxTestSettings.scala b/gluten-ut/spark41/src/test/scala/org/apache/gluten/utils/velox/VeloxTestSettings.scala index 45539b768a26..d02fb957b60c 100644 --- a/gluten-ut/spark41/src/test/scala/org/apache/gluten/utils/velox/VeloxTestSettings.scala +++ b/gluten-ut/spark41/src/test/scala/org/apache/gluten/utils/velox/VeloxTestSettings.scala @@ -235,7 +235,7 @@ class VeloxTestSettings extends BackendTestSettings { enableSuite[GlutenCodeGeneratorWithInterpretedFallbackSuite] enableSuite[GlutenCollationExpressionSuite] // TODO: 4.x enableSuite[GlutenCollationRegexpExpressionsSuite] // 1 failure - // TODO: 4.x enableSuite[GlutenCsvExpressionsSuite] // failures with GlutenPlugin + enableSuite[GlutenCsvExpressionsSuite] enableSuite[GlutenDynamicPruningSubquerySuite] enableSuite[GlutenExprIdSuite] // TODO: 4.x enableSuite[GlutenExpressionEvalHelperSuite] // 2 failures