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 27111b42e25facadc1ade31ea7fa66252821a0f8..509fe0feeeb9fb2d333761912e2b3d7a84763c48 100644 (file)
@@ -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);