YugabyteDB (2.13.1.0-b60, 21121d69985fbf76aa6958d8f04a9bfa936293b5)

Coverage Report

Created: 2022-03-22 16:43

/Users/deen/code/yugabyte-db/src/postgres/src/include/utils/tqual.h
Line
Count
Source (jump to first uncovered line)
1
/*-------------------------------------------------------------------------
2
 *
3
 * tqual.h
4
 *    POSTGRES "time qualification" definitions, ie, tuple visibility rules.
5
 *
6
 *    Should be moved/renamed...    - vadim 07/28/98
7
 *
8
 * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
9
 * Portions Copyright (c) 1994, Regents of the University of California
10
 *
11
 * src/include/utils/tqual.h
12
 *
13
 *-------------------------------------------------------------------------
14
 */
15
#ifndef TQUAL_H
16
#define TQUAL_H
17
18
#include "utils/snapshot.h"
19
#include "access/xlogdefs.h"
20
21
22
/* Static variables representing various special snapshot semantics */
23
extern PGDLLIMPORT SnapshotData SnapshotSelfData;
24
extern PGDLLIMPORT SnapshotData SnapshotAnyData;
25
extern PGDLLIMPORT SnapshotData CatalogSnapshotData;
26
27
6
#define SnapshotSelf    (&SnapshotSelfData)
28
71.4k
#define SnapshotAny     (&SnapshotAnyData)
29
30
/* This macro encodes the knowledge of which snapshots are MVCC-safe */
31
#define IsMVCCSnapshot(snapshot)  \
32
2.16k
  (
(snapshot)->satisfies == HeapTupleSatisfiesMVCC1.28k
|| \
33
2.16k
   
(snapshot)->satisfies == HeapTupleSatisfiesHistoricMVCC50
)
34
35
/*
36
 * HeapTupleSatisfiesVisibility
37
 *    True iff heap tuple satisfies a time qual.
38
 *
39
 * Notes:
40
 *  Assumes heap tuple is valid.
41
 *  Beware of multiple evaluations of snapshot argument.
42
 *  Hint bits in the HeapTuple's t_infomask may be updated as a side effect;
43
 *  if so, the indicated buffer is marked dirty.
44
 */
45
#define HeapTupleSatisfiesVisibility(tuple, snapshot, buffer) \
46
68.5k
  ((*(snapshot)->satisfies) (tuple, snapshot, buffer))
47
48
/* Result codes for HeapTupleSatisfiesVacuum */
49
typedef enum
50
{
51
  HEAPTUPLE_DEAD,       /* tuple is dead and deletable */
52
  HEAPTUPLE_LIVE,       /* tuple is live (committed, no deleter) */
53
  HEAPTUPLE_RECENTLY_DEAD,  /* tuple is dead, but not deletable yet */
54
  HEAPTUPLE_INSERT_IN_PROGRESS, /* inserting xact is still in progress */
55
  HEAPTUPLE_DELETE_IN_PROGRESS  /* deleting xact is still in progress */
56
} HTSV_Result;
57
58
/* These are the "satisfies" test routines for the various snapshot types */
59
extern bool HeapTupleSatisfiesMVCC(HeapTuple htup,
60
             Snapshot snapshot, Buffer buffer);
61
extern bool HeapTupleSatisfiesSelf(HeapTuple htup,
62
             Snapshot snapshot, Buffer buffer);
63
extern bool HeapTupleSatisfiesAny(HeapTuple htup,
64
            Snapshot snapshot, Buffer buffer);
65
extern bool HeapTupleSatisfiesToast(HeapTuple htup,
66
            Snapshot snapshot, Buffer buffer);
67
extern bool HeapTupleSatisfiesDirty(HeapTuple htup,
68
            Snapshot snapshot, Buffer buffer);
69
extern bool HeapTupleSatisfiesNonVacuumable(HeapTuple htup,
70
                Snapshot snapshot, Buffer buffer);
71
extern bool HeapTupleSatisfiesHistoricMVCC(HeapTuple htup,
72
                 Snapshot snapshot, Buffer buffer);
73
74
/* Special "satisfies" routines with different APIs */
75
extern HTSU_Result HeapTupleSatisfiesUpdate(HeapTuple htup,
76
             CommandId curcid, Buffer buffer);
77
extern HTSV_Result HeapTupleSatisfiesVacuum(HeapTuple htup,
78
             TransactionId OldestXmin, Buffer buffer);
79
extern bool HeapTupleIsSurelyDead(HeapTuple htup,
80
            TransactionId OldestXmin);
81
extern bool XidInMVCCSnapshot(TransactionId xid, Snapshot snapshot);
82
83
extern void HeapTupleSetHintBits(HeapTupleHeader tuple, Buffer buffer,
84
           uint16 infomask, TransactionId xid);
85
extern bool HeapTupleHeaderIsOnlyLocked(HeapTupleHeader tuple);
86
87
/*
88
 * To avoid leaking too much knowledge about reorderbuffer implementation
89
 * details this is implemented in reorderbuffer.c not tqual.c.
90
 */
91
struct HTAB;
92
extern bool ResolveCminCmaxDuringDecoding(struct HTAB *tuplecid_data,
93
                Snapshot snapshot,
94
                HeapTuple htup,
95
                Buffer buffer,
96
                CommandId *cmin, CommandId *cmax);
97
98
/*
99
 * We don't provide a static SnapshotDirty variable because it would be
100
 * non-reentrant.  Instead, users of that snapshot type should declare a
101
 * local variable of type SnapshotData, and initialize it with this macro.
102
 */
103
#define InitDirtySnapshot(snapshotdata)  \
104
8.56k
  ((snapshotdata).satisfies = HeapTupleSatisfiesDirty)
105
106
/*
107
 * Similarly, some initialization is required for a NonVacuumable snapshot.
108
 * The caller must supply the xmin horizon to use (e.g., RecentGlobalXmin).
109
 */
110
#define InitNonVacuumableSnapshot(snapshotdata, xmin_horizon)  \
111
8
  ((snapshotdata).satisfies = HeapTupleSatisfiesNonVacuumable, \
112
8
   (snapshotdata).xmin = (xmin_horizon))
113
114
/*
115
 * Similarly, some initialization is required for SnapshotToast.  We need
116
 * to set lsn and whenTaken correctly to support snapshot_too_old.
117
 */
118
#define InitToastSnapshot(snapshotdata, l, w)  \
119
0
  ((snapshotdata).satisfies = HeapTupleSatisfiesToast, \
120
0
   (snapshotdata).lsn = (l),          \
121
0
   (snapshotdata).whenTaken = (w))
122
123
#endif              /* TQUAL_H */