@@ -48,7 +48,7 @@ void _declareTests(String name, SyncOptions options) {
48
48
var credentialsCallbackCount = 0 ;
49
49
Future <void > Function (PowerSyncDatabase ) uploadData = (db) async {};
50
50
51
- void createSyncClient () {
51
+ void createSyncClient ({ Schema ? schema} ) {
52
52
final (client, server) = inMemoryServer ();
53
53
server.mount (syncService.router.call);
54
54
@@ -63,6 +63,7 @@ void _declareTests(String name, SyncOptions options) {
63
63
);
64
64
}, uploadData: (db) => uploadData (db)),
65
65
options: options,
66
+ customSchema: schema,
66
67
);
67
68
68
69
addTearDown (() async {
@@ -207,6 +208,103 @@ void _declareTests(String name, SyncOptions options) {
207
208
// because the messages were received in quick succession.
208
209
expect (commits, 1 );
209
210
});
211
+ } else {
212
+ // raw tables are only supported by the rust sync client
213
+ test ('raw tabkes' , () async {
214
+ final schema = Schema (const [], rawTables: [
215
+ RawTable (
216
+ name: 'lists' ,
217
+ put: PendingStatement (
218
+ sql: 'INSERT OR REPLACE INTO lists (id, name) VALUES (?, ?)' ,
219
+ params: [
220
+ PendingStatementValue .id (),
221
+ PendingStatementValue .column ('name' ),
222
+ ],
223
+ ),
224
+ delete: PendingStatement (
225
+ sql: 'DELETE FROM lists WHERE id = ?' ,
226
+ params: [
227
+ PendingStatementValue .id (),
228
+ ],
229
+ ),
230
+ ),
231
+ ]);
232
+
233
+ await database.execute (
234
+ 'CREATE TABLE lists (id TEXT NOT NULL PRIMARY KEY, name TEXT);' );
235
+ final query = StreamQueue (
236
+ database.watch ('SELECT * FROM lists' , throttle: Duration .zero));
237
+ await expectLater (query, emits (isEmpty));
238
+
239
+ createSyncClient (schema: schema);
240
+ await waitForConnection ();
241
+
242
+ syncService
243
+ ..addLine ({
244
+ 'checkpoint' : Checkpoint (
245
+ lastOpId: '1' ,
246
+ writeCheckpoint: null ,
247
+ checksums: [
248
+ BucketChecksum (bucket: 'a' , priority: 3 , checksum: 0 )
249
+ ],
250
+ )
251
+ })
252
+ ..addLine ({
253
+ 'data' : {
254
+ 'bucket' : 'a' ,
255
+ 'data' : [
256
+ {
257
+ 'checksum' : 0 ,
258
+ 'data' : json.encode ({'name' : 'custom list' }),
259
+ 'op' : 'PUT' ,
260
+ 'op_id' : '1' ,
261
+ 'object_id' : 'my_list' ,
262
+ 'object_type' : 'lists'
263
+ }
264
+ ]
265
+ }
266
+ })
267
+ ..addLine ({
268
+ 'checkpoint_complete' : {'last_op_id' : '1' }
269
+ });
270
+
271
+ await expectLater (
272
+ query,
273
+ emits ([
274
+ {'id' : 'my_list' , 'name' : 'custom list' }
275
+ ]),
276
+ );
277
+
278
+ syncService
279
+ ..addLine ({
280
+ 'checkpoint' : Checkpoint (
281
+ lastOpId: '2' ,
282
+ writeCheckpoint: null ,
283
+ checksums: [
284
+ BucketChecksum (bucket: 'a' , priority: 3 , checksum: 0 )
285
+ ],
286
+ )
287
+ })
288
+ ..addLine ({
289
+ 'data' : {
290
+ 'bucket' : 'a' ,
291
+ 'data' : [
292
+ {
293
+ 'checksum' : 0 ,
294
+ 'op' : 'REMOVE' ,
295
+ 'op_id' : '2' ,
296
+ 'object_id' : 'my_list' ,
297
+ 'object_type' : 'lists'
298
+ }
299
+ ]
300
+ }
301
+ })
302
+ ..addLine ({
303
+ 'checkpoint_complete' : {'last_op_id' : '2' }
304
+ });
305
+
306
+ await expectLater (query, emits (isEmpty));
307
+ });
210
308
}
211
309
212
310
group ('partial sync' , () {
0 commit comments