For common use cases, the ProjectM36.Client.Simple API can assist in transaction management. The API is designed to be less overwhelming than the full-featured ProjectM36.Client (see documentation).
As such, not all features are available through the simple API, but, because the simple API is a thin layer over the complete API, the user may dip into the complete API at any time.
-
Create a
DbConnto connect to the database:import ProjectM36.Client.Simple ... let connInfo = InProcessConnectionInfo (CrashSafePersistence "my.db") emptyNotificationCallback [] eDbconn <- simpleConnectProjectM36 connInfo
The result is
EitheraDbErroror a connection linked to the"master"branch of the database. -
Run the
Dbmonad usingwithTransaction:withTransaction dbconn $ do execute $ Assign "x" (ExistingRelation relationTrue) query $ RelationVariable "x" ()
If there is an error in the above update or query, then an exception is thrown behind the scenes which cancels the transactions, rolls back any changes, and the error is returned by
withTransaction.queryis used withRelationalExprqueries which read the current database state.executeis used withDatabaseContextExprvalues which write the current database state.To execute a query without cancelling the transaction on an error, use the
queryOrErrandexecuteOrErrvariants. -
Close the connection:
close dbconn