2005-04-18 00:24:02 +02:00
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
*
|
|
|
|
* tidbitmap.h
|
|
|
|
* PostgreSQL tuple-id (TID) bitmap package
|
|
|
|
*
|
|
|
|
* This module provides bitmap data structures that are spiritually
|
|
|
|
* similar to Bitmapsets, but are specially adapted to store sets of
|
|
|
|
* tuple identifiers (TIDs), or ItemPointers. In particular, the division
|
|
|
|
* of an ItemPointer into BlockNumber and OffsetNumber is catered for.
|
|
|
|
* Also, since we wish to be able to store very large tuple sets in
|
|
|
|
* memory with this data structure, we support "lossy" storage, in which
|
|
|
|
* we no longer remember individual tuple offsets on a page but only the
|
|
|
|
* fact that a particular page needs to be visited.
|
|
|
|
*
|
|
|
|
*
|
2011-01-01 19:18:15 +01:00
|
|
|
* Copyright (c) 2003-2011, PostgreSQL Global Development Group
|
2005-04-18 00:24:02 +02:00
|
|
|
*
|
2010-09-20 22:08:53 +02:00
|
|
|
* src/include/nodes/tidbitmap.h
|
2005-04-18 00:24:02 +02:00
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
#ifndef TIDBITMAP_H
|
|
|
|
#define TIDBITMAP_H
|
|
|
|
|
|
|
|
#include "storage/itemptr.h"
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
2005-10-15 04:49:52 +02:00
|
|
|
* Actual bitmap representation is private to tidbitmap.c. Callers can
|
2005-04-18 00:24:02 +02:00
|
|
|
* do IsA(x, TIDBitmap) on it, but nothing else.
|
|
|
|
*/
|
|
|
|
typedef struct TIDBitmap TIDBitmap;
|
|
|
|
|
2009-01-10 22:08:36 +01:00
|
|
|
/* Likewise, TBMIterator is private */
|
|
|
|
typedef struct TBMIterator TBMIterator;
|
|
|
|
|
2005-04-18 00:24:02 +02:00
|
|
|
/* Result structure for tbm_iterate */
|
|
|
|
typedef struct
|
|
|
|
{
|
2005-10-15 04:49:52 +02:00
|
|
|
BlockNumber blockno; /* page number containing tuples */
|
2005-04-18 00:24:02 +02:00
|
|
|
int ntuples; /* -1 indicates lossy result */
|
2008-04-11 00:25:26 +02:00
|
|
|
bool recheck; /* should the tuples be rechecked? */
|
|
|
|
/* Note: recheck is always true if ntuples < 0 */
|
2005-04-18 00:24:02 +02:00
|
|
|
OffsetNumber offsets[1]; /* VARIABLE LENGTH ARRAY */
|
|
|
|
} TBMIterateResult; /* VARIABLE LENGTH STRUCT */
|
|
|
|
|
|
|
|
/* function prototypes in nodes/tidbitmap.c */
|
|
|
|
|
|
|
|
extern TIDBitmap *tbm_create(long maxbytes);
|
|
|
|
extern void tbm_free(TIDBitmap *tbm);
|
|
|
|
|
2008-04-11 00:25:26 +02:00
|
|
|
extern void tbm_add_tuples(TIDBitmap *tbm,
|
2009-06-11 16:49:15 +02:00
|
|
|
const ItemPointer tids, int ntids,
|
|
|
|
bool recheck);
|
2009-03-24 21:17:18 +01:00
|
|
|
extern void tbm_add_page(TIDBitmap *tbm, BlockNumber pageno);
|
2005-04-18 00:24:02 +02:00
|
|
|
|
|
|
|
extern void tbm_union(TIDBitmap *a, const TIDBitmap *b);
|
|
|
|
extern void tbm_intersect(TIDBitmap *a, const TIDBitmap *b);
|
|
|
|
|
2005-08-29 00:47:20 +02:00
|
|
|
extern bool tbm_is_empty(const TIDBitmap *tbm);
|
|
|
|
|
2009-01-10 22:08:36 +01:00
|
|
|
extern TBMIterator *tbm_begin_iterate(TIDBitmap *tbm);
|
|
|
|
extern TBMIterateResult *tbm_iterate(TBMIterator *iterator);
|
|
|
|
extern void tbm_end_iterate(TBMIterator *iterator);
|
2005-04-18 00:24:02 +02:00
|
|
|
|
|
|
|
#endif /* TIDBITMAP_H */
|