Example #1
0
        public static Tree Create(LowLevelTransaction llt, Transaction tx, TreeFlags flags = TreeFlags.None, RootObjectType type = RootObjectType.VariableSizeTree, PageLocator pageLocator = null)
        {
            if (type != RootObjectType.VariableSizeTree && type != RootObjectType.Table)
            {
                throw new ArgumentException($"Only valid types are {nameof(RootObjectType.VariableSizeTree)} or {nameof(RootObjectType.Table)}.", nameof(type));
            }

            var newRootPage = AllocateNewPage(llt, TreePageFlags.Leaf, 1);
            var tree        = new Tree(llt, tx, newRootPage.PageNumber, pageLocator)
            {
                _state =
                {
                    RootObjectType = type,
                    Depth          =     1,
                    Flags          = flags,
                }
            };

            if ((flags & TreeFlags.LeafsCompressed) == TreeFlags.LeafsCompressed)
            {
                tree.InitializeCompression();
            }

            tree.State.RecordNewPage(newRootPage, 1);
            return(tree);
        }
Example #2
0
        public static Tree Create(Transaction tx, SliceComparer cmp, TreeFlags flags = TreeFlags.None)
        {
            var newRootPage = NewPage(tx, PageFlags.Leaf, 1);
            var tree        = new Tree(cmp, newRootPage.PageNumber)
            {
                _state =
                {
                    Depth = 1,
                    Flags = flags
                }
            };
            var txInfo = tx.GetTreeInformation(tree);

            txInfo.RecordNewPage(newRootPage, 1);
            return(tree);
        }
Example #3
0
		public static Tree Create(Transaction tx, SliceComparer cmp, TreeFlags flags = TreeFlags.None)
		{
			var newRootPage = NewPage(tx, PageFlags.Leaf, 1);
			var tree = new Tree(cmp, newRootPage.PageNumber)
			{
				_state =
				{
					Depth = 1,
					Flags = flags,
                    InWriteTransaction = true
				}
			};
			
			tree.State.RecordNewPage(newRootPage, 1);
			return tree;
		}
Example #4
0
        public static Tree Create(Transaction tx, TreeFlags flags = TreeFlags.None)
        {
            var newRootPage = NewPage(tx, PageFlags.Leaf, 1);
            var tree        = new Tree(tx, newRootPage.PageNumber)
            {
                _state =
                {
                    Depth =     1,
                    Flags = flags,
                    InWriteTransaction = true
                }
            };

            tree.State.RecordNewPage(newRootPage, 1);
            return(tree);
        }
Example #5
0
        public static Tree Create(LowLevelTransaction llt, Transaction tx, TreeFlags flags = TreeFlags.None)
        {
            var newRootPage = AllocateNewPage(llt, TreePageFlags.Leaf, 1);
            var tree        = new Tree(llt, tx, newRootPage.PageNumber)
            {
                _state =
                {
                    Depth =     1,
                    Flags = flags,
                    InWriteTransaction = true,
                }
            };

            tree.State.RecordNewPage(newRootPage, 1);
            return(tree);
        }
Example #6
0
        public static Tree Create(Transaction tx, bool keysPrefixing, TreeFlags flags = TreeFlags.None)
        {
            var newRootPage = NewPage(tx, keysPrefixing ? PageFlags.Leaf | PageFlags.KeysPrefixed : PageFlags.Leaf, 1);
            var tree        = new Tree(tx, newRootPage.PageNumber)
            {
                _state =
                {
                    Depth =     1,
                    Flags = flags,
                    InWriteTransaction = true,
                    KeysPrefixing      = keysPrefixing
                }
            };

            tree.State.RecordNewPage(newRootPage, 1);
            return(tree);
        }
Example #7
0
        public static Tree Create(Transaction tx, bool keysPrefixing, TreeFlags flags = TreeFlags.None)
        {
            var newRootPage = NewPage(tx, keysPrefixing ? PageFlags.Leaf | PageFlags.KeysPrefixed : PageFlags.Leaf, 1);
            var tree = new Tree(tx, newRootPage.PageNumber)
            {
                _state =
                {
                    Depth = 1,
                    Flags = flags,
                    InWriteTransaction = true,
                    KeysPrefixing = keysPrefixing
                }
            };

            tree.State.RecordNewPage(newRootPage, 1);
            return tree;
        }
Example #8
0
        public static Tree Create(Transaction tx, bool keysPrefixing, TreeFlags flags = TreeFlags.None)
        {
            var globalKeysPrefixingSetting = (CallContext.GetData("Voron/Trees/KeysPrefixing") as bool?);

            if (globalKeysPrefixingSetting != null)
            {
                keysPrefixing = globalKeysPrefixingSetting.Value;
            }

            var newRootPage = tx.AllocatePage(1, keysPrefixing ? PageFlags.Leaf | PageFlags.KeysPrefixed : PageFlags.Leaf);
            var tree        = new Tree(tx, newRootPage.PageNumber)
            {
                _state =
                {
                    Depth =     1,
                    Flags = flags,
                    InWriteTransaction = true,
                    KeysPrefixing      = keysPrefixing
                }
            };

            tree.State.RecordNewPage(newRootPage, 1);
            return(tree);
        }
Example #9
0
        public Tree CreateTree(Slice name, RootObjectType type = RootObjectType.VariableSizeTree, TreeFlags flags = TreeFlags.None, bool isIndexTree = false, NewPageAllocator newPageAllocator = null)
        {
            Tree tree = ReadTree(name, type, isIndexTree, newPageAllocator);

            if (tree != null)
            {
                return(tree);
            }

            if (_lowLevelTransaction.Flags == TransactionFlags.ReadWrite == false)
            {
                throw new InvalidOperationException("No such tree: '" + name +
                                                    "' and cannot create trees in read transactions");
            }

            tree = Tree.Create(_lowLevelTransaction, this, name, flags);
            tree.State.RootObjectType = type;

            byte *ptr;

            using (_lowLevelTransaction.RootObjects.DirectAdd(name, sizeof(TreeRootHeader), out ptr))
                tree.State.CopyTo((TreeRootHeader *)ptr);

            tree.State.IsModified = true;
            AddTree(name, tree);

            return(tree);
        }
Example #10
0
 public Tree CreateTree(string name, RootObjectType type = RootObjectType.VariableSizeTree, TreeFlags flags = TreeFlags.None, bool isIndexTree = false, NewPageAllocator newPageAllocator = null)
 {
     Slice.From(Allocator, name, ByteStringType.Immutable, out var treeNameSlice);
     return(CreateTree(treeNameSlice, type, flags, isIndexTree, newPageAllocator));
 }
Example #11
0
        public static Tree Create(LowLevelTransaction llt, Transaction tx, Slice name, TreeFlags flags = TreeFlags.None, RootObjectType type = RootObjectType.VariableSizeTree,
                                  bool isIndexTree = false, NewPageAllocator newPageAllocator = null)
        {
            if (type != RootObjectType.VariableSizeTree && type != RootObjectType.Table)
            {
                ThrowInvalidTreeCreateType();
            }

            var newPage = newPageAllocator?.AllocateSinglePage(0) ?? llt.AllocatePage(1);

            TreePage newRootPage = PrepareTreePage(TreePageFlags.Leaf, 1, newPage);

            var tree = new Tree(llt, tx, newRootPage.PageNumber, name, isIndexTree, newPageAllocator)
            {
                _state =
                {
                    RootObjectType = type,
                    Depth          =     1,
                    Flags          = flags,
                }
            };

            if ((flags & TreeFlags.LeafsCompressed) == TreeFlags.LeafsCompressed)
            {
                tree.InitializeCompression();
            }

            tree.State.RecordNewPage(newRootPage, 1);
            return(tree);
        }
Example #12
0
        public Tree CreateTree(Slice name, RootObjectType type = RootObjectType.VariableSizeTree, TreeFlags flags = TreeFlags.None, PageLocator pageLocator = null)
        {
            Tree tree = ReadTree(name, type, pageLocator);

            if (tree != null)
            {
                return(tree);
            }

            if (_lowLevelTransaction.Flags == TransactionFlags.ReadWrite == false)
            {
                throw new InvalidOperationException("No such tree: '" + name +
                                                    "' and cannot create trees in read transactions");
            }

            tree      = Tree.Create(_lowLevelTransaction, this, flags, pageLocator: pageLocator);
            tree.Name = name;
            tree.State.RootObjectType = type;

            var space = (TreeRootHeader *)_lowLevelTransaction.RootObjects.DirectAdd(name, sizeof(TreeRootHeader));

            tree.State.CopyTo(space);

            tree.State.IsModified = true;
            AddTree(name, tree);

            return(tree);
        }
Example #13
0
        public Tree CreateTree(string name, RootObjectType type = RootObjectType.VariableSizeTree, TreeFlags flags = TreeFlags.None, PageLocator pageLocator = null)
        {
            Slice treeNameSlice;

            Slice.From(Allocator, name, ByteStringType.Immutable, out treeNameSlice);
            return(CreateTree(treeNameSlice, type, flags, pageLocator));
        }