Skip to content

Commit dc34bdb

Browse files
committed
Combine _utf8 and _binary kernels
1 parent 6295822 commit dc34bdb

File tree

1 file changed

+23
-33
lines changed

1 file changed

+23
-33
lines changed

arrow-ord/src/comparison.rs

Lines changed: 23 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -337,18 +337,24 @@ pub fn gt_binary_scalar<OffsetSize: OffsetSizeTrait>(
337337
}
338338

339339
/// Perform `left >= right` operation on [`BinaryArray`] / [`LargeBinaryArray`].
340-
pub fn gt_eq_binary<OffsetSize: OffsetSizeTrait>(
341-
left: &GenericBinaryArray<OffsetSize>,
342-
right: &GenericBinaryArray<OffsetSize>,
343-
) -> Result<BooleanArray, ArrowError> {
340+
pub fn gt_eq_bytes<T: ByteArrayType>(
341+
left: &GenericByteArray<T>,
342+
right: &GenericByteArray<T>,
343+
) -> Result<BooleanArray, ArrowError>
344+
where
345+
<T as ByteArrayType>::Native: PartialOrd,
346+
{
344347
compare_op(left, right, |a, b| a >= b)
345348
}
346349

347350
/// Perform `left >= right` operation on [`BinaryArray`] / [`LargeBinaryArray`] and a scalar.
348-
pub fn gt_eq_binary_scalar<OffsetSize: OffsetSizeTrait>(
349-
left: &GenericBinaryArray<OffsetSize>,
350-
right: &[u8],
351-
) -> Result<BooleanArray, ArrowError> {
351+
pub fn gt_eq_bytes_scalar<T: ByteArrayType>(
352+
left: &GenericByteArray<T>,
353+
right: &<T as ByteArrayType>::Native,
354+
) -> Result<BooleanArray, ArrowError>
355+
where
356+
<T as ByteArrayType>::Native: PartialOrd,
357+
{
352358
compare_op_scalar(left, |a| a >= right)
353359
}
354360

@@ -419,22 +425,6 @@ pub fn gt_utf8_scalar<OffsetSize: OffsetSizeTrait>(
419425
compare_op_scalar(left, |a| a > right)
420426
}
421427

422-
/// Perform `left >= right` operation on [`StringArray`] / [`LargeStringArray`].
423-
pub fn gt_eq_utf8<OffsetSize: OffsetSizeTrait>(
424-
left: &GenericStringArray<OffsetSize>,
425-
right: &GenericStringArray<OffsetSize>,
426-
) -> Result<BooleanArray, ArrowError> {
427-
compare_op(left, right, |a, b| a >= b)
428-
}
429-
430-
/// Perform `left >= right` operation on [`StringArray`] / [`LargeStringArray`] and a scalar.
431-
pub fn gt_eq_utf8_scalar<OffsetSize: OffsetSizeTrait>(
432-
left: &GenericStringArray<OffsetSize>,
433-
right: &str,
434-
) -> Result<BooleanArray, ArrowError> {
435-
compare_op_scalar(left, |a| a >= right)
436-
}
437-
438428
// Avoids creating a closure for each combination of `$RIGHT` and `$TY`
439429
fn try_to_type_result<T>(
440430
value: Option<T>,
@@ -917,8 +907,8 @@ pub fn gt_eq_dyn_binary_scalar(
917907
right: &[u8],
918908
) -> Result<BooleanArray, ArrowError> {
919909
match left.data_type() {
920-
DataType::Binary => gt_eq_binary_scalar(left.as_binary::<i32>(), right),
921-
DataType::LargeBinary => gt_eq_binary_scalar(left.as_binary::<i64>(), right),
910+
DataType::Binary => gt_eq_bytes_scalar(left.as_binary::<i32>(), right),
911+
DataType::LargeBinary => gt_eq_bytes_scalar(left.as_binary::<i64>(), right),
922912
_ => Err(ArrowError::ComputeError(
923913
"gt_eq_dyn_binary_scalar only supports Binary or LargeBinary arrays"
924914
.to_string(),
@@ -991,17 +981,17 @@ pub fn gt_eq_dyn_utf8_scalar(
991981
let result = match left.data_type() {
992982
DataType::Dictionary(key_type, value_type) => match value_type.as_ref() {
993983
DataType::Utf8 | DataType::LargeUtf8 => {
994-
dyn_compare_utf8_scalar!(left, right, key_type, gt_eq_utf8_scalar)
984+
dyn_compare_utf8_scalar!(left, right, key_type, gt_eq_bytes_scalar)
995985
}
996986
_ => Err(ArrowError::ComputeError(
997987
"gt_eq_dyn_utf8_scalar only supports Utf8 or LargeUtf8 arrays or DictionaryArray with Utf8 or LargeUtf8 values".to_string(),
998988
)),
999989
},
1000990
DataType::Utf8 => {
1001-
gt_eq_utf8_scalar(left.as_string::<i32>(), right)
991+
gt_eq_bytes_scalar(left.as_string::<i32>(), right)
1002992
}
1003993
DataType::LargeUtf8 => {
1004-
gt_eq_utf8_scalar(left.as_string::<i64>(), right)
994+
gt_eq_bytes_scalar(left.as_string::<i64>(), right)
1005995
}
1006996
_ => Err(ArrowError::ComputeError(
1007997
"gt_eq_dyn_utf8_scalar only supports Utf8 or LargeUtf8 arrays".to_string(),
@@ -3656,14 +3646,14 @@ mod tests {
36563646
test_binary_array_gt_eq,
36573647
vec![b"arrow", b"datafusion", b"flight", b"parquet", &[0xff, 0xf8]],
36583648
vec![b"flight", b"flight", b"flight", b"flight", &[0xff, 0xf8]],
3659-
gt_eq_binary,
3649+
gt_eq_bytes,
36603650
vec![false, false, true, true, true]
36613651
);
36623652
test_binary_scalar!(
36633653
test_binary_array_gt_eq_scalar,
36643654
vec![b"arrow", b"datafusion", b"flight", b"parquet", &[0xff, 0xf8]],
36653655
"flight".as_bytes(),
3666-
gt_eq_binary_scalar,
3656+
gt_eq_bytes_scalar,
36673657
vec![false, false, true, true, true]
36683658
);
36693659

@@ -3879,14 +3869,14 @@ mod tests {
38793869
test_utf8_array_gt_eq,
38803870
vec!["arrow", "datafusion", "flight", "parquet"],
38813871
vec!["flight", "flight", "flight", "flight"],
3882-
gt_eq_utf8,
3872+
gt_eq_bytes,
38833873
vec![false, false, true, true]
38843874
);
38853875
test_utf8_scalar!(
38863876
test_utf8_array_gt_eq_scalar,
38873877
vec!["arrow", "datafusion", "flight", "parquet"],
38883878
"flight",
3889-
gt_eq_utf8_scalar,
3879+
gt_eq_bytes_scalar,
38903880
vec![false, false, true, true]
38913881
);
38923882

0 commit comments

Comments
 (0)