Re: [SQL] Move forward all (Was Re: How to get last 10 rows in a table on a large database?) - Mailing list pgsql-sql

From Stoyan Genov
Subject Re: [SQL] Move forward all (Was Re: How to get last 10 rows in a table on a large database?)
Date
Msg-id 199911091115.NAA11001@lorna.digsys.bg
Whole thread Raw
In response to RE: [SQL] Move forward all (Was Re: How to get last 10 rows in a table on a large database?)  ("Hiroshi Inoue" <Inoue@tpf.co.jp>)
List pgsql-sql
> > >
> > > > I knew the way to fix it but am not sure now.
> > > > Do you really want to make it possible ?
> > > > It isn't an appropriate way to get last rows because "move forward
> > > > all" takes very long time.
> > > >
> > >
> > > Of course it is not an appropriate way to get the last rows like this.
> > > The "right" way IMHO is to reverse the order in the query and to get the
> > > first
> > > rows.
> > >
> > > It is just for the sake of truth...
> > >
> >
> > OK Attached is a patch.
> > Could you apply to 6.5.3 ?
> >
> 
> Sorry the patch is not right for 6.5.3 .
> Please apply the following patch to 6.5.3 .
> 
> Regards.
> 
> Hiroshi Inoue
> Inoue@tpf.co.jp
> 
> *** access/heap/heapam.c.orig    Mon Aug  2 14:56:36 1999
> --- access/heap/heapam.c    Tue Nov  9 12:59:48 1999
> ***************
> *** 775,782 ****
>           if (scan->rs_ptup.t_data == scan->rs_ctup.t_data &&
>               BufferIsInvalid(scan->rs_pbuf))
>           {
> -             if (BufferIsValid(scan->rs_nbuf))
> -                 ReleaseBuffer(scan->rs_nbuf);
>               return NULL;
>           }
> 
> --- 775,780 ----
> ***************
> *** 833,842 ****
>                   ReleaseBuffer(scan->rs_pbuf);
>               scan->rs_ptup.t_data = NULL;
>               scan->rs_pbuf = InvalidBuffer;
> -             if (BufferIsValid(scan->rs_nbuf))
> -                 ReleaseBuffer(scan->rs_nbuf);
> -             scan->rs_ntup.t_data = NULL;
> -             scan->rs_nbuf = InvalidBuffer;
>               return NULL;
>           }
> 
> --- 831,836 ----
> ***************
> *** 855,862 ****
>           if (scan->rs_ctup.t_data == scan->rs_ntup.t_data &&
>               BufferIsInvalid(scan->rs_nbuf))
>           {
> -             if (BufferIsValid(scan->rs_pbuf))
> -                 ReleaseBuffer(scan->rs_pbuf);
>               HEAPDEBUG_3;        /* heap_getnext returns NULL at end */
>               return NULL;
>           }
> --- 849,854 ----
> ***************
> *** 915,924 ****
>                   ReleaseBuffer(scan->rs_nbuf);
>               scan->rs_ntup.t_data = NULL;
>               scan->rs_nbuf = InvalidBuffer;
> -             if (BufferIsValid(scan->rs_pbuf))
> -                 ReleaseBuffer(scan->rs_pbuf);
> -             scan->rs_ptup.t_data = NULL;
> -             scan->rs_pbuf = InvalidBuffer;
>               HEAPDEBUG_6;        /* heap_getnext returning EOS */
>               return NULL;
>           }
> --- 907,912 ----
> 
> 
> 
> ************
> 

I have applied the patch.
Now postgres 6.5.3 works fine (FETCH BACKWARD fetches
result after MOVE FORWARD ALL/FETCH FORWARD ALL).
Thank you very much.

Regards,
Stoyan Genov



pgsql-sql by date:

Previous
From: "Imtiaz. S. M"
Date:
Subject: Is this a bug?
Next
From: "Frederic boucher"
Date:
Subject: Re: [SQL] parser :parse error