diff options
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/access/gin_private.h | 2 | ||||
-rw-r--r-- | src/include/access/relscan.h | 4 | ||||
-rw-r--r-- | src/include/nodes/execnodes.h | 2 | ||||
-rw-r--r-- | src/include/nodes/tidbitmap.h | 30 |
4 files changed, 29 insertions, 9 deletions
diff --git a/src/include/access/gin_private.h b/src/include/access/gin_private.h index 3013a44bae1..78800509367 100644 --- a/src/include/access/gin_private.h +++ b/src/include/access/gin_private.h @@ -352,7 +352,7 @@ typedef struct GinScanEntryData /* for a partial-match or full-scan query, we accumulate all TIDs here */ TIDBitmap *matchBitmap; - TBMIterator *matchIterator; + TBMPrivateIterator *matchIterator; TBMIterateResult *matchResult; /* used for Posting list and one page in Posting tree */ diff --git a/src/include/access/relscan.h b/src/include/access/relscan.h index e1884acf493..153561addc0 100644 --- a/src/include/access/relscan.h +++ b/src/include/access/relscan.h @@ -25,7 +25,7 @@ struct ParallelTableScanDescData; -struct TBMIterator; +struct TBMPrivateIterator; struct TBMSharedIterator; /* @@ -48,7 +48,7 @@ typedef struct TableScanDescData /* Iterators for Bitmap Table Scans */ struct { - struct TBMIterator *rs_iterator; + struct TBMPrivateIterator *rs_iterator; struct TBMSharedIterator *rs_shared_iterator; } bitmap; diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index 7f71b7625df..f0b5fa421ca 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -1853,7 +1853,7 @@ typedef struct BitmapHeapScanState TIDBitmap *tbm; Buffer pvmbuffer; BitmapHeapScanInstrumentation stats; - TBMIterator *prefetch_iterator; + TBMPrivateIterator *prefetch_iterator; int prefetch_pages; int prefetch_target; int prefetch_maximum; diff --git a/src/include/nodes/tidbitmap.h b/src/include/nodes/tidbitmap.h index 1945f0639bf..d7469639764 100644 --- a/src/include/nodes/tidbitmap.h +++ b/src/include/nodes/tidbitmap.h @@ -32,10 +32,24 @@ */ typedef struct TIDBitmap TIDBitmap; -/* Likewise, TBMIterator is private */ -typedef struct TBMIterator TBMIterator; +/* Likewise, TBMPrivateIterator is private */ +typedef struct TBMPrivateIterator TBMPrivateIterator; typedef struct TBMSharedIterator TBMSharedIterator; +/* + * Callers with both private and shared implementations can use this unified + * API. + */ +typedef struct TBMIterator +{ + bool shared; + union + { + TBMPrivateIterator *private_iterator; + TBMSharedIterator *shared_iterator; + } i; +} TBMIterator; + /* Result structure for tbm_iterate */ typedef struct TBMIterateResult { @@ -62,14 +76,20 @@ extern void tbm_intersect(TIDBitmap *a, const TIDBitmap *b); extern bool tbm_is_empty(const TIDBitmap *tbm); -extern TBMIterator *tbm_begin_iterate(TIDBitmap *tbm); +extern TBMPrivateIterator *tbm_begin_private_iterate(TIDBitmap *tbm); extern dsa_pointer tbm_prepare_shared_iterate(TIDBitmap *tbm); -extern TBMIterateResult *tbm_iterate(TBMIterator *iterator); +extern TBMIterateResult *tbm_private_iterate(TBMPrivateIterator *iterator); extern TBMIterateResult *tbm_shared_iterate(TBMSharedIterator *iterator); -extern void tbm_end_iterate(TBMIterator *iterator); +extern void tbm_end_private_iterate(TBMPrivateIterator *iterator); extern void tbm_end_shared_iterate(TBMSharedIterator *iterator); extern TBMSharedIterator *tbm_attach_shared_iterate(dsa_area *dsa, dsa_pointer dp); extern long tbm_calculate_entries(double maxbytes); +extern TBMIterator tbm_begin_iterate(TIDBitmap *tbm, + dsa_area *dsa, dsa_pointer dsp); +extern void tbm_end_iterate(TBMIterator *iterator); + +extern TBMIterateResult *tbm_iterate(TBMIterator *iterator); + #endif /* TIDBITMAP_H */ |