Commit 1cf693ab authored by Tom Lane's avatar Tom Lane

Reorder snapshot checks to save a couple comparisons in the common case,

where the tuple's xmin or xmax is older than the snapshot xmin.  There
is no need to check it against snapshot xmax in that case.
parent 205b5c2f
...@@ -16,7 +16,7 @@ ...@@ -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.49 2002/01/16 23:51:56 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.50 2002/05/06 02:39:01 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -707,13 +707,12 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot) ...@@ -707,13 +707,12 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot)
* By here, the inserting transaction has committed - have to check * By here, the inserting transaction has committed - have to check
* when... * when...
*/ */
if (TransactionIdFollowsOrEquals(tuple->t_xmin, snapshot->xmax))
return false;
if (TransactionIdFollowsOrEquals(tuple->t_xmin, snapshot->xmin)) if (TransactionIdFollowsOrEquals(tuple->t_xmin, snapshot->xmin))
{ {
uint32 i; uint32 i;
if (TransactionIdFollowsOrEquals(tuple->t_xmin, snapshot->xmax))
return false;
for (i = 0; i < snapshot->xcnt; i++) for (i = 0; i < snapshot->xcnt; i++)
{ {
if (TransactionIdEquals(tuple->t_xmin, snapshot->xip[i])) if (TransactionIdEquals(tuple->t_xmin, snapshot->xip[i]))
...@@ -748,12 +747,15 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot) ...@@ -748,12 +747,15 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot)
tuple->t_infomask |= HEAP_XMAX_COMMITTED; tuple->t_infomask |= HEAP_XMAX_COMMITTED;
} }
if (TransactionIdFollowsOrEquals(tuple->t_xmax, snapshot->xmax)) /*
return true; * OK, the deleting transaction committed too ... but when?
*/
if (TransactionIdFollowsOrEquals(tuple->t_xmax, snapshot->xmin)) if (TransactionIdFollowsOrEquals(tuple->t_xmax, snapshot->xmin))
{ {
uint32 i; uint32 i;
if (TransactionIdFollowsOrEquals(tuple->t_xmax, snapshot->xmax))
return true;
for (i = 0; i < snapshot->xcnt; i++) for (i = 0; i < snapshot->xcnt; i++)
{ {
if (TransactionIdEquals(tuple->t_xmax, snapshot->xip[i])) if (TransactionIdEquals(tuple->t_xmax, snapshot->xip[i]))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment