Ejemplo n.º 1
0
        public void Diff1ToDiff2ShouldBeState1ToState2Test(IDbStateReference dbState0, IDbStateReference dbState1, IDbStateReference dbState2)
        {
            var dbComparer = new DbComparer();
            var diff1      = dbComparer.GetDbDiff(dbState0, dbState1);
            var diff2      = dbComparer.GetDbDiff(dbState0, dbState2);
            var diff3      = dbComparer.GetDbDiff(dbState1, dbState2);
            var diffOfDiff = dbComparer.GetDbDiff(diff1, diff2);

            diffOfDiff.Should().Be(diff3);
        }
Ejemplo n.º 2
0
        public DbDiff GetDbDiff(IDbStateReference ref1, IDbStateReference ref2)
        {
            // TODO: Heavily improve performance/memory usage!!!
            var idList1            = ref1.GetBusinessIds().ToList();
            var idList2            = ref2.GetBusinessIds().ToList();
            var addIdList          = idList2.Except(idList1);
            var delIdList          = idList1.Except(idList2);
            var updIdCandidateList = idList1.Intersect(idList2);

            var diffEntryList = new List <DbDiffEntry>();
            var addList       = ref2.GetDbEntries()
                                .Where(e => addIdList.Contains(e.BusinessId))
                                .Select(e => new DbDiffEntry
            {
                DbEntryAfter = e
            })
                                .ToList();

            diffEntryList.AddRange(addList);
            var delList = ref1.GetDbEntries()
                          .Where(e => delIdList.Contains(e.BusinessId))
                          .Select(e => new DbDiffEntry
            {
                DbEntryBefore = e
            })
                          .ToList();

            diffEntryList.AddRange(delList);
            foreach (var updIdCandidate in updIdCandidateList)
            {
                var entry1 = ref1.GetDbEntries().Single(e => e.BusinessId == updIdCandidate);
                var entry2 = ref2.GetDbEntries().Single(e => e.BusinessId == updIdCandidate);
                if (!entry1.Equals(entry2))
                {
                    var dbDiffEntry = new DbDiffEntry
                    {
                        DbEntryBefore = entry1,
                        DbEntryAfter  = entry2
                    };
                    diffEntryList.Add(dbDiffEntry);
                }
            }
            diffEntryList.Sort();
            return(new DbDiff
            {
                DbDiffEntryList = diffEntryList
            });
        }