in Amazon.QLDB.Driver.IntegrationTests/StatementExecutionTests.cs [613:660]
public void Execute_UpdateSameRecordAtSameTime_ThrowsOccException()
{
// Create a driver that does not retry OCC errors
QldbDriver driver = integrationTestBase.CreateDriver(amazonQldbSessionConfig, default, default);
// Insert document.
// Create Ion struct with int value 0 to insert.
IIonValue ionStruct = ValueFactory.NewEmptyStruct();
ionStruct.SetField(Constants.ColumnName, ValueFactory.NewInt(0));
var query = $"INSERT INTO {Constants.TableName} ?";
var count = driver.Execute(txn =>
{
var result = txn.Execute(query, ionStruct);
var count = 0;
foreach (var row in result)
{
count++;
}
return count;
});
Assert.AreEqual(1, count);
string selectQuery = $"SELECT VALUE {Constants.ColumnName} FROM {Constants.TableName}";
string updateQuery = $"UPDATE {Constants.TableName} SET {Constants.ColumnName} = ?";
// For testing purposes only. Forcefully causes an OCC conflict to occur.
// Do not invoke QldbDriver.Execute within the lambda function under normal circumstances.
driver.Execute(txn =>
{
// Query table.
var result = txn.Execute(selectQuery);
var currentValue = 0;
foreach (var row in result)
{
currentValue = row.IntValue;
}
driver.Execute(txn =>
{
// Update document.
var ionValue = ValueFactory.NewInt(currentValue + 5);
txn.Execute(updateQuery, ionValue);
}, RetryPolicy.Builder().WithMaxRetries(0).Build());
}, RetryPolicy.Builder().WithMaxRetries(0).Build());
}