|
19 | 19 |
|
20 | 20 | use arrow::array::{ |
21 | 21 | ArrayRef, AsArray as _, BinaryArray, BinaryViewArray, BooleanArray, Date32Array, |
22 | | - Date64Array, Decimal128Array, Decimal256Array, DurationMicrosecondArray, |
23 | | - DurationMillisecondArray, DurationNanosecondArray, DurationSecondArray, |
24 | | - FixedSizeBinaryArray, Float16Array, Float32Array, Float64Array, Int16Array, |
25 | | - Int32Array, Int64Array, Int8Array, IntervalDayTimeArray, IntervalMonthDayNanoArray, |
26 | | - IntervalYearMonthArray, LargeBinaryArray, LargeStringArray, StringArray, |
27 | | - StringViewArray, Time32MillisecondArray, Time32SecondArray, Time64MicrosecondArray, |
28 | | - Time64NanosecondArray, TimestampMicrosecondArray, TimestampMillisecondArray, |
29 | | - TimestampNanosecondArray, TimestampSecondArray, UInt16Array, UInt32Array, |
30 | | - UInt64Array, UInt8Array, |
| 22 | + Date64Array, Decimal128Array, Decimal256Array, Decimal32Array, Decimal64Array, |
| 23 | + DurationMicrosecondArray, DurationMillisecondArray, DurationNanosecondArray, |
| 24 | + DurationSecondArray, FixedSizeBinaryArray, Float16Array, Float32Array, Float64Array, |
| 25 | + Int16Array, Int32Array, Int64Array, Int8Array, IntervalDayTimeArray, |
| 26 | + IntervalMonthDayNanoArray, IntervalYearMonthArray, LargeBinaryArray, |
| 27 | + LargeStringArray, StringArray, StringViewArray, Time32MillisecondArray, |
| 28 | + Time32SecondArray, Time64MicrosecondArray, Time64NanosecondArray, |
| 29 | + TimestampMicrosecondArray, TimestampMillisecondArray, TimestampNanosecondArray, |
| 30 | + TimestampSecondArray, UInt16Array, UInt32Array, UInt64Array, UInt8Array, |
31 | 31 | }; |
32 | 32 | use arrow::compute; |
33 | 33 | use arrow::datatypes::{DataType, IntervalUnit, TimeUnit}; |
@@ -144,6 +144,32 @@ macro_rules! min_max { |
144 | 144 | ($VALUE:expr, $DELTA:expr, $OP:ident) => {{ |
145 | 145 | Ok(match ($VALUE, $DELTA) { |
146 | 146 | (ScalarValue::Null, ScalarValue::Null) => ScalarValue::Null, |
| 147 | + ( |
| 148 | + lhs @ ScalarValue::Decimal32(lhsv, lhsp, lhss), |
| 149 | + rhs @ ScalarValue::Decimal32(rhsv, rhsp, rhss) |
| 150 | + ) => { |
| 151 | + if lhsp.eq(rhsp) && lhss.eq(rhss) { |
| 152 | + typed_min_max!(lhsv, rhsv, Decimal32, $OP, lhsp, lhss) |
| 153 | + } else { |
| 154 | + return internal_err!( |
| 155 | + "MIN/MAX is not expected to receive scalars of incompatible types {:?}", |
| 156 | + (lhs, rhs) |
| 157 | + ); |
| 158 | + } |
| 159 | + } |
| 160 | + ( |
| 161 | + lhs @ ScalarValue::Decimal64(lhsv, lhsp, lhss), |
| 162 | + rhs @ ScalarValue::Decimal64(rhsv, rhsp, rhss) |
| 163 | + ) => { |
| 164 | + if lhsp.eq(rhsp) && lhss.eq(rhss) { |
| 165 | + typed_min_max!(lhsv, rhsv, Decimal64, $OP, lhsp, lhss) |
| 166 | + } else { |
| 167 | + return internal_err!( |
| 168 | + "MIN/MAX is not expected to receive scalars of incompatible types {:?}", |
| 169 | + (lhs, rhs) |
| 170 | + ); |
| 171 | + } |
| 172 | + } |
147 | 173 | ( |
148 | 174 | lhs @ ScalarValue::Decimal128(lhsv, lhsp, lhss), |
149 | 175 | rhs @ ScalarValue::Decimal128(rhsv, rhsp, rhss) |
@@ -513,6 +539,26 @@ macro_rules! min_max_batch { |
513 | 539 | ($VALUES:expr, $OP:ident) => {{ |
514 | 540 | match $VALUES.data_type() { |
515 | 541 | DataType::Null => ScalarValue::Null, |
| 542 | + DataType::Decimal32(precision, scale) => { |
| 543 | + typed_min_max_batch!( |
| 544 | + $VALUES, |
| 545 | + Decimal32Array, |
| 546 | + Decimal32, |
| 547 | + $OP, |
| 548 | + precision, |
| 549 | + scale |
| 550 | + ) |
| 551 | + } |
| 552 | + DataType::Decimal64(precision, scale) => { |
| 553 | + typed_min_max_batch!( |
| 554 | + $VALUES, |
| 555 | + Decimal64Array, |
| 556 | + Decimal64, |
| 557 | + $OP, |
| 558 | + precision, |
| 559 | + scale |
| 560 | + ) |
| 561 | + } |
516 | 562 | DataType::Decimal128(precision, scale) => { |
517 | 563 | typed_min_max_batch!( |
518 | 564 | $VALUES, |
|
0 commit comments