Repair error with not adjusting active scans properly after gistSplit.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 28 May 2002 15:22:44 +0000 (15:22 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 28 May 2002 15:22:44 +0000 (15:22 +0000)
Patch from Teodor Sigaev.

src/backend/access/gist/gist.c

index 1ce1914304b319f8ae4394fd1e1ad3ab7e8440cf..c07d1f5652fd570906c14071f4219bebdde92f44 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/access/gist/gist.c,v 1.88 2002/02/11 22:41:59 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/access/gist/gist.c,v 1.88.2.1 2002/05/28 15:22:44 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -496,6 +496,14 @@ gistlayerinsert(Relation r, BlockNumber blkno,
        /* key is modified, so old version must be deleted */
        ItemPointerSet(&oldtid, blkno, child);
        gistdelete(r, &oldtid);
+   
+       /*
+        * if child was splitted, new key for child will be inserted
+        * in the end list of child, so we must say to any scans
+        * that page is changed beginning from 'child' offset
+        */
+       if ( ret & SPLITED )
+           gistadjscans(r, GISTOP_SPLIT, blkno, child);
    }
 
    ret = INSERTED;
@@ -1413,10 +1421,6 @@ gistSplit(Relation r,
        ItemPointerSet(&(newtup[nlen - 1]->t_tid), lbknum, 1);
    }
 
-
-   /* adjust active scans */
-   gistadjscans(r, GISTOP_SPLIT, BufferGetBlockNumber(buffer), FirstOffsetNumber);
-
    /* !!! pfree */
    pfree(rvectup);
    pfree(lvectup);