First of all, know that Transaction::release() releases the transaction object and related resources allocated by McoSql, but not by the eXtremeDB runtime. So the Transaction::release() method has to be called after any way to finish the transaction ( commit/release ). For example, see this snippet from our sample: “samples/native/sql/api/sql-03-transactions/mvcc/main.cpp”:
...
void task1( sample_task_t * descriptor )
{
int rc;
uint4 i;
McoSqlSession session( &engine );
SqlEngineAllocatorContext ctx(&session);
Transaction* trans = session.database()->beginTransaction(Transaction::ReadWrite, 0, isolation_level);
try {
for (i = 0; i < (uint4)n_iterations; i++)
{
StructB a;
char tag[MAX_TAG_LENGTH+1];
a.tag = tag;
a.ui4 = i;
sprintf(a.tag, "\t\tStream 1, rec %u\n", i);
mem_write(a.tag);
//rc = pEngine->executeStatement("insert into A %r", a);
rc = session.executeStatement(trans, "insert into A %r", &a);
sample_sleep(nap_duration1);
}
} catch (McoSqlException &err) {
mem_write("ERROR: ");
mem_write(err.getMessage()->cstr());
trans->rollback();