mirror of https://github.com/citusdata/citus.git
Re-consider VALID_ITEMPOINTER_OFFSETS wrt bitmap scan logic
parent
0f4c97e0d0
commit
4f3c672ebe
|
@ -18,18 +18,14 @@
|
||||||
* for columnar tables to the following interval:
|
* for columnar tables to the following interval:
|
||||||
* [FirstOffsetNumber, MaxOffsetNumber].
|
* [FirstOffsetNumber, MaxOffsetNumber].
|
||||||
*
|
*
|
||||||
* However, for GIN indexes, Postgres also asserts the following in
|
* However, bitmap scan logic assumes that itemPointer.offsetNumber cannot
|
||||||
* itemptr_to_uint64 function:
|
* be larger than MaxHeapTuplesPerPage (see tbm_add_tuples).
|
||||||
* "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.
|
|
||||||
*
|
*
|
||||||
* For this reason, we restrict itemPointer.offsetNumber
|
* 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"
|
* Number of valid ItemPointer BlockNumber's for "row number" <> "ItemPointer"
|
||||||
|
|
Loading…
Reference in New Issue