Merge pull request #181 from minia68/master

Make transaction return a value
This commit is contained in:
Simon Binder 2019-10-10 17:06:05 +02:00 committed by GitHub
commit e66eaa6127
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 12 additions and 6 deletions

View File

@ -7,7 +7,7 @@ environment:
sdk: '>=2.4.0 <3.0.0'
dependencies:
moor: ^1.6.0
moor: ^2.0.0
sqflite:
git:
url: https://www.github.com/davidmartos96/sqflite_sqlcipher.git

View File

@ -286,22 +286,23 @@ mixin QueryEngine on DatabaseConnectionUser {
/// inside a transaction returns the parent transaction.
@protected
@visibleForTesting
Future transaction(Future Function() action) async {
Future<T> transaction<T>(Future<T> Function() action) async {
final resolved = _resolvedEngine;
if (resolved is Transaction) {
return action();
}
final executor = resolved.executor;
await executor.doWhenOpened((executor) {
return await executor.doWhenOpened((executor) {
final transactionExecutor = executor.beginTransaction();
final transaction = Transaction(this, transactionExecutor);
return _runEngineZoned(transaction, () async {
var success = false;
try {
await action();
final result = await action();
success = true;
return result;
} catch (e) {
await transactionExecutor.rollback();

View File

@ -14,7 +14,7 @@ class BeforeOpenEngine extends DatabaseConnectionUser with QueryEngine {
@override
@alwaysThrows
Future transaction(Function action) {
Future<T> transaction<T>(Function action) {
throw UnsupportedError("Transactions can't be started inside beforeOpen");
}
}

View File

@ -99,4 +99,9 @@ void main() {
verify(executor.doWhenOpened(any));
});
});
test('transaction return value', () async {
final actual = await db.transaction(() async => 1);
expect(actual, 1);
});
}