@@ -8,6 +8,7 @@ use sqlite::ResultCode;
88use sqlite_nostd as sqlite;
99use sqlite_nostd:: { Connection , Context } ;
1010
11+ use crate :: bucket_priority:: BucketPriority ;
1112use crate :: error:: { PSResult , SQLiteError } ;
1213use crate :: fix035:: apply_v035_fix;
1314
@@ -310,5 +311,48 @@ json_array(
310311 . into_db_result ( local_db) ?;
311312 }
312313
314+ if current_version < 7 && target_version >= 7 {
315+ const SENTINEL_PRIORITY : i32 = BucketPriority :: SENTINEL . number ;
316+ let stmt = format ! ( "\
317+ CREATE TABLE ps_sync_state (
318+ priority INTEGER NOT NULL,
319+ last_synced_at TEXT NOT NULL
320+ ) STRICT;
321+ INSERT OR IGNORE INTO ps_sync_state (priority, last_synced_at)
322+ SELECT {}, value from ps_kv where key = 'last_synced_at';
323+
324+ INSERT INTO ps_migration(id, down_migrations)
325+ VALUES(7,
326+ json_array(
327+ json_object('sql', 'INSERT OR REPLACE INTO ps_kv(key, value) SELECT ''last_synced_at'', last_synced_at FROM ps_sync_state WHERE priority = {}'),
328+ json_object('sql', 'DROP TABLE ps_sync_state'),
329+ json_object('sql', 'DELETE FROM ps_migration WHERE id >= 7')
330+ ));
331+ " , SENTINEL_PRIORITY , SENTINEL_PRIORITY ) ;
332+
333+ local_db. exec_safe ( & stmt) . into_db_result ( local_db) ?;
334+ }
335+
336+ if current_version < 8 && target_version >= 8 {
337+ let stmt = "\
338+ ALTER TABLE ps_sync_state RENAME TO ps_sync_state_old;
339+ CREATE TABLE ps_sync_state (
340+ priority INTEGER NOT NULL PRIMARY KEY,
341+ last_synced_at TEXT NOT NULL
342+ ) STRICT;
343+ INSERT INTO ps_sync_state (priority, last_synced_at)
344+ SELECT priority, MAX(last_synced_at) FROM ps_sync_state_old GROUP BY priority;
345+ DROP TABLE ps_sync_state_old;
346+ INSERT INTO ps_migration(id, down_migrations) VALUES(8, json_array(
347+ json_object('sql', 'ALTER TABLE ps_sync_state RENAME TO ps_sync_state_new'),
348+ json_object('sql', 'CREATE TABLE ps_sync_state (\n priority INTEGER NOT NULL,\n last_synced_at TEXT NOT NULL\n ) STRICT'),
349+ json_object('sql', 'INSERT INTO ps_sync_state SELECT * FROM ps_sync_state_new'),
350+ json_object('sql', 'DROP TABLE ps_sync_state_new'),
351+ json_object('sql', 'DELETE FROM ps_migration WHERE id >= 8')
352+ ));
353+ " ;
354+ local_db. exec_safe ( & stmt) . into_db_result ( local_db) ?;
355+ }
356+
313357 Ok ( ( ) )
314358}
0 commit comments