X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fpostgresqlstorage.cpp;h=88bc86ce93f342c08039cc660d3f440f332ffb22;hb=fce08b4580057ae5d0515f8c68ed3f54c5ddbbc2;hp=40ff80cb1659a07c7dd65e86606d17afec48aebf;hpb=f91f3faa1432894e6d6ecaaf0a1f60a483dd0129;p=quassel.git diff --git a/src/core/postgresqlstorage.cpp b/src/core/postgresqlstorage.cpp index 40ff80cb..88bc86ce 100644 --- a/src/core/postgresqlstorage.cpp +++ b/src/core/postgresqlstorage.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2019 by the Quassel Project * + * Copyright (C) 2005-2020 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -20,7 +20,10 @@ #include "postgresqlstorage.h" -#include +#include +#include +#include +#include #include "network.h" #include "quassel.h" @@ -524,13 +527,8 @@ IdentityId PostgreSqlStorage::createIdentity(UserId user, CoreIdentity& identity query.bindValue(":kickreason", identity.kickReason()); query.bindValue(":partreason", identity.partReason()); query.bindValue(":quitreason", identity.quitReason()); -#ifdef HAVE_SSL query.bindValue(":sslcert", identity.sslCert().toPem()); query.bindValue(":sslkey", identity.sslKey().toPem()); -#else - query.bindValue(":sslcert", QByteArray()); - query.bindValue(":sslkey", QByteArray()); -#endif safeExec(query); if (!watchQuery(query)) { db.rollback(); @@ -607,13 +605,8 @@ bool PostgreSqlStorage::updateIdentity(UserId user, const CoreIdentity& identity query.bindValue(":kickreason", identity.kickReason()); query.bindValue(":partreason", identity.partReason()); query.bindValue(":quitreason", identity.quitReason()); -#ifdef HAVE_SSL query.bindValue(":sslcert", identity.sslCert().toPem()); query.bindValue(":sslkey", identity.sslKey().toPem()); -#else - query.bindValue(":sslcert", QByteArray()); - query.bindValue(":sslkey", QByteArray()); -#endif query.bindValue(":identityid", identity.id().toInt()); safeExec(query); @@ -673,9 +666,9 @@ void PostgreSqlStorage::removeIdentity(UserId user, IdentityId identityId) } } -QList PostgreSqlStorage::identities(UserId user) +std::vector PostgreSqlStorage::identities(UserId user) { - QList identities; + std::vector identities; QSqlDatabase db = logDb(); if (!beginReadOnlyTransaction(db)) { @@ -714,10 +707,8 @@ QList PostgreSqlStorage::identities(UserId user) identity.setKickReason(query.value(15).toString()); identity.setPartReason(query.value(16).toString()); identity.setQuitReason(query.value(17).toString()); -#ifdef HAVE_SSL identity.setSslCert(query.value(18).toByteArray()); identity.setSslKey(query.value(19).toByteArray()); -#endif nickQuery.bindValue(":identityid", identity.id().toInt()); QList nicks; @@ -727,7 +718,7 @@ QList PostgreSqlStorage::identities(UserId user) nicks << nickQuery.value(0).toString(); } identity.setNicks(nicks); - identities << identity; + identities.push_back(std::move(identity)); } db.commit(); return identities; @@ -905,9 +896,9 @@ bool PostgreSqlStorage::removeNetwork(UserId user, const NetworkId& networkId) return true; } -QList PostgreSqlStorage::networks(UserId user) +std::vector PostgreSqlStorage::networks(UserId user) { - QList nets; + std::vector nets; QSqlDatabase db = logDb(); if (!beginReadOnlyTransaction(db)) { @@ -981,15 +972,15 @@ QList PostgreSqlStorage::networks(UserId user) servers << server; } net.serverList = servers; - nets << net; + nets.push_back(std::move(net)); } db.commit(); return nets; } -QList PostgreSqlStorage::connectedNetworks(UserId user) +std::vector PostgreSqlStorage::connectedNetworks(UserId user) { - QList connectedNets; + std::vector connectedNets; QSqlDatabase db = logDb(); if (!beginReadOnlyTransaction(db)) { @@ -1005,7 +996,7 @@ QList PostgreSqlStorage::connectedNetworks(UserId user) watchQuery(query); while (query.next()) { - connectedNets << query.value(0).toInt(); + connectedNets.emplace_back(query.value(0).toInt()); } db.commit(); @@ -1207,9 +1198,9 @@ BufferInfo PostgreSqlStorage::getBufferInfo(UserId user, const BufferId& bufferI return bufferInfo; } -QList PostgreSqlStorage::requestBuffers(UserId user) +std::vector PostgreSqlStorage::requestBuffers(UserId user) { - QList bufferlist; + std::vector bufferlist; QSqlDatabase db = logDb(); if (!beginReadOnlyTransaction(db)) { @@ -1225,19 +1216,19 @@ QList PostgreSqlStorage::requestBuffers(UserId user) safeExec(query); watchQuery(query); while (query.next()) { - bufferlist << BufferInfo(query.value(0).toInt(), - query.value(1).toInt(), - (BufferInfo::Type)query.value(2).toInt(), - query.value(3).toInt(), - query.value(4).toString()); + bufferlist.emplace_back(query.value(0).toInt(), + query.value(1).toInt(), + (BufferInfo::Type)query.value(2).toInt(), + query.value(3).toInt(), + query.value(4).toString()); } db.commit(); return bufferlist; } -QList PostgreSqlStorage::requestBufferIdsForNetwork(UserId user, NetworkId networkId) +std::vector PostgreSqlStorage::requestBufferIdsForNetwork(UserId user, NetworkId networkId) { - QList bufferList; + std::vector bufferList; QSqlDatabase db = logDb(); if (!beginReadOnlyTransaction(db)) { @@ -1254,7 +1245,7 @@ QList PostgreSqlStorage::requestBufferIdsForNetwork(UserId user, Netwo safeExec(query); watchQuery(query); while (query.next()) { - bufferList << BufferId(query.value(0).toInt()); + bufferList.emplace_back(query.value(0).toInt()); } db.commit(); return bufferList; @@ -1382,6 +1373,34 @@ bool PostgreSqlStorage::mergeBuffersPermanently(const UserId& user, const Buffer return true; } +QHash PostgreSqlStorage::bufferLastMsgIds(UserId user) +{ + QHash lastMsgHash; + + QSqlDatabase db = logDb(); + if (!beginReadOnlyTransaction(db)) { + qWarning() << "PostgreSqlStorage::bufferLastMsgIds(): cannot start read only transaction!"; + qWarning() << " -" << qPrintable(db.lastError().text()); + return lastMsgHash; + } + + QSqlQuery query(db); + query.prepare(queryString("select_buffer_last_messages")); + query.bindValue(":userid", user.toInt()); + safeExec(query); + if (!watchQuery(query)) { + db.rollback(); + return lastMsgHash; + } + + while (query.next()) { + lastMsgHash[query.value(0).toInt()] = query.value(1).toLongLong(); + } + + db.commit(); + return lastMsgHash; +} + void PostgreSqlStorage::setBufferLastSeenMsg(UserId user, const BufferId& bufferId, const MsgId& msgId) { QSqlQuery query(logDb()); @@ -1752,9 +1771,9 @@ bool PostgreSqlStorage::logMessages(MessageList& msgs) return true; } -QList PostgreSqlStorage::requestMsgs(UserId user, BufferId bufferId, MsgId first, MsgId last, int limit) +std::vector PostgreSqlStorage::requestMsgs(UserId user, BufferId bufferId, MsgId first, MsgId last, int limit) { - QList messagelist; + std::vector messagelist; QSqlDatabase db = logDb(); if (!beginReadOnlyTransaction(db)) { @@ -1813,17 +1832,17 @@ QList PostgreSqlStorage::requestMsgs(UserId user, BufferId bufferId, Ms query.value(7).toString(), (Message::Flags)query.value(3).toInt()); msg.setMsgId(query.value(0).toLongLong()); - messagelist << msg; + messagelist.push_back(std::move(msg)); } db.commit(); return messagelist; } -QList PostgreSqlStorage::requestMsgsFiltered( +std::vector PostgreSqlStorage::requestMsgsFiltered( UserId user, BufferId bufferId, MsgId first, MsgId last, int limit, Message::Types type, Message::Flags flags) { - QList messagelist; + std::vector messagelist; QSqlDatabase db = logDb(); if (!beginReadOnlyTransaction(db)) { @@ -1881,16 +1900,16 @@ QList PostgreSqlStorage::requestMsgsFiltered( query.value(7).toString(), Message::Flags{query.value(3).toInt()}); msg.setMsgId(query.value(0).toLongLong()); - messagelist << msg; + messagelist.push_back(std::move(msg)); } db.commit(); return messagelist; } -QList PostgreSqlStorage::requestAllMsgs(UserId user, MsgId first, MsgId last, int limit) +std::vector PostgreSqlStorage::requestAllMsgs(UserId user, MsgId first, MsgId last, int limit) { - QList messagelist; + std::vector messagelist; // requestBuffers uses it's own transaction. QHash bufferInfoHash; @@ -1937,17 +1956,17 @@ QList PostgreSqlStorage::requestAllMsgs(UserId user, MsgId first, MsgId query.value(8).toString(), (Message::Flags)query.value(4).toInt()); msg.setMsgId(query.value(0).toLongLong()); - messagelist << msg; + messagelist.push_back(std::move(msg)); } db.commit(); return messagelist; } -QList PostgreSqlStorage::requestAllMsgsFiltered( +std::vector PostgreSqlStorage::requestAllMsgsFiltered( UserId user, MsgId first, MsgId last, int limit, Message::Types type, Message::Flags flags) { - QList messagelist; + std::vector messagelist; // requestBuffers uses it's own transaction. QHash bufferInfoHash; @@ -2001,7 +2020,7 @@ QList PostgreSqlStorage::requestAllMsgsFiltered( query.value(8).toString(), Message::Flags{query.value(4).toInt()}); msg.setMsgId(query.value(0).toLongLong()); - messagelist << msg; + messagelist.push_back(std::move(msg)); } db.commit();