Fix bug in lossy-page handling in GIN

When returning rows from a bitmap, as done with partial match queries, we
would get stuck in an infinite loop if the bitmap contained a lossy page
reference.

This bug is new in master, it was introduced by the patch to allow skipping
items refuted by other entries in GIN scans.

Report and fix by Alexander Korotkov
This commit is contained in:
Heikki Linnakangas 2014-05-10 23:24:23 +03:00
parent eaba54c20c
commit 866e6e1d04
1 changed files with 3 additions and 1 deletions

View File

@ -741,7 +741,9 @@ entryGetItem(GinState *ginstate, GinScanEntry entry,
while (entry->matchResult == NULL ||
(entry->matchResult->ntuples >= 0 &&
entry->offset >= entry->matchResult->ntuples) ||
entry->matchResult->blockno < advancePastBlk)
entry->matchResult->blockno < advancePastBlk ||
(ItemPointerIsLossyPage(&advancePast) &&
entry->matchResult->blockno == advancePastBlk))
{
entry->matchResult = tbm_iterate(entry->matchIterator);