* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.63 2003/06/12 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 $
*
*-------------------------------------------------------------------------
*/
if (tuple->t_infomask & HEAP_MOVED_OFF)
{
- if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
+ TransactionId xvac = HeapTupleHeaderGetXvac(tuple);
+ if (TransactionIdIsCurrentTransactionId(xvac))
return false;
- if (!TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
+ if (!TransactionIdIsInProgress(xvac))
{
- if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
+ if (TransactionIdDidCommit(xvac))
{
tuple->t_infomask |= HEAP_XMIN_INVALID;
return false;
}
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;
- if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
+ if (TransactionIdDidCommit(xvac))
tuple->t_infomask |= HEAP_XMIN_COMMITTED;
else
{
}
/* xmax transaction committed */
- tuple->t_infomask |= HEAP_XMAX_COMMITTED;
if (tuple->t_infomask & HEAP_MARKED_FOR_UPDATE)
+ {
+ tuple->t_infomask |= HEAP_XMAX_INVALID;
return true;
+ }
+ tuple->t_infomask |= HEAP_XMAX_COMMITTED;
return false;
}
if (tuple->t_infomask & HEAP_MOVED_OFF)
{
- if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
+ TransactionId xvac = HeapTupleHeaderGetXvac(tuple);
+ if (TransactionIdIsCurrentTransactionId(xvac))
return false;
- if (!TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
+ if (!TransactionIdIsInProgress(xvac))
{
- if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
+ if (TransactionIdDidCommit(xvac))
{
tuple->t_infomask |= HEAP_XMIN_INVALID;
return false;
}
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;
- if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
+ if (TransactionIdDidCommit(xvac))
tuple->t_infomask |= HEAP_XMIN_COMMITTED;
else
{
}
/* xmax transaction committed */
- tuple->t_infomask |= HEAP_XMAX_COMMITTED;
if (tuple->t_infomask & HEAP_MARKED_FOR_UPDATE)
+ {
+ tuple->t_infomask |= HEAP_XMAX_INVALID;
return true;
+ }
+ tuple->t_infomask |= HEAP_XMAX_COMMITTED;
return false;
}
if (tuple->t_infomask & HEAP_MOVED_OFF)
{
- if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
+ TransactionId xvac = HeapTupleHeaderGetXvac(tuple);
+ if (TransactionIdIsCurrentTransactionId(xvac))
return false;
- if (!TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
+ if (!TransactionIdIsInProgress(xvac))
{
- if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
+ if (TransactionIdDidCommit(xvac))
{
tuple->t_infomask |= HEAP_XMIN_INVALID;
return false;
}
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;
- if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
+ if (TransactionIdDidCommit(xvac))
tuple->t_infomask |= HEAP_XMIN_COMMITTED;
else
{
if (tuple->t_infomask & HEAP_MOVED_OFF)
{
- if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
+ TransactionId xvac = HeapTupleHeaderGetXvac(tuple);
+ if (TransactionIdIsCurrentTransactionId(xvac))
return HeapTupleInvisible;
- if (!TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
+ if (!TransactionIdIsInProgress(xvac))
{
- if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
+ if (TransactionIdDidCommit(xvac))
{
tuple->t_infomask |= HEAP_XMIN_INVALID;
return HeapTupleInvisible;
}
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;
- if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
+ if (TransactionIdDidCommit(xvac))
tuple->t_infomask |= HEAP_XMIN_COMMITTED;
else
{
}
/* xmax transaction committed */
- tuple->t_infomask |= HEAP_XMAX_COMMITTED;
if (tuple->t_infomask & HEAP_MARKED_FOR_UPDATE)
+ {
+ tuple->t_infomask |= HEAP_XMAX_INVALID;
return HeapTupleMayBeUpdated;
+ }
+ tuple->t_infomask |= HEAP_XMAX_COMMITTED;
return HeapTupleUpdated; /* updated by other */
}
if (tuple->t_infomask & HEAP_MOVED_OFF)
{
- if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
+ TransactionId xvac = HeapTupleHeaderGetXvac(tuple);
+ if (TransactionIdIsCurrentTransactionId(xvac))
return false;
- if (!TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
+ if (!TransactionIdIsInProgress(xvac))
{
- if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
+ if (TransactionIdDidCommit(xvac))
{
tuple->t_infomask |= HEAP_XMIN_INVALID;
return false;
}
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;
- if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
+ if (TransactionIdDidCommit(xvac))
tuple->t_infomask |= HEAP_XMIN_COMMITTED;
else
{
}
/* xmax transaction committed */
- tuple->t_infomask |= HEAP_XMAX_COMMITTED;
if (tuple->t_infomask & HEAP_MARKED_FOR_UPDATE)
+ {
+ tuple->t_infomask |= HEAP_XMAX_INVALID;
return true;
+ }
+ tuple->t_infomask |= HEAP_XMAX_COMMITTED;
SnapshotDirty->tid = tuple->t_ctid;
return false; /* updated by other */
}
if (tuple->t_infomask & HEAP_MOVED_OFF)
{
- if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
+ TransactionId xvac = HeapTupleHeaderGetXvac(tuple);
+ if (TransactionIdIsCurrentTransactionId(xvac))
return false;
- if (!TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
+ if (!TransactionIdIsInProgress(xvac))
{
- if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
+ if (TransactionIdDidCommit(xvac))
{
tuple->t_infomask |= HEAP_XMIN_INVALID;
return false;
}
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;
- if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
+ if (TransactionIdDidCommit(xvac))
tuple->t_infomask |= HEAP_XMIN_COMMITTED;
else
{
return HEAPTUPLE_DEAD;
else if (tuple->t_infomask & HEAP_MOVED_OFF)
{
- if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
+ TransactionId xvac = HeapTupleHeaderGetXvac(tuple);
+ if (TransactionIdIsCurrentTransactionId(xvac))
return HEAPTUPLE_DELETE_IN_PROGRESS;
- if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
+ if (TransactionIdIsInProgress(xvac))
return HEAPTUPLE_DELETE_IN_PROGRESS;
- if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
+ if (TransactionIdDidCommit(xvac))
{
tuple->t_infomask |= HEAP_XMIN_INVALID;
return HEAPTUPLE_DEAD;
}
else if (tuple->t_infomask & HEAP_MOVED_IN)
{
- if (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetXvac(tuple)))
+ TransactionId xvac = HeapTupleHeaderGetXvac(tuple);
+ if (TransactionIdIsCurrentTransactionId(xvac))
return HEAPTUPLE_INSERT_IN_PROGRESS;
- if (TransactionIdIsInProgress(HeapTupleHeaderGetXvac(tuple)))
+ if (TransactionIdIsInProgress(xvac))
return HEAPTUPLE_INSERT_IN_PROGRESS;
- if (TransactionIdDidCommit(HeapTupleHeaderGetXvac(tuple)))
+ if (TransactionIdDidCommit(xvac))
tuple->t_infomask |= HEAP_XMIN_COMMITTED;
else
{
return HEAPTUPLE_INSERT_IN_PROGRESS;
else if (TransactionIdDidCommit(HeapTupleHeaderGetXmin(tuple)))
tuple->t_infomask |= HEAP_XMIN_COMMITTED;
- else if (TransactionIdDidAbort(HeapTupleHeaderGetXmin(tuple)))
- {
- tuple->t_infomask |= HEAP_XMIN_INVALID;
- return HEAPTUPLE_DEAD;
- }
else
{
/*
- * Not in Progress, Not Committed, Not Aborted - so it's from
- * crashed process. - vadim 11/26/96
+ * Not in Progress, Not Committed, so either Aborted or crashed
*/
tuple->t_infomask |= HEAP_XMIN_INVALID;
return HEAPTUPLE_DEAD;
{
if (TransactionIdIsInProgress(HeapTupleHeaderGetXmax(tuple)))
return HEAPTUPLE_LIVE;
- if (TransactionIdDidCommit(HeapTupleHeaderGetXmax(tuple)))
- tuple->t_infomask |= HEAP_XMAX_COMMITTED;
- else
-/* it's either aborted or crashed */
- tuple->t_infomask |= HEAP_XMAX_INVALID;
+ /*
+ * We don't really care whether xmax did commit, abort or crash.
+ * We know that xmax did mark the tuple for update, but it did not
+ * and will never actually update it.
+ */
+ tuple->t_infomask |= HEAP_XMAX_INVALID;
}
return HEAPTUPLE_LIVE;
}
return HEAPTUPLE_DELETE_IN_PROGRESS;
else if (TransactionIdDidCommit(HeapTupleHeaderGetXmax(tuple)))
tuple->t_infomask |= HEAP_XMAX_COMMITTED;
- else if (TransactionIdDidAbort(HeapTupleHeaderGetXmax(tuple)))
- {
- tuple->t_infomask |= HEAP_XMAX_INVALID;
- return HEAPTUPLE_LIVE;
- }
else
{
/*
- * Not in Progress, Not Committed, Not Aborted - so it's from
- * crashed process. - vadim 06/02/97
+ * Not in Progress, Not Committed, so either Aborted or crashed
*/
tuple->t_infomask |= HEAP_XMAX_INVALID;
return HEAPTUPLE_LIVE;