@@ -932,7 +932,7 @@ mod tests {
932932 use super :: * ;
933933 use crate :: arrow:: converter:: Utf8Converter ;
934934 use crate :: basic:: { Encoding , Type as PhysicalType } ;
935- use crate :: column:: page:: Page ;
935+ use crate :: column:: page:: { Page , PageReader } ;
936936 use crate :: data_type:: { ByteArray , DataType , Int32Type , Int64Type } ;
937937 use crate :: errors:: Result ;
938938 use crate :: file:: reader:: { FileReader , SerializedFileReader } ;
@@ -998,6 +998,33 @@ mod tests {
998998 }
999999 }
10001000
1001+ #[ test]
1002+ fn test_primitive_array_reader_empty_pages ( ) {
1003+ // Construct column schema
1004+ let message_type = "
1005+ message test_schema {
1006+ REQUIRED INT32 leaf;
1007+ }
1008+ " ;
1009+
1010+ let schema = parse_message_type ( message_type)
1011+ . map ( |t| Rc :: new ( SchemaDescriptor :: new ( Rc :: new ( t) ) ) )
1012+ . unwrap ( ) ;
1013+
1014+ let column_desc = schema. column ( 0 ) ;
1015+ let page_iterator = EmptyPageIterator :: new ( schema. clone ( ) ) ;
1016+
1017+ let mut array_reader = PrimitiveArrayReader :: < Int32Type > :: new (
1018+ Box :: new ( page_iterator) ,
1019+ column_desc. clone ( ) ,
1020+ )
1021+ . unwrap ( ) ;
1022+
1023+ // expect no values to be read
1024+ let array = array_reader. next_batch ( 50 ) . unwrap ( ) ;
1025+ assert ! ( array. is_empty( ) ) ;
1026+ }
1027+
10011028 #[ test]
10021029 fn test_primitive_array_reader_data ( ) {
10031030 // Construct column schema
@@ -1450,6 +1477,35 @@ mod tests {
14501477 }
14511478 }
14521479
1480+ /// Iterator for testing reading empty columns
1481+ struct EmptyPageIterator {
1482+ schema : SchemaDescPtr ,
1483+ }
1484+
1485+ impl EmptyPageIterator {
1486+ fn new ( schema : SchemaDescPtr ) -> Self {
1487+ EmptyPageIterator { schema }
1488+ }
1489+ }
1490+
1491+ impl Iterator for EmptyPageIterator {
1492+ type Item = Result < Box < dyn PageReader > > ;
1493+
1494+ fn next ( & mut self ) -> Option < Self :: Item > {
1495+ None
1496+ }
1497+ }
1498+
1499+ impl PageIterator for EmptyPageIterator {
1500+ fn schema ( & mut self ) -> Result < SchemaDescPtr > {
1501+ Ok ( self . schema . clone ( ) )
1502+ }
1503+
1504+ fn column_schema ( & mut self ) -> Result < ColumnDescPtr > {
1505+ Ok ( self . schema . column ( 0 ) )
1506+ }
1507+ }
1508+
14531509 #[ test]
14541510 fn test_struct_array_reader ( ) {
14551511 let array_1 = Arc :: new ( PrimitiveArray :: < ArrowInt32 > :: from ( vec ! [ 1 , 2 , 3 , 4 , 5 ] ) ) ;
0 commit comments