@@ -1822,7 +1822,7 @@ pub fn array_intersect(args: &[ArrayRef]) -> Result<ArrayRef> {
1822
1822
let dt = first_array. value_type ( ) . clone ( ) ;
1823
1823
1824
1824
let mut offsets = vec ! [ 0 ] ;
1825
- let mut tmp_values = vec ! [ ] ;
1825
+ let mut new_arrays = vec ! [ ] ;
1826
1826
1827
1827
let converter = RowConverter :: new ( vec ! [ SortField :: new( dt. clone( ) ) ] ) ?;
1828
1828
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> {
1843
1843
None => return internal_err ! ( "offsets should not be empty" ) ,
1844
1844
} ;
1845
1845
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) ;
1857
1856
}
1858
1857
}
1859
1858
1860
1859
let field = Arc :: new ( Field :: new ( "item" , dt, true ) ) ;
1861
1860
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 ) ?;
1864
1863
let arr = Arc :: new ( ListArray :: try_new ( field, offsets, values, None ) ?) ;
1865
1864
Ok ( arr)
1866
1865
}
0 commit comments