aboutsummaryrefslogtreecommitdiff
path: root/lib/database.cpp
diff options
context:
space:
mode:
authorAlexey Rusakov <Kitsune-Ral@users.sf.net>2022-03-10 07:21:01 +0100
committerGitHub <noreply@github.com>2022-03-10 07:21:01 +0100
commitb865be5ad72b3996bf072268d061d7466bf4623a (patch)
tree99326e678b29fec8004734a6a11ef17e842785f6 /lib/database.cpp
parent3cf68a084ea5bff20129222867a399b05e6e0bd6 (diff)
parentb8c22ff0663350a019ae918771fac4b6447d2b09 (diff)
downloadlibquotient-b865be5ad72b3996bf072268d061d7466bf4623a.tar.gz
libquotient-b865be5ad72b3996bf072268d061d7466bf4623a.zip
Merge pull request #541 from TobiasFella/storesessionedkey
Store some more things in the database
Diffstat (limited to 'lib/database.cpp')
-rw-r--r--lib/database.cpp37
1 files changed, 33 insertions, 4 deletions
diff --git a/lib/database.cpp b/lib/database.cpp
index 84c93046..70dc1b9b 100644
--- a/lib/database.cpp
+++ b/lib/database.cpp
@@ -28,6 +28,7 @@ Database::Database(const QString& matrixId, const QString& deviceId, QObject* pa
switch(version()) {
case 0: migrateTo1();
+ case 1: migrateTo2();
}
}
@@ -94,6 +95,22 @@ void Database::migrateTo1()
commit();
}
+void Database::migrateTo2()
+{
+ qCDebug(DATABASE) << "Migrating database to version 2";
+ transaction();
+ execute(QStringLiteral("ALTER TABLE inbound_megolm_sessions ADD ed25519Key TEXT"));
+ execute(QStringLiteral("ALTER TABLE olm_sessions ADD lastReceived TEXT"));
+
+ // Add indexes for improving queries speed on larger database
+ execute(QStringLiteral("CREATE INDEX sessions_session_idx ON olm_sessions(sessionId)"));
+ execute(QStringLiteral("CREATE INDEX outbound_room_idx ON outbound_megolm_sessions(roomId)"));
+ execute(QStringLiteral("CREATE INDEX inbound_room_idx ON inbound_megolm_sessions(roomId)"));
+ execute(QStringLiteral("CREATE INDEX group_session_idx ON group_session_record_index(roomId, sessionId, i)"));
+ execute(QStringLiteral("PRAGMA user_version = 2;"));
+ commit();
+}
+
QByteArray Database::accountPickle()
{
auto query = prepareQuery(QStringLiteral("SELECT pickle FROM accounts;"));
@@ -131,12 +148,13 @@ void Database::clear()
}
-void Database::saveOlmSession(const QString& senderKey, const QString& sessionId, const QByteArray &pickle)
+void Database::saveOlmSession(const QString& senderKey, const QString& sessionId, const QByteArray &pickle, const QDateTime& timestamp)
{
- auto query = prepareQuery(QStringLiteral("INSERT INTO olm_sessions(senderKey, sessionId, pickle) VALUES(:senderKey, :sessionId, :pickle);"));
+ auto query = prepareQuery(QStringLiteral("INSERT INTO olm_sessions(senderKey, sessionId, pickle, lastReceived) VALUES(:senderKey, :sessionId, :pickle, :lastReceived);"));
query.bindValue(":senderKey", senderKey);
query.bindValue(":sessionId", sessionId);
query.bindValue(":pickle", pickle);
+ query.bindValue(":lastReceived", timestamp);
transaction();
execute(query);
commit();
@@ -179,12 +197,13 @@ UnorderedMap<std::pair<QString, QString>, QOlmInboundGroupSessionPtr> Database::
return sessions;
}
-void Database::saveMegolmSession(const QString& roomId, const QString& senderKey, const QString& sessionId, const QByteArray& pickle)
+void Database::saveMegolmSession(const QString& roomId, const QString& senderKey, const QString& sessionId, const QString& ed25519Key, const QByteArray& pickle)
{
- auto query = prepareQuery(QStringLiteral("INSERT INTO inbound_megolm_sessions(roomId, senderKey, sessionId, pickle) VALUES(:roomId, :senderKey, :sessionId, :pickle);"));
+ auto query = prepareQuery(QStringLiteral("INSERT INTO inbound_megolm_sessions(roomId, senderKey, sessionId, ed25519Key, pickle) VALUES(:roomId, :senderKey, :sessionId, :ed25519Key, :pickle);"));
query.bindValue(":roomId", roomId);
query.bindValue(":senderKey", senderKey);
query.bindValue(":sessionId", sessionId);
+ query.bindValue(":ed25519Key", ed25519Key);
query.bindValue(":pickle", pickle);
transaction();
execute(query);
@@ -242,3 +261,13 @@ void Database::clearRoomData(const QString& roomId)
execute(query3);
commit();
}
+
+void Database::setOlmSessionLastReceived(const QString& sessionId, const QDateTime& timestamp)
+{
+ auto query = prepareQuery(QStringLiteral("UPDATE olm_sessions SET lastReceived=:lastReceived WHERE sessionId=:sessionId;"));
+ query.bindValue(":lastReceived", timestamp);
+ query.bindValue(":sessionId", sessionId);
+ transaction();
+ execute(query);
+ commit();
+}