Exemplo n.º 1
0
        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;
 }
Exemplo n.º 3
0
 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;
 }
Exemplo n.º 4
0
 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
         }
     });
 }
Exemplo n.º 5
0
 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)
         }
     });
 }
Exemplo n.º 6
0
 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),
         }
     });
 }
Exemplo n.º 7
0
 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
         }
     });
 }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
 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);
 }