@@ -52,7 +52,6 @@ use arrow::{
5252 UInt16Type , UInt32Type , UInt64Type , UInt8Type , DECIMAL128_MAX_PRECISION ,
5353 } ,
5454} ;
55- use arrow_array:: cast:: as_list_array;
5655use arrow_array:: { ArrowNativeTypeOp , Scalar } ;
5756
5857pub use struct_builder:: ScalarStructBuilder ;
@@ -2143,73 +2142,37 @@ impl ScalarValue {
21432142 /// use datafusion_common::ScalarValue;
21442143 /// use arrow::array::ListArray;
21452144 /// use arrow::datatypes::{DataType, Int32Type};
2145+ /// use datafusion_common::utils::array_into_list_array;
2146+ /// use std::sync::Arc;
21462147 ///
21472148 /// let list_arr = ListArray::from_iter_primitive::<Int32Type, _, _>(vec![
21482149 /// Some(vec![Some(1), Some(2), Some(3)]),
2149- /// None,
21502150 /// Some(vec![Some(4), Some(5)])
21512151 /// ]);
21522152 ///
21532153 /// let scalar_vec = ScalarValue::convert_array_to_scalar_vec(&list_arr).unwrap();
21542154 ///
21552155 /// let expected = vec![
2156- /// vec![
2156+ /// vec![
21572157 /// ScalarValue::Int32(Some(1)),
21582158 /// ScalarValue::Int32(Some(2)),
21592159 /// ScalarValue::Int32(Some(3)),
2160- /// ],
2161- /// vec![],
2162- /// vec![ScalarValue::Int32(Some(4)), ScalarValue::Int32(Some(5))]
2160+ /// ],
2161+ /// vec![
2162+ /// ScalarValue::Int32(Some(4)),
2163+ /// ScalarValue::Int32(Some(5)),
2164+ /// ],
21632165 /// ];
21642166 ///
21652167 /// assert_eq!(scalar_vec, expected);
2166- /// ```
2167- pub fn convert_array_to_scalar_vec ( array : & dyn Array ) -> Result < Vec < Vec < Self > > > {
2168- let mut scalars = Vec :: with_capacity ( array. len ( ) ) ;
2169-
2170- for index in 0 ..array. len ( ) {
2171- let scalar_values = match array. data_type ( ) {
2172- DataType :: List ( _) => {
2173- let list_array = as_list_array ( array) ;
2174- match list_array. is_null ( index) {
2175- true => Vec :: new ( ) ,
2176- false => {
2177- let nested_array = list_array. value ( index) ;
2178- ScalarValue :: convert_array_to_scalar_vec ( & nested_array) ?
2179- . into_iter ( )
2180- . flatten ( )
2181- . collect ( )
2182- }
2183- }
2184- }
2185- _ => {
2186- let scalar = ScalarValue :: try_from_array ( array, index) ?;
2187- vec ! [ scalar]
2188- }
2189- } ;
2190- scalars. push ( scalar_values) ;
2191- }
2192- Ok ( scalars)
2193- }
2194-
2195- /// convert_array_to_scalar_vec but only convert the first level instead of recursively converting
2196- /// all the levels, so list remains as ScalarValue::List
2197- ///
2198- /// Example
2199- /// ```
2200- /// use datafusion_common::ScalarValue;
2201- /// use arrow::array::ListArray;
2202- /// use arrow::datatypes::{DataType, Int32Type};
2203- /// use datafusion_common::utils::array_into_list_array;
2204- /// use std::sync::Arc;
22052168 ///
22062169 /// let list_arr = ListArray::from_iter_primitive::<Int32Type, _, _>(vec![
22072170 /// Some(vec![Some(1), Some(2), Some(3)]),
22082171 /// Some(vec![Some(4), Some(5)])
22092172 /// ]);
22102173 /// let list_arr = array_into_list_array(Arc::new(list_arr));
22112174 ///
2212- /// let scalar_vec = ScalarValue::convert_first_level_array_to_scalar_vec (&list_arr).unwrap();
2175+ /// let scalar_vec = ScalarValue::convert_array_to_scalar_vec (&list_arr).unwrap();
22132176 ///
22142177 /// let l1 = ListArray::from_iter_primitive::<Int32Type, _, _>(vec![
22152178 /// Some(vec![Some(1), Some(2), Some(3)]),
@@ -2227,9 +2190,7 @@ impl ScalarValue {
22272190 ///
22282191 /// assert_eq!(scalar_vec, expected);
22292192 /// ```
2230- pub fn convert_first_level_array_to_scalar_vec (
2231- array : & dyn Array ,
2232- ) -> Result < Vec < Vec < Self > > > {
2193+ pub fn convert_array_to_scalar_vec ( array : & dyn Array ) -> Result < Vec < Vec < Self > > > {
22332194 let mut scalars = Vec :: with_capacity ( array. len ( ) ) ;
22342195
22352196 for index in 0 ..array. len ( ) {
0 commit comments