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); }
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); }
public Operations(string name, OperationsStorage operationsStorage, NotificationCenter.NotificationCenter notificationCenter, DocumentsChanges changes) { _operationsStorage = operationsStorage; _notificationCenter = notificationCenter; _changes = changes; _logger = LoggingSource.Instance.GetLogger <Operations>(name); }
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); }
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); }
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); }
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); }
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 } }
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 }); }
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); }
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(); } } }
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(); } } }