]> granicus.if.org Git - postgresql/blob - src/include/access/relscan.h
Change Copyright from PostgreSQL, Inc to PostgreSQL Global Development Group.
[postgresql] / src / include / access / relscan.h
1 /*-------------------------------------------------------------------------
2  *
3  * relscan.h
4  *        POSTGRES internal relation scan descriptor definitions.
5  *
6  *
7  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * $Id: relscan.h,v 1.20 2001/01/24 19:43:19 momjian Exp $
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef RELSCAN_H
15 #define RELSCAN_H
16
17 #include "utils/tqual.h"
18
19 typedef ItemPointerData MarkData;
20
21 typedef struct HeapScanDescData
22 {
23         Relation        rs_rd;                  /* pointer to relation descriptor */
24         HeapTupleData rs_ptup;          /* previous tuple in scan */
25         HeapTupleData rs_ctup;          /* current tuple in scan */
26         HeapTupleData rs_ntup;          /* next tuple in scan */
27         Buffer          rs_pbuf;                /* previous buffer in scan */
28         Buffer          rs_cbuf;                /* current buffer in scan */
29         Buffer          rs_nbuf;                /* next buffer in scan */
30         ItemPointerData rs_mptid;       /* marked previous tid */
31         ItemPointerData rs_mctid;       /* marked current tid */
32         ItemPointerData rs_mntid;       /* marked next tid */
33         ItemPointerData rs_mcd;         /* marked current delta XXX ??? */
34         Snapshot        rs_snapshot;    /* snapshot to see */
35         bool            rs_atend;               /* restart scan at end? */
36         uint16          rs_cdelta;              /* current delta in chain */
37         uint16          rs_nkeys;               /* number of attributes in keys */
38         ScanKey         rs_key;                 /* key descriptors */
39 } HeapScanDescData;
40
41 typedef HeapScanDescData *HeapScanDesc;
42
43 typedef struct IndexScanDescData
44 {
45         Relation        relation;               /* relation descriptor */
46         void       *opaque;                     /* am-specific slot */
47         ItemPointerData previousItemData;       /* previous index pointer */
48         ItemPointerData currentItemData;        /* current index pointer */
49         ItemPointerData nextItemData;           /* next index pointer */
50         MarkData        previousMarkData;               /* marked previous pointer */
51         MarkData        currentMarkData;/* marked current  pointer */
52         MarkData        nextMarkData;   /* marked next pointer */
53         uint8           flags;                  /* scan position flags */
54         bool            scanFromEnd;    /* restart scan at end? */
55         uint16          numberOfKeys;   /* number of key attributes */
56         ScanKey         keyData;                /* key descriptor */
57         FmgrInfo        fn_getnext;             /* cached lookup info for am's getnext fn */
58 } IndexScanDescData;
59
60 typedef IndexScanDescData *IndexScanDesc;
61
62 /* ----------------
63  *              IndexScanDescPtr is used in the executor where we have to
64  *              keep track of several index scans when using several indices
65  *              - cim 9/10/89
66  * ----------------
67  */
68 typedef IndexScanDesc *IndexScanDescPtr;
69
70 /*
71  * HeapScanIsValid
72  *              True iff the heap scan is valid.
73  */
74 #define HeapScanIsValid(scan) PointerIsValid(scan)
75
76 /*
77  * IndexScanIsValid
78  *              True iff the index scan is valid.
79  */
80 #define IndexScanIsValid(scan) PointerIsValid(scan)
81
82 #endif   /* RELSCAN_H */