@@ -69,5 +69,61 @@ void main() {
6969 final changes = await changesFuture;
7070 expect (changes.first, equals (UpdateNotification ({'customers' })));
7171 });
72+
73+ test ('soft clear' , () async {
74+ final db = await testUtils.setupPowerSync (path: path, schema: testSchema);
75+ addTearDown (db.close);
76+
77+ await db.execute (
78+ 'INSERT INTO customers (id, name) VALUES(uuid(), ?)' , ['testuser' ]);
79+ await db.execute (
80+ 'INSERT INTO ps_buckets (name, last_applied_op) VALUES (?, ?)' ,
81+ ['bkt' , 10 ],
82+ );
83+
84+ // Doing a soft-clear should delete data but keep the bucket around.
85+ await db.disconnectAndClear (soft: true );
86+ expect (await db.getAll ('SELECT * FROM ps_buckets' ), hasLength (1 ));
87+
88+ // Doing a default clear also deletes buckets.
89+ await db.disconnectAndClear ();
90+ expect (await db.getAll ('SELECT * FROM ps_buckets' ), isEmpty);
91+ });
92+
93+ test ('clear raw tables' , () async {
94+ final db = await testUtils.setupPowerSync (
95+ path: path,
96+ schema: Schema (
97+ rawTables: [
98+ RawTable (
99+ name: 'lists' ,
100+ put: PendingStatement (
101+ sql: 'INSERT OR REPLACE INTO lists (id, name) VALUES (?, ?)' ,
102+ params: [
103+ PendingStatementValue .id (),
104+ PendingStatementValue .column ('name' )
105+ ],
106+ ),
107+ delete: PendingStatement (
108+ sql: 'DELETE FROM lists WHERE id = ?' ,
109+ params: [PendingStatementValue .id ()],
110+ ),
111+ clear: 'DELETE FROM lists' ,
112+ ),
113+ ],
114+ [],
115+ ),
116+ );
117+ addTearDown (db.close);
118+
119+ await db.execute (
120+ 'CREATE TABLE lists (id TEXT NOT NULL PRIMARY KEY, name TEXT)' );
121+ await db
122+ .execute ('INSERT INTO lists (id, name) VALUES (uuid(), ?)' , ['list' ]);
123+
124+ expect (await db.getAll ('SELECT * FROM lists' ), hasLength (1 ));
125+ await db.disconnectAndClear ();
126+ expect (await db.getAll ('SELECT * FROM lists' ), isEmpty);
127+ });
72128 });
73129}
0 commit comments