transaction method
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}
});
}