Inheritance: IVirtualPager
Example #1
0
 public PagerState(AbstractPager pager)
 {
     _pager = pager;
     #if DEBUG_PAGER_STATE
     Instances[this] = new StackTrace(true);
     #endif
 }
Example #2
0
        public static int WritePage(this AbstractPager pager, Page page, long?pageNumber = null)
        {
            var startPage = pageNumber ?? page.PageNumber;

            var toWrite = page.IsOverflow ? pager.GetNumberOfOverflowPages(page.OverflowSize) : 1;

            return(pager.WriteDirect(page.Pointer, startPage, toWrite));
        }
Example #3
0
        public CryptoPager(AbstractPager inner) : base(inner.Options, inner.UsePageProtection)
        {
            if (inner.Options.EncryptionEnabled == false)
            {
                throw new InvalidOperationException("Cannot use CryptoPager if EncryptionEnabled is false (no key defined)");
            }

            Inner = inner;
            _encryptionBuffersPool = new EncryptionBuffersPool();
            _masterKey             = inner.Options.MasterKey;

            UniquePhysicalDriveId = Inner.UniquePhysicalDriveId;
            FileName                 = inner.FileName;
            _pagerState              = inner.PagerState;
            inner.PagerStateChanged += state => _pagerState = state;
        }
Example #4
0
        public static byte *AcquirePagePointerWithOverflowHandling <T>(this AbstractPager pager, T tx, long pageNumber) where T : IPagerLevelTransactionState
        {
            // Case 1: Page is not overflow ==> no problem, returning a pointer to existing mapping
            var pageHeader = (PageHeader *)pager.AcquirePagePointer(tx, pageNumber);

            if ((pageHeader->Flags & PageFlags.Overflow) != PageFlags.Overflow)
            {
                return((byte *)pageHeader);
            }

            // Case 2: Page is overflow and already mapped large enough ==> no problem, returning a pointer to existing mapping
            if (pager.EnsureMapped(tx, pageNumber, GetNumberOfOverflowPages(pageHeader->OverflowSize)) == false)
            {
                return((byte *)pageHeader);
            }

            // Case 3: Page is overflow and was ensuredMapped above, view was re-mapped so we need to acquire a pointer to the new mapping.
            return(pager.AcquirePagePointer(tx, pageNumber));
        }
Example #5
0
 public static bool WillRequireExtension(this AbstractPager pager, long requestedPageNumber, int numberOfPages)
 {
     return(requestedPageNumber + numberOfPages > pager.NumberOfAllocatedPages);
 }
Example #6
0
 public static Page ReadPage(this AbstractPager pager, LowLevelTransaction tx, long pageNumber, PagerState pagerState = null)
 {
     return(new Page(pager.AcquirePagePointer(tx, pageNumber, pagerState), pager));
 }
Example #7
0
 public static int GetNumberOfOverflowPages(this AbstractPager pager, int overflowSize)
 {
     overflowSize += Constants.TreePageHeaderSize;
     return((overflowSize / pager.PageSize) + (overflowSize % pager.PageSize == 0 ? 0 : 1));
 }
Example #8
0
 public static TreePage Read(this AbstractPager pager, LowLevelTransaction tx, long pageNumber, PagerState pagerState = null)
 {
     return(new TreePage(pager.AcquirePagePointer(tx, pageNumber, pagerState), pager.DebugInfo, pager.PageSize));
 }
Example #9
0
 public Simple4KbBatchWrites(AbstractPager abstractPager)
 {
     _abstractPager = abstractPager;
     _pagerState    = _abstractPager.GetPagerStateAndAddRefAtomically();
 }
 public static int GetNumberOfOverflowPages(this AbstractPager pager, long overflowSize)
 {
     overflowSize += Constants.Tree.PageHeaderSize;
     return(checked ((int)(overflowSize / pager.PageSize) + (overflowSize % pager.PageSize == 0 ? 0 : 1)));
 }
 public static int GetNumberOfPages(this AbstractPager pager, Page page)
 {
     return(page.IsOverflow ? pager.GetNumberOfOverflowPages(page.OverflowSize) : 1);
 }