predicate.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. #include "utils/relcache.h"
  17. #include "utils/snapshot.h"
  18. /*
  19. * GUC variables
  20. */
  21. extern int max_predicate_locks_per_xact;
  22. /* Number of SLRU buffers to use for predicate locking */
  23. #define NUM_OLDSERXID_BUFFERS 16
  24. /*
  25. * function prototypes
  26. */
  27. /* housekeeping for shared memory predicate lock structures */
  28. extern void InitPredicateLocks(void);
  29. extern Size PredicateLockShmemSize(void);
  30. extern void CheckPointPredicate(void);
  31. /* predicate lock reporting */
  32. extern bool PageIsPredicateLocked(Relation relation, BlockNumber blkno);
  33. /* predicate lock maintenance */
  34. extern Snapshot GetSerializableTransactionSnapshot(Snapshot snapshot);
  35. extern void SetSerializableTransactionSnapshot(Snapshot snapshot,
  36. TransactionId sourcexid);
  37. extern void RegisterPredicateLockingXid(TransactionId xid);
  38. extern void PredicateLockRelation(Relation relation, Snapshot snapshot);
  39. extern void PredicateLockPage(Relation relation, BlockNumber blkno, Snapshot snapshot);
  40. extern void PredicateLockTuple(Relation relation, HeapTuple tuple, Snapshot snapshot);
  41. extern void PredicateLockPageSplit(Relation relation, BlockNumber oldblkno, BlockNumber newblkno);
  42. extern void PredicateLockPageCombine(Relation relation, BlockNumber oldblkno, BlockNumber newblkno);
  43. extern void TransferPredicateLocksToHeapRelation(Relation relation);
  44. extern void ReleasePredicateLocks(bool isCommit);
  45. /* conflict detection (may also trigger rollback) */
  46. extern void CheckForSerializableConflictOut(bool valid, Relation relation, HeapTuple tuple,
  47. Buffer buffer, Snapshot snapshot);
  48. extern void CheckForSerializableConflictIn(Relation relation, HeapTuple tuple, Buffer buffer);
  49. extern void CheckTableForSerializableConflictIn(Relation relation);
  50. /* final rollback checking */
  51. extern void PreCommit_CheckForSerializationFailure(void);
  52. /* two-phase commit support */
  53. extern void AtPrepare_PredicateLocks(void);
  54. extern void PostPrepare_PredicateLocks(TransactionId xid);
  55. extern void PredicateLockTwoPhaseFinish(TransactionId xid, bool isCommit);
  56. extern void predicatelock_twophase_recover(TransactionId xid, uint16 info,
  57. void *recdata, uint32 len);
  58. #endif /* PREDICATE_H */