tqual.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * tqual.h
  4.  *   POSTGRES "time" qualification definitions.
  5.  *
  6.  *   Should be moved/renamed... - vadim 07/28/98
  7.  *
  8.  * Copyright (c) 1994, Regents of the University of California
  9.  *
  10.  * $Id: tqual.h,v 1.22.2.1 1999/08/02 05:25:26 scrappy Exp $
  11.  *
  12.  *-------------------------------------------------------------------------
  13.  */
  14. #ifndef TQUAL_H
  15. #define TQUAL_H
  16. #include "access/htup.h"
  17. #include "access/xact.h"
  18. typedef struct SnapshotData
  19. {
  20. TransactionId xmin; /* XID < xmin are visible to me */
  21. TransactionId xmax; /* XID >= xmax are invisible to me */
  22. uint32 xcnt; /* # of xact below */
  23. TransactionId *xip; /* array of xacts in progress */
  24. ItemPointerData tid; /* required for Dirty snapshot -:( */
  25. } SnapshotData;
  26. typedef SnapshotData *Snapshot;
  27. #define SnapshotNow ((Snapshot) 0x0)
  28. #define SnapshotSelf ((Snapshot) 0x1)
  29. extern Snapshot SnapshotDirty;
  30. extern Snapshot QuerySnapshot;
  31. extern Snapshot SerializableSnapshot;
  32. #define IsSnapshotNow(snapshot) ((Snapshot) snapshot == SnapshotNow)
  33. #define IsSnapshotSelf(snapshot) ((Snapshot) snapshot == SnapshotSelf)
  34. #define IsSnapshotDirty(snapshot) ((Snapshot) snapshot == SnapshotDirty)
  35. extern TransactionId HeapSpecialTransactionId;
  36. extern CommandId HeapSpecialCommandId;
  37. /*
  38.  * HeapTupleSatisfiesVisibility
  39.  * True iff heap tuple satsifies a time qual.
  40.  *
  41.  * Note:
  42.  * Assumes heap tuple is valid.
  43.  */
  44. #define HeapTupleSatisfiesVisibility(tuple, snapshot) 
  45. TransactionIdEquals((tuple)->t_data->t_xmax, AmiTransactionId) ? 
  46. false 
  47. (IsSnapshotSelf(snapshot) || heapisoverride()) ? 
  48. HeapTupleSatisfiesItself((tuple)->t_data) 
  49. ((IsSnapshotDirty(snapshot)) ? 
  50. HeapTupleSatisfiesDirty((tuple)->t_data) 
  51. ((IsSnapshotNow(snapshot)) ? 
  52. HeapTupleSatisfiesNow((tuple)->t_data) 
  53. HeapTupleSatisfiesSnapshot((tuple)->t_data, snapshot) 
  54. )
  55. #define heapisoverride() 
  56. (!TransactionIdIsValid(HeapSpecialTransactionId)) ? 
  57. false 
  58. (!TransactionIdEquals(GetCurrentTransactionId(), 
  59.  HeapSpecialTransactionId) || 
  60.  GetCurrentCommandId() != HeapSpecialCommandId) ? 
  61. HeapSpecialTransactionId = InvalidTransactionId, 
  62. false 
  63. true 
  64. )
  65. #define HeapTupleMayBeUpdated 0
  66. #define HeapTupleInvisible 1
  67. #define HeapTupleSelfUpdated 2
  68. #define HeapTupleUpdated 3
  69. #define HeapTupleBeingUpdated 4
  70. extern bool HeapTupleSatisfiesItself(HeapTupleHeader tuple);
  71. extern bool HeapTupleSatisfiesNow(HeapTupleHeader tuple);
  72. extern bool HeapTupleSatisfiesDirty(HeapTupleHeader tuple);
  73. extern bool HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot);
  74. extern int HeapTupleSatisfiesUpdate(HeapTuple tuple);
  75. extern void setheapoverride(bool on);
  76. extern Snapshot GetSnapshotData(bool serializable);
  77. extern void SetQuerySnapshot(void);
  78. extern void FreeXactSnapshot(void);
  79. #endif  /* TQUAL_H */