Skip to content

Commit 52c4f3c

Browse files
authored
refactor: simplify converting List DataTypes to ScalarValue (#10675)
1 parent 40aabd6 commit 52c4f3c

File tree

1 file changed

+47
-51
lines changed
  • datafusion/common/src/scalar

1 file changed

+47
-51
lines changed

datafusion/common/src/scalar/mod.rs

Lines changed: 47 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -3089,46 +3089,21 @@ impl TryFrom<&DataType> for ScalarValue {
30893089
Box::new(value_type.as_ref().try_into()?),
30903090
),
30913091
// `ScalaValue::List` contains single element `ListArray`.
3092-
DataType::List(field) => ScalarValue::List(
3093-
new_null_array(
3094-
&DataType::List(Arc::new(Field::new(
3095-
"item",
3096-
field.data_type().clone(),
3097-
true,
3098-
))),
3099-
1,
3100-
)
3101-
.as_list::<i32>()
3102-
.to_owned()
3103-
.into(),
3104-
),
3105-
// 'ScalarValue::LargeList' contains single element `LargeListArray
3106-
DataType::LargeList(field) => ScalarValue::LargeList(
3107-
new_null_array(
3108-
&DataType::LargeList(Arc::new(Field::new(
3109-
"item",
3110-
field.data_type().clone(),
3111-
true,
3112-
))),
3113-
1,
3114-
)
3115-
.as_list::<i64>()
3116-
.to_owned()
3117-
.into(),
3118-
),
3092+
DataType::List(field_ref) => ScalarValue::List(Arc::new(
3093+
GenericListArray::new_null(field_ref.clone(), 1),
3094+
)),
3095+
// `ScalarValue::LargeList` contains single element `LargeListArray`.
3096+
DataType::LargeList(field_ref) => ScalarValue::LargeList(Arc::new(
3097+
GenericListArray::new_null(field_ref.clone(), 1),
3098+
)),
31193099
// `ScalaValue::FixedSizeList` contains single element `FixedSizeList`.
3120-
DataType::FixedSizeList(field, _) => ScalarValue::FixedSizeList(
3121-
new_null_array(
3122-
&DataType::FixedSizeList(
3123-
Arc::new(Field::new("item", field.data_type().clone(), true)),
3124-
1,
3125-
),
3100+
DataType::FixedSizeList(field_ref, fixed_length) => {
3101+
ScalarValue::FixedSizeList(Arc::new(FixedSizeListArray::new_null(
3102+
field_ref.clone(),
3103+
*fixed_length,
31263104
1,
3127-
)
3128-
.as_fixed_size_list()
3129-
.to_owned()
3130-
.into(),
3131-
),
3105+
)))
3106+
}
31323107
DataType::Struct(fields) => ScalarValue::Struct(
31333108
new_null_array(&DataType::Struct(fields.to_owned()), 1)
31343109
.as_struct()
@@ -4470,23 +4445,44 @@ mod tests {
44704445
}
44714446

44724447
#[test]
4473-
fn scalar_try_from_list() {
4474-
let data_type =
4475-
DataType::List(Arc::new(Field::new("item", DataType::Int32, true)));
4476-
let data_type = &data_type;
4477-
let scalar: ScalarValue = data_type.try_into().unwrap();
4448+
fn scalar_try_from_list_datatypes() {
4449+
let inner_field = Arc::new(Field::new("item", DataType::Int32, true));
44784450

4451+
// Test for List
4452+
let data_type = &DataType::List(inner_field.clone());
4453+
let scalar: ScalarValue = data_type.try_into().unwrap();
44794454
let expected = ScalarValue::List(
4480-
new_null_array(
4481-
&DataType::List(Arc::new(Field::new("item", DataType::Int32, true))),
4482-
1,
4483-
)
4484-
.as_list::<i32>()
4485-
.to_owned()
4486-
.into(),
4455+
new_null_array(data_type, 1)
4456+
.as_list::<i32>()
4457+
.to_owned()
4458+
.into(),
44874459
);
4460+
assert_eq!(expected, scalar);
4461+
assert!(expected.is_null());
44884462

4489-
assert_eq!(expected, scalar)
4463+
// Test for LargeList
4464+
let data_type = &DataType::LargeList(inner_field.clone());
4465+
let scalar: ScalarValue = data_type.try_into().unwrap();
4466+
let expected = ScalarValue::LargeList(
4467+
new_null_array(data_type, 1)
4468+
.as_list::<i64>()
4469+
.to_owned()
4470+
.into(),
4471+
);
4472+
assert_eq!(expected, scalar);
4473+
assert!(expected.is_null());
4474+
4475+
// Test for FixedSizeList(5)
4476+
let data_type = &DataType::FixedSizeList(inner_field.clone(), 5);
4477+
let scalar: ScalarValue = data_type.try_into().unwrap();
4478+
let expected = ScalarValue::FixedSizeList(
4479+
new_null_array(data_type, 1)
4480+
.as_fixed_size_list()
4481+
.to_owned()
4482+
.into(),
4483+
);
4484+
assert_eq!(expected, scalar);
4485+
assert!(expected.is_null());
44904486
}
44914487

44924488
#[test]

0 commit comments

Comments
 (0)