@ -16,7 +16,7 @@
* Portions Copyright ( c ) 1994 , Regents of the University of California
* Portions Copyright ( c ) 1994 , Regents of the University of California
*
*
* IDENTIFICATION
* IDENTIFICATION
* $ Header : / cvsroot / pgsql / src / backend / utils / time / tqual . c , v 1.63 2003 / 06 / 1 2 01 : 42 : 20 momjian Exp $
* $ Header : / cvsroot / pgsql / src / backend / utils / time / tqual . c , v 1.64 2003 / 06 / 25 01 : 08 : 13 momjian Exp $
*
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
*/
@ -76,11 +76,12 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple)
if ( tuple - > t_infomask & HEAP_MOVED_OFF )
if ( tuple - > t_infomask & HEAP_MOVED_OFF )
{
{
if ( TransactionIdIsCurrentTransactionId ( HeapTupleHeaderGetXvac ( tuple ) ) )
TransactionId xvac = HeapTupleHeaderGetXvac ( tuple ) ;
if ( TransactionIdIsCurrentTransactionId ( xvac ) )
return false ;
return false ;
if ( ! TransactionIdIsInProgress ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( ! TransactionIdIsInProgress ( xvac ) )
{
{
if ( TransactionIdDidCommit ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdDidCommit ( xvac ) )
{
{
tuple - > t_infomask | = HEAP_XMIN_INVALID ;
tuple - > t_infomask | = HEAP_XMIN_INVALID ;
return false ;
return false ;
@ -90,11 +91,12 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple)
}
}
else if ( tuple - > t_infomask & HEAP_MOVED_IN )
else if ( tuple - > t_infomask & HEAP_MOVED_IN )
{
{
if ( ! TransactionIdIsCurrentTransactionId ( HeapTupleHeaderGetXvac ( tuple ) ) )
TransactionId xvac = HeapTupleHeaderGetXvac ( tuple ) ;
if ( ! TransactionIdIsCurrentTransactionId ( xvac ) )
{
{
if ( TransactionIdIsInProgress ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdIsInProgress ( xvac ) )
return false ;
return false ;
if ( TransactionIdDidCommit ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdDidCommit ( xvac ) )
tuple - > t_infomask | = HEAP_XMIN_COMMITTED ;
tuple - > t_infomask | = HEAP_XMIN_COMMITTED ;
else
else
{
{
@ -152,11 +154,14 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple)
}
}
/* xmax transaction committed */
/* xmax transaction committed */
tuple - > t_infomask | = HEAP_XMAX_COMMITTED ;
if ( tuple - > t_infomask & HEAP_MARKED_FOR_UPDATE )
if ( tuple - > t_infomask & HEAP_MARKED_FOR_UPDATE )
{
tuple - > t_infomask | = HEAP_XMAX_INVALID ;
return true ;
return true ;
}
tuple - > t_infomask | = HEAP_XMAX_COMMITTED ;
return false ;
return false ;
}
}
@ -212,11 +217,12 @@ HeapTupleSatisfiesNow(HeapTupleHeader tuple)
if ( tuple - > t_infomask & HEAP_MOVED_OFF )
if ( tuple - > t_infomask & HEAP_MOVED_OFF )
{
{
if ( TransactionIdIsCurrentTransactionId ( HeapTupleHeaderGetXvac ( tuple ) ) )
TransactionId xvac = HeapTupleHeaderGetXvac ( tuple ) ;
if ( TransactionIdIsCurrentTransactionId ( xvac ) )
return false ;
return false ;
if ( ! TransactionIdIsInProgress ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( ! TransactionIdIsInProgress ( xvac ) )
{
{
if ( TransactionIdDidCommit ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdDidCommit ( xvac ) )
{
{
tuple - > t_infomask | = HEAP_XMIN_INVALID ;
tuple - > t_infomask | = HEAP_XMIN_INVALID ;
return false ;
return false ;
@ -226,11 +232,12 @@ HeapTupleSatisfiesNow(HeapTupleHeader tuple)
}
}
else if ( tuple - > t_infomask & HEAP_MOVED_IN )
else if ( tuple - > t_infomask & HEAP_MOVED_IN )
{
{
if ( ! TransactionIdIsCurrentTransactionId ( HeapTupleHeaderGetXvac ( tuple ) ) )
TransactionId xvac = HeapTupleHeaderGetXvac ( tuple ) ;
if ( ! TransactionIdIsCurrentTransactionId ( xvac ) )
{
{
if ( TransactionIdIsInProgress ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdIsInProgress ( xvac ) )
return false ;
return false ;
if ( TransactionIdDidCommit ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdDidCommit ( xvac ) )
tuple - > t_infomask | = HEAP_XMIN_COMMITTED ;
tuple - > t_infomask | = HEAP_XMIN_COMMITTED ;
else
else
{
{
@ -297,11 +304,14 @@ HeapTupleSatisfiesNow(HeapTupleHeader tuple)
}
}
/* xmax transaction committed */
/* xmax transaction committed */
tuple - > t_infomask | = HEAP_XMAX_COMMITTED ;
if ( tuple - > t_infomask & HEAP_MARKED_FOR_UPDATE )
if ( tuple - > t_infomask & HEAP_MARKED_FOR_UPDATE )
{
tuple - > t_infomask | = HEAP_XMAX_INVALID ;
return true ;
return true ;
}
tuple - > t_infomask | = HEAP_XMAX_COMMITTED ;
return false ;
return false ;
}
}
@ -329,11 +339,12 @@ HeapTupleSatisfiesToast(HeapTupleHeader tuple)
if ( tuple - > t_infomask & HEAP_MOVED_OFF )
if ( tuple - > t_infomask & HEAP_MOVED_OFF )
{
{
if ( TransactionIdIsCurrentTransactionId ( HeapTupleHeaderGetXvac ( tuple ) ) )
TransactionId xvac = HeapTupleHeaderGetXvac ( tuple ) ;
if ( TransactionIdIsCurrentTransactionId ( xvac ) )
return false ;
return false ;
if ( ! TransactionIdIsInProgress ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( ! TransactionIdIsInProgress ( xvac ) )
{
{
if ( TransactionIdDidCommit ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdDidCommit ( xvac ) )
{
{
tuple - > t_infomask | = HEAP_XMIN_INVALID ;
tuple - > t_infomask | = HEAP_XMIN_INVALID ;
return false ;
return false ;
@ -343,11 +354,12 @@ HeapTupleSatisfiesToast(HeapTupleHeader tuple)
}
}
else if ( tuple - > t_infomask & HEAP_MOVED_IN )
else if ( tuple - > t_infomask & HEAP_MOVED_IN )
{
{
if ( ! TransactionIdIsCurrentTransactionId ( HeapTupleHeaderGetXvac ( tuple ) ) )
TransactionId xvac = HeapTupleHeaderGetXvac ( tuple ) ;
if ( ! TransactionIdIsCurrentTransactionId ( xvac ) )
{
{
if ( TransactionIdIsInProgress ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdIsInProgress ( xvac ) )
return false ;
return false ;
if ( TransactionIdDidCommit ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdDidCommit ( xvac ) )
tuple - > t_infomask | = HEAP_XMIN_COMMITTED ;
tuple - > t_infomask | = HEAP_XMIN_COMMITTED ;
else
else
{
{
@ -382,11 +394,12 @@ HeapTupleSatisfiesUpdate(HeapTuple htuple, CommandId curcid)
if ( tuple - > t_infomask & HEAP_MOVED_OFF )
if ( tuple - > t_infomask & HEAP_MOVED_OFF )
{
{
if ( TransactionIdIsCurrentTransactionId ( HeapTupleHeaderGetXvac ( tuple ) ) )
TransactionId xvac = HeapTupleHeaderGetXvac ( tuple ) ;
if ( TransactionIdIsCurrentTransactionId ( xvac ) )
return HeapTupleInvisible ;
return HeapTupleInvisible ;
if ( ! TransactionIdIsInProgress ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( ! TransactionIdIsInProgress ( xvac ) )
{
{
if ( TransactionIdDidCommit ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdDidCommit ( xvac ) )
{
{
tuple - > t_infomask | = HEAP_XMIN_INVALID ;
tuple - > t_infomask | = HEAP_XMIN_INVALID ;
return HeapTupleInvisible ;
return HeapTupleInvisible ;
@ -396,11 +409,12 @@ HeapTupleSatisfiesUpdate(HeapTuple htuple, CommandId curcid)
}
}
else if ( tuple - > t_infomask & HEAP_MOVED_IN )
else if ( tuple - > t_infomask & HEAP_MOVED_IN )
{
{
if ( ! TransactionIdIsCurrentTransactionId ( HeapTupleHeaderGetXvac ( tuple ) ) )
TransactionId xvac = HeapTupleHeaderGetXvac ( tuple ) ;
if ( ! TransactionIdIsCurrentTransactionId ( xvac ) )
{
{
if ( TransactionIdIsInProgress ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdIsInProgress ( xvac ) )
return HeapTupleInvisible ;
return HeapTupleInvisible ;
if ( TransactionIdDidCommit ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdDidCommit ( xvac ) )
tuple - > t_infomask | = HEAP_XMIN_COMMITTED ;
tuple - > t_infomask | = HEAP_XMIN_COMMITTED ;
else
else
{
{
@ -475,11 +489,14 @@ HeapTupleSatisfiesUpdate(HeapTuple htuple, CommandId curcid)
}
}
/* xmax transaction committed */
/* xmax transaction committed */
tuple - > t_infomask | = HEAP_XMAX_COMMITTED ;
if ( tuple - > t_infomask & HEAP_MARKED_FOR_UPDATE )
if ( tuple - > t_infomask & HEAP_MARKED_FOR_UPDATE )
{
tuple - > t_infomask | = HEAP_XMAX_INVALID ;
return HeapTupleMayBeUpdated ;
return HeapTupleMayBeUpdated ;
}
tuple - > t_infomask | = HEAP_XMAX_COMMITTED ;
return HeapTupleUpdated ; /* updated by other */
return HeapTupleUpdated ; /* updated by other */
}
}
@ -513,11 +530,12 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple)
if ( tuple - > t_infomask & HEAP_MOVED_OFF )
if ( tuple - > t_infomask & HEAP_MOVED_OFF )
{
{
if ( TransactionIdIsCurrentTransactionId ( HeapTupleHeaderGetXvac ( tuple ) ) )
TransactionId xvac = HeapTupleHeaderGetXvac ( tuple ) ;
if ( TransactionIdIsCurrentTransactionId ( xvac ) )
return false ;
return false ;
if ( ! TransactionIdIsInProgress ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( ! TransactionIdIsInProgress ( xvac ) )
{
{
if ( TransactionIdDidCommit ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdDidCommit ( xvac ) )
{
{
tuple - > t_infomask | = HEAP_XMIN_INVALID ;
tuple - > t_infomask | = HEAP_XMIN_INVALID ;
return false ;
return false ;
@ -527,11 +545,12 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple)
}
}
else if ( tuple - > t_infomask & HEAP_MOVED_IN )
else if ( tuple - > t_infomask & HEAP_MOVED_IN )
{
{
if ( ! TransactionIdIsCurrentTransactionId ( HeapTupleHeaderGetXvac ( tuple ) ) )
TransactionId xvac = HeapTupleHeaderGetXvac ( tuple ) ;
if ( ! TransactionIdIsCurrentTransactionId ( xvac ) )
{
{
if ( TransactionIdIsInProgress ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdIsInProgress ( xvac ) )
return false ;
return false ;
if ( TransactionIdDidCommit ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdDidCommit ( xvac ) )
tuple - > t_infomask | = HEAP_XMIN_COMMITTED ;
tuple - > t_infomask | = HEAP_XMIN_COMMITTED ;
else
else
{
{
@ -600,11 +619,14 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple)
}
}
/* xmax transaction committed */
/* xmax transaction committed */
tuple - > t_infomask | = HEAP_XMAX_COMMITTED ;
if ( tuple - > t_infomask & HEAP_MARKED_FOR_UPDATE )
if ( tuple - > t_infomask & HEAP_MARKED_FOR_UPDATE )
{
tuple - > t_infomask | = HEAP_XMAX_INVALID ;
return true ;
return true ;
}
tuple - > t_infomask | = HEAP_XMAX_COMMITTED ;
SnapshotDirty - > tid = tuple - > t_ctid ;
SnapshotDirty - > tid = tuple - > t_ctid ;
return false ; /* updated by other */
return false ; /* updated by other */
}
}
@ -644,11 +666,12 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot)
if ( tuple - > t_infomask & HEAP_MOVED_OFF )
if ( tuple - > t_infomask & HEAP_MOVED_OFF )
{
{
if ( TransactionIdIsCurrentTransactionId ( HeapTupleHeaderGetXvac ( tuple ) ) )
TransactionId xvac = HeapTupleHeaderGetXvac ( tuple ) ;
if ( TransactionIdIsCurrentTransactionId ( xvac ) )
return false ;
return false ;
if ( ! TransactionIdIsInProgress ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( ! TransactionIdIsInProgress ( xvac ) )
{
{
if ( TransactionIdDidCommit ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdDidCommit ( xvac ) )
{
{
tuple - > t_infomask | = HEAP_XMIN_INVALID ;
tuple - > t_infomask | = HEAP_XMIN_INVALID ;
return false ;
return false ;
@ -658,11 +681,12 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot)
}
}
else if ( tuple - > t_infomask & HEAP_MOVED_IN )
else if ( tuple - > t_infomask & HEAP_MOVED_IN )
{
{
if ( ! TransactionIdIsCurrentTransactionId ( HeapTupleHeaderGetXvac ( tuple ) ) )
TransactionId xvac = HeapTupleHeaderGetXvac ( tuple ) ;
if ( ! TransactionIdIsCurrentTransactionId ( xvac ) )
{
{
if ( TransactionIdIsInProgress ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdIsInProgress ( xvac ) )
return false ;
return false ;
if ( TransactionIdDidCommit ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdDidCommit ( xvac ) )
tuple - > t_infomask | = HEAP_XMIN_COMMITTED ;
tuple - > t_infomask | = HEAP_XMIN_COMMITTED ;
else
else
{
{
@ -802,11 +826,12 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin)
return HEAPTUPLE_DEAD ;
return HEAPTUPLE_DEAD ;
else if ( tuple - > t_infomask & HEAP_MOVED_OFF )
else if ( tuple - > t_infomask & HEAP_MOVED_OFF )
{
{
if ( TransactionIdIsCurrentTransactionId ( HeapTupleHeaderGetXvac ( tuple ) ) )
TransactionId xvac = HeapTupleHeaderGetXvac ( tuple ) ;
if ( TransactionIdIsCurrentTransactionId ( xvac ) )
return HEAPTUPLE_DELETE_IN_PROGRESS ;
return HEAPTUPLE_DELETE_IN_PROGRESS ;
if ( TransactionIdIsInProgress ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdIsInProgress ( xvac ) )
return HEAPTUPLE_DELETE_IN_PROGRESS ;
return HEAPTUPLE_DELETE_IN_PROGRESS ;
if ( TransactionIdDidCommit ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdDidCommit ( xvac ) )
{
{
tuple - > t_infomask | = HEAP_XMIN_INVALID ;
tuple - > t_infomask | = HEAP_XMIN_INVALID ;
return HEAPTUPLE_DEAD ;
return HEAPTUPLE_DEAD ;
@ -815,11 +840,12 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin)
}
}
else if ( tuple - > t_infomask & HEAP_MOVED_IN )
else if ( tuple - > t_infomask & HEAP_MOVED_IN )
{
{
if ( TransactionIdIsCurrentTransactionId ( HeapTupleHeaderGetXvac ( tuple ) ) )
TransactionId xvac = HeapTupleHeaderGetXvac ( tuple ) ;
if ( TransactionIdIsCurrentTransactionId ( xvac ) )
return HEAPTUPLE_INSERT_IN_PROGRESS ;
return HEAPTUPLE_INSERT_IN_PROGRESS ;
if ( TransactionIdIsInProgress ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdIsInProgress ( xvac ) )
return HEAPTUPLE_INSERT_IN_PROGRESS ;
return HEAPTUPLE_INSERT_IN_PROGRESS ;
if ( TransactionIdDidCommit ( HeapTupleHeaderGetXvac ( tuple ) ) )
if ( TransactionIdDidCommit ( xvac ) )
tuple - > t_infomask | = HEAP_XMIN_COMMITTED ;
tuple - > t_infomask | = HEAP_XMIN_COMMITTED ;
else
else
{
{
@ -831,16 +857,10 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin)
return HEAPTUPLE_INSERT_IN_PROGRESS ;
return HEAPTUPLE_INSERT_IN_PROGRESS ;
else if ( TransactionIdDidCommit ( HeapTupleHeaderGetXmin ( tuple ) ) )
else if ( TransactionIdDidCommit ( HeapTupleHeaderGetXmin ( tuple ) ) )
tuple - > t_infomask | = HEAP_XMIN_COMMITTED ;
tuple - > t_infomask | = HEAP_XMIN_COMMITTED ;
else if ( TransactionIdDidAbort ( HeapTupleHeaderGetXmin ( tuple ) ) )
{
tuple - > t_infomask | = HEAP_XMIN_INVALID ;
return HEAPTUPLE_DEAD ;
}
else
else
{
{
/*
/*
* Not in Progress , Not Committed , Not Aborted - so it ' s from
* Not in Progress , Not Committed , so either Aborted or crashed
* crashed process . - vadim 11 / 26 / 96
*/
*/
tuple - > t_infomask | = HEAP_XMIN_INVALID ;
tuple - > t_infomask | = HEAP_XMIN_INVALID ;
return HEAPTUPLE_DEAD ;
return HEAPTUPLE_DEAD ;
@ -868,11 +888,12 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin)
{
{
if ( TransactionIdIsInProgress ( HeapTupleHeaderGetXmax ( tuple ) ) )
if ( TransactionIdIsInProgress ( HeapTupleHeaderGetXmax ( tuple ) ) )
return HEAPTUPLE_LIVE ;
return HEAPTUPLE_LIVE ;
if ( TransactionIdDidCommit ( HeapTupleHeaderGetXmax ( tuple ) ) )
/*
tuple - > t_infomask | = HEAP_XMAX_COMMITTED ;
* We don ' t really care whether xmax did commit , abort or crash .
else
* We know that xmax did mark the tuple for update , but it did not
/* it's either aborted or crashed */
* and will never actually update it .
tuple - > t_infomask | = HEAP_XMAX_INVALID ;
*/
tuple - > t_infomask | = HEAP_XMAX_INVALID ;
}
}
return HEAPTUPLE_LIVE ;
return HEAPTUPLE_LIVE ;
}
}
@ -883,16 +904,10 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin)
return HEAPTUPLE_DELETE_IN_PROGRESS ;
return HEAPTUPLE_DELETE_IN_PROGRESS ;
else if ( TransactionIdDidCommit ( HeapTupleHeaderGetXmax ( tuple ) ) )
else if ( TransactionIdDidCommit ( HeapTupleHeaderGetXmax ( tuple ) ) )
tuple - > t_infomask | = HEAP_XMAX_COMMITTED ;
tuple - > t_infomask | = HEAP_XMAX_COMMITTED ;
else if ( TransactionIdDidAbort ( HeapTupleHeaderGetXmax ( tuple ) ) )
{
tuple - > t_infomask | = HEAP_XMAX_INVALID ;
return HEAPTUPLE_LIVE ;
}
else
else
{
{
/*
/*
* Not in Progress , Not Committed , Not Aborted - so it ' s from
* Not in Progress , Not Committed , so either Aborted or crashed
* crashed process . - vadim 06 / 02 / 97
*/
*/
tuple - > t_infomask | = HEAP_XMAX_INVALID ;
tuple - > t_infomask | = HEAP_XMAX_INVALID ;
return HEAPTUPLE_LIVE ;
return HEAPTUPLE_LIVE ;