@@ -25,7 +25,7 @@ use arrow::array::{
2525 Int8Array , LargeListArray , ListArray , ListBuilder , RecordBatch , StringArray ,
2626 StringBuilder , StructBuilder , UInt32Array , UInt32Builder , UnionArray ,
2727} ;
28- use arrow:: buffer:: ScalarBuffer ;
28+ use arrow:: buffer:: { OffsetBuffer , ScalarBuffer } ;
2929use arrow:: datatypes:: {
3030 DataType , Field , Float32Type , Int32Type , Schema , UInt64Type , UnionFields , UnionMode ,
3131} ;
@@ -6479,3 +6479,103 @@ async fn test_duplicate_state_fields_for_dfschema_construct() -> Result<()> {
64796479
64806480 Ok ( ( ) )
64816481}
6482+
6483+ #[ tokio:: test]
6484+ async fn array_distinct_type_mismatch ( ) -> Result < ( ) > {
6485+ let inner_field = Arc :: new ( Field :: new ( "data" , DataType :: Int32 , false ) ) ;
6486+ let array = ListArray :: new (
6487+ Arc :: clone ( & inner_field) ,
6488+ OffsetBuffer :: new ( vec ! [ 0 , 7 ] . into ( ) ) ,
6489+ Arc :: new ( Int32Array :: from ( vec ! [ 1 , 1 , 2 , 2 , 0 , 0 , 3 ] ) ) ,
6490+ None ,
6491+ ) ;
6492+
6493+ let field = Field :: new ( "my_array" , DataType :: List ( Arc :: clone ( & inner_field) ) , true ) ;
6494+ let schema = Arc :: new ( Schema :: new ( vec ! [ field] ) ) ;
6495+
6496+ let batch = RecordBatch :: try_new ( schema, vec ! [ Arc :: new( array) ] ) . unwrap ( ) ;
6497+
6498+ let ctx = SessionContext :: new ( ) ;
6499+
6500+ ctx. register_batch ( "array_batch" , batch) . unwrap ( ) ;
6501+
6502+ let df = ctx. table ( "array_batch" ) . await . unwrap ( ) ;
6503+
6504+ // view_all
6505+ assert_snapshot ! (
6506+ batches_to_string( & df. clone( ) . collect( ) . await . unwrap( ) ) ,
6507+ @r"
6508+ +-----------------------+
6509+ | my_array |
6510+ +-----------------------+
6511+ | [1, 1, 2, 2, 0, 0, 3] |
6512+ +-----------------------+
6513+ "
6514+ ) ;
6515+ Ok ( ( ) )
6516+ //
6517+ // let result_df = df.clone().filter(col("my_dict")).unwrap();
6518+ //
6519+ // assert_snapshot!(
6520+ // batches_to_string(&result_df.collect().await.unwrap()),
6521+ // @r###"
6522+ // +---------+
6523+ // | my_dict |
6524+ // +---------+
6525+ // | true |
6526+ // | true |
6527+ // | true |
6528+ // +---------+
6529+ // "###
6530+ // );
6531+ //
6532+ // // test nested dictionary
6533+ // let keys = vec![0, 2]; // 0 -> true, 2 -> false
6534+ // let keys_array = Int8Array::from(keys);
6535+ // let nested_array = DictionaryArray::new(keys_array, array);
6536+ //
6537+ // let field = Field::new(
6538+ // "my_nested_dict",
6539+ // DataType::Dictionary(
6540+ // Box::new(DataType::Int8),
6541+ // Box::new(DataType::Dictionary(
6542+ // Box::new(DataType::Int8),
6543+ // Box::new(DataType::Boolean),
6544+ // )),
6545+ // ),
6546+ // true,
6547+ // );
6548+ //
6549+ // let schema = Arc::new(Schema::new(vec![field]));
6550+ //
6551+ // let batch = RecordBatch::try_new(schema, vec![Arc::new(nested_array)]).unwrap();
6552+ //
6553+ // ctx.register_batch("nested_dict_batch", batch).unwrap();
6554+ //
6555+ // let df = ctx.table("nested_dict_batch").await.unwrap();
6556+ //
6557+ // // view_all
6558+ // assert_snapshot!(
6559+ // batches_to_string(&df.clone().collect().await.unwrap()),
6560+ // @r###"
6561+ // +----------------+
6562+ // | my_nested_dict |
6563+ // +----------------+
6564+ // | true |
6565+ // | false |
6566+ // +----------------+
6567+ // "###
6568+ // );
6569+ //
6570+ // let result_df = df.clone().filter(col("my_nested_dict")).unwrap();
6571+ // assert_snapshot!(
6572+ // batches_to_string(&result_df.collect().await.unwrap()),
6573+ // @r###"
6574+ // +----------------+
6575+ // | my_nested_dict |
6576+ // +----------------+
6577+ // | true |
6578+ // +----------------+
6579+ // "###
6580+ // );
6581+ }
0 commit comments