public void SelectExpressionReturnsItems() { _testName = MethodInfo.GetCurrentMethod().Name.GetHashCode().ToString(); Cleanup(); var objs = TestResourceFactory.GetMockClassAObjects(100).ToList(); var first = objs.FirstOrDefault() as MockClassC; var select = new WhereExpression( new CompareToken("ReferenceCode", CompareEnum.Like, first.ReferenceCode), new CompareToken("Location.X", CompareEnum.Equals, first.Location.X), new CompareToken("Name", CompareEnum.Like, first.Name.Substring(1, first.Name.Length - 2))); using (var db = new JObjectDatabase<int>(_testName + ".database", "Id")) { var eval = new ExpressionResolver<int, JObject>(db); db.Load(); using (var t = db.BeginTransaction()) { objs.ToList().ForEach(o => o.Id = db.Add(db.Formatter.AsQueryableObj(o))); t.Commit(); var results = eval.ExecuteSelect(select); Assert.AreEqual(1, results.Count); MockClassC.Validate(results[0].ToObject<MockClassC>(), objs.FirstOrDefault() as MockClassC); } } }
public void SelectExpressionReturnsFirstItems() { _testName = MethodInfo.GetCurrentMethod().Name.GetHashCode().ToString(); Cleanup(); var objs = TestResourceFactory.GetMockClassAObjects(100).ToList(); var max = objs.Cast<MockClassC>().Max(o => o.Location.X); var min = objs.Cast<MockClassC>().Min(o => o.Location.X); var first = objs.FirstOrDefault() as MockClassC; var select = new WhereExpression(10, true, new CompareToken("Location.X", CompareEnum.Greater, max - min)); using (var db = new JObjectDatabase<int>(_testName + ".database", "Id")) { var eval = new ExpressionResolver<int, JObject>(db); db.Load(); using (var t = db.BeginTransaction()) { objs.ToList().ForEach(o => o.Id = db.Add(db.Formatter.AsQueryableObj(o))); t.Commit(); var results = eval.ExecuteSelect(select); Assert.LessOrEqual(results.Count, 10); foreach (var result in results) MockClassC.Validate(result.ToObject<MockClassC>(), objs.FirstOrDefault(o => o.Id == result.Value<int>("Id")) as MockClassC); } } }
public void AddOrUpdateObjWithTypeThrowsException() { _testName = MethodInfo.GetCurrentMethod().Name.GetHashCode().ToString(); Cleanup(); using (var db = new JObjectDatabase<int>(_testName + ".database", "Id")) { db.Load(); db.AddOrUpdateJObj(typeof(MockClassA), new JObject(), 0); } }
public void DatabaseDeletesFirstLastWithActiveTransactions() { _testName = MethodInfo.GetCurrentMethod().Name.GetHashCode().ToString(); using (var fLock = new ManagedFileLock(_testName + ".database")) { Cleanup(); var objs = TestResourceFactory.GetMockClassAObjects(100).ToList(); var ids = new List<int>(); using (var db = new JObjectDatabase<int>(_testName + ".database", "Id", new FileCore<int, long>(), new BinConverter32(), new JSONFormatter())) { db.Load(); var t = db.BeginTransaction(); objs.ToList().ForEach(o => ids.Add(db.Add(db.Formatter.AsQueryableObj(o)))); var last = db.SelectLast(s => true, 1).LastOrDefault(); Assert.IsNotNull(last); var count = db.Update(s => s.Value<string>("Name") == last.Value<string>("Name") , new System.Action<JObject>(a => a.SetValue("Name", "last", db.Formatter.Serializer))); Assert.AreEqual(1, count); var selected = db.Select(s => true); Assert.AreEqual(100, selected.Count); count = db.DeleteFirst(s => true, 10); Assert.AreEqual(10, count); selected = db.Select(s => true); Assert.AreEqual(90, selected.Count); count = db.DeleteLast(s => true, 10); Assert.AreEqual(10, count); selected = db.Select(s => true); Assert.AreEqual(80, selected.Count); t.Rollback(); } } }
public void DatabaseFetchesSavedValues() { _testName = MethodInfo.GetCurrentMethod().Name.GetHashCode().ToString(); Cleanup(); var objs= TestResourceFactory.GetMockClassAObjects(3).ToList(); var ids = new List<int>(); using (var db = new JObjectDatabase<int>(_testName + ".database", "Id")) { db.Load(); objs.ToList().ForEach(o => o.Id = db.Add(db.Formatter.AsQueryableObj(o))); db.FlushAll(); } using (var db = new JObjectDatabase<int>(_testName + ".database")) { db.Load(); foreach (var obj in objs) { var orig = obj as MockClassC; var item = db.Fetch(obj.Id).ToObject<MockClassC>(db.Formatter.Serializer); Assert.AreEqual(item.Id, orig.Id); Assert.AreEqual(item.Name, orig.Name); Assert.AreEqual(item.GetSomeCheckSum[0], orig.GetSomeCheckSum[0]); Assert.AreEqual(item.Location.X, orig.Location.X); Assert.AreEqual(item.Location.Y, orig.Location.Y); Assert.AreEqual(item.Location.Z, orig.Location.Z); Assert.AreEqual(item.Location.W, orig.Location.W); Assert.AreEqual(item.ReferenceCode, orig.ReferenceCode); Assert.AreEqual(item.ReplicationID, orig.ReplicationID); } } }
public void DatabaseUpdatesIdFieldAndIndexes() { _testName = MethodInfo.GetCurrentMethod().Name.GetHashCode().ToString(); Cleanup(); var objs = TestResourceFactory.GetMockClassAObjects(100).ToList(); var ids = new List<int>(); using (var db = new JObjectDatabase<int>(_testName + ".database", "Id")) { db.Load(); objs.ToList().ForEach(o => o.Id = db.Add(db.Formatter.AsQueryableObj(o))); db.FlushAll(); } using (var db = new JObjectDatabase<int>(_testName + ".database")) { db.Load(); var last = db.Fetch(objs.Last().Id); Assert.IsNotNull(last); var oldId = last.Value<int>("Id"); last.SetValue("Name", "last", db.Formatter.Serializer); last.SetValue("Id", 1024, db.Formatter.Serializer); db.Update(last, oldId); last = db.Fetch(last.Value<int>("Id")); Assert.AreEqual(1024, last.Value<int>("Id")); var old = db.Fetch(oldId); Assert.IsNull(old); db.FlushAll(); } using (var db = new JObjectDatabase<int>(_testName + ".database", "Id")) { db.Load(); var obj = db.Fetch(objs.Last().Id); Assert.IsNull(obj); var last = db.Fetch(1024).ToObject<MockClassC>(); Assert.IsNotNull(last); Assert.AreEqual("last", last.Name); Assert.IsNotNull(db.Fetch(objs.First().Id)); db.Delete(new int[] { objs.First().Id, objs.Last().Id }); Assert.IsNull(db.Fetch(objs.First().Id)); Assert.IsNull(db.Fetch(objs.Last().Id)); db.FlushAll(); } using (var db = new JObjectDatabase<int>(_testName + ".database", "Id")) { db.Load(); Assert.IsNull(db.Fetch(objs.First().Id)); db.Clear(); } }
public void DatabaseLoadsDefaults() { _testName = MethodInfo.GetCurrentMethod().Name.GetHashCode().ToString(); Cleanup(); using (var db = new JObjectDatabase<int>(_testName + ".database", "Id")) { db.Load(); } using (var db = new JObjectDatabase<int>(_testName + ".database")) { db.Load(); } }
public void DatabaseFetchesUpdatesAndDeletes() { _testName = MethodInfo.GetCurrentMethod().Name.GetHashCode().ToString(); Cleanup(); var objs = TestResourceFactory.GetMockClassAObjects(100).ToList(); using (var db = new JObjectDatabase<int>(_testName + ".database", "Id")) { db.Load(); objs.ToList().ForEach(o => o.Id = db.Add(db.Formatter.AsQueryableObj(o))); db.FlushAll(); } using (var db = new JObjectDatabase<int>(_testName + ".database")) { db.Load(); var last = db.Fetch(objs.Last().Id).ToObject<MockClassC>(db.Formatter.Serializer); Assert.IsNotNull(last); last.Name = "last"; db.Update(db.Formatter.AsQueryableObj(last), last.Id); db.FlushAll(); } using (var db = new JObjectDatabase<int>(_testName + ".database", "Id")) { db.Load(); var last = db.Fetch(objs.Last().Id).ToObject<MockClassC>(db.Formatter.Serializer); Assert.IsNotNull(last); Assert.AreEqual("last", last.Name); Assert.IsNotNull(db.Fetch(objs.First().Id)); db.Delete(objs.First().Id); Assert.IsNull(db.Fetch(objs.First().Id)); db.FlushAll(); } using (var db = new JObjectDatabase<int>(_testName + ".database", "Id")) { db.Load(); Assert.IsNull(db.Fetch(objs.First().Id)); db.Clear(); } }
public void SelectLastQuerySelectsLast10Matches() { _testName = MethodInfo.GetCurrentMethod().Name.GetHashCode().ToString(); using (var fLock = new ManagedFileLock(_testName)) { Cleanup(); var core = new FileCore<int, long>(new Seed32(999)); var formatter = TestResourceFactory.CreateJsonFormatterWithoutArrayFormatting(); var stopWatch = new Stopwatch(); using (var db = new JObjectDatabase<int>(_testName + ".database", "Id", core)) { db.Load(); using (var t = db.BeginTransaction()) { TestResourceFactory.GetMockClassAObjects(25000).ToList().ForEach(a => db.Add(db.Formatter.AsQueryableObj(a))); t.Commit(); } stopWatch.Reset(); stopWatch.Start(); var gets = db.SelectLast(o => o.Value<int>("Id") > 24000, 10); stopWatch.Stop(); Console.WriteLine("query with 10 last records retreived in {0} seconds", stopWatch.ElapsedMilliseconds / 1000m); Assert.AreEqual(10, gets.Count()); foreach (var item in gets) Assert.Greater(item.Value<int>("Id"), 24989); } using (var db = new JObjectDatabase<int>(_testName + ".database")) { var len = db.Load(); stopWatch.Reset(); stopWatch.Start(); var gets = db.SelectLast(o => o.Value<int>("Id") > 24000, 10); stopWatch.Stop(); Console.WriteLine("query with 10 last records retreived in {0} seconds", stopWatch.ElapsedMilliseconds / 1000m); Assert.AreEqual(10, gets.Count()); foreach (var item in gets) Assert.Greater(item.Value<int>("Id"), 24000); } } }
public void DatabaseFetchesUpdatesAndDeletesWithQueries() { _testName = MethodInfo.GetCurrentMethod().Name.GetHashCode().ToString(); using (var fLock = new ManagedFileLock(_testName)) { Cleanup(); var objs = TestResourceFactory.GetMockClassAObjects(100).ToList(); var ids = new List<int>(); using (var db = new JObjectDatabase<int>(_testName + ".database", "Id", new FileCore<int, long>(), new BinConverter32(), new JSONFormatter())) { db.Load(); objs.ToList().ForEach(o => ids.Add(db.Add(db.Formatter.AsQueryableObj(o)))); db.FlushAll(); } using (var db = new Database<int, MockClassA>(_testName + ".database", new JSONFormatter())) { db.Load(); using (var t = db.BeginTransaction()) { var last = db.SelectLast(s => true, 1).LastOrDefault(); Assert.IsNotNull(last); db.Update(s => s.Value<string>("Name") == last.Name , new System.Action<MockClassA>(a => a.Name = "last")); db.Delete(s => true); t.Commit(); } var selected = db.Select(s => true); Assert.AreEqual(0, selected.Count); } using (var db = new Database<int, MockClassA>(_testName + ".database", new JSONFormatter())) { db.Load(); var selected = db.Select(s => true); Assert.AreEqual(0, selected.Count); } } }