transaction method

  1. @override
Future<ChalonaResponse> transaction(
  1. TransactionFn fn
)
override

Implementation

@override
Future<ChalonaResponse> transaction(TransactionFn fn) async {
  var db = await _connect();
  dynamic r;
  var tr = MSQLTransaction(db);
  // await tr.request('begin transaction');
  r = await fn(tr);
  // await tr.request('commit')

  await db.disconnect();

  if (r is ChalonaResponse) {
    return r;
  }
  // no hay datos
  if (r.isEmpty) {
    return ChalonaResponse(source: {
      'ok': true,
      'msg': 'no-results',
      'data': {'result': []}
    });
  }
  // es un mapa de datos, con ok, msg y data
  if (r.length == 1 && r.first.containsKey('ok')) {
    return ChalonaResponse(source: r.first);
  }
  // es una lista de datos
  return ChalonaResponse(source: {
    'ok': true,
    'msg': '',
    'data': {'result': r}
  });
}