@@ -343,7 +343,7 @@ fn filter_array(values: &dyn Array, predicate: &FilterPredicate) -> Result<Array
343
343
Ok ( Arc :: new( filter_bytes( values. as_binary:: <i64 >( ) , predicate) ) )
344
344
}
345
345
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) ) )
347
347
}
348
348
DataType :: RunEndEncoded ( _, _) => {
349
349
downcast_run_array!{
@@ -919,6 +919,69 @@ mod tests {
919
919
assert ! ( d. is_null( 1 ) ) ;
920
920
}
921
921
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
+
922
985
#[ test]
923
986
fn test_filter_array_slice_with_null ( ) {
924
987
let a = Int32Array :: from ( vec ! [ Some ( 5 ) , None , Some ( 7 ) , Some ( 8 ) , Some ( 9 ) ] ) . slice ( 1 , 4 ) ;
0 commit comments