diff --git a/src/array/ord.rs b/src/array/ord.rs index 614f47f5839..386c44b0a48 100644 --- a/src/array/ord.rs +++ b/src/array/ord.rs @@ -211,6 +211,7 @@ pub fn build_compare(left: &dyn Array, right: &dyn Array) -> Result compare_primitives::(left, right), (Float32, Float32) => compare_f32(left, right), (Float64, Float64) => compare_f64(left, right), + (Decimal(_,_), Decimal(_,_)) => compare_primitives::(left, right), (Utf8, Utf8) => compare_string::(left, right), (LargeUtf8, LargeUtf8) => compare_string::(left, right), (Binary, Binary) => compare_binary::(left, right), diff --git a/tests/it/array/ord.rs b/tests/it/array/ord.rs index cf2723436d0..25160d325eb 100644 --- a/tests/it/array/ord.rs +++ b/tests/it/array/ord.rs @@ -2,6 +2,7 @@ use std::cmp::Ordering; use arrow2::array::ord::build_compare; use arrow2::array::*; +use arrow2::datatypes::DataType; use arrow2::error::Result; #[test] @@ -67,6 +68,19 @@ fn f64_zeros() -> Result<()> { Ok(()) } +#[test] +fn decimal() -> Result<()> { + let array = Int128Array::from_slice(&[1, 2]).to(DataType::Decimal(38, 0)); + + let cmp = build_compare(&array, &array)?; + + assert_eq!(Ordering::Less, (cmp)(0, 1)); + assert_eq!(Ordering::Equal, (cmp)(1, 1)); + assert_eq!(Ordering::Greater, (cmp)(1, 2)); + + Ok(()) +} + #[test] fn dict_utf8() -> Result<()> { let data = vec!["a", "b", "c", "a", "a", "c", "c"];