コード例 #1
0
        public static bool CompareRavenJArrayData(this ICollection <DocumentsChanges> docChanges, RavenJArray selfArray, RavenJArray otherArray, string fieldArrName)
        {
            IEnumerable <RavenJToken> differences = selfArray.Length < otherArray.Length ? otherArray.Except(selfArray) : selfArray.Except(otherArray);

            if (!differences.Any())
            {
                return(true);
            }

            foreach (var dif in differences)
            {
                var changes = new DocumentsChanges
                {
                    FieldName = fieldArrName
                };


                if (selfArray.Length < otherArray.Length)
                {
                    changes.Change        = DocumentsChanges.ChangeType.ArrayValueRemoved;
                    changes.FieldOldValue = dif.ToString();
                    changes.FieldOldType  = dif.Type.ToString();
                }

                if (selfArray.Length > otherArray.Length)
                {
                    changes.Change        = DocumentsChanges.ChangeType.ArrayValueAdded;
                    changes.FieldNewValue = dif.ToString();
                    changes.FieldNewType  = dif.Type.ToString();
                }
                docChanges.Add(changes);
            }
            return(false);
        }
コード例 #2
0
        public static bool CompareDifferentLengthRavenJObjectData(this ICollection <DocumentsChanges> docChanges, RavenJObject otherObj, RavenJObject selfObj, string fieldName)
        {
            var         diffData = new Dictionary <string, string>();
            RavenJToken token;

            if (otherObj.Count == 0)
            {
                foreach (var kvp in selfObj.Properties)
                {
                    var changes = new DocumentsChanges();

                    if (selfObj.Properties.TryGetValue(kvp.Key, out token))
                    {
                        changes.FieldNewValue = token.ToString();
                        changes.FieldNewType  = token.Type.ToString();
                        changes.Change        = DocumentsChanges.ChangeType.NewField;

                        changes.FieldName = kvp.Key;
                    }

                    changes.FieldOldValue = "null";
                    changes.FieldOldType  = "null";

                    docChanges.Add(changes);
                }

                return(false);
            }
            FillDifferentJsonData(selfObj.Properties, otherObj.Properties, diffData);

            foreach (var key in diffData.Keys)
            {
                var changes = new DocumentsChanges
                {
                    FieldOldType = otherObj.Type.ToString(),
                    FieldNewType = selfObj.Type.ToString(),
                    FieldName    = key
                };

                if (selfObj.Count < otherObj.Count)
                {
                    changes.Change = DocumentsChanges.ChangeType.RemovedField;

                    changes.FieldOldValue = diffData[key];
                }
                else
                {
                    changes.Change        = DocumentsChanges.ChangeType.NewField;
                    changes.FieldNewValue = diffData[key];
                }
                docChanges.Add(changes);
            }
            return(false);
        }
コード例 #3
0
        public Operations(string name,
                          OperationsStorage operationsStorage,
                          NotificationCenter.NotificationCenter notificationCenter,
                          DocumentsChanges changes)
        {
            _operationsStorage  = operationsStorage;
            _notificationCenter = notificationCenter;
            _changes            = changes;

            _logger = LoggingSource.Instance.GetLogger <Operations>(name);
        }
コード例 #4
0
ファイル: Operations.cs プロジェクト: trisadmeslek/ravendb
 public Operations(string name,
                   OperationsStorage operationsStorage,
                   NotificationCenter.NotificationCenter notificationCenter,
                   DocumentsChanges changes,
                   TimeSpan maxCompletedTaskLifeTime)
 {
     _name = name;
     _operationsStorage        = operationsStorage;
     _notificationCenter       = notificationCenter;
     _changes                  = changes;
     _maxCompletedTaskLifeTime = maxCompletedTaskLifeTime;
     LowMemoryNotification.Instance.RegisterLowMemoryHandler(this);
 }
コード例 #5
0
        public LiveIndexingPerformanceCollector(DocumentDatabase documentDatabase, CancellationToken resourceShutdown, IEnumerable <Index> indexes)
        {
            _changes          = documentDatabase.Changes;
            _indexStorage     = documentDatabase.IndexStore;
            _resourceShutdown = resourceShutdown;
            foreach (var index in indexes)
            {
                _perIndexStats.TryAdd(index.Name, new IndexAndPerformanceStatsList(index));
            }
            _cts = new CancellationTokenSource();

            Task.Run(StartCollectingStats);
        }
コード例 #6
0
        public static void AddChanges(this ICollection <DocumentsChanges> docChanges, RavenJToken curThisReader, RavenJToken curOtherReader, string fieldName)
        {
            var changes = new DocumentsChanges
            {
                FieldNewType  = curThisReader.Type.ToString(),
                FieldOldType  = curOtherReader.Type.ToString(),
                FieldNewValue = curThisReader.ToString(),
                FieldOldValue = curOtherReader.ToString(),
                Change        = DocumentsChanges.ChangeType.FieldChanged,
                FieldName     = fieldName
            };

            docChanges.Add(changes);
        }
コード例 #7
0
        public static void AddChanges(this ICollection <DocumentsChanges> docChanges, KeyValuePair <string, RavenJToken> kvp, RavenJToken token, string fieldName)
        {
            var changes = new DocumentsChanges
            {
                FieldNewType  = kvp.Value.Type.ToString(),
                FieldOldType  = token.Type.ToString(),
                FieldNewValue = kvp.Value.ToString(),
                FieldOldValue = token.ToString(),
                Change        = DocumentsChanges.ChangeType.FieldChanged,
                FieldName     = fieldName
            };

            docChanges.Add(changes);
        }
コード例 #8
0
        public WhatChanged()
        {
            using (var store = new DocumentStore())
            {
                #region what_changed_2
                using (IDocumentSession session = store.OpenSession())
                {
                    Assert.False(session.Advanced.HasChanges);

                    session.Store(new Employee
                    {
                        FirstName = "John",
                        LastName  = "Doe"
                    });

                    Assert.True(session.Advanced.HasChanges);
                }
                #endregion

                #region what_changed_4
                using (IDocumentSession session = store.OpenSession())
                {
                    session.Store(new Employee
                    {
                        FirstName = "Joe",
                        LastName  = "Doe"
                    });

                    IDictionary <string, DocumentsChanges[]> changes = session.Advanced.WhatChanged();
                    DocumentsChanges[]          employeeChanges      = changes["employees/1"];
                    DocumentsChanges.ChangeType change = employeeChanges[0].Change;                     // DocumentsChanges.ChangeType.DocumentAdded
                }
                #endregion

                #region what_changed_5
                using (IDocumentSession session = store.OpenSession())
                {
                    Employee employee = session.Load <Employee>("employees/1");                    // 'Joe Doe'
                    employee.FirstName = "John";
                    employee.LastName  = "Shmoe";

                    IDictionary <string, DocumentsChanges[]> changes = session.Advanced.WhatChanged();
                    DocumentsChanges[] employeeChanges = changes["employees/1"];
                    DocumentsChanges   change1         = employeeChanges[0];           // DocumentsChanges.ChangeType.FieldChanged
                    DocumentsChanges   change2         = employeeChanges[1];           // DocumentsChanges.ChangeType.FieldChanged
                }
                #endregion
            }
        }
コード例 #9
0
    static Change BuildChange(DocumentsChanges change, IDocumentSession session, string key)
    {
        var changeType = change.Change;

        if (changeType == DocumentsChanges.ChangeType.DocumentAdded)
        {
            return(new()
            {
                Type = changeType,
                NewValue = session.Load <object>(key)
            });
        }

        return(new()
        {
            Type = changeType,
            FieldName = change.FieldName,
            OldValue = change.FieldOldValue,
            NewValue = change.FieldNewValue
        });
    }
コード例 #10
0
ファイル: Extensions.cs プロジェクト: xinix00/ravendb
        public static bool CompareRavenJArrayData(this ICollection <DocumentsChanges> docChanges, RavenJArray selfArray, RavenJArray otherArray, string fieldArrName)
        {
            IEnumerable <RavenJToken> differences = selfArray.Length < otherArray.Length ? otherArray : selfArray;

            if (!differences.Any())
            {
                return(true);
            }

            int index = 0;

            foreach (var dif in differences)
            {
                var changes = new DocumentsChanges
                {
                    FieldName = string.Format("{0}[{1}]", fieldArrName, index)
                };

                if (selfArray.Length < otherArray.Length)
                {
                    if (index < selfArray.Length)
                    {
                        if (!selfArray[index].DeepEquals(otherArray[index], (List <DocumentsChanges>)docChanges))
                        {
                            List <DocumentsChanges> docChangesList = docChanges.ToList();
                            docChangesList[docChangesList.Count - 1].FieldName = selfArray[index].Type == JTokenType.Object ?
                                                                                 String.Format("{0}.{1}", changes.FieldName, docChangesList[docChangesList.Count - 1].FieldName) :
                                                                                 String.Format("{0}", changes.FieldName);
                        }
                    }
                    else
                    {
                        changes.Change        = DocumentsChanges.ChangeType.ArrayValueRemoved;
                        changes.FieldOldValue = dif.ToString();
                        changes.FieldOldType  = dif.Type.ToString();
                        docChanges.Add(changes);
                    }
                }

                if (selfArray.Length > otherArray.Length)
                {
                    if (index < otherArray.Length)
                    {
                        if (!selfArray[index].DeepEquals(otherArray[index], (List <DocumentsChanges>)docChanges))
                        {
                            List <DocumentsChanges> docChangesList = docChanges.ToList();

                            docChangesList[docChangesList.Count - 1].FieldName = otherArray[index].Type == JTokenType.Object ?
                                                                                 String.Format("{0}.{1}", changes.FieldName, docChangesList[docChangesList.Count - 1].FieldName) :
                                                                                 String.Format("{0}", changes.FieldName);
                        }
                    }
                    else
                    {
                        changes.Change        = DocumentsChanges.ChangeType.ArrayValueAdded;
                        changes.FieldNewValue = dif.ToString();
                        changes.FieldNewType  = dif.Type.ToString();
                        docChanges.Add(changes);
                    }
                }
                index++;
            }
            return(false);
        }
コード例 #11
0
ファイル: RavenDb_1977.cs プロジェクト: pali88/ravendb
        public void CanDetectManyObjectChanges()
        {
            using (var store = NewDocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    session.Store(new UserData
                    {
                        Id         = 123,
                        Name       = "user1",
                        Salary     = 12.5,
                        Date       = DateTime.Now,
                        Exam1Marks = new[] { 88, 99, 77 }
                    }, "UserDatas/1");
                    session.Store(new UserData
                    {
                        Id     = 1234,
                        Name   = "user2",
                        Salary = 12.51,
                        Date   = new DateTime(2014, 1, 1)
                    }, "UserDatas/2");
                    session.Store(new UserData
                    {
                        Id     = 1235,
                        Name   = "user3",
                        Salary = 12.45,
                        Date   = new DateTime(2014, 1, 2)
                    }, "UserDatas/3");

                    IDictionary <string, DocumentsChanges[]> resChanges1 = session.Advanced.WhatChanged();
                    int supposedChangesNumber = 3;
                    Assert.Equal(supposedChangesNumber, resChanges1.Count);
                    Assert.True(resChanges1.ContainsKey("UserDatas/1"));
                    Assert.True(resChanges1.ContainsKey("UserDatas/2"));
                    Assert.True(resChanges1.ContainsKey("UserDatas/3"));
                    session.SaveChanges();
                    IDictionary <string, DocumentsChanges[]> resChanges2 = session.Advanced.WhatChanged();
                    supposedChangesNumber = 0;
                    Assert.Equal(supposedChangesNumber, resChanges2.Count);
                }

                using (IDocumentSession session = store.OpenSession())
                {
                    var userdata2 = session.Load <UserData>("UserDatas/2");
                    userdata2.Salary = 556;

                    var userdata1 = session.Load <UserData>("UserDatas/1");
                    userdata1.Exam1Marks[0] = 56;
                    userdata1.Salary        = 54.7;

                    IDictionary <string, DocumentsChanges[]> changes3 = session.Advanced.WhatChanged();

                    int ExpectedChangesCount = 2;
                    Assert.Equal(ExpectedChangesCount, changes3.Count);
                    Assert.True(changes3.ContainsKey("UserDatas/1"));
                    Assert.True(changes3.ContainsKey("UserDatas/2"));
                    var supposedChanges = new DocumentsChanges
                    {
                        Change        = DocumentsChanges.ChangeType.FieldChanged,
                        FieldName     = "Salary",
                        FieldNewType  = "Float",
                        FieldNewValue = "556",
                        FieldOldType  = "Float",
                        FieldOldValue = "12.51"
                    };
                    DocumentsChanges[] data2 = { };
                    if (changes3.TryGetValue("UserDatas/2", out data2))
                    {
                        Assert.Equal(data2.Length, 1);
                        Assert.Equal(data2[0], supposedChanges);
                    }

                    DocumentsChanges[] data1 = { };
                    if (changes3.TryGetValue("UserDatas/1", out data1))
                    {
                        Assert.Equal(data1.Length, ExpectedChangesCount); //UserDatas/1 was changed twice
                    }

                    session.SaveChanges();
                    userdata1 = session.Load <UserData>("UserDatas/1");
                    int[]      newMark = { 67, 65 };
                    List <int> list    = userdata1.Exam1Marks.ToList();
                    list.AddRange(newMark);
                    userdata1.Exam1Marks = list.ToArray();
                    IDictionary <string, DocumentsChanges[]> changes4 = session.Advanced.WhatChanged();
                    DocumentsChanges[] data4 = { };
                    if (changes4.TryGetValue("UserDatas/1", out data4))
                    {
                        Assert.Equal(data4.Length, 2);
                    }


                    session.SaveChanges();


                    userdata1 = session.Load <UserData>("UserDatas/1");
                    int numToRemove = 99;
                    int numIndex    = Array.IndexOf(userdata1.Exam1Marks, numToRemove);
                    userdata1.Exam1Marks = userdata1.Exam1Marks.Where((val, idx) => idx != numIndex).ToArray();
                    numToRemove          = 77;
                    numIndex             = Array.IndexOf(userdata1.Exam1Marks, numToRemove);
                    userdata1.Exam1Marks = userdata1.Exam1Marks.Where((val, idx) => idx != numIndex).ToArray();

                    var userdata = session.Load <UserData>("UserDatas/3");


                    session.Delete(userdata);
                    session.Store(new UserData
                    {
                        Id     = 2235,
                        Name   = "user4",
                        Salary = 32.45,
                        Date   = new DateTime(2014, 2, 2)
                    }, "UserDatas/4");

                    ExpectedChangesCount = 3;
                    IDictionary <string, DocumentsChanges[]> changes7 = session.Advanced.WhatChanged();
                    Assert.Equal(ExpectedChangesCount, changes7.Count);
                    Assert.True(changes7.ContainsKey("UserDatas/1"));
                    Assert.True(changes7.ContainsKey("UserDatas/3"));
                    Assert.True(changes7.ContainsKey("UserDatas/4"));

                    session.SaveChanges();
                }
            }
        }
コード例 #12
0
ファイル: RavenDb_1977.cs プロジェクト: pali88/ravendb
        public void CanDetectObjectUpdateChanges()
        {
            using (var store = NewDocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    session.Store(new UserData
                    {
                        Id         = 123,
                        Name       = "user1",
                        Salary     = 12.5,
                        Date       = DateTime.Now,
                        Exam1Marks = new[] { 88, 99, 77 },
                        Exam2Marks = new[] { 77, 78, 79 }
                    }, "UserDatas/1");
                    session.Store(new UserData
                    {
                        Id     = 1234,
                        Name   = "user2",
                        Salary = 12.51,
                        Date   = new DateTime(2014, 1, 1)
                    }, "UserDatas/2");
                    session.Store(new UserData
                    {
                        Id     = 1235,
                        Name   = "user3",
                        Salary = 12.45,
                        Date   = new DateTime(2014, 1, 2)
                    }, "UserDatas/3");

                    session.SaveChanges();
                }

                using (var session = store.OpenSession())
                {
                    var userdata2 = session.Load <UserData>("UserDatas/2");
                    userdata2.Salary = 556;

                    var userdata1 = session.Load <UserData>("UserDatas/1");
                    userdata1.Exam1Marks[0] = 56;
                    userdata1.Exam2Marks[0] = 88;
                    userdata1.Salary        = 54.7;

                    IDictionary <string, DocumentsChanges[]> changes3 = session.Advanced.WhatChanged();

                    int supposedChangesNumber = 2;
                    Assert.Equal(supposedChangesNumber, changes3.Count);
                    Assert.True(changes3.ContainsKey("UserDatas/1"));
                    Assert.True(changes3.ContainsKey("UserDatas/2"));
                    var supposedChanges = new DocumentsChanges
                    {
                        Change        = DocumentsChanges.ChangeType.FieldChanged,
                        FieldName     = "Salary",
                        FieldNewType  = "Float",
                        FieldNewValue = "556",
                        FieldOldType  = "Float",
                        FieldOldValue = "12.51"
                    };
                    DocumentsChanges[] data2;
                    if (changes3.TryGetValue("UserDatas/2", out data2))
                    {
                        Assert.Equal(data2.Length, 1);
                        Assert.Equal(data2[0], supposedChanges);
                    }

                    DocumentsChanges[] data1;
                    if (changes3.TryGetValue("UserDatas/1", out data1))
                    {
                        Assert.Equal(data1.Length, 3);
                    }

                    session.SaveChanges();
                }
            }
        }