From 181848cc80b1bc4bc119447db6d3745df608908f Mon Sep 17 00:00:00 2001 From: Onur Tirtir Date: Mon, 3 May 2021 19:21:52 +0300 Subject: [PATCH] Implement ErrorIfInvalidRowNumber To use the same logic when mapping tid's to row number's --- src/backend/columnar/columnar_tableam.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/backend/columnar/columnar_tableam.c b/src/backend/columnar/columnar_tableam.c index 2dfcb945e..9977a66a8 100644 --- a/src/backend/columnar/columnar_tableam.c +++ b/src/backend/columnar/columnar_tableam.c @@ -111,6 +111,7 @@ static HeapTuple ColumnarSlotCopyHeapTuple(TupleTableSlot *slot); static void ColumnarCheckLogicalReplication(Relation rel); static Datum * detoast_values(TupleDesc tupleDesc, Datum *orig_values, bool *isnull); static ItemPointerData row_number_to_tid(uint64 rowNumber); +static void ErrorIfInvalidRowNumber(uint64 rowNumber); /* Custom tuple slot ops used for columnar. Initialized in columnar_tableam_init(). */ static TupleTableSlotOps TTSOpsColumnar; @@ -282,6 +283,22 @@ columnar_getnextslot(TableScanDesc sscan, ScanDirection direction, TupleTableSlo */ static ItemPointerData row_number_to_tid(uint64 rowNumber) +{ + ErrorIfInvalidRowNumber(rowNumber); + + ItemPointerData tid = { 0 }; + ItemPointerSetBlockNumber(&tid, rowNumber / VALID_ITEMPOINTER_OFFSETS); + ItemPointerSetOffsetNumber(&tid, rowNumber % VALID_ITEMPOINTER_OFFSETS + + FirstOffsetNumber); + return tid; +} + + +/* + * ErrorIfInvalidRowNumber errors out if given rowNumber is invalid. + */ +static void +ErrorIfInvalidRowNumber(uint64 rowNumber) { if (rowNumber == COLUMNAR_INVALID_ROW_NUMBER) { @@ -297,12 +314,6 @@ row_number_to_tid(uint64 rowNumber) (uint64) COLUMNAR_MAX_ROW_NUMBER), errhint("Consider using VACUUM FULL for your table"))); } - - ItemPointerData tid = { 0 }; - ItemPointerSetBlockNumber(&tid, rowNumber / VALID_ITEMPOINTER_OFFSETS); - ItemPointerSetOffsetNumber(&tid, rowNumber % VALID_ITEMPOINTER_OFFSETS + - FirstOffsetNumber); - return tid; }