mirror of
https://github.com/postgres/postgres.git
synced 2026-03-09 01:31:22 -04:00
Up until now, we've had a policy of only marking certain variables in the PostgreSQL header files with PGDLLIMPORT, but now we've decided to mark them all. This means that extensions running on Windows should no longer operate at a disadvantage as compared to extensions running on Linux: if the variable is present in a header file, it should be accessible. Discussion: http://postgr.es/m/CA+TgmoYanc1_FSfimhgiWSqVyP5KKmh5NP2BWNwDhO8Pg2vGYQ@mail.gmail.com
87 lines
3.2 KiB
C
87 lines
3.2 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* predicate.h
|
|
* POSTGRES public predicate locking definitions.
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/storage/predicate.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef PREDICATE_H
|
|
#define PREDICATE_H
|
|
|
|
#include "storage/lock.h"
|
|
#include "utils/relcache.h"
|
|
#include "utils/snapshot.h"
|
|
|
|
|
|
/*
|
|
* GUC variables
|
|
*/
|
|
extern PGDLLIMPORT int max_predicate_locks_per_xact;
|
|
extern PGDLLIMPORT int max_predicate_locks_per_relation;
|
|
extern PGDLLIMPORT int max_predicate_locks_per_page;
|
|
|
|
|
|
/* Number of SLRU buffers to use for Serial SLRU */
|
|
#define NUM_SERIAL_BUFFERS 16
|
|
|
|
/*
|
|
* A handle used for sharing SERIALIZABLEXACT objects between the participants
|
|
* in a parallel query.
|
|
*/
|
|
typedef void *SerializableXactHandle;
|
|
|
|
/*
|
|
* function prototypes
|
|
*/
|
|
|
|
/* housekeeping for shared memory predicate lock structures */
|
|
extern void InitPredicateLocks(void);
|
|
extern Size PredicateLockShmemSize(void);
|
|
|
|
extern void CheckPointPredicate(void);
|
|
|
|
/* predicate lock reporting */
|
|
extern bool PageIsPredicateLocked(Relation relation, BlockNumber blkno);
|
|
|
|
/* predicate lock maintenance */
|
|
extern Snapshot GetSerializableTransactionSnapshot(Snapshot snapshot);
|
|
extern void SetSerializableTransactionSnapshot(Snapshot snapshot,
|
|
VirtualTransactionId *sourcevxid,
|
|
int sourcepid);
|
|
extern void RegisterPredicateLockingXid(TransactionId xid);
|
|
extern void PredicateLockRelation(Relation relation, Snapshot snapshot);
|
|
extern void PredicateLockPage(Relation relation, BlockNumber blkno, Snapshot snapshot);
|
|
extern void PredicateLockTID(Relation relation, ItemPointer tid, Snapshot snapshot,
|
|
TransactionId insert_xid);
|
|
extern void PredicateLockPageSplit(Relation relation, BlockNumber oldblkno, BlockNumber newblkno);
|
|
extern void PredicateLockPageCombine(Relation relation, BlockNumber oldblkno, BlockNumber newblkno);
|
|
extern void TransferPredicateLocksToHeapRelation(Relation relation);
|
|
extern void ReleasePredicateLocks(bool isCommit, bool isReadOnlySafe);
|
|
|
|
/* conflict detection (may also trigger rollback) */
|
|
extern bool CheckForSerializableConflictOutNeeded(Relation relation, Snapshot snapshot);
|
|
extern void CheckForSerializableConflictOut(Relation relation, TransactionId xid, Snapshot snapshot);
|
|
extern void CheckForSerializableConflictIn(Relation relation, ItemPointer tid, BlockNumber blkno);
|
|
extern void CheckTableForSerializableConflictIn(Relation relation);
|
|
|
|
/* final rollback checking */
|
|
extern void PreCommit_CheckForSerializationFailure(void);
|
|
|
|
/* two-phase commit support */
|
|
extern void AtPrepare_PredicateLocks(void);
|
|
extern void PostPrepare_PredicateLocks(TransactionId xid);
|
|
extern void PredicateLockTwoPhaseFinish(TransactionId xid, bool isCommit);
|
|
extern void predicatelock_twophase_recover(TransactionId xid, uint16 info,
|
|
void *recdata, uint32 len);
|
|
|
|
/* parallel query support */
|
|
extern SerializableXactHandle ShareSerializableXact(void);
|
|
extern void AttachSerializableXact(SerializableXactHandle handle);
|
|
|
|
#endif /* PREDICATE_H */
|