@@ -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