@@ -27,6 +27,7 @@ use crate::dtype::IntegerPType;
2727use crate :: dtype:: Nullability ;
2828use crate :: executor:: ExecutionCtx ;
2929use crate :: match_each_integer_ptype;
30+ use crate :: optimizer:: ArrayOptimizer ;
3031use crate :: validity:: Validity ;
3132
3233/// Take implementation for [`FixedSizeListArray`].
@@ -79,10 +80,11 @@ fn take_empty_fsl(
7980
8081 // SAFETY: empty output needs no child values; otherwise the index validity mask proves every
8182 // output row is null. Placeholder child elements have the exact length required by FSL.
82- Ok ( unsafe {
83+ unsafe {
8384 FixedSizeListArray :: new_unchecked ( new_elements, array. list_size ( ) , new_validity, new_len)
8485 }
85- . into_array ( ) )
86+ . into_array ( )
87+ . optimize ( )
8688}
8789
8890fn take_non_empty_fsl (
@@ -136,15 +138,16 @@ fn take_non_empty_degenerate_fsl(
136138
137139 // SAFETY: degenerate FSL inputs have no elements, valid index payloads were checked against
138140 // the source length, and `Validity::take` produces validity for `new_len`.
139- Ok ( unsafe {
141+ unsafe {
140142 FixedSizeListArray :: new_unchecked (
141143 array. elements ( ) . clone ( ) ,
142144 array. list_size ( ) ,
143145 new_validity,
144146 new_len,
145147 )
146148 }
147- . into_array ( ) )
149+ . into_array ( )
150+ . optimize ( )
148151}
149152
150153fn take_non_empty_non_degenerate_fsl < I : IntegerPType > (
@@ -167,10 +170,11 @@ fn take_non_empty_non_degenerate_fsl<I: IntegerPType>(
167170
168171 // SAFETY: `new_elements` has `new_len * list_size` elements. `new_validity` is either
169172 // non-nullable or was produced by `Validity::take` for `new_len`.
170- Ok ( unsafe {
173+ unsafe {
171174 FixedSizeListArray :: new_unchecked ( new_elements, array. list_size ( ) , new_validity, new_len)
172175 }
173- . into_array ( ) )
176+ . into_array ( )
177+ . optimize ( )
174178}
175179
176180fn take_non_empty_non_degenerate_elements < I : IntegerPType > (
0 commit comments