@@ -145,10 +145,11 @@ pub fn flatten_inner(args: &[ArrayRef]) -> Result<ArrayRef> {
145
145
146
146
match array. data_type ( ) {
147
147
List ( _) => {
148
- let ( field , offsets, values, nulls) =
148
+ let ( _field , offsets, values, nulls) =
149
149
as_list_array ( & array) ?. clone ( ) . into_parts ( ) ;
150
+ let values = cast_fsl_to_list ( values) ?;
150
151
151
- match field . data_type ( ) {
152
+ match values . data_type ( ) {
152
153
List ( _) => {
153
154
let ( inner_field, inner_offsets, inner_values, _) =
154
155
as_list_array ( & values) ?. clone ( ) . into_parts ( ) ;
@@ -169,10 +170,11 @@ pub fn flatten_inner(args: &[ArrayRef]) -> Result<ArrayRef> {
169
170
}
170
171
}
171
172
LargeList ( _) => {
172
- let ( field , offsets, values, nulls) =
173
+ let ( _field , offsets, values, nulls) =
173
174
as_large_list_array ( & array) ?. clone ( ) . into_parts ( ) ;
175
+ let values = cast_fsl_to_list ( values) ?;
174
176
175
- match field . data_type ( ) {
177
+ match values . data_type ( ) {
176
178
List ( _) => {
177
179
let ( inner_field, inner_offsets, inner_values, _) =
178
180
as_list_array ( & values) ?. clone ( ) . into_parts ( ) ;
@@ -234,3 +236,12 @@ fn get_large_offsets_for_flatten<O: OffsetSizeTrait, P: OffsetSizeTrait>(
234
236
. collect ( ) ;
235
237
OffsetBuffer :: new ( offsets. into ( ) )
236
238
}
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