Browse Source

refactor(history): Expose mergeDuplicatePeers from DbUpgrader

To be used by both dbSchema8to9 and dbTo11.
reviewable/pr6611/r18
Anthony Bilinski 3 years ago
parent
commit
69d07f077e
No known key found for this signature in database
GPG Key ID: 2AA8E0DA1B31FB3C
  1. 38
      src/persistence/db/upgrades/dbupgrader.cpp
  2. 14
      src/persistence/db/upgrades/dbupgrader.h

38
src/persistence/db/upgrades/dbupgrader.cpp

@ -31,23 +31,13 @@
namespace { namespace {
constexpr int SCHEMA_VERSION = 11; constexpr int SCHEMA_VERSION = 11;
struct BadEntry std::vector<DbUpgrader::BadEntry> getInvalidPeers(RawDatabase& db)
{ {
BadEntry(int64_t row_, QString toxId_) std::vector<DbUpgrader::BadEntry> badPeerIds;
: row{row_}
, toxId{toxId_}
{}
RowId row;
QString toxId;
};
std::vector<BadEntry> getInvalidPeers(RawDatabase& db)
{
std::vector<BadEntry> badPeerIds;
db.execNow( db.execNow(
RawDatabase::Query("SELECT id, public_key FROM peers WHERE LENGTH(public_key) != 64", RawDatabase::Query("SELECT id, public_key FROM peers WHERE LENGTH(public_key) != 64",
[&](const QVector<QVariant>& row) { [&](const QVector<QVariant>& row) {
badPeerIds.emplace_back(BadEntry{row[0].toInt(), row[1].toString()}); badPeerIds.emplace_back(DbUpgrader::BadEntry{row[0].toInt(), row[1].toString()});
})); }));
return badPeerIds; return badPeerIds;
} }
@ -147,17 +137,6 @@ void mergeAndDeletePeer(QVector<RawDatabase::Query>& upgradeQueries, RowId goodP
RawDatabase::Query(QStringLiteral("DELETE FROM peers WHERE id = %1").arg(badPeerId.get())); RawDatabase::Query(QStringLiteral("DELETE FROM peers WHERE id = %1").arg(badPeerId.get()));
} }
void mergeDuplicatePeers(QVector<RawDatabase::Query>& upgradeQueries, RawDatabase& db,
std::vector<BadEntry> badPeers)
{
for (const auto& badPeer : badPeers) {
const RowId goodPeerId = getValidPeerRow(db, ToxPk{badPeer.toxId.left(64)});
const auto aliasDuplicates = getDuplicateAliasRows(db, goodPeerId, badPeer.row);
mergeAndDeleteAlias(upgradeQueries, aliasDuplicates.goodAliasRow, aliasDuplicates.badAliasRows);
mergeAndDeletePeer(upgradeQueries, goodPeerId, badPeer.row);
}
}
void addForeignKeyToAlias(QVector<RawDatabase::Query>& queries) void addForeignKeyToAlias(QVector<RawDatabase::Query>& queries)
{ {
queries += RawDatabase::Query( queries += RawDatabase::Query(
@ -638,3 +617,14 @@ bool DbUpgrader::dbSchema9to10(RawDatabase& db)
upgradeQueries += RawDatabase::Query(QStringLiteral("PRAGMA user_version = 10;")); upgradeQueries += RawDatabase::Query(QStringLiteral("PRAGMA user_version = 10;"));
return db.execNow(upgradeQueries); return db.execNow(upgradeQueries);
} }
void DbUpgrader::mergeDuplicatePeers(QVector<RawDatabase::Query>& upgradeQueries, RawDatabase& db,
std::vector<BadEntry> badPeers)
{
for (const auto& badPeer : badPeers) {
const RowId goodPeerId = getValidPeerRow(db, ToxPk{badPeer.toxId.left(64)});
const auto aliasDuplicates = getDuplicateAliasRows(db, goodPeerId, badPeer.row);
mergeAndDeleteAlias(upgradeQueries, aliasDuplicates.goodAliasRow, aliasDuplicates.badAliasRows);
mergeAndDeletePeer(upgradeQueries, goodPeerId, badPeer.row);
}
}

14
src/persistence/db/upgrades/dbupgrader.h

@ -21,6 +21,8 @@
#include <memory> #include <memory>
#include "src/persistence/db/rawdatabase.h"
class RawDatabase; class RawDatabase;
class IMessageBoxManager; class IMessageBoxManager;
namespace DbUpgrader namespace DbUpgrader
@ -40,4 +42,16 @@ namespace DbUpgrader
bool dbSchema8to9(RawDatabase& db); bool dbSchema8to9(RawDatabase& db);
bool dbSchema9to10(RawDatabase& db); bool dbSchema9to10(RawDatabase& db);
// 10to11 from DbTo11::dbSchema10to11 // 10to11 from DbTo11::dbSchema10to11
struct BadEntry
{
BadEntry(int64_t row_, QString toxId_)
: row{row_}
, toxId{toxId_}
{}
RowId row;
QString toxId;
};
void mergeDuplicatePeers(QVector<RawDatabase::Query>& upgradeQueries, RawDatabase& db,
std::vector<BadEntry> badPeers);
} }

Loading…
Cancel
Save