Ejemplo n.º 1
0
        /// <summary>
        /// Delete one dataBlock
        /// </summary>
        public DataBlock Delete(CollectionPage col, PageAddress blockAddress)
        {
            // get page and mark as dirty
            var page  = _pager.GetPage <DataPage>(blockAddress.PageID, true);
            var block = page.DataBlocks[blockAddress.Index];

            // mark collection page as dirty
            _pager.SetDirty(col);

            // if there a extended page, delete all
            if (block.ExtendPageID != uint.MaxValue)
            {
                _pager.DeletePage(block.ExtendPageID, true);
            }

            // delete block inside page
            page.DataBlocks.Remove(block.Position.Index);

            // update freebytes + itemcount
            page.UpdateItemCount();

            // if there is no more datablocks, lets delete the page
            if (page.DataBlocks.Count == 0)
            {
                // first, remove from free list
                _pager.AddOrRemoveToFreeList(false, page, col, ref col.FreeDataPageID);

                _pager.DeletePage(page.PageID);
            }
            else
            {
                // add or remove to free list
                _pager.AddOrRemoveToFreeList(page.FreeBytes > DataPage.DATA_RESERVED_BYTES, page, col, ref col.FreeDataPageID);
            }

            col.DocumentCount--;

            return(block);
        }
Ejemplo n.º 2
0
 public static string Dump(this PageAddress address)
 {
     return(address.PageID.Dump() + ":" + address.Index.Dump());
 }
Ejemplo n.º 3
0
 public void Write(PageAddress value)
 {
     this.Write(value.PageID);
     this.Write(value.Index);
 }