public List <long> AllPages() { var results = new List <long>(); var stack = new Stack <Page>(); var root = _tx.GetReadOnlyPage(State.RootPageNumber); stack.Push(root); while (stack.Count > 0) { var p = stack.Pop(); results.Add(p.PageNumber); var key = p.CreateNewEmptyKey(); for (int i = 0; i < p.NumberOfEntries; i++) { var node = p.GetNode(i); var pageNumber = node->PageNumber; if (p.IsBranch) { stack.Push(_tx.GetReadOnlyPage(pageNumber)); } else if (node->Flags == NodeFlags.PageRef) { // This is an overflow page var overflowPage = _tx.GetReadOnlyPage(pageNumber); var numberOfPages = _tx.DataPager.GetNumberOfOverflowPages(overflowPage.OverflowSize); for (long j = 0; j < numberOfPages; ++j) { results.Add(overflowPage.PageNumber + j); } } else if (node->Flags == NodeFlags.MultiValuePageRef) { // this is a multi value p.SetNodeKey(node, ref key); var tree = OpenMultiValueTree(_tx, (Slice)key, node); results.AddRange(tree.AllPages()); } else { if (State.Flags.HasFlag(TreeFlags.FixedSizeTrees)) { var valueReader = NodeHeader.Reader(_tx, node); byte valueSize = *valueReader.Base; var fixedSizeTreeName = p.GetNodeKey(i); var fixedSizeTree = new FixedSizeTree(_tx, this, (Slice)fixedSizeTreeName, valueSize); var pages = fixedSizeTree.AllPages(); results.AddRange(pages); } } } } return(results); }
public ReadResult Read(Slice key) { Lazy <Cursor> lazy; NodeHeader * node; var p = FindPageFor(key, out node, out lazy); if (p.LastMatch != 0) { return(null); } return(new ReadResult(NodeHeader.Reader(_tx, node), node->Version)); }
public ReadResult Read(Slice key) { Lazy <Cursor> lazy; var p = FindPageFor(key, out lazy); if (p.LastMatch != 0) { return(null); } var node = p.GetNode(p.LastSearchPosition); return(new ReadResult(NodeHeader.Reader(_tx, node), node->Version)); }
public StructureReader <T> ReadStructForCurrent <T>(StructureSchema <T> schema) { var valueReader = NodeHeader.Reader(_tx, Current); return(new StructureReader <T>(valueReader.Base, schema)); }
public ValueReader CreateReaderForCurrent() { return(NodeHeader.Reader(_tx, Current)); }