codekingpro/portable-devtools
116k
1/*-------------------------------------------------------------------------2 *3 * predicate.h4 * POSTGRES public predicate locking definitions.5 *6 *7 * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group8 * Portions Copyright (c) 1994, Regents of the University of California9 *10 * src/include/storage/predicate.h11 *12 *-------------------------------------------------------------------------13 */14#ifndef PREDICATE_H15#define PREDICATE_H16 17#include "storage/lock.h"18#include "utils/relcache.h"19#include "utils/snapshot.h"20 21 22/*23 * GUC variables24 */25extern PGDLLIMPORT int max_predicate_locks_per_xact;26extern PGDLLIMPORT int max_predicate_locks_per_relation;27extern PGDLLIMPORT int max_predicate_locks_per_page;28 29 30/* Number of SLRU buffers to use for Serial SLRU */31#define NUM_SERIAL_BUFFERS 1632 33/*34 * A handle used for sharing SERIALIZABLEXACT objects between the participants35 * in a parallel query.36 */37typedef void *SerializableXactHandle;38 39/*40 * function prototypes41 */42 43/* housekeeping for shared memory predicate lock structures */44extern void InitPredicateLocks(void);45extern Size PredicateLockShmemSize(void);46 47extern void CheckPointPredicate(void);48 49/* predicate lock reporting */50extern bool PageIsPredicateLocked(Relation relation, BlockNumber blkno);51 52/* predicate lock maintenance */53extern Snapshot GetSerializableTransactionSnapshot(Snapshot snapshot);54extern void SetSerializableTransactionSnapshot(Snapshot snapshot,55 VirtualTransactionId *sourcevxid,56 int sourcepid);57extern void RegisterPredicateLockingXid(TransactionId xid);58extern void PredicateLockRelation(Relation relation, Snapshot snapshot);59extern void PredicateLockPage(Relation relation, BlockNumber blkno, Snapshot snapshot);60extern void PredicateLockTID(Relation relation, ItemPointer tid, Snapshot snapshot,61 TransactionId tuple_xid);62extern void PredicateLockPageSplit(Relation relation, BlockNumber oldblkno, BlockNumber newblkno);63extern void PredicateLockPageCombine(Relation relation, BlockNumber oldblkno, BlockNumber newblkno);64extern void TransferPredicateLocksToHeapRelation(Relation relation);65extern void ReleasePredicateLocks(bool isCommit, bool isReadOnlySafe);66 67/* conflict detection (may also trigger rollback) */68extern bool CheckForSerializableConflictOutNeeded(Relation relation, Snapshot snapshot);69extern void CheckForSerializableConflictOut(Relation relation, TransactionId xid, Snapshot snapshot);70extern void CheckForSerializableConflictIn(Relation relation, ItemPointer tid, BlockNumber blkno);71extern void CheckTableForSerializableConflictIn(Relation relation);72 73/* final rollback checking */74extern void PreCommit_CheckForSerializationFailure(void);75 76/* two-phase commit support */77extern void AtPrepare_PredicateLocks(void);78extern void PostPrepare_PredicateLocks(TransactionId xid);79extern void PredicateLockTwoPhaseFinish(TransactionId xid, bool isCommit);80extern void predicatelock_twophase_recover(TransactionId xid, uint16 info,81 void *recdata, uint32 len);82 83/* parallel query support */84extern SerializableXactHandle ShareSerializableXact(void);85extern void AttachSerializableXact(SerializableXactHandle handle);86 87#endif /* PREDICATE_H */88 