@@ -8,6 +8,7 @@ use sqlite::ResultCode;
8
8
use sqlite_nostd as sqlite;
9
9
use sqlite_nostd:: { Connection , Context } ;
10
10
11
+ use crate :: bucket_priority:: BucketPriority ;
11
12
use crate :: error:: { PSResult , SQLiteError } ;
12
13
use crate :: fix035:: apply_v035_fix;
13
14
@@ -310,5 +311,48 @@ json_array(
310
311
. into_db_result ( local_db) ?;
311
312
}
312
313
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
+
313
357
Ok ( ( ) )
314
358
}
0 commit comments