Fetch stream if outstanding requests are cancelled

Closes #2744
This commit is contained in:
Simon Binder 2023-11-26 12:48:27 +01:00
parent 08241bfdd2
commit 81d7e92d30
No known key found for this signature in database
GPG Key ID: 7891917E4147B8C0
4 changed files with 37 additions and 1 deletions

View File

@ -3,6 +3,11 @@
- Add the `QueryInterceptor` to easily monitor all database calls made by drift.
- Add the `count()` extension on tables to easily count rows in tables or views.
## 2.13.2
- Fix a race condition causing query streams to not emit new data around some
transaction setups.
## 2.13.1
- Fix a bug when running batches over serialized communication channels.

View File

@ -303,6 +303,7 @@ class QueryStream {
for (final op in _runningOperations) {
op.cancel();
}
_runningOperations.clear();
}
Future<void> fetchAndEmitData() async {

View File

@ -0,0 +1,30 @@
import 'package:drift/drift.dart';
import 'package:test/test.dart';
import '../generated/todos.dart';
import '../test_utils/test_utils.dart';
void main() {
test('updates after transaction', () async {
// Regression test for https://github.com/simolus3/drift/issues/2744
final db = TodoDb(testInMemoryDatabase());
final categories = db.categories.all().watch();
expect(categories, emits(isEmpty));
await db.categories
.insertOne(CategoriesCompanion.insert(description: 'desc1'));
expect(categories, emits(hasLength(1)));
await db.categories.deleteAll();
await db.batch((batch) {
batch.insert(
db.categories, CategoriesCompanion.insert(description: 'desc2'));
});
expect(
categories,
emits([
isA<Category>().having((e) => e.description, 'description', 'desc2')
]));
});
}

View File

@ -21,7 +21,7 @@ class Database extends _$Database {
@override
int get schemaVersion => latestSchemaVersion;
Database(DatabaseConnection super.connection);
Database(super.connection);
@override
MigrationStrategy get migration {