@@ -145,10 +145,11 @@ pub fn flatten_inner(args: &[ArrayRef]) -> Result<ArrayRef> {
145145
146146 match array. data_type ( ) {
147147 List ( _) => {
148- let ( field , offsets, values, nulls) =
148+ let ( _field , offsets, values, nulls) =
149149 as_list_array ( & array) ?. clone ( ) . into_parts ( ) ;
150+ let values = cast_fsl_to_list ( values) ?;
150151
151- match field . data_type ( ) {
152+ match values . data_type ( ) {
152153 List ( _) => {
153154 let ( inner_field, inner_offsets, inner_values, _) =
154155 as_list_array ( & values) ?. clone ( ) . into_parts ( ) ;
@@ -169,10 +170,11 @@ pub fn flatten_inner(args: &[ArrayRef]) -> Result<ArrayRef> {
169170 }
170171 }
171172 LargeList ( _) => {
172- let ( field , offsets, values, nulls) =
173+ let ( _field , offsets, values, nulls) =
173174 as_large_list_array ( & array) ?. clone ( ) . into_parts ( ) ;
175+ let values = cast_fsl_to_list ( values) ?;
174176
175- match field . data_type ( ) {
177+ match values . data_type ( ) {
176178 List ( _) => {
177179 let ( inner_field, inner_offsets, inner_values, _) =
178180 as_list_array ( & values) ?. clone ( ) . into_parts ( ) ;
@@ -234,3 +236,12 @@ fn get_large_offsets_for_flatten<O: OffsetSizeTrait, P: OffsetSizeTrait>(
234236 . collect ( ) ;
235237 OffsetBuffer :: new ( offsets. into ( ) )
236238}
239+
240+ fn cast_fsl_to_list ( array : ArrayRef ) -> Result < ArrayRef > {
241+ match array. data_type ( ) {
242+ FixedSizeList ( field, _) => {
243+ Ok ( arrow:: compute:: cast ( & array, & List ( Arc :: clone ( field) ) ) ?)
244+ }
245+ _ => Ok ( array) ,
246+ }
247+ }
0 commit comments