]> granicus.if.org Git - postgresql/commitdiff
Re-use free space on index pages with duplicates.
authorVadim B. Mikheev <vadim4o@yahoo.com>
Mon, 9 Aug 1999 01:39:19 +0000 (01:39 +0000)
committerVadim B. Mikheev <vadim4o@yahoo.com>
Mon, 9 Aug 1999 01:39:19 +0000 (01:39 +0000)
src/backend/access/nbtree/nbtinsert.c

index 3827e7db29d401ed0700565188ad47b71b84761c..94e1d0ccbb1942a2da672c7b1d4f4b0ae8a71c9e 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.49 1999/07/19 07:07:19 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.50 1999/08/09 01:39:19 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -392,17 +392,18 @@ _bt_insertonpg(Relation rel,
                bool            is_root = lpageop->btpo_flags & BTP_ROOT;
 
                /*
-                * If we have to split leaf page in the chain of duplicates by new
-                * duplicate then we try to look at our right sibling first.
+                * Instead of splitting leaf page in the chain of duplicates 
+                * by new duplicate, insert it into some right page.
                 */
                if ((lpageop->btpo_flags & BTP_CHAIN) &&
                        (lpageop->btpo_flags & BTP_LEAF) && keys_equal)
                {
-                       bool            use_left = true;
-
                        rbuf = _bt_getbuf(rel, lpageop->btpo_next, BT_WRITE);
                        rpage = BufferGetPage(rbuf);
                        rpageop = (BTPageOpaque) PageGetSpecialPointer(rpage);
+                       /* 
+                        * some checks 
+                        */
                        if (!P_RIGHTMOST(rpageop))      /* non-rightmost page */
                        {                                       /* If we have the same hikey here then
                                                                 * it's yet another page in chain. */
@@ -418,32 +419,20 @@ _bt_insertonpg(Relation rel,
                                                                         BTGreaterStrategyNumber))
                                        elog(FATAL, "btree: hikey is out of order");
                                else if (rpageop->btpo_flags & BTP_CHAIN)
-
                                        /*
                                         * If hikey > scankey then it's last page in chain and
                                         * BTP_CHAIN must be OFF
                                         */
                                        elog(FATAL, "btree: lost last page in the chain of duplicates");
-
-                               /* if there is room here then we use this page. */
-                               if (PageGetFreeSpace(rpage) > itemsz)
-                                       use_left = false;
                        }
                        else
 /* rightmost page */
                        {
                                Assert(!(rpageop->btpo_flags & BTP_CHAIN));
-                               /* if there is room here then we use this page. */
-                               if (PageGetFreeSpace(rpage) > itemsz)
-                                       use_left = false;
-                       }
-                       if (!use_left)          /* insert on the right page */
-                       {
-                               _bt_relbuf(rel, buf, BT_WRITE);
-                               return (_bt_insertonpg(rel, rbuf, stack, keysz,
-                                                                          scankey, btitem, afteritem));
                        }
-                       _bt_relbuf(rel, rbuf, BT_WRITE);
+                       _bt_relbuf(rel, buf, BT_WRITE);
+                       return (_bt_insertonpg(rel, rbuf, stack, keysz,
+                                                                  scankey, btitem, afteritem));
                }
 
                /*