예제 #1
0
        public void DomainDescription()
        {
            var evalResult = _client.IsComplete <CacheableTypeOk>(i => i.IndexKeyFolder == "aaa");

            Assert.IsFalse(evalResult);


            var item1 = new CacheableTypeOk(1, 1001, "aaa", new DateTime(2010, 10, 10), 1500);

            _client.PutOne(item1);

            var item2 = new CacheableTypeOk(2, 1002, "aaa", new DateTime(2010, 10, 10), 1600);

            _client.PutOne(item2);

            evalResult = _client.IsComplete <CacheableTypeOk>(i => i.IndexKeyFolder == "aaa");
            Assert.IsFalse(evalResult);

            var description = new DomainDescription(OrQuery.Empty <CacheableTypeOk>());

            //describe the domain as complete
            _client.DeclareDomain(description);

            evalResult = _client.IsComplete <CacheableTypeOk>(i => i.IndexKeyFolder == "aaa");
            Assert.IsTrue(evalResult);
        }
예제 #2
0
        public void DomainDescription()
        {
            var builder    = new QueryBuilder(typeof(CacheableTypeOk));
            var evalResult = _client.EvalQuery(builder.GetMany("IndexKeyFolder=aaa"));

            Assert.IsFalse(evalResult.Key);
            Assert.AreEqual(evalResult.Value, 0);

            var item1 = new CacheableTypeOk(1, 1001, "aaa", new DateTime(2010, 10, 10), 1500);

            _client.Put(item1);

            var item2 = new CacheableTypeOk(2, 1002, "aaa", new DateTime(2010, 10, 10), 1600);

            _client.Put(item2);

            evalResult = _client.EvalQuery(builder.GetMany("IndexKeyFolder=aaa"));
            Assert.IsFalse(evalResult.Key);
            Assert.AreEqual(evalResult.Value, 2);

            var description = new DomainDescription(OrQuery.Empty <CacheableTypeOk>());

            //describe the domain as complete
            _client.DeclareDomain(description);
            evalResult = _client.EvalQuery(builder.GetMany("IndexKeyFolder=aaa"));
            Assert.IsTrue(evalResult.Key);
            Assert.AreEqual(evalResult.Value, 2);
        }
예제 #3
0
        public void Test_subset_on_queries()
        {
            var datastore = new DataSource <TradeLike>(null, ClientSideTypeDescription.RegisterType <TradeLike>());

            {
                var q1 = datastore.PredicateToQuery(t => t.ValueDate == DateTime.Today);
                var q2 = datastore.PredicateToQuery(t => t.ValueDate >= DateTime.Today.AddDays(-10));

                Assert.IsTrue(q1.IsSubsetOf(q2));
                Assert.IsFalse(q2.IsSubsetOf(q1));
            }

            {
                var q1 = datastore.PredicateToQuery(t => t.ValueDate == DateTime.Today && t.Folder == "EUR12");
                var q2 = datastore.PredicateToQuery(t => t.ValueDate >= DateTime.Today.AddDays(-10));

                Assert.IsTrue(q1.IsSubsetOf(q2));
                Assert.IsFalse(q2.IsSubsetOf(q1));
            }

            {
                var q1 = datastore.PredicateToQuery(t => t.Folder == "EUR12");
                var q2 = datastore.PredicateToQuery(t => t.Folder == "EUR12" || t.Folder == "EUR11");

                Assert.IsTrue(q1.IsSubsetOf(q2));
                Assert.IsFalse(q2.IsSubsetOf(q1));
            }

            {
                var q1 = datastore.PredicateToQuery(t => t.Folder == "EUR12");
                var q2 = datastore.PredicateToQuery(t =>
                                                    t.Folder == "EUR12" || t.Folder == "EUR11" && t.ValueDate == DateTime.Today);

                Assert.IsTrue(q1.IsSubsetOf(q2));
                Assert.IsFalse(q2.IsSubsetOf(q1));
            }

            {
                var q1 = datastore.PredicateToQuery(t => t.Folder == "EUR11");
                var q2 = datastore.PredicateToQuery(t =>
                                                    t.Folder == "EUR12" || t.Folder == "EUR11" && t.ValueDate == DateTime.Today);

                Assert.IsFalse(q1.IsSubsetOf(q2));
            }

            {
                var q1 = datastore.PredicateToQuery(t => t.Folder == "EUR11" && t.ValueDate == DateTime.Today);
                var q2 = datastore.PredicateToQuery(t =>
                                                    t.Folder == "EUR12" || t.Folder == "EUR11" && t.ValueDate > DateTime.Today.AddDays(-10));

                Assert.IsTrue(q1.IsSubsetOf(q2));
                Assert.IsFalse(q2.IsSubsetOf(q1));

                // every query is a subset of an empty query
                Assert.IsTrue(q1.IsSubsetOf(OrQuery.Empty <TradeLike>()));
                Assert.IsTrue(q2.IsSubsetOf(OrQuery.Empty <TradeLike>()));
            }
        }
예제 #4
0
        public void Test_subset_on_queries()
        {
            {
                var q1 = UtExtensions.PredicateToQuery <TradeLike>(t => t.ValueDate == DateTime.Today);
                var q2 = UtExtensions.PredicateToQuery <TradeLike>(t => t.ValueDate >= DateTime.Today.AddDays(-10));

                Assert.IsTrue(q1.IsSubsetOf(q2));
                Assert.IsFalse(q2.IsSubsetOf(q1));
            }

            {
                var q1 = UtExtensions.PredicateToQuery <TradeLike>(t => t.ValueDate == DateTime.Today && t.Folder == "EUR12");
                var q2 = UtExtensions.PredicateToQuery <TradeLike>(t => t.ValueDate >= DateTime.Today.AddDays(-10));

                Assert.IsTrue(q1.IsSubsetOf(q2));
                Assert.IsFalse(q2.IsSubsetOf(q1));
            }

            {
                var q1 = UtExtensions.PredicateToQuery <TradeLike>(t => t.Folder == "EUR12");
                var q2 = UtExtensions.PredicateToQuery <TradeLike>(t => t.Folder == "EUR12" || t.Folder == "EUR11");

                Assert.IsTrue(q1.IsSubsetOf(q2));
                Assert.IsFalse(q2.IsSubsetOf(q1));
            }

            {
                var q1 = UtExtensions.PredicateToQuery <TradeLike>(t => t.Folder == "EUR12");
                var q2 = UtExtensions.PredicateToQuery <TradeLike>(t =>
                                                                   t.Folder == "EUR12" || t.Folder == "EUR11" && t.ValueDate == DateTime.Today);

                Assert.IsTrue(q1.IsSubsetOf(q2));
                Assert.IsFalse(q2.IsSubsetOf(q1));
            }

            {
                var q1 = UtExtensions.PredicateToQuery <TradeLike>(t => t.Folder == "EUR11");
                var q2 = UtExtensions.PredicateToQuery <TradeLike>(t =>
                                                                   t.Folder == "EUR12" || t.Folder == "EUR11" && t.ValueDate == DateTime.Today);

                Assert.IsFalse(q1.IsSubsetOf(q2));
            }

            {
                var q1 = UtExtensions.PredicateToQuery <TradeLike>(t => t.Folder == "EUR11" && t.ValueDate == DateTime.Today);
                var q2 = UtExtensions.PredicateToQuery <TradeLike>(t =>
                                                                   t.Folder == "EUR12" || t.Folder == "EUR11" && t.ValueDate > DateTime.Today.AddDays(-10));

                Assert.IsTrue(q1.IsSubsetOf(q2));
                Assert.IsFalse(q2.IsSubsetOf(q1));

                // every query is a subset of an empty query
                Assert.IsTrue(q1.IsSubsetOf(OrQuery.Empty <TradeLike>()));
                Assert.IsTrue(q2.IsSubsetOf(OrQuery.Empty <TradeLike>()));
            }
        }
예제 #5
0
 public void DeclareDataFullyLoaded <TItemType>(bool isFullyLoaded)
 {
     DeclareDomain(new DomainDescription(OrQuery.Empty <TItemType>(), isFullyLoaded));
 }
예제 #6
0
        /// <summary>
        /// Mostly useful in distributed cache mode without persistence. Declare all instances of a given type as being available
        /// Usually called after the cache is fed. This will enable "get many" operations
        /// </summary>
        public void DeclareFullyLoaded(bool fullyLoaded = true)
        {
            var domain = new DomainDescription(OrQuery.Empty <T>(), fullyLoaded);

            _client.DeclareDomain(domain);
        }
예제 #7
0
        public void Check_execution_plans()
        {
            var schema = TypedSchemaFactory.FromType <AllKindsOfProperties>();

            var objects = GenerateAllKinds(100_000);

            var packed = objects.Select(o => PackedObject.Pack(o, schema)).ToList();


            var ds = new DataStore(schema, new NullEvictionPolicy(), new FullTextConfig());

            ds.InternalPutMany(packed, true);


            var qm = new QueryManager(ds);

            // first time for warm-up
            qm.ProcessQuery(ExpressionTreeHelper.PredicateToQuery <AllKindsOfProperties>(a => a.Tags.Contains("food")));

            qm.ProcessQuery(ExpressionTreeHelper.PredicateToQuery <AllKindsOfProperties>(a => a.Tags.Contains("food")));

            Console.WriteLine(qm.ExecutionPlan);

            Assert.AreEqual(1, qm.ExecutionPlan.QueryPlans.Count);
            Assert.IsTrue(qm.ExecutionPlan.QueryPlans[0].SimpleQueryStrategy);
            Assert.IsFalse(qm.ExecutionPlan.QueryPlans[0].FullScan);

            // first time for warm-up
            qm.ProcessQuery(ExpressionTreeHelper.PredicateToQuery <AllKindsOfProperties>(a =>
                                                                                         a.Tags.Contains("food") && a.Tags.Contains("space")));

            var result =
                qm.ProcessQuery(ExpressionTreeHelper.PredicateToQuery <AllKindsOfProperties>(a =>
                                                                                             a.Tags.Contains("food") && a.Tags.Contains("space")));

            Assert.AreEqual(0, result.Count);
            Assert.AreEqual(1, qm.ExecutionPlan.QueryPlans.Count);
            Assert.IsFalse(qm.ExecutionPlan.QueryPlans[0].SimpleQueryStrategy);
            Assert.IsFalse(qm.ExecutionPlan.QueryPlans[0].FullScan,
                           "this query should be solved by an index not a full-scan");

            Console.WriteLine(qm.ExecutionPlan);

            // first time for warm-up
            qm.ProcessQuery(
                ExpressionTreeHelper.PredicateToQuery <AllKindsOfProperties>(a => a.Quantity > 1 && a.Quantity < 2));

            result = qm.ProcessQuery(
                ExpressionTreeHelper.PredicateToQuery <AllKindsOfProperties>(a => a.Quantity > 1 && a.Quantity < 2));
            Console.WriteLine(qm.ExecutionPlan);

            Assert.AreEqual(0, result.Count);
            Assert.AreEqual(1, qm.ExecutionPlan.QueryPlans.Count);
            Assert.IsTrue(qm.ExecutionPlan.QueryPlans[0].SimpleQueryStrategy,
                          "this query should have been optimized as a range query and executed as a simple query");
            Assert.IsTrue(qm.ExecutionPlan.QueryPlans[0].FullScan,
                          "this query should be executed as full-scan as the index is not ordered");

            // first time for warm-up
            qm.ProcessQuery(
                ExpressionTreeHelper.PredicateToQuery <AllKindsOfProperties>(a => a.Quantity >= 1 || a.Quantity <= 2));

            result = qm.ProcessQuery(
                ExpressionTreeHelper.PredicateToQuery <AllKindsOfProperties>(a => a.Quantity >= 1 || a.Quantity <= 2));
            Console.WriteLine(qm.ExecutionPlan);

            Assert.AreEqual(100_000, result.Count);
            Assert.AreEqual(2, qm.ExecutionPlan.QueryPlans.Count, "this query should have been decomposed in two queries");
            Assert.IsTrue(qm.ExecutionPlan.QueryPlans[0].SimpleQueryStrategy);


            // empty query. Should return everything
            result = qm.ProcessQuery(OrQuery.Empty <AllKindsOfProperties>());
            Assert.AreEqual(100_000, result.Count);
            Console.WriteLine(qm.ExecutionPlan);
        }
예제 #8
0
 public void DeclareDataFullyLoaded(string collectionName, bool isFullyLoaded)
 {
     DeclareDomain(new DomainDescription(OrQuery.Empty(collectionName), isFullyLoaded));
 }