public static void Test03() { var intNode = new InternalNode(); intNode.AddNode(100, 5); intNode.AddNode(101, 10); intNode.AddNode(102, 15); intNode.AddNode(103, 20); intNode.AddNode(104, 25); intNode.AddNode(105, 30); var split = intNode.Split(); Console.WriteLine(intNode.GetPageIndexForKey(28)); Console.WriteLine(split.GetPageIndexForKey(28)); var leafNode = new LeafNode(); leafNode.AddDataRow(50, new byte[] { 1 }); leafNode.AddDataRow(100, new byte[] { 2 }); leafNode.AddDataRow(150, new byte[] { 3 }); leafNode.AddDataRow(200, new byte[] { 4 }); leafNode.AddDataRow(250, new byte[] { 5 }); leafNode.AddDataRow(300, new byte[] { 6 }); leafNode.AddDataRow(350, new byte[] { 7 }); leafNode.AddDataRow(400, new byte[] { 8 }); Console.WriteLine(leafNode.GetDataRow(350)[0]); var leafSplit = leafNode.Split(); Console.WriteLine(leafNode.GetDataRow(350)[0]); Console.WriteLine(leafSplit.GetDataRow(350).ByteCount); }
public static void Test05() { using (var dbFile = MemoryMappedFile.CreateFromFile("Db", FileMode.OpenOrCreate, "Db", Constants.DbMaxSize)) { Pager.Init(dbFile); var reader = new BinaryReader(dbFile.CreateViewStream(0, Constants.PageSize)); var data = reader.ReadBytes(Constants.PageSize); var root = new InternalNode(0, data); var bTree = new BTree(root); data = bTree.GetData(876726186).ProduceByteArray(); Console.WriteLine(data[3]); } }
public static void Test02() { var node = new InternalNode(); node.AddNode(100, 5); node.AddNode(101, 10); node.AddNode(102, 15); node.AddNode(103, 20); node.AddNode(104, 25); node.AddNode(105, 30); node.AddNode(106, 28); Console.WriteLine(node.GetPageIndexForKey(18)); var serialized = node.Serialize(); node = new InternalNode(5, serialized); Console.WriteLine(node.GetPageIndexForKey(18)); }
// Split off and return the lower half in a new node // We split off the lower half so that data about the upper key value of this node does not change public InternalNode Split() { var nodeCount = upperKeyValues.Count / 2; var splitKeys = new NodeKey[nodeCount]; upperKeyValues.CopyTo(splitKeys, 0, nodeCount); var splitNode = new InternalNode(); foreach (var upperKey in splitKeys) { splitNode.AddNode(nodeIndices[upperKey], upperKey); nodeIndices.Remove(upperKey); upperKeyValues.Remove(upperKey); } return(splitNode); }
private InternalNode GetParentNode(Stack <InternalNode> nodeStack, InternalNode currentInternalNode) { if (nodeStack.Count != 0) { return(nodeStack.Pop()); } else // The root node has been reached, create a new root node, however the index of the root should always remain the same { var rootIndex = currentInternalNode.PageIndex; nodeCache.Remove(rootIndex); currentInternalNode.PageIndex = pager.NewNodeIndex(); nodeCache.Add(currentInternalNode.PageIndex, currentInternalNode); root = new InternalNode(); root.PageIndex = rootIndex; nodeCache.Add(root.PageIndex, root); ((InternalNode)root).AddNode(currentInternalNode.PageIndex, currentInternalNode.GetLargestKey()); return((InternalNode)root); } }