@@ -7,6 +7,7 @@ import 'dart:math';
77
88import 'package:sqlite3/common.dart' ;
99import 'package:sqlite_async/sqlite_async.dart' ;
10+ import 'package:sqlite_async/src/utils/shared_utils.dart' ;
1011import 'package:test/test.dart' ;
1112
1213import '../utils/test_utils_impl.dart' ;
@@ -31,6 +32,51 @@ void main() {
3132 return db;
3233 });
3334
35+ test ('raw update notifications' , () async {
36+ final factory = await testUtils.testFactory (path: path);
37+ final db = factory
38+ .openDB (SqliteOpenOptions (primaryConnection: true , readOnly: false ));
39+
40+ db.execute ('CREATE TABLE a (bar INTEGER);' );
41+ db.execute ('CREATE TABLE b (bar INTEGER);' );
42+ final events = < Set <String >> [];
43+ final subscription = db.updatedTables.listen (events.add);
44+
45+ db.execute ('insert into a default values' );
46+ expect (events, isEmpty); // should be async
47+ await pumpEventQueue ();
48+ expect (events.removeLast (), {'a' });
49+
50+ db.execute ('begin' );
51+ db.execute ('insert into a default values' );
52+ db.execute ('insert into b default values' );
53+ await pumpEventQueue ();
54+ expect (events, isEmpty); // should only trigger on commit
55+ db.execute ('commit' );
56+
57+ await pumpEventQueue ();
58+ expect (events.removeLast (), {'a' , 'b' });
59+
60+ db.execute ('begin' );
61+ db.execute ('insert into a default values' );
62+ db.execute ('rollback' );
63+ expect (events, isEmpty);
64+ await pumpEventQueue ();
65+ expect (events, isEmpty); // should ignore cancelled transactions
66+
67+ // Should still listen during pause, and dispatch on resume
68+ subscription.pause ();
69+ db.execute ('insert into a default values' );
70+ await pumpEventQueue ();
71+ expect (events, isEmpty);
72+
73+ subscription.resume ();
74+ await pumpEventQueue ();
75+ expect (events.removeLast (), {'a' });
76+
77+ subscription.pause ();
78+ });
79+
3480 test ('watch in isolate' , () async {
3581 final db = await testUtils.setupDatabase (path: path);
3682 await createTables (db);
0 commit comments