Skip to content

Commit dd74d49

Browse files
committed
Add unit tests and fix.
1 parent deb1de3 commit dd74d49

File tree

1 file changed

+64
-1
lines changed

1 file changed

+64
-1
lines changed

arrow-select/src/filter.rs

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ fn filter_array(values: &dyn Array, predicate: &FilterPredicate) -> Result<Array
343343
Ok(Arc::new(filter_bytes(values.as_binary::<i64>(), predicate)))
344344
}
345345
DataType::BinaryView => {
346-
Ok(Arc::new(filter_byte_view(values.as_string_view(), predicate)))
346+
Ok(Arc::new(filter_byte_view(values.as_binary_view(), predicate)))
347347
}
348348
DataType::RunEndEncoded(_, _) => {
349349
downcast_run_array!{
@@ -919,6 +919,69 @@ mod tests {
919919
assert!(d.is_null(1));
920920
}
921921

922+
fn _test_filter_byte_view<T>()
923+
where
924+
T: ByteViewType,
925+
str: AsRef<T::Native>,
926+
T::Native: PartialEq,
927+
{
928+
let array = {
929+
// ["hello", "world", null, "large payload over 12 bytes", "lulu"]
930+
let mut builder = GenericByteViewBuilder::<T>::new();
931+
builder.append_value("hello");
932+
builder.append_value("world");
933+
builder.append_null();
934+
builder.append_value("large payload over 12 bytes");
935+
builder.append_value("lulu");
936+
builder.finish()
937+
};
938+
939+
{
940+
let predicate = BooleanArray::from(vec![true, false, true, true, false]);
941+
let actual = filter(&array, &predicate).unwrap();
942+
943+
assert_eq!(actual.len(), 3);
944+
945+
let expected = {
946+
// ["hello", null, "large payload over 12 bytes"]
947+
let mut builder = GenericByteViewBuilder::<T>::new();
948+
builder.append_value("hello");
949+
builder.append_null();
950+
builder.append_value("large payload over 12 bytes");
951+
builder.finish()
952+
};
953+
954+
assert_eq!(actual.as_ref(), &expected);
955+
}
956+
957+
{
958+
let predicate = BooleanArray::from(vec![true, false, false, false, true]);
959+
let actual = filter(&array, &predicate).unwrap();
960+
961+
assert_eq!(actual.len(), 2);
962+
963+
let expected = {
964+
// ["hello", "lulu"]
965+
let mut builder = GenericByteViewBuilder::<T>::new();
966+
builder.append_value("hello");
967+
builder.append_value("lulu");
968+
builder.finish()
969+
};
970+
971+
assert_eq!(actual.as_ref(), &expected);
972+
}
973+
}
974+
975+
#[test]
976+
fn test_filter_string_view() {
977+
_test_filter_byte_view::<StringViewType>()
978+
}
979+
980+
#[test]
981+
fn test_filter_binary_view() {
982+
_test_filter_byte_view::<BinaryViewType>()
983+
}
984+
922985
#[test]
923986
fn test_filter_array_slice_with_null() {
924987
let a = Int32Array::from(vec![Some(5), None, Some(7), Some(8), Some(9)]).slice(1, 4);

0 commit comments

Comments
 (0)