1
/*-------------------------------------------------------------------------
4
* PostgreSQL tuple-id (TID) bitmap package
6
* This module provides bitmap data structures that are spiritually
7
* similar to Bitmapsets, but are specially adapted to store sets of
8
* tuple identifiers (TIDs), or ItemPointers. In particular, the division
9
* of an ItemPointer into BlockNumber and OffsetNumber is catered for.
10
* Also, since we wish to be able to store very large tuple sets in
11
* memory with this data structure, we support "lossy" storage, in which
12
* we no longer remember individual tuple offsets on a page but only the
13
* fact that a particular page needs to be visited.
16
* Copyright (c) 2003-2009, PostgreSQL Global Development Group
20
*-------------------------------------------------------------------------
25
#include "storage/itemptr.h"
29
* Actual bitmap representation is private to tidbitmap.c. Callers can
30
* do IsA(x, TIDBitmap) on it, but nothing else.
32
typedef struct TIDBitmap TIDBitmap;
34
/* Likewise, TBMIterator is private */
35
typedef struct TBMIterator TBMIterator;
37
/* Result structure for tbm_iterate */
40
BlockNumber blockno; /* page number containing tuples */
41
int ntuples; /* -1 indicates lossy result */
42
bool recheck; /* should the tuples be rechecked? */
43
/* Note: recheck is always true if ntuples < 0 */
44
OffsetNumber offsets[1]; /* VARIABLE LENGTH ARRAY */
45
} TBMIterateResult; /* VARIABLE LENGTH STRUCT */
47
/* function prototypes in nodes/tidbitmap.c */
49
extern TIDBitmap *tbm_create(long maxbytes);
50
extern void tbm_free(TIDBitmap *tbm);
52
extern void tbm_add_tuples(TIDBitmap *tbm,
53
const ItemPointer tids, int ntids,
55
extern void tbm_add_page(TIDBitmap *tbm, BlockNumber pageno);
57
extern void tbm_union(TIDBitmap *a, const TIDBitmap *b);
58
extern void tbm_intersect(TIDBitmap *a, const TIDBitmap *b);
60
extern bool tbm_is_empty(const TIDBitmap *tbm);
62
extern TBMIterator *tbm_begin_iterate(TIDBitmap *tbm);
63
extern TBMIterateResult *tbm_iterate(TBMIterator *iterator);
64
extern void tbm_end_iterate(TBMIterator *iterator);
66
#endif /* TIDBITMAP_H */