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);
                }
            }
        }
示例#3
0
        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);
            }
        }
示例#4
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();

                }
            }
        }
示例#5
0
        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);
                }
            }
        }
示例#6
0
        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();
            }
        }
示例#7
0
        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();
            }
        }
示例#8
0
        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();
            }
        }
示例#9
0
        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);
                }
            }
        }
示例#10
0
        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);
                }
            }
        }