Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb8778c4

Browse files
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 theTBMIterateResult in a future commit.Discussion:https://postgr.es/m/CA%2BhUKGLHbKP3jwJ6_%2BhnGi37Pw3BD5j2amjV3oSk7j-KyCnY7Q%40mail.gmail.com
1 parentc56e8af commitb8778c4

File tree

4 files changed

+20
-12
lines changed

4 files changed

+20
-12
lines changed

‎src/backend/access/gin/ginget.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -827,7 +827,7 @@ entryGetItem(GinState *ginstate, GinScanEntry entry,
827827
* in the bitmap.
828828
*/
829829
while (entry->matchResult==NULL||
830-
(entry->matchResult->ntuples >=0&&
830+
(!entry->matchResult->lossy&&
831831
entry->offset >=entry->matchResult->ntuples)||
832832
entry->matchResult->blockno<advancePastBlk||
833833
(ItemPointerIsLossyPage(&advancePast)&&
@@ -860,7 +860,7 @@ entryGetItem(GinState *ginstate, GinScanEntry entry,
860860
* We're now on the first page after advancePast which has any
861861
* items on it. If it's a lossy result, return that.
862862
*/
863-
if (entry->matchResult->ntuples<0)
863+
if (entry->matchResult->lossy)
864864
{
865865
ItemPointerSetLossyPage(&entry->curItem,
866866
entry->matchResult->blockno);
@@ -879,6 +879,8 @@ entryGetItem(GinState *ginstate, GinScanEntry entry,
879879
*/
880880
if (entry->matchResult->blockno==advancePastBlk)
881881
{
882+
Assert(entry->matchResult->ntuples>0);
883+
882884
/*
883885
* First, do a quick check against the last offset on the
884886
* page. If that's > advancePast, so are all the other

‎src/backend/access/heap/heapam_handler.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2170,7 +2170,7 @@ heapam_scan_bitmap_next_block(TableScanDesc scan,
21702170
VM_ALL_VISIBLE(scan->rs_rd,tbmres->blockno,&bscan->rs_vmbuffer))
21712171
{
21722172
/* can't be lossy in the skip_fetch case */
2173-
Assert(tbmres->ntuples >=0);
2173+
Assert(!tbmres->lossy);
21742174
Assert(bscan->rs_empty_tuples_pending >=0);
21752175

21762176
bscan->rs_empty_tuples_pending+=tbmres->ntuples;
@@ -2207,7 +2207,7 @@ heapam_scan_bitmap_next_block(TableScanDesc scan,
22072207
/*
22082208
* We need two separate strategies for lossy and non-lossy cases.
22092209
*/
2210-
if (tbmres->ntuples >=0)
2210+
if (!tbmres->lossy)
22112211
{
22122212
/*
22132213
* Bitmap is non-lossy, so we just look through the offsets listed in
@@ -2268,10 +2268,10 @@ heapam_scan_bitmap_next_block(TableScanDesc scan,
22682268
Assert(ntup <=MaxHeapTuplesPerPage);
22692269
hscan->rs_ntuples=ntup;
22702270

2271-
if (tbmres->ntuples >=0)
2272-
(*exact_pages)++;
2273-
else
2271+
if (tbmres->lossy)
22742272
(*lossy_pages)++;
2273+
else
2274+
(*exact_pages)++;
22752275

22762276
/*
22772277
* Return true to indicate that a valid block was found and the bitmap is

‎src/backend/nodes/tidbitmap.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -961,12 +961,13 @@ tbm_advance_schunkbit(PagetableEntry *chunk, int *schunkbitp)
961961
*
962962
* Returns a TBMIterateResult representing one page, or NULL if there are
963963
* no more pages to scan. Pages are guaranteed to be delivered in numerical
964-
* order. Ifresult->ntuples < 0, then the bitmap is "lossy" and failed to
964+
* order. Iflossy is true, then the bitmap is "lossy" and failed to
965965
* remember the exact tuples to look at on this page --- the caller must
966966
* examine all tuples on the page and check if they meet the intended
967-
* condition. If result->recheck is true, only the indicated tuples need
967+
* condition. result->ntuples is set to -1 when the bitmap is lossy.
968+
* If result->recheck is true, only the indicated tuples need
968969
* be examined, but the condition must be rechecked anyway. (For ease of
969-
* testing, recheck is always set true whenntuples < 0.)
970+
* testing, recheck is always set true whenlossy is true.)
970971
*/
971972
TBMIterateResult*
972973
tbm_private_iterate(TBMPrivateIterator*iterator)
@@ -1012,6 +1013,7 @@ tbm_private_iterate(TBMPrivateIterator *iterator)
10121013
/* Return a lossy page indicator from the chunk */
10131014
output->blockno=chunk_blockno;
10141015
output->ntuples=-1;
1016+
output->lossy= true;
10151017
output->recheck= true;
10161018
iterator->schunkbit++;
10171019
returnoutput;
@@ -1033,6 +1035,7 @@ tbm_private_iterate(TBMPrivateIterator *iterator)
10331035
ntuples=tbm_extract_page_tuple(page,output);
10341036
output->blockno=page->blockno;
10351037
output->ntuples=ntuples;
1038+
output->lossy= false;
10361039
output->recheck=page->recheck;
10371040
iterator->spageptr++;
10381041
returnoutput;
@@ -1105,6 +1108,7 @@ tbm_shared_iterate(TBMSharedIterator *iterator)
11051108
/* Return a lossy page indicator from the chunk */
11061109
output->blockno=chunk_blockno;
11071110
output->ntuples=-1;
1111+
output->lossy= true;
11081112
output->recheck= true;
11091113
istate->schunkbit++;
11101114

@@ -1122,6 +1126,7 @@ tbm_shared_iterate(TBMSharedIterator *iterator)
11221126
ntuples=tbm_extract_page_tuple(page,output);
11231127
output->blockno=page->blockno;
11241128
output->ntuples=ntuples;
1129+
output->lossy= false;
11251130
output->recheck=page->recheck;
11261131
istate->spageptr++;
11271132

‎src/include/nodes/tidbitmap.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,10 @@ typedef struct TBMIterator
5454
typedefstructTBMIterateResult
5555
{
5656
BlockNumberblockno;/* page number containing tuples */
57-
intntuples;/* -1 indicates lossy result */
57+
intntuples;/* -1 when lossy */
58+
boollossy;
5859
boolrecheck;/* should the tuples be rechecked? */
59-
/* Note: recheck is always true ifntuples < 0 */
60+
/* Note: recheck is always true iflossy */
6061
OffsetNumberoffsets[FLEXIBLE_ARRAY_MEMBER];
6162
}TBMIterateResult;
6263

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp