Fix page-at-a-time mode to skip the metapage.
authorRobert Haas <rhaas@postgresql.org>
Thu, 14 Jun 2012 03:26:15 +0000 (23:26 -0400)
committerRobert Haas <rhaas@postgresql.org>
Thu, 14 Jun 2012 14:33:05 +0000 (10:33 -0400)
src/backend/access/heap/heapam.c

index 31807d82415a04bc073aacbc94e3220ee8f65249..5ff70f2af2d8926a8e855c6bc6392d9246a30574 100644 (file)
@@ -216,6 +216,7 @@ heapgetpage(HeapScanDesc scan, BlockNumber page)
        ItemId          lpp;
        bool            all_visible;
 
+       Assert(page >= scan->rs_lowpage);
        Assert(page < scan->rs_nblocks);
 
        /* release previous scan buffer, if any */
@@ -626,7 +627,7 @@ heapgettup_pagemode(HeapScanDesc scan,
                        /*
                         * return null immediately if relation is empty
                         */
-                       if (scan->rs_nblocks == 0)
+                       if (scan->rs_nblocks == scan->rs_lowpage)
                        {
                                Assert(!BufferIsValid(scan->rs_cbuf));
                                tuple->t_data = NULL;
@@ -657,7 +658,7 @@ heapgettup_pagemode(HeapScanDesc scan,
                        /*
                         * return null immediately if relation is empty
                         */
-                       if (scan->rs_nblocks == 0)
+                       if (scan->rs_nblocks == scan->rs_lowpage)
                        {
                                Assert(!BufferIsValid(scan->rs_cbuf));
                                tuple->t_data = NULL;
@@ -672,7 +673,7 @@ heapgettup_pagemode(HeapScanDesc scan,
                         */
                        scan->rs_syncscan = false;
                        /* start from last page of the scan */
-                       if (scan->rs_startblock > 0)
+                       if (scan->rs_startblock > scan->rs_lowpage)
                                page = scan->rs_startblock - 1;
                        else
                                page = scan->rs_nblocks - 1;
@@ -786,7 +787,7 @@ heapgettup_pagemode(HeapScanDesc scan,
                if (backward)
                {
                        finished = (page == scan->rs_startblock);
-                       if (page == 0)
+                       if (page == scan->rs_lowpage)
                                page = scan->rs_nblocks;
                        page--;
                }
@@ -794,7 +795,7 @@ heapgettup_pagemode(HeapScanDesc scan,
                {
                        page++;
                        if (page >= scan->rs_nblocks)
-                               page = 0;
+                               page = scan->rs_lowpage;
                        finished = (page == scan->rs_startblock);
 
                        /*