Example #1
0
        private void RemoveLeafNode(Transaction tx, Cursor cursor, Page page)
        {
            var node = page.GetNode(page.LastSearchPosition);

            if (node->Flags == (NodeFlags.PageRef)) // this is an overflow pointer
            {
                var overflowPage  = tx.GetReadOnlyPage(node->PageNumber);
                var numberOfPages = GetNumberOfOverflowPages(tx, overflowPage.OverflowSize);
                for (int i = 0; i < numberOfPages; i++)
                {
                    tx.FreePage(overflowPage.PageNumber + i);
                }
                var txInfo = tx.GetTreeInformation(this);

                txInfo.State.OverflowPages -= numberOfPages;
                txInfo.State.PageCount     -= numberOfPages;
            }
            page.RemoveNode(page.LastSearchPosition);
            cursor.DecrementItemCount();
        }