@@ -1822,7 +1822,7 @@ pub fn array_intersect(args: &[ArrayRef]) -> Result<ArrayRef> {
18221822 let dt = first_array. value_type ( ) . clone ( ) ;
18231823
18241824 let mut offsets = vec ! [ 0 ] ;
1825- let mut tmp_values = vec ! [ ] ;
1825+ let mut new_arrays = vec ! [ ] ;
18261826
18271827 let converter = RowConverter :: new ( vec ! [ SortField :: new( dt. clone( ) ) ] ) ?;
18281828 for ( first_arr, second_arr) in first_array. iter ( ) . zip ( second_array. iter ( ) ) {
@@ -1843,24 +1843,23 @@ pub fn array_intersect(args: &[ArrayRef]) -> Result<ArrayRef> {
18431843 None => return internal_err ! ( "offsets should not be empty" ) ,
18441844 } ;
18451845 offsets. push ( last_offset + rows. len ( ) as i32 ) ;
1846- let tmp_value = converter. convert_rows ( rows) ?;
1847- tmp_values. push (
1848- tmp_value
1849- . get ( 0 )
1850- . ok_or_else ( || {
1851- DataFusionError :: Internal ( format ! (
1852- "array_intersect: failed to get value from rows"
1853- ) )
1854- } ) ?
1855- . clone ( ) ,
1856- ) ;
1846+ let arrays = converter. convert_rows ( rows) ?;
1847+ let array = match arrays. get ( 0 ) {
1848+ Some ( array) => array. clone ( ) ,
1849+ None => {
1850+ return internal_err ! (
1851+ "array_intersect: failed to get array from rows"
1852+ )
1853+ }
1854+ } ;
1855+ new_arrays. push ( array) ;
18571856 }
18581857 }
18591858
18601859 let field = Arc :: new ( Field :: new ( "item" , dt, true ) ) ;
18611860 let offsets = OffsetBuffer :: new ( offsets. into ( ) ) ;
1862- let tmp_values_ref = tmp_values . iter ( ) . map ( |v| v. as_ref ( ) ) . collect :: < Vec < _ > > ( ) ;
1863- let values = compute:: concat ( & tmp_values_ref ) ?;
1861+ let new_arrays_ref = new_arrays . iter ( ) . map ( |v| v. as_ref ( ) ) . collect :: < Vec < _ > > ( ) ;
1862+ let values = compute:: concat ( & new_arrays_ref ) ?;
18641863 let arr = Arc :: new ( ListArray :: try_new ( field, offsets, values, None ) ?) ;
18651864 Ok ( arr)
18661865}
0 commit comments