public static Tree Open(LowLevelTransaction llt, Transaction tx, Slice name, TreeRootHeader *header, RootObjectType type = RootObjectType.VariableSizeTree, bool isIndexTree = false, NewPageAllocator newPageAllocator = null) { var tree = new Tree(llt, tx, header->RootPageNumber, name, isIndexTree, newPageAllocator) { _state = { RootObjectType = type, PageCount = header->PageCount, BranchPages = header->BranchPages, Depth = header->Depth, OverflowPages = header->OverflowPages, LeafPages = header->LeafPages, NumberOfEntries = header->NumberOfEntries, Flags = header->Flags } }; if ((tree.State.Flags & TreeFlags.LeafsCompressed) == TreeFlags.LeafsCompressed) { tree.InitializeCompression(); } return(tree); }
public void CopyTo(TreeRootHeader *header) { header->Flags = Flags; header->BranchPages = BranchPages; header->Depth = Depth; header->LeafPages = LeafPages; header->OverflowPages = OverflowPages; header->PageCount = PageCount; header->EntriesCount = EntriesCount; header->RootPageNumber = RootPageNumber; }
public void CopyTo(TreeRootHeader *header) { header->RootObjectType = RootObjectType.VariableSizeTree; header->Flags = Flags; header->BranchPages = BranchPages; header->Depth = Depth; header->LeafPages = LeafPages; header->OverflowPages = OverflowPages; header->PageCount = PageCount; header->NumberOfEntries = NumberOfEntries; header->RootPageNumber = RootPageNumber; }
public static Tree Open(Transaction tx, SliceComparer cmp, TreeRootHeader *header) { return(new Tree(cmp, header->RootPageNumber) { _state = { PageCount = header->PageCount, BranchPages = header->BranchPages, Depth = header->Depth, OverflowPages = header->OverflowPages, LeafPages = header->LeafPages, EntriesCount = header->EntriesCount, Flags = header->Flags } }); }
public static Tree Open(Transaction tx, TreeRootHeader *header) { return(new Tree(tx, header->RootPageNumber) { _state = { PageCount = header->PageCount, BranchPages = header->BranchPages, Depth = header->Depth, OverflowPages = header->OverflowPages, LeafPages = header->LeafPages, EntriesCount = header->EntriesCount, Flags = header->Flags, InWriteTransaction = tx.Flags.HasFlag(TransactionFlags.ReadWrite) } }); }
public static Tree Open(LowLevelTransaction llt, Transaction tx, TreeRootHeader *header) { return(new Tree(llt, tx, header->RootPageNumber) { _state = { PageCount = header->PageCount, BranchPages = header->BranchPages, Depth = header->Depth, OverflowPages = header->OverflowPages, LeafPages = header->LeafPages, NumberOfEntries = header->NumberOfEntries, Flags = header->Flags, InWriteTransaction = (llt.Flags == TransactionFlags.ReadWrite), } }); }
public static Tree Open(LowLevelTransaction llt, Transaction tx, TreeRootHeader *header, RootObjectType type = RootObjectType.VariableSizeTree, PageLocator pageLocator = null) { return(new Tree(llt, tx, header->RootPageNumber, pageLocator) { _state = { RootObjectType = type, PageCount = header->PageCount, BranchPages = header->BranchPages, Depth = header->Depth, OverflowPages = header->OverflowPages, LeafPages = header->LeafPages, NumberOfEntries = header->NumberOfEntries, Flags = header->Flags } }); }
public Tree ReadTree(Slice treeName, RootObjectType type = RootObjectType.VariableSizeTree, bool isIndexTree = false, NewPageAllocator newPageAllocator = null) { EnsureTrees(); Tree tree; if (_trees.TryGetValue(treeName, out tree)) { if (newPageAllocator == null) { return(tree); } if (tree.HasNewPageAllocator == false) { tree.SetNewPageAllocator(newPageAllocator); } return(tree); } TreeRootHeader *header = (TreeRootHeader *)_lowLevelTransaction.RootObjects.DirectRead(treeName); if (header != null) { if (header->RootObjectType != type) { ThrowInvalidTreeType(treeName, type, header); } tree = Tree.Open(_lowLevelTransaction, this, treeName, header, type, isIndexTree, newPageAllocator); if ((tree.State.Flags & TreeFlags.LeafsCompressed) == TreeFlags.LeafsCompressed) { tree.InitializeCompression(); } _trees.Add(treeName, tree); return(tree); } _trees.Add(treeName, null); return(null); }
public Tree ReadTree(Slice treeName, RootObjectType type = RootObjectType.VariableSizeTree, PageLocator pageLocator = null) { EnsureTrees(); Tree tree; if (_trees.TryGetValue(treeName, out tree)) { return(tree); } TreeRootHeader *header = (TreeRootHeader *)_lowLevelTransaction.RootObjects.DirectRead(treeName); if (header != null) { if (header->RootObjectType != type) { throw new InvalidOperationException($"Tried to open {treeName} as a {type}, but it is actually a " + header->RootObjectType); } tree = Tree.Open(_lowLevelTransaction, this, header, type, pageLocator); tree.Name = treeName; if ((tree.State.Flags & TreeFlags.LeafsCompressed) == TreeFlags.LeafsCompressed) { tree.InitializeCompression(); } _trees.Add(treeName, tree); return(tree); } _trees.Add(treeName, null); return(null); }
private static void ThrowInvalidTreeType(Slice treeName, RootObjectType type, TreeRootHeader *header) { throw new InvalidOperationException($"Tried to open {treeName} as a {type}, but it is actually a " + header->RootObjectType); }