~ubuntu-branches/ubuntu/hardy/postgresql-8.4/hardy-backports

« back to all changes in this revision

Viewing changes to src/include/nodes/tidbitmap.h

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2009-03-20 12:00:13 UTC
  • Revision ID: james.westby@ubuntu.com-20090320120013-hogj7egc5mjncc5g
Tags: upstream-8.4~0cvs20090328
ImportĀ upstreamĀ versionĀ 8.4~0cvs20090328

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*-------------------------------------------------------------------------
 
2
 *
 
3
 * tidbitmap.h
 
4
 *        PostgreSQL tuple-id (TID) bitmap package
 
5
 *
 
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.
 
14
 *
 
15
 *
 
16
 * Copyright (c) 2003-2009, PostgreSQL Global Development Group
 
17
 *
 
18
 * $PostgreSQL$
 
19
 *
 
20
 *-------------------------------------------------------------------------
 
21
 */
 
22
#ifndef TIDBITMAP_H
 
23
#define TIDBITMAP_H
 
24
 
 
25
#include "storage/itemptr.h"
 
26
 
 
27
 
 
28
/*
 
29
 * Actual bitmap representation is private to tidbitmap.c.      Callers can
 
30
 * do IsA(x, TIDBitmap) on it, but nothing else.
 
31
 */
 
32
typedef struct TIDBitmap TIDBitmap;
 
33
 
 
34
/* Likewise, TBMIterator is private */
 
35
typedef struct TBMIterator TBMIterator;
 
36
 
 
37
/* Result structure for tbm_iterate */
 
38
typedef struct
 
39
{
 
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 */
 
46
 
 
47
/* function prototypes in nodes/tidbitmap.c */
 
48
 
 
49
extern TIDBitmap *tbm_create(long maxbytes);
 
50
extern void tbm_free(TIDBitmap *tbm);
 
51
 
 
52
extern void tbm_add_tuples(TIDBitmap *tbm,
 
53
                                                   const ItemPointer tids, int ntids,
 
54
                                                   bool recheck);
 
55
extern void tbm_add_page(TIDBitmap *tbm, BlockNumber pageno);
 
56
 
 
57
extern void tbm_union(TIDBitmap *a, const TIDBitmap *b);
 
58
extern void tbm_intersect(TIDBitmap *a, const TIDBitmap *b);
 
59
 
 
60
extern bool tbm_is_empty(const TIDBitmap *tbm);
 
61
 
 
62
extern TBMIterator *tbm_begin_iterate(TIDBitmap *tbm);
 
63
extern TBMIterateResult *tbm_iterate(TBMIterator *iterator);
 
64
extern void tbm_end_iterate(TBMIterator *iterator);
 
65
 
 
66
#endif   /* TIDBITMAP_H */