Reset only dependent group history state when adopting editable format
This commit is contained in:
1 parent
0a75a53ed9
commit
82ef6f282f
1 file changed
+23
-7
+23
-7
@@ -319,16 +319,32 @@ static int si_table_init(struct DB_SYNC_INSTANCE* si) {
|
||||
snprintf(sql, sizeof(sql), "DELETE FROM \"feedback_%s\"", si->ns);
|
||||
if (sqlite3_exec(db, sql, NULL, NULL, NULL) != SQLITE_OK) goto rollback;
|
||||
}
|
||||
if (sqlite3_prepare_v2(db, "DELETE FROM merkle_tree_hash WHERE namespace IN (?1,?2)", -1, &st, NULL) != SQLITE_OK)
|
||||
goto rollback;
|
||||
char messages[25], feedback[25];
|
||||
snprintf(messages, sizeof(messages), "%u:%s", MT_DATA_MESSAGES, si->ns);
|
||||
snprintf(feedback, sizeof(feedback), "%u:%s", MT_DATA_FEEDBACK, si->ns);
|
||||
rc = sqlite3_bind_text(st, 1, messages, -1, SQLITE_STATIC);
|
||||
if (rc == SQLITE_OK) rc = sqlite3_bind_text(st, 2, feedback, -1, SQLITE_STATIC);
|
||||
if (rc == SQLITE_OK) rc = sqlite3_step(st);
|
||||
final_rc = sqlite3_finalize(st); st = NULL;
|
||||
if (rc != SQLITE_DONE || final_rc != SQLITE_OK || sqlite3_exec(db, "COMMIT", NULL, NULL, NULL) != SQLITE_OK) goto rollback;
|
||||
const char* dependencies[] = {"merkle_tree_hash", "attachment_keys", "attachment_key_requests", "attachment_key_outbox", "channels", "ui_state"};
|
||||
const char* cleanup[] = {
|
||||
"DELETE FROM merkle_tree_hash WHERE namespace IN (?1,?2)",
|
||||
"DELETE FROM attachment_keys WHERE channel=?1", "DELETE FROM attachment_key_requests WHERE channel=?1",
|
||||
"DELETE FROM attachment_key_outbox WHERE channel=?1",
|
||||
"UPDATE channels SET last_msg_at=0,last_read_msg_id=0,last_pos_msg_id=0 WHERE channel_id=?1",
|
||||
"DELETE FROM ui_state WHERE key IN ('ch_'||?1||'_last_read','ch_'||?1||'_last_pos')"
|
||||
};
|
||||
for (unsigned i = 0; i < sizeof(dependencies) / sizeof(dependencies[0]); i++) {
|
||||
if (sqlite3_prepare_v2(db, "SELECT 1 FROM sqlite_master WHERE type='table' AND name=?", -1, &st, NULL) != SQLITE_OK) goto rollback;
|
||||
rc = sqlite3_bind_text(st, 1, dependencies[i], -1, SQLITE_STATIC);
|
||||
if (rc == SQLITE_OK) rc = sqlite3_step(st);
|
||||
final_rc = sqlite3_finalize(st); st = NULL;
|
||||
if ((rc != SQLITE_ROW && rc != SQLITE_DONE) || final_rc != SQLITE_OK) goto rollback;
|
||||
if (rc == SQLITE_DONE) continue;
|
||||
if (sqlite3_prepare_v2(db, cleanup[i], -1, &st, NULL) != SQLITE_OK) goto rollback;
|
||||
rc = sqlite3_bind_text(st, 1, i ? si->ns : messages, -1, SQLITE_STATIC);
|
||||
if (rc == SQLITE_OK && !i) rc = sqlite3_bind_text(st, 2, feedback, -1, SQLITE_STATIC);
|
||||
if (rc == SQLITE_OK) rc = sqlite3_step(st);
|
||||
final_rc = sqlite3_finalize(st); st = NULL;
|
||||
if (rc != SQLITE_DONE || final_rc != SQLITE_OK) goto rollback;
|
||||
}
|
||||
if (sqlite3_exec(db, "COMMIT", NULL, NULL, NULL) != SQLITE_OK) goto rollback;
|
||||
DEBUG_INFO(DEBUG_CATEGORY_CHAT_SYNC, "history format v2: reset old group history and feedback tbl=%s group=%s",
|
||||
SI_TBL(si), si->ns);
|
||||
return 0;
|
||||
|
||||
Reference in new issue
Block a user