You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by vi...@apache.org on 2022/11/20 07:16:54 UTC
[arrow-rs] branch master updated: comparison: decimal array with scalar (#3141)
This is an automated email from the ASF dual-hosted git repository.
viirya 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 475e07917 comparison: decimal array with scalar (#3141)
475e07917 is described below
commit 475e079170e3b9a62d3e6a01cdd55f68cd91e4db
Author: Kun Liu <li...@apache.org>
AuthorDate: Sun Nov 20 15:16:48 2022 +0800
comparison: decimal array with scalar (#3141)
---
arrow/src/compute/kernels/comparison.rs | 138 ++++++++++++++++++++++++--------
1 file changed, 105 insertions(+), 33 deletions(-)
diff --git a/arrow/src/compute/kernels/comparison.rs b/arrow/src/compute/kernels/comparison.rs
index 4566b4969..6438acc3b 100644
--- a/arrow/src/compute/kernels/comparison.rs
+++ b/arrow/src/compute/kernels/comparison.rs
@@ -1223,6 +1223,11 @@ macro_rules! dyn_compare_scalar {
let left = as_primitive_array::<Float64Type>($LEFT);
$OP::<Float64Type>(left, right)
}
+ DataType::Decimal128(_, _) => {
+ let right = try_to_type!($RIGHT, to_i128)?;
+ let left = as_primitive_array::<Decimal128Type>($LEFT);
+ $OP::<Decimal128Type>(left, right)
+ }
_ => Err(ArrowError::ComputeError(format!(
"Unsupported data type {:?} for comparison {} with {:?}",
$LEFT.data_type(),
@@ -3562,7 +3567,7 @@ mod tests {
vec![Some(true), Some(false), Some(false), Some(true), Some(true), None]
.into();
let b: BooleanArray =
- vec![Some(true), Some(true), Some(false), Some(false), None, Some(false)]
+ vec![Some(true), Some(true), Some(false), Some(false), None, Some(false)]
.into();
let res: Vec<Option<bool>> = eq_bool(&a, &b).unwrap().iter().collect();
@@ -4976,6 +4981,7 @@ mod tests {
)
);
}
+
#[test]
fn test_lt_eq_dyn_scalar_with_dict() {
let mut builder =
@@ -5265,6 +5271,7 @@ mod tests {
)
);
}
+
#[test]
fn test_lt_dyn_utf8_scalar() {
let array = StringArray::from(vec!["abc", "def", "xyz"]);
@@ -5274,6 +5281,7 @@ mod tests {
BooleanArray::from(vec![Some(true), Some(true), Some(false)])
);
}
+
#[test]
fn test_lt_dyn_utf8_scalar_with_dict() {
let mut builder = StringDictionaryBuilder::<Int8Type>::new();
@@ -5301,6 +5309,7 @@ mod tests {
BooleanArray::from(vec![Some(true), Some(true), Some(false)])
);
}
+
#[test]
fn test_lt_eq_dyn_utf8_scalar_with_dict() {
let mut builder = StringDictionaryBuilder::<Int8Type>::new();
@@ -5328,6 +5337,7 @@ mod tests {
BooleanArray::from(vec![Some(false), Some(true), Some(true)])
);
}
+
#[test]
fn test_gt_eq_dyn_utf8_scalar_with_dict() {
let mut builder = StringDictionaryBuilder::<Int8Type>::new();
@@ -5383,6 +5393,7 @@ mod tests {
BooleanArray::from(vec![Some(true), Some(true), Some(false)])
);
}
+
#[test]
fn test_neq_dyn_utf8_scalar_with_dict() {
let mut builder = StringDictionaryBuilder::<Int8Type>::new();
@@ -5883,16 +5894,16 @@ mod tests {
.collect();
let expected = BooleanArray::from(
- vec![Some(false), Some(true), Some(false), Some(true), Some(false), Some(false)],
- );
+ vec![Some(false), Some(true), Some(false), Some(true), Some(false), Some(false)],
+ );
assert_eq!(lt_dyn(&array1, &array2).unwrap(), expected);
#[cfg(not(feature = "simd"))]
assert_eq!(lt(&array1, &array2).unwrap(), expected);
let expected = BooleanArray::from(
- vec![Some(true), Some(true), Some(true), Some(true), Some(false), Some(false)],
- );
+ vec![Some(true), Some(true), Some(true), Some(true), Some(false), Some(false)],
+ );
assert_eq!(lt_eq_dyn(&array1, &array2).unwrap(), expected);
#[cfg(not(feature = "simd"))]
@@ -5908,16 +5919,16 @@ mod tests {
.collect();
let expected = BooleanArray::from(
- vec![Some(false), Some(true), Some(false), Some(true), Some(false), Some(false)],
- );
+ vec![Some(false), Some(true), Some(false), Some(true), Some(false), Some(false)],
+ );
assert_eq!(lt_dyn(&array1, &array2).unwrap(), expected);
#[cfg(not(feature = "simd"))]
assert_eq!(lt(&array1, &array2).unwrap(), expected);
let expected = BooleanArray::from(
- vec![Some(true), Some(true), Some(true), Some(true), Some(false), Some(false)],
- );
+ vec![Some(true), Some(true), Some(true), Some(true), Some(false), Some(false)],
+ );
assert_eq!(lt_eq_dyn(&array1, &array2).unwrap(), expected);
#[cfg(not(feature = "simd"))]
@@ -5936,16 +5947,16 @@ mod tests {
.collect();
let expected = BooleanArray::from(
- vec![Some(false), Some(false), Some(false), Some(false), Some(true), Some(true)],
- );
+ vec![Some(false), Some(false), Some(false), Some(false), Some(true), Some(true)],
+ );
assert_eq!(gt_dyn(&array1, &array2).unwrap(), expected);
#[cfg(not(feature = "simd"))]
assert_eq!(gt(&array1, &array2).unwrap(), expected);
let expected = BooleanArray::from(
- vec![Some(true), Some(false), Some(true), Some(false), Some(true), Some(true)],
- );
+ vec![Some(true), Some(false), Some(true), Some(false), Some(true), Some(true)],
+ );
assert_eq!(gt_eq_dyn(&array1, &array2).unwrap(), expected);
#[cfg(not(feature = "simd"))]
@@ -5961,16 +5972,16 @@ mod tests {
.collect();
let expected = BooleanArray::from(
- vec![Some(false), Some(false), Some(false), Some(false), Some(true), Some(true)],
- );
+ vec![Some(false), Some(false), Some(false), Some(false), Some(true), Some(true)],
+ );
assert_eq!(gt_dyn(&array1, &array2).unwrap(), expected);
#[cfg(not(feature = "simd"))]
assert_eq!(gt(&array1, &array2).unwrap(), expected);
let expected = BooleanArray::from(
- vec![Some(true), Some(false), Some(true), Some(false), Some(true), Some(true)],
- );
+ vec![Some(true), Some(false), Some(true), Some(false), Some(true), Some(true)],
+ );
assert_eq!(gt_eq_dyn(&array1, &array2).unwrap(), expected);
#[cfg(not(feature = "simd"))]
@@ -6556,13 +6567,13 @@ mod tests {
let array2 = DictionaryArray::try_new(&keys, &values).unwrap();
let expected = BooleanArray::from(
- vec![Some(false), Some(true), Some(false), Some(true), Some(false), Some(false)],
- );
+ vec![Some(false), Some(true), Some(false), Some(true), Some(false), Some(false)],
+ );
assert_eq!(lt_dyn(&array1, &array2).unwrap(), expected);
let expected = BooleanArray::from(
- vec![Some(true), Some(true), Some(true), Some(true), Some(false), Some(false)],
- );
+ vec![Some(true), Some(true), Some(true), Some(true), Some(false), Some(false)],
+ );
assert_eq!(lt_eq_dyn(&array1, &array2).unwrap(), expected);
let array1: Float64Array = vec![f64::NAN, 7.0, 8.0, 8.0, 11.0, f64::NAN]
@@ -6574,13 +6585,13 @@ mod tests {
let array2 = DictionaryArray::try_new(&keys, &values).unwrap();
let expected = BooleanArray::from(
- vec![Some(false), Some(true), Some(false), Some(true), Some(false), Some(false)],
- );
+ vec![Some(false), Some(true), Some(false), Some(true), Some(false), Some(false)],
+ );
assert_eq!(lt_dyn(&array1, &array2).unwrap(), expected);
let expected = BooleanArray::from(
- vec![Some(true), Some(true), Some(true), Some(true), Some(false), Some(false)],
- );
+ vec![Some(true), Some(true), Some(true), Some(true), Some(false), Some(false)],
+ );
assert_eq!(lt_eq_dyn(&array1, &array2).unwrap(), expected);
}
@@ -6596,13 +6607,13 @@ mod tests {
let array2 = DictionaryArray::try_new(&keys, &values).unwrap();
let expected = BooleanArray::from(
- vec![Some(false), Some(false), Some(false), Some(false), Some(true), Some(true)],
- );
+ vec![Some(false), Some(false), Some(false), Some(false), Some(true), Some(true)],
+ );
assert_eq!(gt_dyn(&array1, &array2).unwrap(), expected);
let expected = BooleanArray::from(
- vec![Some(true), Some(false), Some(true), Some(false), Some(true), Some(true)],
- );
+ vec![Some(true), Some(false), Some(true), Some(false), Some(true), Some(true)],
+ );
assert_eq!(gt_eq_dyn(&array1, &array2).unwrap(), expected);
let array1: Float64Array = vec![f64::NAN, 7.0, 8.0, 8.0, 11.0, f64::NAN]
@@ -6614,13 +6625,13 @@ mod tests {
let array2 = DictionaryArray::try_new(&keys, &values).unwrap();
let expected = BooleanArray::from(
- vec![Some(false), Some(false), Some(false), Some(false), Some(true), Some(true)],
- );
+ vec![Some(false), Some(false), Some(false), Some(false), Some(true), Some(true)],
+ );
assert_eq!(gt_dyn(&array1, &array2).unwrap(), expected);
let expected = BooleanArray::from(
- vec![Some(true), Some(false), Some(true), Some(false), Some(true), Some(true)],
- );
+ vec![Some(true), Some(false), Some(true), Some(false), Some(true), Some(true)],
+ );
assert_eq!(gt_eq_dyn(&array1, &array2).unwrap(), expected);
}
@@ -6915,6 +6926,67 @@ mod tests {
assert_eq!(e, r);
}
+ #[test]
+ fn test_decimal128_scalar() {
+ let a = Decimal128Array::from(
+ vec![Some(1), Some(2), Some(3), None, Some(4), Some(5)],
+ );
+ let b = 3_i128;
+ // array eq scalar
+ let e = BooleanArray::from(
+ vec![Some(false), Some(false), Some(true), None, Some(false), Some(false)],
+ );
+ let r = eq_scalar(&a, b).unwrap();
+ assert_eq!(e, r);
+ let r = eq_dyn_scalar(&a, b).unwrap();
+ assert_eq!(e, r);
+
+ // array neq scalar
+ let e = BooleanArray::from(
+ vec![Some(true), Some(true), Some(false), None, Some(true), Some(true)],
+ );
+ let r = neq_scalar(&a, b).unwrap();
+ assert_eq!(e, r);
+ let r = neq_dyn_scalar(&a, b).unwrap();
+ assert_eq!(e, r);
+
+ // array lt scalar
+ let e = BooleanArray::from(
+ vec![Some(true), Some(true), Some(false), None, Some(false), Some(false)],
+ );
+ let r = lt_scalar(&a, b).unwrap();
+ assert_eq!(e, r);
+ let r = lt_dyn_scalar(&a, b).unwrap();
+ assert_eq!(e, r);
+
+ // array lt_eq scalar
+ let e = BooleanArray::from(
+ vec![Some(true), Some(true), Some(true), None, Some(false), Some(false)],
+ );
+ let r = lt_eq_scalar(&a, b).unwrap();
+ assert_eq!(e, r);
+ let r = lt_eq_dyn_scalar(&a, b).unwrap();
+ assert_eq!(e, r);
+
+ // array gt scalar
+ let e = BooleanArray::from(
+ vec![Some(false), Some(false), Some(false), None, Some(true), Some(true)],
+ );
+ let r = gt_scalar(&a, b).unwrap();
+ assert_eq!(e, r);
+ let r = gt_dyn_scalar(&a, b).unwrap();
+ assert_eq!(e, r);
+
+ // array gt_eq scalar
+ let e = BooleanArray::from(
+ vec![Some(false), Some(false), Some(true), None, Some(true), Some(true)],
+ );
+ let r = gt_eq_scalar(&a, b).unwrap();
+ assert_eq!(e, r);
+ let r = gt_eq_dyn_scalar(&a, b).unwrap();
+ assert_eq!(e, r);
+ }
+
#[test]
fn test_decimal256() {
let a = Decimal256Array::from_iter_values(