@@ -544,9 +544,17 @@ impl<'a> TestCase<'a> {
544544 PushdownExpected :: None
545545 } ;
546546
547- let pushdown_rows_pruned = get_value ( & metrics, "pushdown_rows_pruned" ) ;
547+ let pushdown_rows_pruned = match pushdown_expected {
548+ PushdownExpected :: None => {
549+ metric_value_or_zero ( & metrics, "pushdown_rows_pruned" )
550+ }
551+ PushdownExpected :: Some => {
552+ expect_metric_value ( & metrics, "pushdown_rows_pruned" )
553+ }
554+ } ;
555+ let pushdown_rows_matched =
556+ metric_value_or_zero ( & metrics, "pushdown_rows_matched" ) ;
548557 println ! ( " pushdown_rows_pruned: {pushdown_rows_pruned}" ) ;
549- let pushdown_rows_matched = get_value ( & metrics, "pushdown_rows_matched" ) ;
550558 println ! ( " pushdown_rows_matched: {pushdown_rows_matched}" ) ;
551559
552560 match pushdown_expected {
@@ -562,11 +570,6 @@ impl<'a> TestCase<'a> {
562570 }
563571 } ;
564572
565- let ( page_index_rows_pruned, page_index_rows_matched) =
566- get_pruning_metrics ( & metrics, "page_index_rows_pruned" ) ;
567- println ! ( " page_index_rows_pruned: {page_index_rows_pruned}" ) ;
568- println ! ( " page_index_rows_matched: {page_index_rows_matched}" ) ;
569-
570573 let page_index_filtering_expected = if scan_options. enable_page_index {
571574 self . page_index_filtering_expected
572575 } else {
@@ -577,9 +580,17 @@ impl<'a> TestCase<'a> {
577580
578581 match page_index_filtering_expected {
579582 PageIndexFilteringExpected :: None => {
583+ let ( page_index_rows_pruned, page_index_rows_matched) =
584+ pruning_metrics_or_zero ( & metrics, "page_index_rows_pruned" ) ;
585+ println ! ( " page_index_rows_pruned: {page_index_rows_pruned}" ) ;
586+ println ! ( " page_index_rows_matched: {page_index_rows_matched}" ) ;
580587 assert_eq ! ( page_index_rows_pruned, 0 ) ;
581588 }
582589 PageIndexFilteringExpected :: Some => {
590+ let ( page_index_rows_pruned, page_index_rows_matched) =
591+ expect_pruning_metrics ( & metrics, "page_index_rows_pruned" ) ;
592+ println ! ( " page_index_rows_pruned: {page_index_rows_pruned}" ) ;
593+ println ! ( " page_index_rows_matched: {page_index_rows_matched}" ) ;
583594 assert ! (
584595 page_index_rows_pruned > 0 ,
585596 "Expected to filter rows via page index but none were" ,
@@ -591,29 +602,55 @@ impl<'a> TestCase<'a> {
591602 }
592603}
593604
594- fn get_pruning_metrics ( metrics : & MetricsSet , metric_name : & str ) -> ( usize , usize ) {
605+ fn pruning_metrics_or_zero ( metrics : & MetricsSet , metric_name : & str ) -> ( usize , usize ) {
606+ get_pruning_metrics ( metrics, metric_name, true )
607+ }
608+
609+ fn expect_pruning_metrics ( metrics : & MetricsSet , metric_name : & str ) -> ( usize , usize ) {
610+ get_pruning_metrics ( metrics, metric_name, false )
611+ }
612+
613+ fn get_pruning_metrics (
614+ metrics : & MetricsSet ,
615+ metric_name : & str ,
616+ allow_missing : bool ,
617+ ) -> ( usize , usize ) {
595618 match metrics. sum_by_name ( metric_name) {
596619 Some ( MetricValue :: PruningMetrics {
597620 pruning_metrics, ..
598621 } ) => ( pruning_metrics. pruned ( ) , pruning_metrics. matched ( ) ) ,
599622 Some ( _) => {
600623 panic ! ( "Metric '{metric_name}' is not a pruning metric in\n \n {metrics:#?}" )
601624 }
602- None => panic ! (
603- "Expected metric not found. Looking for '{metric_name}' in\n \n {metrics:#?}"
604- ) ,
625+ None if allow_missing => ( 0 , 0 ) ,
626+ None => panic ! ( "Expected metric '{metric_name}' not found in\n \n {metrics:#?}" ) ,
605627 }
606628}
607629
608- fn get_value ( metrics : & MetricsSet , metric_name : & str ) -> usize {
630+ fn metric_value_or_zero ( metrics : & MetricsSet , metric_name : & str ) -> usize {
631+ get_value ( metrics, metric_name, true )
632+ }
633+
634+ fn expect_metric_value ( metrics : & MetricsSet , metric_name : & str ) -> usize {
635+ get_value ( metrics, metric_name, false )
636+ }
637+
638+ fn metric_value_for_expected (
639+ metrics : & MetricsSet ,
640+ metric_name : & str ,
641+ expected : usize ,
642+ ) -> usize {
643+ get_value ( metrics, metric_name, expected == 0 )
644+ }
645+
646+ fn get_value ( metrics : & MetricsSet , metric_name : & str , allow_missing : bool ) -> usize {
609647 match metrics. sum_by_name ( metric_name) {
610648 Some ( MetricValue :: PruningMetrics {
611649 pruning_metrics, ..
612650 } ) => pruning_metrics. pruned ( ) ,
613651 Some ( v) => v. as_usize ( ) ,
614- None => panic ! (
615- "Expected metric not found. Looking for '{metric_name}' in\n \n {metrics:#?}"
616- ) ,
652+ None if allow_missing => 0 ,
653+ None => panic ! ( "Expected metric '{metric_name}' not found in\n \n {metrics:#?}" ) ,
617654 }
618655}
619656
@@ -736,11 +773,19 @@ impl PredicateCacheTest {
736773
737774 // verify the predicate cache metrics
738775 assert_eq ! (
739- get_value( & metrics, "predicate_cache_inner_records" ) ,
776+ metric_value_for_expected(
777+ & metrics,
778+ "predicate_cache_inner_records" ,
779+ expected_inner_records
780+ ) ,
740781 expected_inner_records
741782 ) ;
742783 assert_eq ! (
743- get_value( & metrics, "predicate_cache_records" ) ,
784+ metric_value_for_expected(
785+ & metrics,
786+ "predicate_cache_records" ,
787+ expected_records
788+ ) ,
744789 expected_records
745790 ) ;
746791 Ok ( ( ) )
0 commit comments