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); }
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); }
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>())); } }
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>())); } }
public void DeclareDataFullyLoaded <TItemType>(bool isFullyLoaded) { DeclareDomain(new DomainDescription(OrQuery.Empty <TItemType>(), isFullyLoaded)); }
/// <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); }
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); }
public void DeclareDataFullyLoaded(string collectionName, bool isFullyLoaded) { DeclareDomain(new DomainDescription(OrQuery.Empty(collectionName), isFullyLoaded)); }