NDB.Node.merge C# (CSharp) Method

merge() public method

public merge ( Node rootNode ) : List
rootNode Node
return List
        public List<Node> merge(Node rootNode)
        {
            List<Node> conflicts = new List<Node>();
            bool finished = false;
            int currentVersion = 1;
            Console.WriteLine("Starting merge: ");

            do
            {
                Console.WriteLine("Merge version: " + Convert.ToString(currentVersion));

                Node node = rootNode.getVersion(Convert.ToString(currentVersion));

                if (node == null)
                {
                    Console.WriteLine("Merge complete..");
                    finished = true;
                }
                else
                {

                    if (revision.ContainsKey(Convert.ToString(currentVersion)))
                    {
                        Console.WriteLine("Target contains same version as source ...");
                        Console.WriteLine("Source contains: " + revision[Convert.ToString(currentVersion)].rev_id);
                        Console.WriteLine("Target contains: " + node.rev_id);

                        if (revision[Convert.ToString(currentVersion)].rev_id != node.rev_id)
                        {
                            // Conflict - two version of the same value exist
                            Console.WriteLine("Conflict detected: " + node.rev_id);

                            // work out which has the longer tail - this will take priority
                            conflicts.Add(node);
                        }

                    }
                    else
                    {
                        // Version does not exist - add the whole subtree (potentially)
                        Console.WriteLine("New version being added: " + node.rev_id);
                        this.addVersion(Convert.ToString(currentVersion - 1), node);
                    }

                }

                currentVersion++;

            } while (!finished);

            return conflicts;
        }

Usage Example

コード例 #1
0
ファイル: NodeTest.cs プロジェクト: Kirosoft/NouchDB
        public void Test2()
        {
            // Test case 2 - merge with conflicting edits
            var rootNode1 = new Node("docId","data",0);
            rootNode1.addVersion("data1",1);
            rootNode1.addVersion("data2",2);
            //Console.WriteLine(rootNode1.toString());

            var rootNode2 = new Node("docId2", "data",3);
            rootNode2.addVersion("data1",4);
            rootNode2.addVersion("rootnode2-data2",5);
            rootNode2.addVersion("rootnode2-data3",6);
            //Console.WriteLine(rootNode2.toString());

            List<Node> conflicts = rootNode1.merge(rootNode2);

            Console.WriteLine();
            Console.WriteLine("Conflicts");
            Console.WriteLine("=========");

            foreach (Node node in conflicts)
            {
                Console.WriteLine(node.rev_id);
            }

            Console.WriteLine();
            Console.WriteLine("Result");
            Console.WriteLine("======");

            //Console.WriteLine(rootNode1.toString());

            Console.WriteLine(new[] { 1, 2, 3 }.ToJson());
            Console.WriteLine(rootNode1.revision.ToJson<Dictionary<string, Node>>());
            //Console.WriteLine(rootNode1.ToString());
        }