From a10db3a4f6237a145fd58629800baa82f7a8ab94 Mon Sep 17 00:00:00 2001 From: Tanguy Fautre Date: Sat, 21 May 2022 10:09:10 +0100 Subject: [PATCH] Added support for Decimal in `build_compare` (#998) --- src/array/ord.rs | 1 + tests/it/array/ord.rs | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/array/ord.rs b/src/array/ord.rs index 614f47f5839..3bb02ba3e72 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..9f5a07ed83b 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, 0)); + + Ok(()) +} + #[test] fn dict_utf8() -> Result<()> { let data = vec!["a", "b", "c", "a", "a", "c", "c"];