aboutsummaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/include')
-rw-r--r--src/include/access/gin_private.h2
-rw-r--r--src/include/access/relscan.h4
-rw-r--r--src/include/nodes/execnodes.h2
-rw-r--r--src/include/nodes/tidbitmap.h30
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 */