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); }
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); }
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; }
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); }
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); }
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); }
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; }
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); }
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); }
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)); }
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); }
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); }
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)); }