From be483777092cb1007ced0323a1c659c2634b1a5c Mon Sep 17 00:00:00 2001 From: Liang-Chi Hsieh Date: Thu, 20 Oct 2022 23:43:23 -0700 Subject: [PATCH] Cleanup decimal sort function (#2908) --- arrow/src/compute/kernels/sort.rs | 35 +++---------------------------- 1 file changed, 3 insertions(+), 32 deletions(-) diff --git a/arrow/src/compute/kernels/sort.rs b/arrow/src/compute/kernels/sort.rs index 71bc9464ef50..6720a0c5c704 100644 --- a/arrow/src/compute/kernels/sort.rs +++ b/arrow/src/compute/kernels/sort.rs @@ -146,7 +146,9 @@ pub fn sort_to_indices( let (v, n) = partition_validity(values); Ok(match values.data_type() { - DataType::Decimal128(_, _) => sort_decimal(values, v, n, cmp, &options, limit), + DataType::Decimal128(_, _) => { + sort_primitive::(values, v, n, cmp, &options, limit) + } DataType::Boolean => sort_boolean(values, v, n, &options, limit), DataType::Int8 => { sort_primitive::(values, v, n, cmp, &options, limit) @@ -474,37 +476,6 @@ fn sort_boolean( UInt32Array::from(result_data) } -/// Sort Decimal array -fn sort_decimal( - decimal_values: &ArrayRef, - value_indices: Vec, - null_indices: Vec, - cmp: F, - options: &SortOptions, - limit: Option, -) -> UInt32Array -where - F: Fn(i128, i128) -> std::cmp::Ordering, -{ - // downcast to decimal array - let decimal_array = decimal_values - .as_any() - .downcast_ref::() - .expect("Unable to downcast to decimal array"); - let valids = value_indices - .into_iter() - .map(|index| (index, decimal_array.value(index as usize))) - .collect::>(); - sort_primitive_inner( - decimal_values.len(), - null_indices, - cmp, - options, - limit, - valids, - ) -} - /// Sort primitive values fn sort_primitive( values: &ArrayRef,