aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor/nodeBitmapHeapscan.c
diff options
context:
space:
mode:
authorMelanie Plageman <melanieplageman@gmail.com>2024-10-25 10:11:46 -0400
committerMelanie Plageman <melanieplageman@gmail.com>2024-10-25 10:11:46 -0400
commit7bd7aa4d30676de006636bb2c9c079c363d9d56c (patch)
tree1c3ce84957f5130368d7220d4b81bfbeec2cc164 /src/backend/executor/nodeBitmapHeapscan.c
parent8e7e672cdaa6bfec85d4d5dd9be84159df23bb41 (diff)
downloadpostgresql-7bd7aa4d30676de006636bb2c9c079c363d9d56c.tar.gz
postgresql-7bd7aa4d30676de006636bb2c9c079c363d9d56c.zip
Move EXPLAIN counter increment to heapam_scan_bitmap_next_block
Increment the lossy and exact page counters for EXPLAIN of bitmap heap scans in heapam_scan_bitmap_next_block(). Note that other table AMs will need to do this as well Pushing the counters into heapam_scan_bitmap_next_block() is required to be able to use the read stream API for bitmap heap scans. The bitmap iterator must be advanced from inside the read stream callback, so TBMIterateResults cannot be used as a flow control mechanism in BitmapHeapNext(). Author: Melanie Plageman Reviewed-by: Tomas Vondra, Heikki Linnakangas Discussion: https://postgr.es/m/063e4eb4-32d9-439e-a0b1-75565a9835a8%40iki.fi
Diffstat (limited to 'src/backend/executor/nodeBitmapHeapscan.c')
-rw-r--r--src/backend/executor/nodeBitmapHeapscan.c13
1 files changed, 3 insertions, 10 deletions
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;