runInTransaction<R> method

R runInTransaction <R>(
  1. TxMode mode,
  2. 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));
      }
    }