From 707f8cf1ee5928104e7ee68edf1384d34615239c Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Wed, 13 Jun 2012 23:26:15 -0400 Subject: [PATCH] Fix page-at-a-time mode to skip the metapage. --- src/backend/access/heap/heapam.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 31807d8241..5ff70f2af2 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -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); /* -- 2.39.5