//TODO to be tested public void DeleteMany <T>(Expression <Func <T, bool> > where, string collectionName = null) { collectionName ??= typeof(T).Name; var query = PredicateToQuery(where, collectionName); var request = new RemoveManyRequest(query); _childRequests.Add(request); }
/// <summary> /// remove all the items matching a query /// </summary> /// <param name="query"></param> /// <returns>number of items effectively removed</returns> public int RemoveMany(OrQuery query) { if (query == null) { throw new ArgumentNullException(nameof(query)); } var request = new RemoveManyRequest(query); var response = Channel.SendRequest(request); if (response is ExceptionResponse exResponse) { throw new CacheException("Error in RemoveMany", exResponse.Message, exResponse.CallStack); } if (!(response is ItemsCountResponse countResponse)) { throw new CacheException("Invalid type of response received in RemoveMany()"); } return(countResponse.ItemsCount); }
public void Split_transaction_request() { var schema = TypedSchemaFactory.FromType <Order>(); var requests = new List <DataRequest>(); // simple put requests for (int i = 0; i < 100; i++) { var order1 = new Order { Id = Guid.NewGuid(), Category = "geek", ProductId = 123, Quantity = 1 }; var putRequest = new PutRequest("orders"); var packed1 = PackedObject.Pack(order1, schema, "orders"); putRequest.Items.Add(packed1); requests.Add(putRequest); } // conditional put requests for (int i = 0; i < 100; i++) { var order1 = new Order { Id = Guid.NewGuid(), Category = "geek", ProductId = 123, Quantity = 1 }; var putRequest = new PutRequest("orders"); var packed1 = PackedObject.Pack(order1, schema, "orders"); putRequest.Items.Add(packed1); putRequest.Predicate = ExpressionTreeHelper.PredicateToQuery <Order>(o => o.IsDelivered, "orders"); requests.Add(putRequest); } // simple delete requests for (int i = 0; i < 100; i++) { var order1 = new Order { Id = Guid.NewGuid(), Category = "geek", ProductId = 123, Quantity = 1 }; var packed1 = PackedObject.Pack(order1, schema, "orders1"); var deleteRequest = new RemoveRequest("orders1", packed1.PrimaryKey); requests.Add(deleteRequest); } // delete many request var deleteMany = new RemoveManyRequest(ExpressionTreeHelper.PredicateToQuery <Order>(o => o.IsDelivered, "orders")); requests.Add(deleteMany); var transactionRequest = new TransactionRequest(requests) { TransactionId = Guid.NewGuid() }; var split = transactionRequest.SplitByServer(k => k.GetHashCode() % 5, 5); var total = split.Values.Sum(r => r.ChildRequests.Count); // 300 uniformly distributed + 5 (delete many) cloned on each server Assert.AreEqual(305, total); Assert.IsTrue(split.Values.All(s => s.TransactionId == transactionRequest.TransactionId)); var tr0 = split[0]; Assert.IsTrue(tr0.ConditionalRequests.All(r => r.HasCondition)); Assert.IsTrue(tr0.ConditionalRequests.Any()); var deleteManyCount = tr0.ChildRequests.Count(r => r is RemoveManyRequest); Assert.AreEqual(1, deleteManyCount); Assert.AreEqual(2, tr0.AllCollections.Length);// orders and orders1 }