public void ExecuteAsync_Batch_Test() { // Generate 3 test users var testUsers = Enumerable.Range(110, 3).Select(idx => new InsertUser { Id = Guid.NewGuid(), Name = string.Format("Name {0}", idx), Age = idx, CreatedDate = TestDataGenerator.GetDateTimeInPast(idx), IsActive = idx % 2 == 0, LastLoginDate = TestDataGenerator.GetNullableDateTimeInPast(idx), LoginHistory = TestDataGenerator.GetList(idx, TestDataGenerator.GetDateTimeInPast), LuckyNumbers = TestDataGenerator.GetSet(idx, i => i), FavoriteColor = TestDataGenerator.GetEnumValue <RainbowColor>(idx), TypeOfUser = TestDataGenerator.GetEnumValue <UserType?>(idx), PreferredContact = TestDataGenerator.GetEnumValue <ContactMethod>(idx), HairColor = TestDataGenerator.GetEnumValue <HairColor>(idx) }).ToList(); // Create batch to insert users and execute var mapper = GetMapper(() => TestHelper.DelayedTask(new RowSet())); ICqlBatch batch = mapper.CreateBatch(); batch.Insert(testUsers[0]); batch.Insert(testUsers[1]); batch.Insert(testUsers[2]); mapper.ExecuteAsync(batch); }
public async void ExecuteAsync_Batch() { // Generate 3 test users var testUsers = Enumerable.Range(110, 3).Select(idx => new InsertUser { Id = Guid.NewGuid(), Name = string.Format("Name {0}", idx), Age = idx, CreatedDate = TestDataGenerator.GetDateTimeInPast(idx), IsActive = idx % 2 == 0, LastLoginDate = TestDataGenerator.GetNullableDateTimeInPast(idx), LoginHistory = TestDataGenerator.GetList(idx, TestDataGenerator.GetDateTimeInPast), LuckyNumbers = TestDataGenerator.GetSet(idx, i => i), ChildrenAges = TestDataGenerator.GetDictionary(idx, i => string.Format("Child {0}", i), i => i), FavoriteColor = TestDataGenerator.GetEnumValue <RainbowColor>(idx), TypeOfUser = TestDataGenerator.GetEnumValue <UserType?>(idx), PreferredContact = TestDataGenerator.GetEnumValue <ContactMethod>(idx), HairColor = TestDataGenerator.GetEnumValue <HairColor>(idx) }).ToList(); // Create batch to insert users and execute ICqlBatch batch = CqlClient.CreateBatch(); batch.Insert(testUsers[0]); batch.Insert(testUsers[1]); batch.Insert(testUsers[2]); await CqlClient.ExecuteAsync(batch); }
public static ICqlBatch WithOptions(this ICqlBatch batch, CassandraQueryOptions queryOptions) { return(batch.WithOptions(o => { if (queryOptions == null) { return; } if (queryOptions.ConsistencyLevel.HasValue) { o.SetConsistencyLevel(queryOptions.ConsistencyLevel.Value); } if (queryOptions.PageSize.HasValue) { o.SetPageSize(queryOptions.PageSize.Value); } if (queryOptions.TracingEnabled.HasValue) { if (queryOptions.TracingEnabled.Value) { o.EnableTracing(); } else { o.DisableTracing(); } } })); }
public void Execute_MixedBatch() { // Generate test user const int idx = 20; var testUser = new InsertUser { Id = Guid.NewGuid(), Name = string.Format("Name {0}", idx), Age = idx, CreatedDate = TestDataGenerator.GetDateTimeInPast(idx), IsActive = idx % 2 == 0, LastLoginDate = TestDataGenerator.GetNullableDateTimeInPast(idx), LoginHistory = TestDataGenerator.GetList(idx, TestDataGenerator.GetDateTimeInPast), LuckyNumbers = TestDataGenerator.GetSet(idx, i => i), ChildrenAges = TestDataGenerator.GetDictionary(idx, i => string.Format("Child {0}", i), i => i), FavoriteColor = TestDataGenerator.GetEnumValue <RainbowColor>(idx), TypeOfUser = TestDataGenerator.GetEnumValue <UserType?>(idx), PreferredContact = TestDataGenerator.GetEnumValue <ContactMethod>(idx), HairColor = TestDataGenerator.GetEnumValue <HairColor>(idx) }; // Get id of existing user for deleting and updating Guid deleteId = TestDataHelper.Users[0].UserId; Guid updateId = TestDataHelper.Users[1].UserId; // Create batch of mixed statements and execute ICqlBatch batch = CqlClient.CreateBatch(); batch.Insert(testUser); batch.Delete <InsertUser>("WHERE userid = ?", deleteId); batch.Update <InsertUser>("SET name = ? WHERE userid = ?", "SomeNewName", updateId); CqlClient.Execute(batch); }
public void ExecuteAsync_Batch_Test() { // Generate 3 test users var testUsers = Enumerable.Range(110, 3).Select(idx => new InsertUser { Id = Guid.NewGuid(), Name = string.Format("Name {0}", idx), Age = idx, CreatedDate = TestDataGenerator.GetDateTimeInPast(idx), IsActive = idx % 2 == 0, LastLoginDate = TestDataGenerator.GetNullableDateTimeInPast(idx), LoginHistory = TestDataGenerator.GetList(idx, TestDataGenerator.GetDateTimeInPast), LuckyNumbers = TestDataGenerator.GetSet(idx, i => i), FavoriteColor = TestDataGenerator.GetEnumValue <RainbowColor>(idx), TypeOfUser = TestDataGenerator.GetEnumValue <UserType?>(idx), PreferredContact = TestDataGenerator.GetEnumValue <ContactMethod>(idx), HairColor = TestDataGenerator.GetEnumValue <HairColor>(idx) }).ToList(); // Create batch to insert users and execute var mapperAndSession = GetMapperAndSession(() => TestHelper.DelayedTask(new RowSet())); ICqlBatch batch = mapperAndSession.Mapper.CreateBatch(); batch.Insert(testUsers[0]); batch.Insert(testUsers[1]); batch.Insert(testUsers[2]); mapperAndSession.Mapper.ExecuteAsync(batch).Wait(); Mock.Get(mapperAndSession.Session).Verify(s => s.ExecuteAsync(It.IsAny <IStatement>(), It.Is <string>(profile => profile != "default")), Times.Never); Mock.Get(mapperAndSession.Session).Verify(s => s.ExecuteAsync(It.IsAny <IStatement>(), It.Is <string>(profile => profile == "default")), Times.Once); Mock.Get(mapperAndSession.Session).Verify(s => s.ExecuteAsync(It.IsAny <IStatement>()), Times.Never); Mock.Get(mapperAndSession.Session).Verify(s => s.Execute(It.IsAny <IStatement>(), It.IsAny <string>()), Times.Never); Mock.Get(mapperAndSession.Session).Verify(s => s.Execute(It.IsAny <IStatement>()), Times.Never); }
public void ExecuteAsync_MixedBatch_Test() { // Generate test user const int idx = 21; var testUser = new InsertUser { Id = Guid.NewGuid(), Name = string.Format("Name {0}", idx), Age = idx, CreatedDate = TestDataGenerator.GetDateTimeInPast(idx), IsActive = idx % 2 == 0, LastLoginDate = TestDataGenerator.GetNullableDateTimeInPast(idx), LoginHistory = TestDataGenerator.GetList(idx, TestDataGenerator.GetDateTimeInPast), LuckyNumbers = TestDataGenerator.GetSet(idx, i => i), FavoriteColor = TestDataGenerator.GetEnumValue <RainbowColor>(idx), TypeOfUser = TestDataGenerator.GetEnumValue <UserType?>(idx), PreferredContact = TestDataGenerator.GetEnumValue <ContactMethod>(idx), HairColor = TestDataGenerator.GetEnumValue <HairColor>(idx) }; // Get id of existing user for deleting and updating Guid deleteId = Guid.NewGuid(); Guid updateId = Guid.NewGuid(); // Create batch of mixed statements and execute var mapper = GetMapper(() => TestHelper.DelayedTask(new RowSet())); ICqlBatch batch = mapper.CreateBatch(); batch.Insert(testUser); batch.Delete <InsertUser>("WHERE userid = ?", deleteId); batch.Update <InsertUser>("SET name = ? WHERE userid = ?", "SomeNewName", updateId); mapper.ExecuteAsync(batch).Wait(); }
public async Task ExecuteAsync(ICqlBatch batch) { if (batch == null) { throw new ArgumentNullException("batch"); } var batchStatement = await _statementFactory .GetBatchStatementAsync(_session, batch.Statements, batch.BatchType).ConfigureAwait(false); await _session.ExecuteAsync(batchStatement).ConfigureAwait(false); }
public async Task ExecuteAsync(ICqlBatch batch) { if (batch == null) { throw new ArgumentNullException("batch"); } BatchStatement batchStatement = await _statementFactory.GetBatchStatementAsync(batch.Statements); await _session.ExecuteAsync(batchStatement); }
public void Execute(ICqlBatch batch) { if (batch == null) { throw new ArgumentNullException("batch"); } BatchStatement batchStatement = _statementFactory.GetBatchStatement(batch.Statements); _session.Execute(batchStatement); }
public async Task <BatchStatement> GetBatchStatementAsync(ISession session, ICqlBatch cqlBatch) { // Get all the statements async in parallel, then add to batch var childStatements = await Task .WhenAll(cqlBatch.Statements.Select(cql => GetStatementAsync(session, cql, cqlBatch.Options.NoPrepare))) .ConfigureAwait(false); var statement = new BatchStatement().SetBatchType(cqlBatch.BatchType); cqlBatch.Options.CopyOptionsToStatement(statement); foreach (var stmt in childStatements) { statement.Add(stmt); } return(statement); }
public Task ExecuteAsync(ICqlBatch batch) { if (batch == null) { throw new ArgumentNullException("batch"); } return(_statementFactory .GetBatchStatementAsync(_session, batch.Statements, batch.BatchType) .Continue(t => { var batchStatement = t.Result; return _session.ExecuteAsync(batchStatement); }) .Unwrap()); }
/// <inheritdoc /> public async Task <AppliedInfo <T> > ExecuteConditionalAsync <T>(ICqlBatch batch) { if (batch == null) { throw new ArgumentNullException("batch"); } var batchStatement = await _statementFactory .GetBatchStatementAsync(_session, batch) .ConfigureAwait(false); //Use the concatenation of cql strings as hash for the mapper var cqlString = string.Join(";", batch.Statements.Select(s => s.Statement)); var rs = await _session.ExecuteAsync(batchStatement).ConfigureAwait(false); return(AppliedInfo <T> .FromRowSet(_mapperFactory, cqlString, rs)); }
public async Task <BatchStatement> GetBatchStatementAsync(ISession session, ICqlBatch cqlBatch) { // Get all the statements async in parallel, then add to batch // execution profile is not used here because no statement is prepared or executed in this method var childStatements = await Task .WhenAll(cqlBatch.Statements.Select(cql => GetStatementAsync(session, cql, cqlBatch.Options.NoPrepare))) .ConfigureAwait(false); var statement = new BatchStatement().SetBatchType(cqlBatch.BatchType); cqlBatch.Options.CopyOptionsToStatement(statement); foreach (var stmt in childStatements) { statement.Add(stmt); } return(statement); }
/// <inheritdoc /> public async Task ExecuteAsync(ICqlBatch batch, string executionProfile) { if (executionProfile == null) { throw new ArgumentNullException(nameof(executionProfile)); } if (batch == null) { throw new ArgumentNullException(nameof(batch)); } var batchStatement = await _statementFactory .GetBatchStatementAsync(_session, batch) .ConfigureAwait(false); await ExecuteStatementAsync(batchStatement, executionProfile).ConfigureAwait(false); }
public Task <AppliedInfo <T> > ExecuteConditionalAsync <T>(ICqlBatch batch) { if (batch == null) { throw new ArgumentNullException("batch"); } return(_statementFactory .GetBatchStatementAsync(_session, batch.Statements, batch.BatchType) .Continue(t1 => { //Use the concatenation of cql strings as hash for the mapper var cqlString = String.Join(";", batch.Statements.Select(s => s.Statement)); var batchStatement = t1.Result; return _session.ExecuteAsync(batchStatement) .Continue(t2 => AppliedInfo <T> .FromRowSet(_mapperFactory, cqlString, t2.Result)); }) .Unwrap()); }
public void Execute_MixedBatch_Test() { // Generate test user const int idx = 20; var testUser = new InsertUser { Id = Guid.NewGuid(), Name = string.Format("Name {0}", idx), Age = idx, CreatedDate = TestDataGenerator.GetDateTimeInPast(idx), IsActive = idx % 2 == 0, LastLoginDate = TestDataGenerator.GetNullableDateTimeInPast(idx), LoginHistory = TestDataGenerator.GetList(idx, TestDataGenerator.GetDateTimeInPast), LuckyNumbers = TestDataGenerator.GetSet(idx, i => i), FavoriteColor = TestDataGenerator.GetEnumValue <RainbowColor>(idx), TypeOfUser = TestDataGenerator.GetEnumValue <UserType?>(idx), PreferredContact = TestDataGenerator.GetEnumValue <ContactMethod>(idx), HairColor = TestDataGenerator.GetEnumValue <HairColor>(idx) }; // Get id of existing user for deleting and updating Guid deleteId = Guid.NewGuid(); Guid updateId = Guid.NewGuid(); // Create batch of mixed statements and execute var mapper = GetMapper(() => TestHelper.DelayedTask(new RowSet())); ICqlBatch batch = mapper.CreateBatch(); batch.Insert(testUser); batch.Delete <InsertUser>("WHERE userid = ?", deleteId); batch.Update <InsertUser>("SET name = ? WHERE userid = ?", "SomeNewName", updateId); var queries = batch.Statements.Select(cql => cql.Statement).ToArray(); Assert.AreEqual(3, queries.Length); Assert.AreEqual("INSERT INTO users (userid, Name, Age, CreatedDate, IsActive, " + "LastLoginDate, LoginHistory, LuckyNumbers, ChildrenAges, " + "FavoriteColor, TypeOfUser, preferredcontactmethod, HairColor) VALUES " + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", queries[0]); Assert.AreEqual("DELETE FROM users WHERE userid = ?", queries[1]); Assert.AreEqual("UPDATE users SET name = ? WHERE userid = ?", queries[2]); mapper.Execute(batch); }
public static void ExecuteWithOptions( this ICqlBatch batch, string cql, CassandraQueryOptions queryOptions, params object[] args) { batch.WithOptions(o => { if (queryOptions == null) { return; } if (queryOptions.ConsistencyLevel.HasValue) { o.SetConsistencyLevel(queryOptions.ConsistencyLevel.Value); } if (queryOptions.PageSize.HasValue) { o.SetPageSize(queryOptions.PageSize.Value); } if (queryOptions.TracingEnabled.HasValue) { if (queryOptions.TracingEnabled.Value) { o.EnableTracing(); } else { o.DisableTracing(); } } }) .Execute(cql, args); }
/// <inheritdoc /> public Task <AppliedInfo <T> > ExecuteConditionalAsync <T>(ICqlBatch batch) { return(ExecuteConditionalAsync <T>(batch, Configuration.DefaultExecutionProfileName)); }
/// <inheritdoc /> public AppliedInfo <T> ExecuteConditional <T>(ICqlBatch batch, string executionProfile) { return(TaskHelper.WaitToComplete(ExecuteConditionalAsync <T>(batch, executionProfile), _queryAbortTimeout)); }
/// <summary> /// Create a new reservation /// </summary> /// <param name="oItem"></param> /// <returns></returns> public async Task <ResultModel <reservation> > AddReservation(item oItem) { ResultModel <reservation> results = new ResultModel <reservation>(); //check if item available var resultItem = await GetItemByIdValueAndTypeAsync(oItem); if (resultItem != null) { ItemStatus outStatus = ItemStatus.available; Enum.TryParse(resultItem.resultContent.status, out outStatus); Stopwatch sw = Stopwatch.StartNew(); var invCount = await mapper .FirstOrDefaultAsync <int> ("select available_count from inventory_by_location_and_upc where business_unit=? and location=? and upc=?", "wireless", "ye30cy", "upc123"); sw.Stop(); File.AppendAllText(@"C:\Guids.txt", $"AddReservation:GetCount: Time taken: {sw.Elapsed.Milliseconds}ms\r\n"); if (outStatus == ItemStatus.available && invCount > 0) { //upate inventory status 2 tables item newItem = new item { businessUnit = oItem.businessUnit, location = oItem.location, upc = oItem.upc, identifierValue = oItem.identifierValue, identifierType = oItem.identifierType, serialNumber = oItem.serialNumber, receiptId = oItem.receiptId, status = ItemStatus.reserved.ToString(), dateCreated = TimeUuid.NewId(), dateUpdated = TimeUuid.NewId(), itemAttributes = null, availableCount = invCount - 1 }; //insert item history itemHistory itemHist = new itemHistory { businessUnit = oItem.businessUnit, location = oItem.location, upc = oItem.upc, histItemId = Guid.NewGuid(), identifierValue = oItem.identifierValue, identifierType = oItem.identifierType, serialNumber = oItem.serialNumber, receiptId = oItem.receiptId, status = ItemStatus.reserved.ToString(), dateCreated = TimeUuid.NewId(), dateUpdated = TimeUuid.NewId(), itemAttributes = null }; //insert itembyIdentifier itemByIdentifier itemById = new itemByIdentifier { businessUnit = oItem.businessUnit, location = oItem.location, upc = oItem.upc, identifierValue = oItem.identifierValue, identifierType = oItem.identifierType, serialNumber = oItem.serialNumber, receiptId = oItem.receiptId, status = ItemStatus.reserved.ToString(), dateCreated = TimeUuid.NewId(), dateUpdated = TimeUuid.NewId(), itemAttributes = null }; var reservationId = Guid.NewGuid(); //create a reservation record reservation newReservation = new reservation { businessUnit = oItem.businessUnit, reservationId = reservationId, reserverId = Guid.NewGuid().ToCqlString(), location = oItem.location, upc = oItem.upc, identifierValue = oItem.identifierValue, identifierType = oItem.identifierType, serialNumber = oItem.serialNumber, receiptId = oItem.receiptId, itemStatus = ItemStatus.reserved.ToString(), dateCreated = TimeUuid.NewId(), dateUpdated = TimeUuid.NewId(), itemAttributes = null, reservationStatus = ReservationStatus.created.ToString() }; //create a reservation history reservationHistory newReservationHist = new reservationHistory { businessUnit = oItem.businessUnit, reservationId = reservationId, histReservationId = Guid.NewGuid(), reserverId = Guid.NewGuid().ToCqlString(), location = oItem.location, upc = oItem.upc, identifierValue = oItem.identifierValue, identifierType = oItem.identifierType, serialNumber = oItem.serialNumber, receiptId = oItem.receiptId, itemStatus = ItemStatus.reserved.ToString(), dateCreated = TimeUuid.NewId(), dateUpdated = TimeUuid.NewId(), itemAttributes = null, reservationStatus = ReservationStatus.created.ToString() }; //create a logged batch ICqlBatch itembatch = mapper.CreateBatch(BatchType.Logged); itembatch.Update <item>("SET status =? , available_count=? , date_updated= ? WHERE business_unit =? and location=? and upc=? and identifier_value=? and identifier_type=? IF status=?" , ItemStatus.reserved.ToString(), invCount - 1, TimeUuid.NewId() , oItem.businessUnit, oItem.location, oItem.upc, oItem.identifierValue, oItem.identifierType, ItemStatus.available.ToString()); itembatch.Options.SetConsistencyLevel(ConsistencyLevel.Quorum); sw = Stopwatch.StartNew(); await mapper.ExecuteAsync(itembatch); sw.Stop(); File.AppendAllText(@"C:\Guids.txt", $"AddReservation:itemBatch:Time taken: {sw.Elapsed.Milliseconds}ms\r\n"); //ICqlBatch reservationbatch = mapper.CreateBatch(BatchType.Logged); //reservationbatch.InsertIfNotExists(newReservation); //sw = Stopwatch.StartNew(); //await mapper.ExecuteConditionalAsync<reservation>(reservationbatch); //sw.Stop(); //File.AppendAllText(@"C:\Guids.txt", $"AddReservation:reservationBatch: Time taken: {sw.Elapsed.Milliseconds}ms\r\n"); ICqlBatch allBatch = mapper.CreateBatch(BatchType.Logged); allBatch.Insert <reservation>(newReservation); allBatch.Insert <itemByIdentifier>(itemById); allBatch.Insert <itemHistory>(itemHist); allBatch.Insert <reservationHistory>(newReservationHist); allBatch.Options.SetConsistencyLevel(ConsistencyLevel.Quorum); sw = Stopwatch.StartNew(); await mapper.ExecuteAsync(allBatch); sw.Stop(); File.AppendAllText(@"C:\Guids.txt", $"AddReservation:restOfBatch: Time taken: {sw.Elapsed.Milliseconds}ms\r\n"); results.resultContent = newReservation; results.resultCode = ResultStatus.success; return(results); } } results.resultCode = ResultStatus.failure; return(results); }
/// <inheritdoc /> public Task ExecuteAsync(ICqlBatch batch) { return(ExecuteAsync(batch, Configuration.DefaultExecutionProfileName)); }
/// <inheritdoc /> public void Execute(ICqlBatch batch, string executionProfile) { //Wait async method to be completed or throw TaskHelper.WaitToComplete(ExecuteAsync(batch, executionProfile), _queryAbortTimeout); }
/// <inheritdoc /> public void Execute(ICqlBatch batch) { //Wait async method to be completed or throw TaskHelper.WaitToComplete(ExecuteAsync(batch), _queryAbortTimeout); }
/// <inheritdoc /> public AppliedInfo <T> ExecuteConditional <T>(ICqlBatch batch) { return(TaskHelper.WaitToCompleteWithMetrics(_metricsManager, ExecuteConditionalAsync <T>(batch), _queryAbortTimeout)); }