predicate.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /*-------------------------------------------------------------------------
  2. *
  3. * predicate.h
  4. * POSTGRES public predicate locking definitions.
  5. *
  6. *
  7. * Portions Copyright (c) 1996-2022, 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. #include "storage/lock.h"
  17. #include "utils/relcache.h"
  18. #include "utils/snapshot.h"
  19. /*
  20. * GUC variables
  21. */
  22. extern PGDLLIMPORT int max_predicate_locks_per_xact;
  23. extern PGDLLIMPORT int max_predicate_locks_per_relation;
  24. extern PGDLLIMPORT int max_predicate_locks_per_page;
  25. /* Number of SLRU buffers to use for Serial SLRU */
  26. #define NUM_SERIAL_BUFFERS 16
  27. /*
  28. * A handle used for sharing SERIALIZABLEXACT objects between the participants
  29. * in a parallel query.
  30. */
  31. typedef void *SerializableXactHandle;
  32. /*
  33. * function prototypes
  34. */
  35. /* housekeeping for shared memory predicate lock structures */
  36. extern void InitPredicateLocks(void);
  37. extern Size PredicateLockShmemSize(void);
  38. extern void CheckPointPredicate(void);
  39. /* predicate lock reporting */
  40. extern bool PageIsPredicateLocked(Relation relation, BlockNumber blkno);
  41. /* predicate lock maintenance */
  42. extern Snapshot GetSerializableTransactionSnapshot(Snapshot snapshot);
  43. extern void SetSerializableTransactionSnapshot(Snapshot snapshot,
  44. VirtualTransactionId *sourcevxid,
  45. int sourcepid);
  46. extern void RegisterPredicateLockingXid(TransactionId xid);
  47. extern void PredicateLockRelation(Relation relation, Snapshot snapshot);
  48. extern void PredicateLockPage(Relation relation, BlockNumber blkno, Snapshot snapshot);
  49. extern void PredicateLockTID(Relation relation, ItemPointer tid, Snapshot snapshot,
  50. TransactionId insert_xid);
  51. extern void PredicateLockPageSplit(Relation relation, BlockNumber oldblkno, BlockNumber newblkno);
  52. extern void PredicateLockPageCombine(Relation relation, BlockNumber oldblkno, BlockNumber newblkno);
  53. extern void TransferPredicateLocksToHeapRelation(Relation relation);
  54. extern void ReleasePredicateLocks(bool isCommit, bool isReadOnlySafe);
  55. /* conflict detection (may also trigger rollback) */
  56. extern bool CheckForSerializableConflictOutNeeded(Relation relation, Snapshot snapshot);
  57. extern void CheckForSerializableConflictOut(Relation relation, TransactionId xid, Snapshot snapshot);
  58. extern void CheckForSerializableConflictIn(Relation relation, ItemPointer tid, BlockNumber blkno);
  59. extern void CheckTableForSerializableConflictIn(Relation relation);
  60. /* final rollback checking */
  61. extern void PreCommit_CheckForSerializationFailure(void);
  62. /* two-phase commit support */
  63. extern void AtPrepare_PredicateLocks(void);
  64. extern void PostPrepare_PredicateLocks(TransactionId xid);
  65. extern void PredicateLockTwoPhaseFinish(TransactionId xid, bool isCommit);
  66. extern void predicatelock_twophase_recover(TransactionId xid, uint16 info,
  67. void *recdata, uint32 len);
  68. /* parallel query support */
  69. extern SerializableXactHandle ShareSerializableXact(void);
  70. extern void AttachSerializableXact(SerializableXactHandle handle);
  71. #endif /* PREDICATE_H */