@@ -1170,6 +1170,76 @@ CREATE TRIGGER users_delete
11701170 expect (db.select ('SELECT * FROM users' ), isEmpty);
11711171 });
11721172
1173+ syncTest ('default trigger smoke test' , (_) {
1174+ db.execute (
1175+ 'CREATE TABLE local_users (id TEXT NOT NULL PRIMARY KEY, name TEXT NOT NULL) STRICT;' );
1176+ final table = {
1177+ 'name' : 'users' ,
1178+ 'table_name' : 'local_users' ,
1179+ // This also tests that the trigger preventing updates and deletes on
1180+ // insert-only tables is inert during sync_local.
1181+ 'insert_only' : true ,
1182+ 'put' : {
1183+ 'sql' : 'INSERT OR REPLACE INTO local_users (id, name) VALUES (?, ?);' ,
1184+ 'params' : [
1185+ 'Id' ,
1186+ {'Column' : 'name' }
1187+ ],
1188+ },
1189+ 'delete' : {
1190+ 'sql' : 'DELETE FROM local_users WHERE id = ?' ,
1191+ 'params' : ['Id' ],
1192+ },
1193+ 'clear' : 'DELETE FROM local_users;' ,
1194+ };
1195+ db.execute ('''
1196+ SELECT
1197+ powersync_create_raw_table_crud_trigger(?1, 'test_insert', 'INSERT'),
1198+ powersync_create_raw_table_crud_trigger(?1, 'test_update', 'UPDATE'),
1199+ powersync_create_raw_table_crud_trigger(?1, 'test_delete', 'DELETE')
1200+ ''' , [json.encode (table)]);
1201+
1202+ invokeControl (
1203+ 'start' ,
1204+ json.encode ({
1205+ 'schema' : {
1206+ 'raw_tables' : [table],
1207+ 'tables' : [],
1208+ }
1209+ }));
1210+
1211+ // Insert
1212+ pushCheckpoint (buckets: [bucketDescription ('a' )]);
1213+ pushSyncData (
1214+ 'a' ,
1215+ '1' ,
1216+ 'my_user' ,
1217+ 'PUT' ,
1218+ {'name' : 'First user' },
1219+ objectType: 'users' ,
1220+ );
1221+ pushCheckpointComplete ();
1222+
1223+ final users = db.select ('SELECT * FROM local_users;' );
1224+ expect (users, [
1225+ {'id' : 'my_user' , 'name' : 'First user' }
1226+ ]);
1227+
1228+ // Delete
1229+ pushCheckpoint (buckets: [bucketDescription ('a' )]);
1230+ pushSyncData (
1231+ 'a' ,
1232+ '1' ,
1233+ 'my_user' ,
1234+ 'REMOVE' ,
1235+ null ,
1236+ objectType: 'users' ,
1237+ );
1238+ pushCheckpointComplete ();
1239+
1240+ expect (db.select ('SELECT * FROM local_users' ), isEmpty);
1241+ });
1242+
11731243 test ('reports errors from underlying statements' , () {
11741244 setupRawTables ();
11751245 invokeControl ('start' , json.encode ({'schema' : schema}));
0 commit comments