HaoYang670 commented on code in PR #2357:
URL: https://github.com/apache/arrow-rs/pull/2357#discussion_r940114048
##########
arrow/src/compute/kernels/cast.rs:
##########
@@ -1276,8 +1277,17 @@ fn cast_decimal_to_decimal(
.iter()
.map(|v| v.map(|v| v.as_i128() * mul))
.collect::<Decimal128Array>()
- }
- .with_precision_and_scale(*output_precision, *output_scale)?;
+ };
+ // For decimal cast to decimal, if the range of output is gt_eq than the
input, don't need to
+ // do validation.
+ let output_array = match output_precision-output_scale>=input_precision -
input_scale {
+ true => {
+ output_array.with_precision_and_scale(*output_precision,
*output_scale, false)
Review Comment:
What does `with_precision_and_scale` check if you set `need_validation` to
false?
It only checks:
1. output precision <=? max precision
2. output scale <=? max scale
3. output precision >= output scale I guess.
If this is the truth, why do we check these things after we doing the
casting? We should check the output precision and scale at the beginning of
this method.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]