From 4f3c672ebe4e93243542705551116c2a84a964e8 Mon Sep 17 00:00:00 2001 From: Onur Tirtir Date: Wed, 5 May 2021 02:09:41 +0300 Subject: [PATCH] Re-consider VALID_ITEMPOINTER_OFFSETS wrt bitmap scan logic --- src/include/columnar/columnar_tableam.h | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/include/columnar/columnar_tableam.h b/src/include/columnar/columnar_tableam.h index bdd9ee658..2809c6439 100644 --- a/src/include/columnar/columnar_tableam.h +++ b/src/include/columnar/columnar_tableam.h @@ -18,18 +18,14 @@ * for columnar tables to the following interval: * [FirstOffsetNumber, MaxOffsetNumber]. * - * However, for GIN indexes, Postgres also asserts the following in - * itemptr_to_uint64 function: - * "GinItemPointerGetOffsetNumber(iptr) < (1 << MaxHeapTuplesPerPageBits)", - * where MaxHeapTuplesPerPageBits = 11. - * That means, offsetNumber for columnar tables can't be equal to - * 2**11 = 2048 = MaxOffsetNumber. - * Hence we can't use MaxOffsetNumber as offsetNumber too. + * However, bitmap scan logic assumes that itemPointer.offsetNumber cannot + * be larger than MaxHeapTuplesPerPage (see tbm_add_tuples). * * For this reason, we restrict itemPointer.offsetNumber - * to the following interval: [FirstOffsetNumber, MaxOffsetNumber). + * to the following interval: [FirstOffsetNumber, MaxHeapTuplesPerPage]. */ -#define VALID_ITEMPOINTER_OFFSETS ((uint64) (MaxOffsetNumber - FirstOffsetNumber)) +#define VALID_ITEMPOINTER_OFFSETS \ + ((uint64) (MaxHeapTuplesPerPage - FirstOffsetNumber + 1)) /* * Number of valid ItemPointer BlockNumber's for "row number" <> "ItemPointer"