@@ -1153,6 +1153,10 @@ fn write_leaf(
11531153 // Note: this should match the contents of arrow_to_parquet_type
11541154 ColumnWriter :: Int32ColumnWriter ( typed) => {
11551155 match column. data_type ( ) {
1156+ ArrowDataType :: Null => {
1157+ let array = Int32Array :: new_null ( column. len ( ) ) ;
1158+ write_primitive ( typed, array. values ( ) , levels)
1159+ }
11561160 ArrowDataType :: Int8 => {
11571161 let array: Int32Array = column. as_primitive :: < Int8Type > ( ) . unary ( |x| x as i32 ) ;
11581162 write_primitive ( typed, array. values ( ) , levels)
@@ -4163,68 +4167,6 @@ mod tests {
41634167 }
41644168 }
41654169
4166- #[ test]
4167- fn test_arrow_writer_explicit_schema ( ) {
4168- // Write an int32 array using explicit int64 storage
4169- let batch_schema = Arc :: new ( Schema :: new ( vec ! [ Field :: new(
4170- "integers" ,
4171- DataType :: Int32 ,
4172- true ,
4173- ) ] ) ) ;
4174- let parquet_schema = Type :: group_type_builder ( "root" )
4175- . with_fields ( vec ! [
4176- Type :: primitive_type_builder( "integers" , crate :: basic:: Type :: INT64 )
4177- . build( )
4178- . unwrap( )
4179- . into( ) ,
4180- ] )
4181- . build ( )
4182- . unwrap ( ) ;
4183- let parquet_schema_descr = SchemaDescriptor :: new ( parquet_schema. into ( ) ) ;
4184-
4185- let batch = RecordBatch :: try_new (
4186- batch_schema. clone ( ) ,
4187- vec ! [ Arc :: new( Int32Array :: from( vec![ 1 , 2 , 3 , 4 ] ) ) as _] ,
4188- )
4189- . unwrap ( ) ;
4190-
4191- let explicit_schema_options =
4192- ArrowWriterOptions :: new ( ) . with_parquet_schema ( parquet_schema_descr) ;
4193- let mut buf = Vec :: with_capacity ( 1024 ) ;
4194- let mut writer = ArrowWriter :: try_new_with_options (
4195- & mut buf,
4196- batch_schema. clone ( ) ,
4197- explicit_schema_options,
4198- )
4199- . unwrap ( ) ;
4200- writer. write ( & batch) . unwrap ( ) ;
4201- writer. close ( ) . unwrap ( ) ;
4202-
4203- let bytes = Bytes :: from ( buf) ;
4204- let reader_builder = ParquetRecordBatchReaderBuilder :: try_new ( bytes) . unwrap ( ) ;
4205-
4206- let expected_schema = Arc :: new ( Schema :: new ( vec ! [ Field :: new(
4207- "integers" ,
4208- DataType :: Int64 ,
4209- true ,
4210- ) ] ) ) ;
4211- assert_eq ! ( reader_builder. schema( ) , & expected_schema) ;
4212-
4213- let batches = reader_builder
4214- . build ( )
4215- . unwrap ( )
4216- . collect :: < Result < Vec < _ > , ArrowError > > ( )
4217- . unwrap ( ) ;
4218- assert_eq ! ( batches. len( ) , 1 ) ;
4219-
4220- let expected_batch = RecordBatch :: try_new (
4221- expected_schema. clone ( ) ,
4222- vec ! [ Arc :: new( Int64Array :: from( vec![ 1 , 2 , 3 , 4 ] ) ) as _] ,
4223- )
4224- . unwrap ( ) ;
4225- assert_eq ! ( batches[ 0 ] , expected_batch) ;
4226- }
4227-
42284170 #[ test]
42294171 fn mismatched_schemas ( ) {
42304172 let batch_schema = Schema :: new ( vec ! [ Field :: new( "count" , DataType :: Int32 , false ) ] ) ;
0 commit comments