]> granicus.if.org Git - postgresql/blob - src/include/storage/predicate.h
Centralize definition of integer limits.
[postgresql] / src / include / storage / predicate.h
1 /*-------------------------------------------------------------------------
2  *
3  * predicate.h
4  *        POSTGRES public predicate locking definitions.
5  *
6  *
7  * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * src/include/storage/predicate.h
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef PREDICATE_H
15 #define PREDICATE_H
16
17 #include "utils/relcache.h"
18 #include "utils/snapshot.h"
19
20
21 /*
22  * GUC variables
23  */
24 extern int      max_predicate_locks_per_xact;
25
26
27 /* Number of SLRU buffers to use for predicate locking */
28 #define NUM_OLDSERXID_BUFFERS   16
29
30
31 /*
32  * function prototypes
33  */
34
35 /* housekeeping for shared memory predicate lock structures */
36 extern void InitPredicateLocks(void);
37 extern Size PredicateLockShmemSize(void);
38
39 extern void CheckPointPredicate(void);
40
41 /* predicate lock reporting */
42 extern bool PageIsPredicateLocked(Relation relation, BlockNumber blkno);
43
44 /* predicate lock maintenance */
45 extern Snapshot GetSerializableTransactionSnapshot(Snapshot snapshot);
46 extern void SetSerializableTransactionSnapshot(Snapshot snapshot,
47                                                                    TransactionId sourcexid);
48 extern void RegisterPredicateLockingXid(TransactionId xid);
49 extern void PredicateLockRelation(Relation relation, Snapshot snapshot);
50 extern void PredicateLockPage(Relation relation, BlockNumber blkno, Snapshot snapshot);
51 extern void PredicateLockTuple(Relation relation, HeapTuple tuple, Snapshot snapshot);
52 extern void PredicateLockPageSplit(Relation relation, BlockNumber oldblkno, BlockNumber newblkno);
53 extern void PredicateLockPageCombine(Relation relation, BlockNumber oldblkno, BlockNumber newblkno);
54 extern void TransferPredicateLocksToHeapRelation(Relation relation);
55 extern void ReleasePredicateLocks(bool isCommit);
56
57 /* conflict detection (may also trigger rollback) */
58 extern void CheckForSerializableConflictOut(bool valid, Relation relation, HeapTuple tuple,
59                                                                 Buffer buffer, Snapshot snapshot);
60 extern void CheckForSerializableConflictIn(Relation relation, HeapTuple tuple, Buffer buffer);
61 extern void CheckTableForSerializableConflictIn(Relation relation);
62
63 /* final rollback checking */
64 extern void PreCommit_CheckForSerializationFailure(void);
65
66 /* two-phase commit support */
67 extern void AtPrepare_PredicateLocks(void);
68 extern void PostPrepare_PredicateLocks(TransactionId xid);
69 extern void PredicateLockTwoPhaseFinish(TransactionId xid, bool isCommit);
70 extern void predicatelock_twophase_recover(TransactionId xid, uint16 info,
71                                                            void *recdata, uint32 len);
72
73 #endif   /* PREDICATE_H */