runInTransaction<R> method
- TxMode mode,
- R fn(
Executes a given function inside a transaction.
Returns type of fn
if return
is called in fn
.
Implementation
R runInTransaction<R>(TxMode mode, R Function() fn) {
final write = mode == TxMode.Write;
final txn = write
? bindings.obx_txn_write(_cStore)
: bindings.obx_txn_read(_cStore);
checkObxPtr(txn, 'failed to create transaction');
try {
if (write) {
checkObx(bindings.obx_txn_mark_success(txn, 1));
}
return fn();
} catch (ex) {
if (write) {
checkObx(bindings.obx_txn_mark_success(txn, 0));
}
rethrow;
} finally {
checkObx(bindings.obx_txn_close(txn));
}
}