Further simplify nbtree high key truncation.
authorPeter Geoghegan <pg@bowt.ie>
Tue, 31 Mar 2020 00:34:12 +0000 (17:34 -0700)
committerPeter Geoghegan <pg@bowt.ie>
Tue, 31 Mar 2020 00:34:12 +0000 (17:34 -0700)
Commit 7c2dbc69 reorganized _bt_truncate() in a way that enables a
further simplification that I (pgeoghegan) missed:  Since we mark the
tuple that is returned to the caller as a pivot tuple before the point
where its heap TID is set as of 7c2dbc69, it is possible to use the high
level BTreeTupleGetHeapTID() inline function to get an item pointer.  Do
it that way now.  This approach is clearer and more maintainable.

src/backend/access/nbtree/nbtutils.c

index 610c7de1e510c59c90468290de81667cfaf84107..aaa0c89c7ddd008dc4347995b5240e95c3873684 100644 (file)
@@ -2251,6 +2251,7 @@ _bt_truncate(Relation rel, IndexTuple lastleft, IndexTuple firstright,
        tidpivot->t_info |= newsize;
        BTreeTupleSetNAtts(tidpivot, nkeyatts);
        BTreeTupleSetAltHeapTID(tidpivot);
+       pivotheaptid = BTreeTupleGetHeapTID(tidpivot);
 
        /*
         * Lehman & Yao use lastleft as the leaf high key in all cases, but don't
@@ -2259,8 +2260,6 @@ _bt_truncate(Relation rel, IndexTuple lastleft, IndexTuple firstright,
         * TID.  (This is also the closest value to negative infinity that's
         * legally usable.)
         */
-       pivotheaptid = (ItemPointer) ((char *) tidpivot + newsize -
-                                                                 sizeof(ItemPointerData));
        ItemPointerCopy(BTreeTupleGetMaxHeapTID(lastleft), pivotheaptid);
 
        /*