@@ -39,11 +39,7 @@ use crate::cast::{
39
39
} ;
40
40
use crate :: error:: { DataFusionError , Result , _exec_err, _internal_err, _not_impl_err} ;
41
41
use crate :: hash_utils:: create_hashes;
42
- use crate :: utils:: {
43
- array_into_fixed_size_list_array_with_field_name, array_into_large_list_array,
44
- array_into_large_list_array_with_field_name, array_into_list_array,
45
- array_into_list_array_with_field_name,
46
- } ;
42
+ use crate :: utils:: SingleRowListArrayBuilder ;
47
43
use arrow:: compute:: kernels:: numeric:: * ;
48
44
use arrow:: util:: display:: { array_value_to_string, ArrayFormatter , FormatOptions } ;
49
45
use arrow:: {
@@ -2092,7 +2088,11 @@ impl ScalarValue {
2092
2088
} else {
2093
2089
Self :: iter_to_array ( values. iter ( ) . cloned ( ) ) . unwrap ( )
2094
2090
} ;
2095
- Arc :: new ( array_into_list_array ( values, nullable) )
2091
+ Arc :: new (
2092
+ SingleRowListArrayBuilder :: new ( values)
2093
+ . with_nullable ( nullable)
2094
+ . build_list_array ( ) ,
2095
+ )
2096
2096
}
2097
2097
2098
2098
/// Same as [`ScalarValue::new_list`] but with nullable set to true.
@@ -2148,7 +2148,11 @@ impl ScalarValue {
2148
2148
} else {
2149
2149
Self :: iter_to_array ( values) . unwrap ( )
2150
2150
} ;
2151
- Arc :: new ( array_into_list_array ( values, nullable) )
2151
+ Arc :: new (
2152
+ SingleRowListArrayBuilder :: new ( values)
2153
+ . with_nullable ( nullable)
2154
+ . build_list_array ( ) ,
2155
+ )
2152
2156
}
2153
2157
2154
2158
/// Converts `Vec<ScalarValue>` where each element has type corresponding to
@@ -2185,7 +2189,7 @@ impl ScalarValue {
2185
2189
} else {
2186
2190
Self :: iter_to_array ( values. iter ( ) . cloned ( ) ) . unwrap ( )
2187
2191
} ;
2188
- Arc :: new ( array_into_large_list_array ( values) )
2192
+ Arc :: new ( SingleRowListArrayBuilder :: new ( values) . build_large_list_array ( ) )
2189
2193
}
2190
2194
2191
2195
/// Converts a scalar value into an array of `size` rows.
@@ -2665,38 +2669,27 @@ impl ScalarValue {
2665
2669
let list_array = array. as_list :: < i32 > ( ) ;
2666
2670
let nested_array = list_array. value ( index) ;
2667
2671
// Produces a single element `ListArray` with the value at `index`.
2668
- let arr = Arc :: new ( array_into_list_array_with_field_name (
2669
- nested_array,
2670
- field. is_nullable ( ) ,
2671
- field. name ( ) ,
2672
- ) ) ;
2673
-
2674
- ScalarValue :: List ( arr)
2672
+ SingleRowListArrayBuilder :: new ( nested_array)
2673
+ . with_field ( field)
2674
+ . build_list_scalar ( )
2675
2675
}
2676
2676
DataType :: LargeList ( field) => {
2677
2677
let list_array = as_large_list_array ( array) ;
2678
2678
let nested_array = list_array. value ( index) ;
2679
2679
// Produces a single element `LargeListArray` with the value at `index`.
2680
- let arr = Arc :: new ( array_into_large_list_array_with_field_name (
2681
- nested_array,
2682
- field. name ( ) ,
2683
- ) ) ;
2684
-
2685
- ScalarValue :: LargeList ( arr)
2680
+ SingleRowListArrayBuilder :: new ( nested_array)
2681
+ . with_field ( field)
2682
+ . build_large_list_scalar ( )
2686
2683
}
2687
2684
// TODO: There is no test for FixedSizeList now, add it later
2688
2685
DataType :: FixedSizeList ( field, _) => {
2689
2686
let list_array = as_fixed_size_list_array ( array) ?;
2690
2687
let nested_array = list_array. value ( index) ;
2691
- // Produces a single element `ListArray ` with the value at `index`.
2688
+ // Produces a single element `FixedSizeListArray ` with the value at `index`.
2692
2689
let list_size = nested_array. len ( ) ;
2693
- let arr = Arc :: new ( array_into_fixed_size_list_array_with_field_name (
2694
- nested_array,
2695
- list_size,
2696
- field. name ( ) ,
2697
- ) ) ;
2698
-
2699
- ScalarValue :: FixedSizeList ( arr)
2690
+ SingleRowListArrayBuilder :: new ( nested_array)
2691
+ . with_field ( field)
2692
+ . build_fixed_size_list_scalar ( list_size)
2700
2693
}
2701
2694
DataType :: Date32 => typed_cast ! ( array, index, Date32Array , Date32 ) ?,
2702
2695
DataType :: Date64 => typed_cast ! ( array, index, Date64Array , Date64 ) ?,
@@ -3895,7 +3888,6 @@ mod tests {
3895
3888
} ;
3896
3889
3897
3890
use crate :: assert_batches_eq;
3898
- use crate :: utils:: array_into_list_array_nullable;
3899
3891
use arrow:: buffer:: OffsetBuffer ;
3900
3892
use arrow:: compute:: { is_null, kernels} ;
3901
3893
use arrow:: error:: ArrowError ;
@@ -4071,14 +4063,15 @@ mod tests {
4071
4063
4072
4064
let result = ScalarValue :: new_list_nullable ( scalars. as_slice ( ) , & DataType :: Utf8 ) ;
4073
4065
4074
- let expected = array_into_list_array_nullable ( Arc :: new ( StringArray :: from ( vec ! [
4075
- "rust" ,
4076
- "arrow" ,
4077
- "data-fusion" ,
4078
- ] ) ) ) ;
4066
+ let expected = single_row_list_array ( vec ! [ "rust" , "arrow" , "data-fusion" ] ) ;
4079
4067
assert_eq ! ( * result, expected) ;
4080
4068
}
4081
4069
4070
+ fn single_row_list_array ( items : Vec < & str > ) -> ListArray {
4071
+ SingleRowListArrayBuilder :: new ( Arc :: new ( StringArray :: from ( items) ) )
4072
+ . build_list_array ( )
4073
+ }
4074
+
4082
4075
fn build_list < O : OffsetSizeTrait > (
4083
4076
values : Vec < Option < Vec < Option < i64 > > > > ,
4084
4077
) -> Vec < ScalarValue > {
@@ -4281,12 +4274,8 @@ mod tests {
4281
4274
4282
4275
#[ test]
4283
4276
fn iter_to_array_string_test ( ) {
4284
- let arr1 = array_into_list_array_nullable ( Arc :: new ( StringArray :: from ( vec ! [
4285
- "foo" , "bar" , "baz" ,
4286
- ] ) ) ) ;
4287
- let arr2 = array_into_list_array_nullable ( Arc :: new ( StringArray :: from ( vec ! [
4288
- "rust" , "world" ,
4289
- ] ) ) ) ;
4277
+ let arr1 = single_row_list_array ( vec ! [ "foo" , "bar" , "baz" ] ) ;
4278
+ let arr2 = single_row_list_array ( vec ! [ "rust" , "world" ] ) ;
4290
4279
4291
4280
let scalars = vec ! [
4292
4281
ScalarValue :: List ( Arc :: new( arr1) ) ,
@@ -5743,13 +5732,13 @@ mod tests {
5743
5732
// Define list-of-structs scalars
5744
5733
5745
5734
let nl0_array = ScalarValue :: iter_to_array ( vec ! [ s0, s1. clone( ) ] ) . unwrap ( ) ;
5746
- let nl0 = ScalarValue :: List ( Arc :: new ( array_into_list_array_nullable ( nl0_array) ) ) ;
5735
+ let nl0 = SingleRowListArrayBuilder :: new ( nl0_array) . build_list_scalar ( ) ;
5747
5736
5748
5737
let nl1_array = ScalarValue :: iter_to_array ( vec ! [ s2] ) . unwrap ( ) ;
5749
- let nl1 = ScalarValue :: List ( Arc :: new ( array_into_list_array_nullable ( nl1_array) ) ) ;
5738
+ let nl1 = SingleRowListArrayBuilder :: new ( nl1_array) . build_list_scalar ( ) ;
5750
5739
5751
5740
let nl2_array = ScalarValue :: iter_to_array ( vec ! [ s1] ) . unwrap ( ) ;
5752
- let nl2 = ScalarValue :: List ( Arc :: new ( array_into_list_array_nullable ( nl2_array) ) ) ;
5741
+ let nl2 = SingleRowListArrayBuilder :: new ( nl2_array) . build_list_scalar ( ) ;
5753
5742
5754
5743
// iter_to_array for list-of-struct
5755
5744
let array = ScalarValue :: iter_to_array ( vec ! [ nl0, nl1, nl2] ) . unwrap ( ) ;
0 commit comments