gooderp18绿色标准版
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

87 行
3.0KB

  1. /*-------------------------------------------------------------------------
  2. *
  3. * predicate.h
  4. * POSTGRES public predicate locking definitions.
  5. *
  6. *
  7. * Portions Copyright (c) 1996-2019, 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 int max_predicate_locks_per_xact;
  23. extern int max_predicate_locks_per_relation;
  24. extern int max_predicate_locks_per_page;
  25. /* Number of SLRU buffers to use for predicate locking */
  26. #define NUM_OLDSERXID_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 PredicateLockTuple(Relation relation, HeapTuple tuple, Snapshot snapshot);
  50. extern void PredicateLockPageSplit(Relation relation, BlockNumber oldblkno, BlockNumber newblkno);
  51. extern void PredicateLockPageCombine(Relation relation, BlockNumber oldblkno, BlockNumber newblkno);
  52. extern void TransferPredicateLocksToHeapRelation(Relation relation);
  53. extern void ReleasePredicateLocks(bool isCommit, bool isReadOnlySafe);
  54. /* conflict detection (may also trigger rollback) */
  55. extern void CheckForSerializableConflictOut(bool valid, Relation relation, HeapTuple tuple,
  56. Buffer buffer, Snapshot snapshot);
  57. extern void CheckForSerializableConflictIn(Relation relation, HeapTuple tuple, Buffer buffer);
  58. extern void CheckTableForSerializableConflictIn(Relation relation);
  59. /* final rollback checking */
  60. extern void PreCommit_CheckForSerializationFailure(void);
  61. /* two-phase commit support */
  62. extern void AtPrepare_PredicateLocks(void);
  63. extern void PostPrepare_PredicateLocks(TransactionId xid);
  64. extern void PredicateLockTwoPhaseFinish(TransactionId xid, bool isCommit);
  65. extern void predicatelock_twophase_recover(TransactionId xid, uint16 info,
  66. void *recdata, uint32 len);
  67. /* parallel query support */
  68. extern SerializableXactHandle ShareSerializableXact(void);
  69. extern void AttachSerializableXact(SerializableXactHandle handle);
  70. #endif /* PREDICATE_H */
上海开阖软件有限公司 沪ICP备12045867号-1