Skip to content

Commit e77d9b2

Browse files
committed
test: scalar/mod.rs
1 parent 1b051b9 commit e77d9b2

File tree

1 file changed

+236
-7
lines changed
  • datafusion/common/src/scalar

1 file changed

+236
-7
lines changed

datafusion/common/src/scalar/mod.rs

Lines changed: 236 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5208,12 +5208,15 @@ mod tests {
52085208
use std::sync::Arc;
52095209

52105210
use super::*;
5211-
use crate::cast::{as_list_array, as_map_array, as_struct_array};
5211+
use crate::cast::{
5212+
as_large_list_view_array, as_list_array, as_map_array, as_struct_array,
5213+
};
52125214
use crate::test_util::batches_to_string;
52135215
use arrow::array::{
5214-
FixedSizeListBuilder, Int32Builder, LargeListBuilder, ListBuilder, MapBuilder,
5215-
NullArray, NullBufferBuilder, OffsetSizeTrait, PrimitiveBuilder, RecordBatch,
5216-
StringBuilder, StringDictionaryBuilder, StructBuilder, UnionBuilder,
5216+
FixedSizeListBuilder, Int32Builder, LargeListBuilder, LargeListViewBuilder,
5217+
ListBuilder, ListViewBuilder, MapBuilder, NullArray, NullBufferBuilder,
5218+
OffsetSizeTrait, PrimitiveBuilder, RecordBatch, StringBuilder,
5219+
StringDictionaryBuilder, StructBuilder, UnionBuilder,
52175220
};
52185221
use arrow::buffer::{Buffer, NullBuffer, OffsetBuffer};
52195222
use arrow::compute::{is_null, kernels};
@@ -5399,6 +5402,28 @@ mod tests {
53995402
]);
54005403

54015404
assert_eq!(&arr, actual_list_arr);
5405+
5406+
// TODO: no function or associated item named `from_iter_primitive` found for struct `GenericListViewArray`
5407+
// // ListView
5408+
// let arr =
5409+
// ListViewArray::from_iter_primitive::<Int32Type, _, _>(vec![Some(vec![
5410+
// Some(1),
5411+
// None,
5412+
// Some(2),
5413+
// ])]);
5414+
//
5415+
// let sv = ScalarValue::List(Arc::new(arr));
5416+
// let actual_arr = sv
5417+
// .to_array_of_size(2)
5418+
// .expect("Failed to convert to array of size");
5419+
// let actual_list_arr = actual_arr.as_list_view::<i32>();
5420+
//
5421+
// let arr = ListViewArray::from_iter_primitive::<Int32Type, _, _>(vec![
5422+
// Some(vec![Some(1), None, Some(2)]),
5423+
// Some(vec![Some(1), None, Some(2)]),
5424+
// ]);
5425+
//
5426+
// assert_eq!(&arr, actual_list_arr);
54025427
}
54035428

54045429
#[test]
@@ -5614,13 +5639,13 @@ mod tests {
56145639

56155640
#[test]
56165641
fn iter_to_array_primitive_test() {
5642+
// List
56175643
// List[[1,2,3]], List[null], List[[4,5]]
56185644
let scalars = build_list::<i32>(vec![
56195645
Some(vec![Some(1), Some(2), Some(3)]),
56205646
None,
56215647
Some(vec![Some(4), Some(5)]),
56225648
]);
5623-
56245649
let array = ScalarValue::iter_to_array(scalars).unwrap();
56255650
let list_array = as_list_array(&array).unwrap();
56265651
// List[[1,2,3], null, [4,5]]
@@ -5631,20 +5656,59 @@ mod tests {
56315656
]);
56325657
assert_eq!(list_array, &expected);
56335658

5659+
// LargeList
5660+
// List[[1,2,3]], List[null], List[[4,5]]
56345661
let scalars = build_list::<i64>(vec![
56355662
Some(vec![Some(1), Some(2), Some(3)]),
56365663
None,
56375664
Some(vec![Some(4), Some(5)]),
56385665
]);
56395666

56405667
let array = ScalarValue::iter_to_array(scalars).unwrap();
5641-
let list_array = as_large_list_array(&array).unwrap();
5668+
let large_list_array = as_large_list_array(&array).unwrap();
56425669
let expected = LargeListArray::from_iter_primitive::<Int64Type, _, _>(vec![
56435670
Some(vec![Some(1), Some(2), Some(3)]),
56445671
None,
56455672
Some(vec![Some(4), Some(5)]),
56465673
]);
5647-
assert_eq!(list_array, &expected);
5674+
assert_eq!(large_list_array, &expected);
5675+
5676+
// TODO: no function or associated item named `from_iter_primitive` found for struct `GenericListViewArray`
5677+
// // ListView
5678+
// // List[[1,2,3]], List[null], List[[4,5]]
5679+
// let scalars = build_list::<i32>(vec![
5680+
// Some(vec![Some(1), Some(2), Some(3)]),
5681+
// None,
5682+
// Some(vec![Some(4), Some(5)]),
5683+
// ]);
5684+
//
5685+
// let array = ScalarValue::iter_to_array(scalars).unwrap();
5686+
// let list_view_array = as_list_view_array(&array).unwrap();
5687+
// // List[[1,2,3], null, [4,5]]
5688+
// let expected = ListViewArray::from_iter_primitive::<Int64Type, _, _>(vec![
5689+
// Some(vec![Some(1), Some(2), Some(3)]),
5690+
// None,
5691+
// Some(vec![Some(4), Some(5)]),
5692+
// ]);
5693+
// assert_eq!(list_view_array, &expected);
5694+
//
5695+
// // LargeListView
5696+
// // List[[1,2,3]], List[null], List[[4,5]]
5697+
// let scalars = build_list::<i64>(vec![
5698+
// Some(vec![Some(1), Some(2), Some(3)]),
5699+
// None,
5700+
// Some(vec![Some(4), Some(5)]),
5701+
// ]);
5702+
//
5703+
// let array = ScalarValue::iter_to_array(scalars).unwrap();
5704+
// let large_list_view_array = as_large_list_view_array(&array).unwrap();
5705+
// // List[[1,2,3], null, [4,5]]
5706+
// let expected = LargeListViewArray::from_iter_primitive::<Int64Type, _, _>(vec![
5707+
// Some(vec![Some(1), Some(2), Some(3)]),
5708+
// None,
5709+
// Some(vec![Some(4), Some(5)]),
5710+
// ]);
5711+
// assert_eq!(large_list_view_array, &expected);
56485712
}
56495713

56505714
#[test]
@@ -5686,13 +5750,22 @@ mod tests {
56865750
Some(vec![None, Some(5)]),
56875751
]));
56885752

5753+
// TODO: this is NOT fixed size list array
56895754
let fsl_array: ArrayRef =
56905755
Arc::new(ListArray::from_iter_primitive::<Int32Type, _, _>(vec![
56915756
Some(vec![Some(0), Some(1), Some(2)]),
56925757
None,
56935758
Some(vec![Some(3), None, Some(5)]),
56945759
]));
56955760

5761+
// TODO: no function or associated item named `from_iter_primitive` found for struct `GenericListViewArray`
5762+
// let list_view_array: ArrayRef =
5763+
// Arc::new(ListViewArray::from_iter_primitive::<Int32Type, _, _>(vec![
5764+
// Some(vec![Some(0), Some(1), Some(2)]),
5765+
// None,
5766+
// Some(vec![None, Some(5)]),
5767+
// ]));
5768+
56965769
for arr in [list_array, fsl_array] {
56975770
for i in 0..arr.len() {
56985771
let scalar =
@@ -6267,6 +6340,41 @@ mod tests {
62676340
),
62686341
));
62696342
assert_eq!(a.partial_cmp(&b), Some(Ordering::Greater));
6343+
6344+
// TODO: no function or associated item named `from_iter_primitive` found for struct `GenericListViewArray`
6345+
// let a = ScalarValue::ListView(Arc::new(ListViewArray::from_iter_primitive::<
6346+
// Int64Type,
6347+
// _,
6348+
// _,
6349+
// >(vec![Some(vec![
6350+
// None,
6351+
// Some(2),
6352+
// Some(3),
6353+
// ])])));
6354+
// let b = ScalarValue::ListView(Arc::new(ListViewArray::from_iter_primitive::<
6355+
// Int64Type,
6356+
// _,
6357+
// _,
6358+
// >(vec![Some(vec![
6359+
// Some(1),
6360+
// Some(2),
6361+
// Some(3),
6362+
// ])])));
6363+
// assert_eq!(a.partial_cmp(&b), Some(Ordering::Greater));
6364+
//
6365+
// let a =
6366+
// ScalarValue::LargeListView(Arc::new(
6367+
// LargeListViewArray::from_iter_primitive::<Int64Type, _, _>(vec![Some(
6368+
// vec![None, Some(2), Some(3)],
6369+
// )]),
6370+
// ));
6371+
// let b =
6372+
// ScalarValue::LargeListView(Arc::new(
6373+
// LargeListViewArray::from_iter_primitive::<Int64Type, _, _>(vec![Some(
6374+
// vec![Some(1), Some(2), Some(3)],
6375+
// )]),
6376+
// ));
6377+
// assert_eq!(a.partial_cmp(&b), Some(Ordering::Greater));
62706378
}
62716379

62726380
#[test]
@@ -6616,6 +6724,32 @@ mod tests {
66166724
);
66176725
assert_eq!(expected, scalar);
66186726
assert!(expected.is_null());
6727+
6728+
// TODO: arrow-data support: ListView, upstream issue later
6729+
// entered unreachable code: ListView(nullable Int32)
6730+
// // Test for ListView
6731+
// let data_type = &DataType::ListView(Arc::clone(&inner_field));
6732+
// let scalar: ScalarValue = data_type.try_into().unwrap();
6733+
// let expected = ScalarValue::ListView(
6734+
// new_null_array(data_type, 1)
6735+
// .as_list_view::<i32>()
6736+
// .to_owned()
6737+
// .into(),
6738+
// );
6739+
// assert_eq!(expected, scalar);
6740+
// assert!(expected.is_null());
6741+
//
6742+
// // Test for LargeListView
6743+
// let data_type = &DataType::LargeListView(Arc::clone(&inner_field));
6744+
// let scalar: ScalarValue = data_type.try_into().unwrap();
6745+
// let expected = ScalarValue::LargeListView(
6746+
// new_null_array(data_type, 1)
6747+
// .as_list_view::<i64>()
6748+
// .to_owned()
6749+
// .into(),
6750+
// );
6751+
// assert_eq!(expected, scalar);
6752+
// assert!(expected.is_null());
66196753
}
66206754

66216755
#[test]
@@ -7326,6 +7460,35 @@ mod tests {
73267460
builder.append(true);
73277461
Arc::new(builder.finish())
73287462
},
7463+
// TODO: https://github.com/apache/arrow-rs/pull/8645
7464+
// // list view array
7465+
// {
7466+
// let values_builder = StringBuilder::new();
7467+
// let mut builder = ListViewBuilder::new(values_builder);
7468+
// // [A, B]
7469+
// builder.values().append_value("A");
7470+
// builder.values().append_value("B");
7471+
// builder.append(true);
7472+
// // [ ] (empty list)
7473+
// builder.append(true);
7474+
// // Null
7475+
// builder.append(false);
7476+
// Arc::new(builder.finish())
7477+
// },
7478+
// // large list view array
7479+
// {
7480+
// let values_builder = StringBuilder::new();
7481+
// let mut builder = LargeListViewBuilder::new(values_builder);
7482+
// // [A, B]
7483+
// builder.values().append_value("A");
7484+
// builder.values().append_value("B");
7485+
// builder.append(true);
7486+
// // [ ] (empty list)
7487+
// builder.append(true);
7488+
// // Null
7489+
// builder.append(false);
7490+
// Arc::new(builder.finish())
7491+
// },
73297492
// map
73307493
{
73317494
let string_builder = StringBuilder::new();
@@ -7823,6 +7986,40 @@ mod tests {
78237986
},
78247987
DataType::LargeList(Arc::new(Field::new("element", DataType::Int64, true))),
78257988
);
7989+
// TODO: https://github.com/apache/arrow-rs/pull/8735
7990+
// CastError("Casting from ListView(nullable Int32, field: 'element') to ListView(nullable Int64, field: 'element')
7991+
// check_scalar_cast(
7992+
// {
7993+
// let element_field =
7994+
// Arc::new(Field::new("element", DataType::Int32, true));
7995+
//
7996+
// let mut builder =
7997+
// ListViewBuilder::new(Int32Builder::new()).with_field(element_field);
7998+
// builder.append_value([Some(1)]);
7999+
// builder.append(true);
8000+
//
8001+
// ScalarValue::ListView(Arc::new(builder.finish()))
8002+
// },
8003+
// DataType::ListView(Arc::new(Field::new("element", DataType::Int64, true))),
8004+
// );
8005+
// check_scalar_cast(
8006+
// {
8007+
// let element_field =
8008+
// Arc::new(Field::new("element", DataType::Int32, true));
8009+
//
8010+
// let mut builder = LargeListViewBuilder::new(Int32Builder::new())
8011+
// .with_field(element_field);
8012+
// builder.append_value([Some(1)]);
8013+
// builder.append(true);
8014+
//
8015+
// ScalarValue::LargeListView(Arc::new(builder.finish()))
8016+
// },
8017+
// DataType::LargeListView(Arc::new(Field::new(
8018+
// "element",
8019+
// DataType::Int64,
8020+
// true,
8021+
// ))),
8022+
// );
78268023
}
78278024

78288025
// mimics how casting work on scalar values by `casting` `scalar` to `desired_type`
@@ -8972,6 +9169,11 @@ mod tests {
89729169
42,
89739170
))
89749171
.unwrap(),
9172+
// upstream issue https://github.com/apache/arrow-rs/issues/8904
9173+
// ScalarValue::try_new_null(&DataType::ListView(Arc::clone(&field_ref)))
9174+
// .unwrap(),
9175+
// ScalarValue::try_new_null(&DataType::LargeListView(Arc::clone(&field_ref)))
9176+
// .unwrap(),
89759177
ScalarValue::try_new_null(&DataType::Struct(
89769178
vec![Arc::clone(&field_ref)].into(),
89779179
))
@@ -9064,6 +9266,17 @@ mod tests {
90649266
_ => panic!("Expected List"),
90659267
}
90669268

9269+
let list_result =
9270+
ScalarValue::new_default(&DataType::ListView(Arc::new(list_field.clone())))
9271+
.unwrap();
9272+
match list_result {
9273+
ScalarValue::ListView(arr) => {
9274+
assert_eq!(arr.len(), 1);
9275+
assert_eq!(arr.value_size(0), 0); // empty list
9276+
}
9277+
_ => panic!("Expected List"),
9278+
}
9279+
90679280
// Test struct type
90689281
let struct_fields = Fields::from(vec![
90699282
Field::new("a", DataType::Int32, false),
@@ -9172,6 +9385,14 @@ mod tests {
91729385
)))),
91739386
None
91749387
);
9388+
assert_eq!(
9389+
ScalarValue::min(&DataType::ListView(Arc::new(Field::new(
9390+
"item",
9391+
DataType::Int32,
9392+
true
9393+
)))),
9394+
None
9395+
);
91759396
}
91769397

91779398
#[test]
@@ -9248,6 +9469,14 @@ mod tests {
92489469
)]))),
92499470
None
92509471
);
9472+
assert_eq!(
9473+
ScalarValue::max(&DataType::ListView(Arc::new(Field::new(
9474+
"item",
9475+
DataType::Int32,
9476+
true
9477+
)))),
9478+
None
9479+
);
92519480
}
92529481

92539482
#[test]

0 commit comments

Comments
 (0)