persistent: How do I get the I in ACID

haskell, persistent, yesod

Solution

I haven't used `persistent` myself, but the Yesod book mentions that

One important thing to note is that everything which occurs inside a single call to `runSqlConn` runs in a single transaction. This has two important implications:

For many databases, committing a transaction can be a costly activity. By putting multiple steps into a single transaction, you can speed up code dramatically.

If an exception is thrown anywhere inside a single call to `runSqlConn`, all actions will be rolled back (assuming your backend has rollback support).

Whether this gives you isolation guarantees probably depends on whether the given back-end gives isolation guarantees for transactions.

Problem

Assume I'm doing the following steps in a transaction: - read some data A from the database - do some calculation based on it - write some data B to the database Is it possible to make this transaction fail if A has changed in the mean time? In short: How do I achieve isolation in the persistent package?

Original source