public PagerState(AbstractPager pager) { _pager = pager; #if DEBUG_PAGER_STATE Instances[this] = new StackTrace(true); #endif }
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)); }
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; }
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)); }
public static bool WillRequireExtension(this AbstractPager pager, long requestedPageNumber, int numberOfPages) { return(requestedPageNumber + numberOfPages > pager.NumberOfAllocatedPages); }
public static Page ReadPage(this AbstractPager pager, LowLevelTransaction tx, long pageNumber, PagerState pagerState = null) { return(new Page(pager.AcquirePagePointer(tx, pageNumber, pagerState), pager)); }
public static int GetNumberOfOverflowPages(this AbstractPager pager, int overflowSize) { overflowSize += Constants.TreePageHeaderSize; return((overflowSize / pager.PageSize) + (overflowSize % pager.PageSize == 0 ? 0 : 1)); }
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)); }
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); }