1 /*------------------------------------------------------------------------- 2 * 3 * predicate.h 4 * POSTGRES public predicate locking definitions. 5 * 6 * 7 * Portions Copyright (c) 1996-2016, 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 */ 74