Skip to content

Commit 63c81eb

Browse files
committed
native_integral_decimal_cast_support
1 parent 46b24bb commit 63c81eb

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

native/spark-expr/src/conversion_funcs/cast.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1501,20 +1501,24 @@ where
15011501
builder.append_value(scaled);
15021502
}
15031503
}
1504-
_ => {
1505-
return Err(SparkError::NumericValueOutOfRange {
1506-
value: v.to_string(),
1507-
precision,
1508-
scale,
1509-
})
1510-
}
1504+
_ => match eval_mode {
1505+
EvalMode::Ansi => {
1506+
return Err(SparkError::NumericValueOutOfRange {
1507+
value: v.to_string(),
1508+
precision,
1509+
scale,
1510+
})
1511+
}
1512+
EvalMode::Legacy | EvalMode::Try => builder.append_null(),
1513+
},
15111514
}
15121515
}
15131516
}
15141517
Ok(Arc::new(
15151518
builder.with_precision_and_scale(precision, scale)?.finish(),
15161519
))
15171520
}
1521+
15181522
fn cast_int_to_decimal128(
15191523
array: &dyn Array,
15201524
eval_mode: EvalMode,

spark/src/test/scala/org/apache/comet/CometCastSuite.scala

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,14 @@ class CometCastSuite extends CometTestBase with AdaptiveSparkPlanHelper {
332332
castTest(intToDecimal10OverflowValues, DataTypes.createDecimalType(10, 2))
333333
}
334334

335+
test("cast IntegerType to DecimalType check arbitrary scale and precision") {
336+
Seq(DecimalType.MAX_PRECISION, DecimalType.MAX_SCALE, 0, 10, 15)
337+
.combinations(2)
338+
.map({ c =>
339+
castTest(generateInts(), DataTypes.createDecimalType(c.head, c.last))
340+
})
341+
}
342+
335343
test("cast IntegerType to StringType") {
336344
castTest(generateInts(), DataTypes.StringType)
337345
}
@@ -1236,7 +1244,6 @@ class CometCastSuite extends CometTestBase with AdaptiveSparkPlanHelper {
12361244
case (None, None) =>
12371245
// neither system threw an exception
12381246
case (None, Some(e)) =>
1239-
// Spark succeeded but Comet failed
12401247
throw e
12411248
case (Some(e), None) =>
12421249
// Spark failed but Comet succeeded

0 commit comments

Comments
 (0)