summaryrefslogtreecommitdiff
path: root/src/backend/access/nbtree/nbtinsert.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2003-02-21 18:24:54 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2003-02-21 18:24:54 +0000
commita78e12f96aad5e89a44d9725c95bda0866a228f3 (patch)
tree8e25451c0c22f94a4940e26d21b287ea8ed25a1c /src/backend/access/nbtree/nbtinsert.c
parent2bba78d605d8f71f5e60c63ea66afa43d4e24280 (diff)
Repair nasty oversight in bt_split: if the index is temporary, we weren't
updating the left-link from the split page's right sibling. This could result in backwards index scans missing some entries. Same bug exists in HEAD, will be patched later.
Diffstat (limited to 'src/backend/access/nbtree/nbtinsert.c')
-rw-r--r--src/backend/access/nbtree/nbtinsert.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c
index 99011a5c958..ad52b0d3fad 100644
--- a/src/backend/access/nbtree/nbtinsert.c
+++ b/src/backend/access/nbtree/nbtinsert.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.96 2002/09/04 20:31:09 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.96.2.1 2003/02/21 18:24:54 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -699,6 +699,7 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright,
oopaque;
Buffer sbuf = 0;
Page spage = 0;
+ BTPageOpaque sopaque = 0;
Size itemsz;
ItemId itemid;
BTItem item;
@@ -862,6 +863,7 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright,
{
sbuf = _bt_getbuf(rel, ropaque->btpo_next, BT_WRITE);
spage = BufferGetPage(sbuf);
+ sopaque = (BTPageOpaque) PageGetSpecialPointer(spage);
}
/*
@@ -872,6 +874,9 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright,
*/
START_CRIT_SECTION();
+ if (!P_RIGHTMOST(ropaque))
+ sopaque->btpo_prev = BufferGetBlockNumber(rbuf);
+
/* XLOG stuff */
if (!rel->rd_istemp)
{
@@ -922,10 +927,6 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright,
if (!P_RIGHTMOST(ropaque))
{
- BTPageOpaque sopaque = (BTPageOpaque) PageGetSpecialPointer(spage);
-
- sopaque->btpo_prev = BufferGetBlockNumber(rbuf);
-
rdata[2].next = &(rdata[3]);
rdata[3].buffer = sbuf;
rdata[3].data = NULL;