/// <summary> /// Initializes a new instance of the <see cref="CqlBatchTransaction" /> class. /// </summary> public CqlBatchTransaction() { _batchCommand = new CqlCommand {Transaction = this}; _commands = new List<BatchFrame.BatchedCommand>(); _batchType = CqlBatchType.Logged; _state = TransactionState.Pending; }
/// <summary> /// Initializes a new instance of the <see cref="CqlBatchTransaction" /> class. /// </summary> /// <param name="connection"> The connection. </param> /// <param name="batchType"> Type of the batch. </param> /// <param name="consistency"> The consistency. </param> public CqlBatchTransaction(CqlConnection connection, CqlBatchType batchType = CqlBatchType.Logged, CqlConsistency consistency = CqlConsistency.One) { _batchCommand = new CqlCommand(connection) {Consistency = consistency, Transaction = this}; _commands = new List<BatchFrame.BatchedCommand>(); _batchType = batchType; _state = TransactionState.Pending; }
/// <summary> /// Initializes a new instance of the <see cref="BatchFrame" /> class. /// </summary> public BatchFrame(CqlBatchType batchType, CqlConsistency consistency) { IsRequest = true; Flags = FrameFlags.None; Stream = 0; OpCode = FrameOpcode.Batch; Type = batchType; CqlConsistency = consistency; Commands = new List<BatchedCommand>(); }
private async Task BatchInsertInternal(CqlBatchType batchType) { //Assume const string insertCql = @"insert into Test.BasicFlow (id,value) values (?,?);"; const string retrieveCql = @"select id,value,ignored from Test.BasicFlow;"; //Act using(var connection = new CqlConnection(ConnectionString)) { await connection.OpenAsync(); var transaction = connection.BeginTransaction(); transaction.BatchType = batchType; //insert data var cmd = new CqlCommand(connection, insertCql, CqlConsistency.One); cmd.Transaction = transaction; await cmd.PrepareAsync(); for(int i = 0; i < 10; i++) { cmd.Parameters[0].Value = i; cmd.Parameters[1].Value = "Hello " + i; await cmd.ExecuteNonQueryAsync(); } var cmd2 = new CqlCommand(connection, insertCql, CqlConsistency.One); cmd2.Transaction = transaction; cmd2.Parameters.Add("id", CqlType.Int); cmd2.Parameters.Add("value", CqlType.Text); for(int i = 10; i < 20; i++) { cmd2.Parameters[0].Value = i; cmd2.Parameters[1].Value = "Hello " + i; await cmd2.ExecuteNonQueryAsync(); } try { await transaction.CommitAsync(); } catch(ProtocolException pex) { //skip when server version is below 2.0.0 if(pex.Code == ErrorCode.Protocol && String.Compare(connection.ServerVersion, "2.0.0", StringComparison.Ordinal) < 0) return; throw; } //select data var selectCmd = new CqlCommand(connection, retrieveCql, CqlConsistency.One); CqlDataReader reader = await selectCmd.ExecuteReaderAsync(); Assert.AreEqual(20, reader.Count); var results = new bool[20]; for(int i = 0; i < 20; i++) { if(await reader.ReadAsync()) { results[(int)reader["id"]] = true; Assert.AreEqual("Hello " + reader["id"], reader["value"]); } else Assert.Fail("Read should have succeeded"); } Assert.IsTrue(results.All(p => p)); Assert.IsNotNull(transaction.LastBatchResult); } }