mirror of
https://github.com/postgres/postgres.git
synced 2025-12-21 05:21:08 +03:00
Add lossy indicator to TBMIterateResult
TBMIterateResult->ntuples is -1 when the page in the bitmap is lossy. Add an explicit lossy indicator so that we can move ntuples out of the TBMIterateResult in a future commit. Discussion: https://postgr.es/m/CA%2BhUKGLHbKP3jwJ6_%2BhnGi37Pw3BD5j2amjV3oSk7j-KyCnY7Q%40mail.gmail.com
This commit is contained in:
@@ -827,7 +827,7 @@ entryGetItem(GinState *ginstate, GinScanEntry entry,
|
||||
* in the bitmap.
|
||||
*/
|
||||
while (entry->matchResult == NULL ||
|
||||
(entry->matchResult->ntuples >= 0 &&
|
||||
(!entry->matchResult->lossy &&
|
||||
entry->offset >= entry->matchResult->ntuples) ||
|
||||
entry->matchResult->blockno < advancePastBlk ||
|
||||
(ItemPointerIsLossyPage(&advancePast) &&
|
||||
@@ -860,7 +860,7 @@ entryGetItem(GinState *ginstate, GinScanEntry entry,
|
||||
* We're now on the first page after advancePast which has any
|
||||
* items on it. If it's a lossy result, return that.
|
||||
*/
|
||||
if (entry->matchResult->ntuples < 0)
|
||||
if (entry->matchResult->lossy)
|
||||
{
|
||||
ItemPointerSetLossyPage(&entry->curItem,
|
||||
entry->matchResult->blockno);
|
||||
@@ -879,6 +879,8 @@ entryGetItem(GinState *ginstate, GinScanEntry entry,
|
||||
*/
|
||||
if (entry->matchResult->blockno == advancePastBlk)
|
||||
{
|
||||
Assert(entry->matchResult->ntuples > 0);
|
||||
|
||||
/*
|
||||
* First, do a quick check against the last offset on the
|
||||
* page. If that's > advancePast, so are all the other
|
||||
|
||||
@@ -2170,7 +2170,7 @@ heapam_scan_bitmap_next_block(TableScanDesc scan,
|
||||
VM_ALL_VISIBLE(scan->rs_rd, tbmres->blockno, &bscan->rs_vmbuffer))
|
||||
{
|
||||
/* can't be lossy in the skip_fetch case */
|
||||
Assert(tbmres->ntuples >= 0);
|
||||
Assert(!tbmres->lossy);
|
||||
Assert(bscan->rs_empty_tuples_pending >= 0);
|
||||
|
||||
bscan->rs_empty_tuples_pending += tbmres->ntuples;
|
||||
@@ -2207,7 +2207,7 @@ heapam_scan_bitmap_next_block(TableScanDesc scan,
|
||||
/*
|
||||
* We need two separate strategies for lossy and non-lossy cases.
|
||||
*/
|
||||
if (tbmres->ntuples >= 0)
|
||||
if (!tbmres->lossy)
|
||||
{
|
||||
/*
|
||||
* Bitmap is non-lossy, so we just look through the offsets listed in
|
||||
@@ -2268,10 +2268,10 @@ heapam_scan_bitmap_next_block(TableScanDesc scan,
|
||||
Assert(ntup <= MaxHeapTuplesPerPage);
|
||||
hscan->rs_ntuples = ntup;
|
||||
|
||||
if (tbmres->ntuples >= 0)
|
||||
(*exact_pages)++;
|
||||
else
|
||||
if (tbmres->lossy)
|
||||
(*lossy_pages)++;
|
||||
else
|
||||
(*exact_pages)++;
|
||||
|
||||
/*
|
||||
* Return true to indicate that a valid block was found and the bitmap is
|
||||
|
||||
Reference in New Issue
Block a user