Example #1
0
        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);
        }
Example #2
0
        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));
        }
Example #3
0
        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));
        }
Example #4
0
        public StructureReader <T> ReadStructForCurrent <T>(StructureSchema <T> schema)
        {
            var valueReader = NodeHeader.Reader(_tx, Current);

            return(new StructureReader <T>(valueReader.Base, schema));
        }
Example #5
0
 public ValueReader CreateReaderForCurrent()
 {
     return(NodeHeader.Reader(_tx, Current));
 }