@ -255,6 +255,72 @@ typedef struct TransamVariablesData
} TransamVariablesData ;
/*
* TransactionIdPrecedes - - - is id1 logically < id2 ?
*/
static inline bool
TransactionIdPrecedes ( TransactionId id1 , TransactionId id2 )
{
/*
* If either ID is a permanent XID then we can just do unsigned
* comparison . If both are normal , do a modulo - 2 ^ 32 comparison .
*/
int32 diff ;
if ( ! TransactionIdIsNormal ( id1 ) | | ! TransactionIdIsNormal ( id2 ) )
return ( id1 < id2 ) ;
diff = ( int32 ) ( id1 - id2 ) ;
return ( diff < 0 ) ;
}
/*
* TransactionIdPrecedesOrEquals - - - is id1 logically < = id2 ?
*/
static inline bool
TransactionIdPrecedesOrEquals ( TransactionId id1 , TransactionId id2 )
{
int32 diff ;
if ( ! TransactionIdIsNormal ( id1 ) | | ! TransactionIdIsNormal ( id2 ) )
return ( id1 < = id2 ) ;
diff = ( int32 ) ( id1 - id2 ) ;
return ( diff < = 0 ) ;
}
/*
* TransactionIdFollows - - - is id1 logically > id2 ?
*/
static inline bool
TransactionIdFollows ( TransactionId id1 , TransactionId id2 )
{
int32 diff ;
if ( ! TransactionIdIsNormal ( id1 ) | | ! TransactionIdIsNormal ( id2 ) )
return ( id1 > id2 ) ;
diff = ( int32 ) ( id1 - id2 ) ;
return ( diff > 0 ) ;
}
/*
* TransactionIdFollowsOrEquals - - - is id1 logically > = id2 ?
*/
static inline bool
TransactionIdFollowsOrEquals ( TransactionId id1 , TransactionId id2 )
{
int32 diff ;
if ( ! TransactionIdIsNormal ( id1 ) | | ! TransactionIdIsNormal ( id2 ) )
return ( id1 > = id2 ) ;
diff = ( int32 ) ( id1 - id2 ) ;
return ( diff > = 0 ) ;
}
/* ----------------
* extern declarations
* - - - - - - - - - - - - - - - -
@ -274,10 +340,6 @@ extern bool TransactionIdDidAbort(TransactionId transactionId);
extern void TransactionIdCommitTree ( TransactionId xid , int nxids , TransactionId * xids ) ;
extern void TransactionIdAsyncCommitTree ( TransactionId xid , int nxids , TransactionId * xids , XLogRecPtr lsn ) ;
extern void TransactionIdAbortTree ( TransactionId xid , int nxids , TransactionId * xids ) ;
extern bool TransactionIdPrecedes ( TransactionId id1 , TransactionId id2 ) ;
extern bool TransactionIdPrecedesOrEquals ( TransactionId id1 , TransactionId id2 ) ;
extern bool TransactionIdFollows ( TransactionId id1 , TransactionId id2 ) ;
extern bool TransactionIdFollowsOrEquals ( TransactionId id1 , TransactionId id2 ) ;
extern TransactionId TransactionIdLatest ( TransactionId mainxid ,
int nxids , const TransactionId * xids ) ;
extern XLogRecPtr TransactionIdGetCommitLSN ( TransactionId xid ) ;