chat: локальное удаление канала (Android) + db_sync инстансы в куче
This commit is contained in:
1 parent
ddfffad1ed
commit
7c8d65db78
30 files changed
+466
-42
No files matched your search
@@ -415,6 +415,42 @@ int topo_node_sqlite_channel_put(sqlite3* db, const char* channel_id,
|
||||
return rc == SQLITE_DONE ? 0 : -1;
|
||||
}
|
||||
|
||||
int topo_node_sqlite_channel_delete(sqlite3* db, const char* channel_id) {
|
||||
if (!db || !channel_id || !channel_id[0]) return -1;
|
||||
|
||||
char peers_tbl[80]; peers_table_name(channel_id, peers_tbl, sizeof(peers_tbl));
|
||||
char msg_tbl[80]; sanitize_ch_id(channel_id, msg_tbl, sizeof(msg_tbl));
|
||||
/* msg_<san> */
|
||||
char msg_full[80]; snprintf(msg_full, sizeof(msg_full), "msg_%s", msg_tbl);
|
||||
|
||||
/* 1. drop per-channel tables (индексы дропятся вместе с таблицей) */
|
||||
char sql[128];
|
||||
snprintf(sql, sizeof(sql), "DROP TABLE IF EXISTS \"%s\"", peers_tbl);
|
||||
sqlite3_exec(db, sql, NULL, NULL, NULL);
|
||||
snprintf(sql, sizeof(sql), "DROP TABLE IF EXISTS \"%s\"", msg_full);
|
||||
sqlite3_exec(db, sql, NULL, NULL, NULL);
|
||||
|
||||
/* 2. delete channels row (вместе с канальными privkey) */
|
||||
sqlite3_stmt* st = NULL;
|
||||
if (sqlite3_prepare_v2(db, "DELETE FROM channels WHERE channel_id=?", -1, &st, NULL) == SQLITE_OK) {
|
||||
sqlite3_bind_text(st, 1, channel_id, -1, SQLITE_STATIC);
|
||||
sqlite3_step(st);
|
||||
sqlite3_finalize(st);
|
||||
}
|
||||
|
||||
/* 3. delete merkle tree hashes for this namespace */
|
||||
sqlite3_stmt* mh = NULL;
|
||||
if (sqlite3_prepare_v2(db, "DELETE FROM merkle_tree_hash WHERE namespace=?", -1, &mh, NULL) == SQLITE_OK) {
|
||||
sqlite3_bind_text(mh, 1, channel_id, -1, SQLITE_STATIC);
|
||||
sqlite3_step(mh);
|
||||
sqlite3_finalize(mh);
|
||||
}
|
||||
|
||||
DEBUG_INFO(DEBUG_CATEGORY_BGP, "topo_node_sqlite_channel_delete: ch=%s peers=%s msg=%s",
|
||||
channel_id, peers_tbl, msg_full);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Упрощённый плейсхолдер мембера от topo_group: только node_id + pubkeys, source=1.
|
||||
* Не участвует в merkle-хеше. Если запись уже есть (полная merkle) — не трогает её.
|
||||
* Позже полная merkle-запись дополняет/перезаписывает блоки и сбрасывает source=0. */
|
||||
|
||||
Reference in new issue
Block a user