diff options
author | Melanie Plageman <melanieplageman@gmail.com> | 2024-12-18 18:19:28 -0500 |
---|---|---|
committer | Melanie Plageman <melanieplageman@gmail.com> | 2024-12-18 18:19:28 -0500 |
commit | 7f9d4187e7bab10329cc00aff34cfba08248d4be (patch) | |
tree | 91eea6e103e5a8512dbd0c66be4f80ff3d32793e /src/backend/executor/nodeBitmapHeapscan.c | |
parent | 28328ec87b45725f62bed1104d99c8b3220d1675 (diff) | |
download | postgresql-7f9d4187e7bab10329cc00aff34cfba08248d4be.tar.gz postgresql-7f9d4187e7bab10329cc00aff34cfba08248d4be.zip |
Add common interface for TBMIterators
Add and use TBMPrivateIterator, which replaces the current TBMIterator
for serial use cases, and repurpose TBMIterator to be a unified
interface for both the serial ("private") and parallel ("shared") TID
Bitmap iterator interfaces. This encapsulation simplifies call sites for
callers supporting both parallel and serial TID Bitmap access.
TBMIterator is not yet used in this commit.
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.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/backend/executor/nodeBitmapHeapscan.c b/src/backend/executor/nodeBitmapHeapscan.c index 689bde16dd2..d9e7a516a07 100644 --- a/src/backend/executor/nodeBitmapHeapscan.c +++ b/src/backend/executor/nodeBitmapHeapscan.c @@ -95,7 +95,7 @@ BitmapHeapNext(BitmapHeapScanState *node) */ if (!node->initialized) { - TBMIterator *tbmiterator = NULL; + TBMPrivateIterator *tbmiterator = NULL; TBMSharedIterator *shared_tbmiterator = NULL; if (!pstate) @@ -106,12 +106,12 @@ BitmapHeapNext(BitmapHeapScanState *node) elog(ERROR, "unrecognized result from subplan"); node->tbm = tbm; - tbmiterator = tbm_begin_iterate(tbm); + tbmiterator = tbm_begin_private_iterate(tbm); #ifdef USE_PREFETCH if (node->prefetch_maximum > 0) { - node->prefetch_iterator = tbm_begin_iterate(tbm); + node->prefetch_iterator = tbm_begin_private_iterate(tbm); node->prefetch_pages = 0; node->prefetch_target = -1; } @@ -332,7 +332,7 @@ BitmapAdjustPrefetchIterator(BitmapHeapScanState *node) if (pstate == NULL) { - TBMIterator *prefetch_iterator = node->prefetch_iterator; + TBMPrivateIterator *prefetch_iterator = node->prefetch_iterator; if (node->prefetch_pages > 0) { @@ -341,7 +341,7 @@ BitmapAdjustPrefetchIterator(BitmapHeapScanState *node) } else if (prefetch_iterator) { - tbmpre = tbm_iterate(prefetch_iterator); + tbmpre = tbm_private_iterate(prefetch_iterator); node->prefetch_blockno = tbmpre ? tbmpre->blockno : InvalidBlockNumber; } @@ -446,19 +446,20 @@ BitmapPrefetch(BitmapHeapScanState *node, TableScanDesc scan) if (pstate == NULL) { - TBMIterator *prefetch_iterator = node->prefetch_iterator; + TBMPrivateIterator *prefetch_iterator = node->prefetch_iterator; if (prefetch_iterator) { while (node->prefetch_pages < node->prefetch_target) { - TBMIterateResult *tbmpre = tbm_iterate(prefetch_iterator); + TBMIterateResult *tbmpre; bool skip_fetch; + tbmpre = tbm_private_iterate(prefetch_iterator); if (tbmpre == NULL) { /* No more pages to prefetch */ - tbm_end_iterate(prefetch_iterator); + tbm_end_private_iterate(prefetch_iterator); node->prefetch_iterator = NULL; break; } @@ -594,7 +595,7 @@ ExecReScanBitmapHeapScan(BitmapHeapScanState *node) if (scan->st.bitmap.rs_iterator) { - tbm_end_iterate(scan->st.bitmap.rs_iterator); + tbm_end_private_iterate(scan->st.bitmap.rs_iterator); scan->st.bitmap.rs_iterator = NULL; } @@ -604,7 +605,7 @@ ExecReScanBitmapHeapScan(BitmapHeapScanState *node) /* release bitmaps and buffers if any */ if (node->prefetch_iterator) - tbm_end_iterate(node->prefetch_iterator); + tbm_end_private_iterate(node->prefetch_iterator); if (node->shared_prefetch_iterator) tbm_end_shared_iterate(node->shared_prefetch_iterator); if (node->tbm) @@ -685,7 +686,7 @@ ExecEndBitmapHeapScan(BitmapHeapScanState *node) if (scanDesc->st.bitmap.rs_iterator) { - tbm_end_iterate(scanDesc->st.bitmap.rs_iterator); + tbm_end_private_iterate(scanDesc->st.bitmap.rs_iterator); scanDesc->st.bitmap.rs_iterator = NULL; } @@ -699,7 +700,7 @@ ExecEndBitmapHeapScan(BitmapHeapScanState *node) * release bitmaps and buffers if any */ if (node->prefetch_iterator) - tbm_end_iterate(node->prefetch_iterator); + tbm_end_private_iterate(node->prefetch_iterator); if (node->tbm) tbm_free(node->tbm); if (node->shared_prefetch_iterator) |