I have some code to update a database table that looks like
try
{
db.execute("BEGIN");
// Lots of DELETE and INSERT
db.execute("COMMIT");
}
catch (DBException&)
{
db.execute("ROLLBACK");
}
I’d like to wrap the transaction logic in an RAII class so I could just write
{
DBTransaction trans(db);
// Lots of DELETE and INSERT
}
but how would I write the destructor for it?
Use following:
When
tr.commit()completes it sets the state to “commit done” and destructor does nothing,otherwise it rollbacks.
Checking for exception is bad idea, consider:
In this case you probably expect rather rollback then commit but commit would be done.
Edit: but if you still want it badly, take a look on
std::uncaught_exception()but read this first http://www.gotw.ca/gotw/047.htm