Re: Can rs_cindex be < 0 for bitmap heap scans? - Mailing list pgsql-hackers

From Dilip Kumar
Subject Re: Can rs_cindex be < 0 for bitmap heap scans?
Date
Msg-id CAFiTN-spF4eWDZ1w=5EQ7E+S+JXtqB4FYGF9ECUFo6Cd51QV4Q@mail.gmail.com
Whole thread Raw
In response to Re: Can rs_cindex be < 0 for bitmap heap scans?  (Dilip Kumar <dilipbalaut@gmail.com>)
Responses Re: Can rs_cindex be < 0 for bitmap heap scans?
List pgsql-hackers
On Fri, Oct 25, 2024 at 10:07 PM Melanie Plageman <melanieplageman@gmail.com> wrote:
On Fri, Oct 25, 2024 at 10:29 AM Melanie Plageman
<melanieplageman@gmail.com> wrote:
>
> Tom suggested off-list that if rs_cindex can't be zero, then it should
> be unsigned. I checked the other scan types using the
> HeapScanDescData, and it seems none of them use values of rs_cindex or
> rs_ntuples < 0. As such, here is a patch making both rs_ntuples  and
> rs_cindex unsigned.


@@ -943,8 +945,8 @@ heapgettup_pagemode(HeapScanDesc scan,
 {
  HeapTuple tuple = &(scan->rs_ctup);
  Page page;
- int lineindex;
- int linesleft;
+ uint32 lineindex;
+ uint32 linesleft;

IMHO we can't make  "lineindex" as uint32, because just see the first code block[1] of heapgettup_pagemode(), we use this index as +ve (Forward scan )as well as -ve (Backward scan).

[1]
 if (likely(scan->rs_inited))
{
/* continue from previously returned page/tuple */
page = BufferGetPage(scan->rs_cbuf);

lineindex = scan->rs_cindex + dir;
if (ScanDirectionIsForward(dir))

--Refer definition of ScanDirection
typedef enum ScanDirection
{
BackwardScanDirection = -1,
NoMovementScanDirection = 0,
ForwardScanDirection = 1
} ScanDirection;

--
Regards,
Dilip Kumar
EnterpriseDB: http://www.enterprisedb.com

pgsql-hackers by date:

Previous
From: Andy Fan
Date:
Subject: Re: New function normal_rand_array function to contrib/tablefunc.
Next
From: Masahiko Sawada
Date:
Subject: Assertion failure when autovacuum drops orphan temp indexes.