@@ -48,7 +48,7 @@ void _declareTests(String name, SyncOptions options) {
4848 var credentialsCallbackCount = 0 ;
4949 Future <void > Function (PowerSyncDatabase ) uploadData = (db) async {};
5050
51- void createSyncClient () {
51+ void createSyncClient ({ Schema ? schema} ) {
5252 final (client, server) = inMemoryServer ();
5353 server.mount (syncService.router.call);
5454
@@ -63,6 +63,7 @@ void _declareTests(String name, SyncOptions options) {
6363 );
6464 }, uploadData: (db) => uploadData (db)),
6565 options: options,
66+ customSchema: schema,
6667 );
6768
6869 addTearDown (() async {
@@ -207,6 +208,103 @@ void _declareTests(String name, SyncOptions options) {
207208 // because the messages were received in quick succession.
208209 expect (commits, 1 );
209210 });
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+ });
210308 }
211309
212310 group ('partial sync' , () {
0 commit comments