diff options
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/access/heap/heapam_handler.c | 8 | ||||
-rw-r--r-- | src/backend/executor/nodeBitmapHeapscan.c | 13 |
2 files changed, 10 insertions, 11 deletions
diff --git a/src/backend/access/heap/heapam_handler.c b/src/backend/access/heap/heapam_handler.c index 8c59b77b64f..166aab7a93c 100644 --- a/src/backend/access/heap/heapam_handler.c +++ b/src/backend/access/heap/heapam_handler.c @@ -2115,7 +2115,8 @@ heapam_estimate_rel_size(Relation rel, int32 *attr_widths, static bool heapam_scan_bitmap_next_block(TableScanDesc scan, - TBMIterateResult *tbmres) + TBMIterateResult *tbmres, + uint64 *lossy_pages, uint64 *exact_pages) { HeapScanDesc hscan = (HeapScanDesc) scan; BlockNumber block = tbmres->blockno; @@ -2243,6 +2244,11 @@ heapam_scan_bitmap_next_block(TableScanDesc scan, Assert(ntup <= MaxHeapTuplesPerPage); hscan->rs_ntuples = ntup; + if (tbmres->ntuples >= 0) + (*exact_pages)++; + else + (*lossy_pages)++; + return ntup > 0; } diff --git a/src/backend/executor/nodeBitmapHeapscan.c b/src/backend/executor/nodeBitmapHeapscan.c index 3c63bdd93df..f4690a20bb1 100644 --- a/src/backend/executor/nodeBitmapHeapscan.c +++ b/src/backend/executor/nodeBitmapHeapscan.c @@ -212,8 +212,6 @@ BitmapHeapNext(BitmapHeapScanState *node) for (;;) { - bool valid_block; - CHECK_FOR_INTERRUPTS(); /* @@ -233,14 +231,9 @@ BitmapHeapNext(BitmapHeapScanState *node) BitmapAdjustPrefetchIterator(node, tbmres->blockno); - valid_block = table_scan_bitmap_next_block(scan, tbmres); - - if (tbmres->ntuples >= 0) - node->stats.exact_pages++; - else - node->stats.lossy_pages++; - - if (!valid_block) + if (!table_scan_bitmap_next_block(scan, tbmres, + &node->stats.lossy_pages, + &node->stats.exact_pages)) { /* AM doesn't think this block is valid, skip */ continue; |