From b5f5c89528a39a4b9b3b8c862fb73a0131b98688 Mon Sep 17 00:00:00 2001 From: Teodor Sigaev Date: Wed, 22 Oct 2008 12:56:25 +0000 Subject: Fix GiST's killing tuple: GISTScanOpaque->curpos wasn't correctly set. As result, killtuple() marks as dead wrong tuple on page. Bug was introduced by me while fixing possible duplicates during GiST index scan. --- src/include/access/gist_private.h | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'src/include/access/gist_private.h') diff --git a/src/include/access/gist_private.h b/src/include/access/gist_private.h index c1861180d24..1668f80a9c9 100644 --- a/src/include/access/gist_private.h +++ b/src/include/access/gist_private.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/gist_private.h,v 1.8.2.1 2008/08/23 10:43:58 teodor Exp $ + * $PostgreSQL: pgsql/src/include/access/gist_private.h,v 1.8.2.2 2008/10/22 12:56:25 teodor Exp $ * *------------------------------------------------------------------------- */ @@ -60,6 +60,12 @@ typedef struct GISTSTATE TupleDesc tupdesc; } GISTSTATE; +typedef struct MatchedItemPtr +{ + ItemPointerData heapPtr; + OffsetNumber pageOffset; /* offset in index page */ +} MatchedItemPtr; + /* * When we're doing a scan, we need to keep track of the parent stack * for the marked and current items. @@ -74,10 +80,10 @@ typedef struct GISTScanOpaqueData Buffer curbuf; Buffer markbuf; - ItemPointerData pageData[BLCKSZ/sizeof(IndexTupleData)]; + MatchedItemPtr pageData[BLCKSZ/sizeof(IndexTupleData)]; OffsetNumber nPageData; OffsetNumber curPageData; - ItemPointerData markPageData[BLCKSZ/sizeof(IndexTupleData)]; + MatchedItemPtr markPageData[BLCKSZ/sizeof(IndexTupleData)]; OffsetNumber markNPageData; OffsetNumber markCurPageData; } GISTScanOpaqueData; -- cgit v1.2.3