mirror of
https://github.com/postgres/postgres.git
synced 2025-05-29 16:21:20 +03:00
Make rs_cindex and rs_ntuples unsigned
HeapScanDescData.rs_cindex and rs_ntuples can't be less than 0. All scan types using the heap scan descriptor expect these values to be >= 0. Make that expectation clear by making rs_cindex and rs_ntuples unsigned. Also remove the test in heapam_scan_bitmap_next_tuple() that checks if rs_cindex < 0. This was never true, but now that rs_cindex is unsigned, it makes even less sense. While we are at it, initialize both rs_cindex and rs_ntuples to 0 in initscan(). Author: Melanie Plageman Reviewed-by: Dilip Kumar Discussion: https://postgr.es/m/CAAKRu_ZxF8cDCM_BFi_L-t%3DRjdCZYP1usd1Gd45mjHfZxm0nZw%40mail.gmail.com
This commit is contained in:
parent
1f0de66ea2
commit
68d9662be1
@ -378,6 +378,8 @@ initscan(HeapScanDesc scan, ScanKey key, bool keep_startblock)
|
||||
ItemPointerSetInvalid(&scan->rs_ctup.t_self);
|
||||
scan->rs_cbuf = InvalidBuffer;
|
||||
scan->rs_cblock = InvalidBlockNumber;
|
||||
scan->rs_ntuples = 0;
|
||||
scan->rs_cindex = 0;
|
||||
|
||||
/*
|
||||
* Initialize to ForwardScanDirection because it is most common and
|
||||
@ -943,8 +945,8 @@ heapgettup_pagemode(HeapScanDesc scan,
|
||||
{
|
||||
HeapTuple tuple = &(scan->rs_ctup);
|
||||
Page page;
|
||||
int lineindex;
|
||||
int linesleft;
|
||||
uint32 lineindex;
|
||||
uint32 linesleft;
|
||||
|
||||
if (likely(scan->rs_inited))
|
||||
{
|
||||
@ -989,6 +991,7 @@ continue_page:
|
||||
ItemId lpp;
|
||||
OffsetNumber lineoff;
|
||||
|
||||
Assert(lineindex <= scan->rs_ntuples);
|
||||
lineoff = scan->rs_vistuples[lineindex];
|
||||
lpp = PageGetItemId(page, lineoff);
|
||||
Assert(ItemIdIsNormal(lpp));
|
||||
|
@ -2303,7 +2303,7 @@ heapam_scan_bitmap_next_tuple(TableScanDesc scan,
|
||||
/*
|
||||
* Out of range? If so, nothing more to look at on this page
|
||||
*/
|
||||
if (hscan->rs_cindex < 0 || hscan->rs_cindex >= hscan->rs_ntuples)
|
||||
if (hscan->rs_cindex >= hscan->rs_ntuples)
|
||||
return false;
|
||||
|
||||
targoffset = hscan->rs_vistuples[hscan->rs_cindex];
|
||||
|
@ -103,8 +103,8 @@ typedef struct HeapScanDescData
|
||||
int rs_empty_tuples_pending;
|
||||
|
||||
/* these fields only used in page-at-a-time mode and for bitmap scans */
|
||||
int rs_cindex; /* current tuple's index in vistuples */
|
||||
int rs_ntuples; /* number of visible tuples on page */
|
||||
uint32 rs_cindex; /* current tuple's index in vistuples */
|
||||
uint32 rs_ntuples; /* number of visible tuples on page */
|
||||
OffsetNumber rs_vistuples[MaxHeapTuplesPerPage]; /* their offsets */
|
||||
} HeapScanDescData;
|
||||
typedef struct HeapScanDescData *HeapScanDesc;
|
||||
|
Loading…
x
Reference in New Issue
Block a user