Andrew Dunstan <andrew@dunslane.net> writes:
> How does this look?
> if (newtuple->t_len == oldtuple->t_len &&
> newtuple->t_data->t_hoff == oldtuple->t_data->t_hoff &&
> HeapTupleHeaderGetNatts(newtuple) == HeapTupleHeaderGetNatts(oldtuple) &&
> (newtuple->t_data->t_infomask & (HEAP_HASOID|HEAP_HASNULL)) == (oldtuple->t_data->t_infomask &
(HEAP_HASOID|HEAP_HASNULL))&&
> memcmp(newtuple->t_data + offsetof(HeapTupleHeaderData, t_bits),
> oldtuple->t_data + offsetof(HeapTupleHeaderData, t_bits)
> newtuple->t_len - offsetof(HeapTupleHeaderData, t_bits)) == 0)
> rettuple = NULL;
Looks sane. It might be even saner if you compare all of the
non-visibility-related infomask bits, viz
(newtuple->t_data->t_infomask & ~HEAP_XACT_MASK) ==(oldtuple->t_data->t_infomask & ~HEAP_XACT_MASK)
rather than just HASOID and HASNULL.
regards, tom lane