@@ -7,6 +7,7 @@ import 'dart:math';
7
7
8
8
import 'package:sqlite3/common.dart' ;
9
9
import 'package:sqlite_async/sqlite_async.dart' ;
10
+ import 'package:sqlite_async/src/utils/shared_utils.dart' ;
10
11
import 'package:test/test.dart' ;
11
12
12
13
import '../utils/test_utils_impl.dart' ;
@@ -31,6 +32,51 @@ void main() {
31
32
return db;
32
33
});
33
34
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
+
34
80
test ('watch in isolate' , () async {
35
81
final db = await testUtils.setupDatabase (path: path);
36
82
await createTables (db);
0 commit comments