Exemple #1
0
        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);
        }
Exemple #2
0
 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]);
     }
 }
Exemple #3
0
        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));
        }
Exemple #4
0
        // 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);
        }
Exemple #5
0
        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);
            }
        }