Exemplo n.º 1
0
        internal void FreePage(TreePage p)
        {
            PageFreed?.Invoke(p.PageNumber);

            if (p.IsOverflow)
            {
                var numberOfPages = _llt.DataPager.GetNumberOfOverflowPages(p.OverflowSize);
                for (int i = 0; i < numberOfPages; i++)
                {
                    _llt.FreePage(p.PageNumber + i);
                }

                State.RecordFreedPage(p, numberOfPages);
            }
            else
            {
                _llt.FreePage(p.PageNumber);
                State.RecordFreedPage(p, 1);
            }
        }
Exemplo n.º 2
0
        internal void FreePage(TreePage p)
        {
#if VALIDATE
            p.Freed = true;
#endif
            PageFreed?.Invoke(p.PageNumber, p.Flags);

            if (p.IsOverflow)
            {
                var numberOfPages = VirtualPagerLegacyExtensions.GetNumberOfOverflowPages(p.OverflowSize);
                for (int i = 0; i < numberOfPages; i++)
                {
                    _llt.FreePage(p.PageNumber + i);
                }

                State.RecordFreedPage(p, numberOfPages);
            }
            else
            {
                if (_newPageAllocator != null)
                {
                    if (IsIndexTree == false)
                    {
                        ThrowAttemptToFreePageToNewPageAllocator(Name, p.PageNumber);
                    }

                    _newPageAllocator.FreePage(p.PageNumber);
                }
                else
                {
                    if (IsIndexTree)
                    {
                        ThrowAttemptToFreeIndexPageToFreeSpaceHandling(Name, p.PageNumber);
                    }

                    _llt.FreePage(p.PageNumber);
                }

                State.RecordFreedPage(p, 1);
            }
        }