@@ -68,7 +68,7 @@ impl FirstValue {
6868 }
6969 }
7070
71- pub fn ignore_null ( mut self , ignore_null : bool ) -> Self {
71+ pub fn ignore_null ( mut self , ignore_null : bool ) -> Self {
7272 self . ignore_null = ignore_null;
7373 self
7474 }
@@ -846,111 +846,4 @@ mod tests {
846846
847847 Ok ( ( ) )
848848 }
849-
850- #[ test]
851- fn first_ignore_null ( ) -> Result < ( ) > {
852- let a: ArrayRef = Arc :: new ( Int32Array :: from ( vec ! [
853- None ,
854- Some ( 2 ) ,
855- None ,
856- None ,
857- Some ( 3 ) ,
858- Some ( 9 ) ,
859- ] ) ) ;
860- let schema = Schema :: new ( vec ! [ Field :: new( "a" , DataType :: Int32 , true ) ] ) ;
861-
862- let batch = RecordBatch :: try_new ( Arc :: new ( schema. clone ( ) ) , vec ! [ a] ) ?;
863- let a_expr = col ( "a" , & schema) ?;
864-
865- let agg1 = Arc :: new ( FirstValue :: new (
866- a_expr. clone ( ) ,
867- "first1" ,
868- DataType :: Int32 ,
869- vec ! [ ] ,
870- vec ! [ ] ,
871- ) . ignore_null ( true ) ) ;
872- let first1 = aggregate ( & batch, agg1) ?;
873- assert_eq ! ( first1, ScalarValue :: Int32 ( Some ( 2 ) ) ) ;
874-
875- let agg2 = Arc :: new ( FirstValue :: new (
876- a_expr. clone ( ) ,
877- "first1" ,
878- DataType :: Int32 ,
879- vec ! [ ] ,
880- vec ! [ ] ,
881- ) ) ;
882- let first2 = aggregate ( & batch, agg2) ?;
883- assert_eq ! ( first2, ScalarValue :: Int32 ( None ) ) ;
884-
885- Ok ( ( ) )
886- }
887-
888- #[ test]
889- fn first_ignore_null_with_sort ( ) -> Result < ( ) > {
890- let a: ArrayRef = Arc :: new ( Int32Array :: from ( vec ! [
891- Some ( 12 ) ,
892- None ,
893- None ,
894- None ,
895- Some ( 10 ) ,
896- Some ( 9 ) ,
897- ] ) ) ;
898- let schema = Schema :: new ( vec ! [ Field :: new( "a" , DataType :: Int32 , true ) ] ) ;
899-
900- let batch = RecordBatch :: try_new ( Arc :: new ( schema. clone ( ) ) , vec ! [ a] ) ?;
901- let a_expr = col ( "a" , & schema) ?;
902-
903- let option_desc = SortOptions {
904- descending : false ,
905- nulls_first : true ,
906- } ;
907- let sort_expr_a = vec ! [ PhysicalSortExpr {
908- expr: a_expr. clone( ) ,
909- options: option_desc,
910- } ] ;
911-
912- let agg1 = Arc :: new ( FirstValue :: new (
913- a_expr. clone ( ) ,
914- "first1" ,
915- DataType :: Int32 ,
916- sort_expr_a. clone ( ) ,
917- vec ! [ DataType :: Int32 ] ,
918- ) . ignore_null ( true ) ) ;
919- let first1 = aggregate ( & batch, agg1) ?;
920- assert_eq ! ( first1, ScalarValue :: Int32 ( Some ( 9 ) ) ) ;
921-
922- let agg2 = Arc :: new ( FirstValue :: new (
923- a_expr. clone ( ) ,
924- "first2" ,
925- DataType :: Int32 ,
926- sort_expr_a. clone ( ) ,
927- vec ! [ DataType :: Int32 ] ,
928- ) ) ;
929- let first2 = aggregate ( & batch, agg2) ?;
930- assert_eq ! ( first2, ScalarValue :: Int32 ( None ) ) ;
931-
932- Ok ( ( ) )
933- }
934-
935- pub fn aggregate (
936- batch : & RecordBatch ,
937- agg : Arc < dyn AggregateExpr > ,
938- ) -> Result < ScalarValue > {
939- let mut accum = agg. create_accumulator ( ) ?;
940- let mut expr = agg. expressions ( ) ;
941- if let Some ( ordering_req) = agg. order_bys ( ) {
942- expr. extend ( ordering_req. iter ( ) . map ( |item| item. expr . clone ( ) ) ) ;
943- }
944-
945- let values = expr
946- . iter ( )
947- . map ( |e| {
948- e. evaluate ( batch)
949- . and_then ( |v| v. into_array ( batch. num_rows ( ) ) )
950- } )
951- . collect :: < Result < Vec < _ > > > ( ) ?;
952-
953- accum. update_batch ( & values) ?;
954- accum. evaluate ( )
955- }
956849}
0 commit comments