Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit139858e

Browse files
committed
If we have to split leaf page in the chain of duplicates
then we try to look at our right sibling first, but not farther,as it was in yesterday fix.
1 parent5cf5573 commit139858e

File tree

1 file changed

+24
-41
lines changed

1 file changed

+24
-41
lines changed

‎src/backend/access/nbtree/nbtinsert.c

Lines changed: 24 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.13 1997/05/30 18:35:31 vadim Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.14 1997/05/31 06:35:56 vadim Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -287,31 +287,22 @@ _bt_insertonpg(Relation rel,
287287

288288
/*
289289
* If we have to split leaf page in the chain of duplicates
290-
* then we try tomove righter to avoid splitting.
290+
* then we try tolook at our right sibling first.
291291
*/
292292
if ( (lpageop->btpo_flags&BTP_CHAIN )&&
293293
(lpageop->btpo_flags&BTP_LEAF ) )
294294
{
295295
booluse_left= true;
296+
boolkeys_equal= false;
296297

297-
for ( ; ; )
298-
{
299-
boolkeys_equal= false;
300-
301-
rbuf=_bt_getbuf(rel,lpageop->btpo_next,BT_WRITE);
302-
rpage=BufferGetPage(rbuf);
303-
rpageop= (BTPageOpaque)PageGetSpecialPointer(rpage);
304-
if (P_RIGHTMOST (rpageop) )
305-
{
306-
Assert ( !(rpageop->btpo_flags&BTP_CHAIN ) );
307-
use_left= false;
308-
break;
309-
}
310-
/*
298+
rbuf=_bt_getbuf(rel,lpageop->btpo_next,BT_WRITE);
299+
rpage=BufferGetPage(rbuf);
300+
rpageop= (BTPageOpaque)PageGetSpecialPointer(rpage);
301+
if ( !P_RIGHTMOST (rpageop) )/* non-rightmost page */
302+
{/*
311303
* If we have the same hikey here then it's
312-
* yet another page in chain and we may move
313-
* even righter.
314-
*/
304+
* yet another page in chain.
305+
*/
315306
if (_bt_skeycmp (rel,keysz,scankey,rpage,
316307
PageGetItemId(rpage,P_HIKEY),
317308
BTEqualStrategyNumber) )
@@ -321,12 +312,12 @@ _bt_insertonpg(Relation rel,
321312
keys_equal= true;
322313
}
323314
elseif (_bt_skeycmp (rel,keysz,scankey,rpage,
324-
PageGetItemId(rpage,P_HIKEY),
325-
BTGreaterStrategyNumber) )
326-
elog (FATAL,"btree: hikey is out of order");
315+
PageGetItemId(rpage,P_HIKEY),
316+
BTGreaterStrategyNumber) )
317+
elog (FATAL,"btree: hikey is out of order");
327318
/*
328319
* If hikey > scankey and BTP_CHAIN is ON
329-
* then it's first page of the chain of higher keys:
320+
* then it's first page of the chain of higher keys:
330321
* our left sibling hikey was lying! We can't add new
331322
* item here, but we can turn BTP_CHAIN off on our
332323
* left page and overwrite its hikey.
@@ -336,26 +327,19 @@ _bt_insertonpg(Relation rel,
336327
BTItemtmp;
337328

338329
lpageop->btpo_flags &= ~BTP_CHAIN;
339-
tmp= (BTItem)PageGetItem(rpage,
340-
PageGetItemId(rpage,P_HIKEY));
330+
tmp= (BTItem)PageGetItem(rpage,PageGetItemId(rpage,P_HIKEY));
341331
hiRightItem=_bt_formitem(&(tmp->bti_itup));
342-
break;
343332
}
344-
/*
345-
* if there is room here or hikey > scankey (so it's our
346-
* last page in the chain and we can't move righter)
347-
* we have to use this page .
348-
*/
349-
if (PageGetFreeSpace (rpage)>itemsz|| !keys_equal )
350-
{
333+
/* if there is room here then we use this page. */
334+
elseif (PageGetFreeSpace (rpage)>itemsz )
335+
use_left= false;
336+
}
337+
else/* rightmost page */
338+
{
339+
Assert ( !(rpageop->btpo_flags&BTP_CHAIN ) );
340+
/* if there is room here then we use this page. */
341+
if (PageGetFreeSpace (rpage)>itemsz )
351342
use_left= false;
352-
break;
353-
}
354-
/* try to move righter */
355-
_bt_relbuf(rel,buf,BT_WRITE);
356-
buf=rbuf;
357-
page=rpage;
358-
lpageop=rpageop;
359343
}
360344
if ( !use_left )/* insert on the right page */
361345
{
@@ -364,7 +348,6 @@ _bt_insertonpg(Relation rel,
364348
scankey,btitem,afteritem) );
365349
}
366350
_bt_relbuf(rel,rbuf,BT_WRITE);
367-
bknum=BufferGetBlockNumber(buf);
368351
}
369352

370353
/* split the buffer into left and right halves */

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp