Skip to content

Commit af16049

Browse files
committed
rm convert_first_level_array_to_scalar_vec
Signed-off-by: jayzhan211 <jayzhan211@gmail.com>
1 parent e39f315 commit af16049

File tree

4 files changed

+14
-54
lines changed

4 files changed

+14
-54
lines changed

datafusion/common/src/scalar/mod.rs

Lines changed: 10 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ use arrow::{
5252
UInt16Type, UInt32Type, UInt64Type, UInt8Type, DECIMAL128_MAX_PRECISION,
5353
},
5454
};
55-
use arrow_array::cast::as_list_array;
5655
use arrow_array::{ArrowNativeTypeOp, Scalar};
5756

5857
pub 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() {

datafusion/core/tests/sql/aggregates.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ async fn csv_query_array_agg_distinct() -> Result<()> {
4444
// We should have 1 row containing a list
4545
let column = actual[0].column(0);
4646
assert_eq!(column.len(), 1);
47-
4847
let scalar_vec = ScalarValue::convert_array_to_scalar_vec(&column)?;
4948
let mut scalars = scalar_vec[0].clone();
49+
5050
// workaround lack of Ord of ScalarValue
5151
let cmp = |a: &ScalarValue, b: &ScalarValue| {
5252
a.partial_cmp(b).expect("Can compare ScalarValues")

datafusion/physical-expr/src/aggregate/array_agg_ordered.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,7 @@ impl Accumulator for OrderSensitiveArrayAggAccumulator {
246246
partition_ordering_values.push(self.ordering_values.clone().into());
247247

248248
// Convert array to Scalars to sort them easily. Convert back to array at evaluation.
249-
let array_agg_res =
250-
ScalarValue::convert_first_level_array_to_scalar_vec(array_agg_values)?;
249+
let array_agg_res = ScalarValue::convert_array_to_scalar_vec(array_agg_values)?;
251250
for v in array_agg_res.into_iter() {
252251
partition_values.push(v.into());
253252
}

datafusion/physical-expr/src/aggregate/nth_value.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ impl Accumulator for NthValueAccumulator {
236236
let n_required = self.n.unsigned_abs() as usize;
237237
if self.ordering_req.is_empty() {
238238
let array_agg_res =
239-
ScalarValue::convert_first_level_array_to_scalar_vec(array_agg_values)?;
239+
ScalarValue::convert_array_to_scalar_vec(array_agg_values)?;
240240
for v in array_agg_res.into_iter() {
241241
self.values.extend(v);
242242
if self.values.len() > n_required {
@@ -260,7 +260,7 @@ impl Accumulator for NthValueAccumulator {
260260
partition_ordering_values.push(self.ordering_values.clone());
261261

262262
let array_agg_res =
263-
ScalarValue::convert_first_level_array_to_scalar_vec(array_agg_values)?;
263+
ScalarValue::convert_array_to_scalar_vec(array_agg_values)?;
264264

265265
for v in array_agg_res.into_iter() {
266266
partition_values.push(v.into());

0 commit comments

Comments
 (0)