Beispiel #1
0
        internal TreePage NewPage(TreePageFlags flags, int num)
        {
            var page = AllocateNewPage(_llt, flags, num);

            State.RecordNewPage(page, num);

            PageModified?.Invoke(page.PageNumber);

            return(page);
        }
Beispiel #2
0
        private static TreePage AllocateNewPage(LowLevelTransaction tx, TreePageFlags flags, int num, long?pageNumber = null)
        {
            var page = tx.AllocatePage(num, pageNumber).ToTreePage();

            page.Flags     = PageFlags.VariableSizeTreePage | (num == 1 ? PageFlags.Single : PageFlags.Overflow);
            page.Lower     = (ushort)Constants.TreePageHeaderSize;
            page.TreeFlags = flags;
            page.Upper     = (ushort)page.PageSize;
            page.Dirty     = true;

            return(page);
        }
Beispiel #3
0
        internal TreePage NewPage(TreePageFlags flags, long nearbyPage)
        {
            var newPage = _newPageAllocator?.AllocateSinglePage(nearbyPage) ?? _llt.AllocatePage(1);

            var page = PrepareTreePage(flags, 1, newPage);

            State.RecordNewPage(page, 1);

            PageModified?.Invoke(page.PageNumber, page.Flags);

            return(page);
        }
Beispiel #4
0
        private static TreePage PrepareTreePage(TreePageFlags flags, int num, Page newPage)
        {
            var page = new TreePage(newPage.Pointer, Constants.Storage.PageSize)
            {
                Flags     = PageFlags.VariableSizeTreePage | (num == 1 ? PageFlags.Single : PageFlags.Overflow),
                Lower     = Constants.Tree.PageHeaderSize,
                TreeFlags = flags,
                Upper     = Constants.Storage.PageSize,
                Dirty     = true
            };

            return(page);
        }
Beispiel #5
0
        private static TreePage AllocateNewPage(LowLevelTransaction tx, TreePageFlags flags, int num, long?pageNumber = null)
        {
            var newPage = tx.AllocatePage(num, pageNumber);
            var page    = new TreePage(newPage.Pointer, tx.PageSize)
            {
                Flags     = PageFlags.VariableSizeTreePage | (num == 1 ? PageFlags.Single : PageFlags.Overflow),
                Lower     = (ushort)Constants.Tree.PageHeaderSize,
                TreeFlags = flags,
                Upper     = (ushort)tx.PageSize,
                Dirty     = true
            };

            return(page);
        }