@@ -823,8 +823,7 @@ fn should_enable_page_index(
823823
824824#[ cfg( test) ]
825825mod test {
826- use std:: sync:: Arc ;
827- use crate :: { DefaultParquetFileReaderFactory , opener:: ParquetOpener } ;
826+ use crate :: { opener:: ParquetOpener , DefaultParquetFileReaderFactory } ;
828827 use arrow:: datatypes:: { DataType , Field , Schema , SchemaRef } ;
829828 use bytes:: { BufMut , BytesMut } ;
830829 use datafusion_common:: {
@@ -840,6 +839,8 @@ mod test {
840839 PartitionedFile ,
841840 } ;
842841 use datafusion_expr:: { col, lit} ;
842+ use datafusion_physical_expr:: expressions:: { Column , Literal } ;
843+ use datafusion_physical_expr:: projection:: ProjectionExprs ;
843844 use datafusion_physical_expr:: {
844845 expressions:: DynamicFilterPhysicalExpr , planner:: logical2physical, PhysicalExpr ,
845846 } ;
@@ -849,8 +850,7 @@ mod test {
849850 use object_store:: { memory:: InMemory , path:: Path , ObjectStore } ;
850851 use parquet:: arrow:: ArrowWriter ;
851852 use parquet:: file:: properties:: WriterProperties ;
852- use datafusion_physical_expr:: expressions:: { Column , Literal } ;
853- use datafusion_physical_expr:: projection:: ProjectionExprs ;
853+ use std:: sync:: Arc ;
854854
855855 fn constant_int_stats ( ) -> ( Statistics , SchemaRef ) {
856856 let schema = Arc :: new ( Schema :: new ( vec ! [
@@ -1398,88 +1398,6 @@ mod test {
13981398 }
13991399 }
14001400
1401- #[ tokio:: test]
1402- async fn test_reverse_scan_row_groups ( ) {
1403- use parquet:: file:: properties:: WriterProperties ;
1404-
1405- let store = Arc :: new ( InMemory :: new ( ) ) as Arc < dyn ObjectStore > ;
1406-
1407- // Create multiple batches to ensure multiple row groups
1408- let batch1 =
1409- record_batch ! ( ( "a" , Int32 , vec![ Some ( 1 ) , Some ( 2 ) , Some ( 3 ) ] ) ) . unwrap ( ) ;
1410- let batch2 =
1411- record_batch ! ( ( "a" , Int32 , vec![ Some ( 4 ) , Some ( 5 ) , Some ( 6 ) ] ) ) . unwrap ( ) ;
1412- let batch3 =
1413- record_batch ! ( ( "a" , Int32 , vec![ Some ( 7 ) , Some ( 8 ) , Some ( 9 ) ] ) ) . unwrap ( ) ;
1414-
1415- // Write parquet file with multiple row groups
1416- // Force small row groups by setting max_row_group_size
1417- let props = WriterProperties :: builder ( )
1418- . set_max_row_group_size ( 3 ) // Force each batch into its own row group
1419- . build ( ) ;
1420-
1421- let data_len = write_parquet_batches (
1422- Arc :: clone ( & store) ,
1423- "test.parquet" ,
1424- vec ! [ batch1. clone( ) , batch2, batch3] ,
1425- Some ( props) ,
1426- )
1427- . await ;
1428-
1429- let schema = batch1. schema ( ) ;
1430- let file = PartitionedFile :: new (
1431- "test.parquet" . to_string ( ) ,
1432- u64:: try_from ( data_len) . unwrap ( ) ,
1433- ) ;
1434-
1435- let make_opener = |reverse_scan : bool | ParquetOpener {
1436- projection : Arc :: new ( [ 0 ] ) ,
1437- partition_index : 0 ,
1438- batch_size : 1024 ,
1439- limit : None ,
1440- predicate : None ,
1441- metadata_size_hint : None ,
1442- metrics : ExecutionPlanMetricsSet :: new ( ) ,
1443- parquet_file_reader_factory : Arc :: new ( DefaultParquetFileReaderFactory :: new (
1444- Arc :: clone ( & store) ,
1445- ) ) ,
1446- partition_fields : vec ! [ ] ,
1447- pushdown_filters : true ,
1448- reorder_filters : false ,
1449- enable_page_index : false ,
1450- enable_bloom_filter : false ,
1451- enable_limit_pruning : false ,
1452- schema_adapter_factory : Arc :: new ( DefaultSchemaAdapterFactory ) ,
1453- enable_row_group_stats_pruning : false ,
1454- coerce_int96 : None ,
1455- #[ cfg( feature = "parquet_encryption" ) ]
1456- file_decryption_properties : None ,
1457- expr_adapter_factory : Some ( Arc :: new ( DefaultPhysicalExprAdapterFactory ) ) ,
1458- #[ cfg( feature = "parquet_encryption" ) ]
1459- encryption_factory : None ,
1460- max_predicate_cache_size : None ,
1461- reverse_row_groups : reverse_scan,
1462- logical_file_schema : schema. clone ( ) ,
1463- } ;
1464-
1465- // Test normal scan (forward)
1466- let opener = make_opener ( false ) ;
1467- let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
1468- let forward_values = collect_int32_values ( stream) . await ;
1469-
1470- // Test reverse scan
1471- let opener = make_opener ( true ) ;
1472- let stream = opener. open ( file. clone ( ) ) . unwrap ( ) . await . unwrap ( ) ;
1473- let reverse_values = collect_int32_values ( stream) . await ;
1474-
1475- // The forward scan should return data in the order written
1476- assert_eq ! ( forward_values, vec![ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ) ;
1477-
1478- // With reverse scan, row groups are reversed, so we expect:
1479- // Row group 3 (7,8,9), then row group 2 (4,5,6), then row group 1 (1,2,3)
1480- assert_eq ! ( reverse_values, vec![ 7 , 8 , 9 , 4 , 5 , 6 , 1 , 2 , 3 ] ) ;
1481- }
1482-
14831401 #[ tokio:: test]
14841402 async fn test_reverse_scan_row_groups ( ) {
14851403 use parquet:: file:: properties:: WriterProperties ;
@@ -1506,7 +1424,7 @@ mod test {
15061424 vec ! [ batch1. clone( ) , batch2, batch3] ,
15071425 Some ( props) ,
15081426 )
1509- . await ;
1427+ . await ;
15101428
15111429 let schema = batch1. schema ( ) ;
15121430 let file = PartitionedFile :: new (
0 commit comments