This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
The following commit(s) were added to refs/heads/master by this push:
new 00accc7 Support sort for decimal data type (#1487)
00accc7 is described below
commit 00accc7ad79f4c2fbdc3f471e20c04f477c64807
Author: Yijie Shen <[email protected]>
AuthorDate: Tue Mar 29 04:38:58 2022 +0800
Support sort for decimal data type (#1487)
---
arrow/src/array/ord.rs | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/arrow/src/array/ord.rs b/arrow/src/array/ord.rs
index 37bd009..c4ddc69 100644
--- a/arrow/src/array/ord.rs
+++ b/arrow/src/array/ord.rs
@@ -225,6 +225,11 @@ pub fn build_compare(left: &dyn Array, right: &dyn Array)
-> Result<DynComparato
}
}
}
+ (Decimal(_, _), Decimal(_, _)) => {
+ let left: DecimalArray = DecimalArray::from(left.data().clone());
+ let right: DecimalArray = DecimalArray::from(right.data().clone());
+ Box::new(move |i, j| left.value(i).cmp(&right.value(j)))
+ }
(lhs, _) => {
return Err(ArrowError::InvalidArgumentError(format!(
"The data type type {:?} has no natural order",
@@ -294,6 +299,20 @@ pub mod tests {
}
#[test]
+ fn test_decimal() -> Result<()> {
+ let array = vec![Some(5), Some(2), Some(3)]
+ .iter()
+ .collect::<DecimalArray>()
+ .with_precision_and_scale(23, 6)
+ .unwrap();
+
+ let cmp = build_compare(&array, &array)?;
+ assert_eq!(Ordering::Less, (cmp)(1, 0));
+ assert_eq!(Ordering::Greater, (cmp)(0, 2));
+ Ok(())
+ }
+
+ #[test]
fn test_dict() -> Result<()> {
let data = vec!["a", "b", "c", "a", "a", "c", "c"];
let array = data.into_iter().collect::<DictionaryArray<Int16Type>>();