public void Execute_UpdateSameRecordAtSameTime_ThrowsOccException()

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());
        }