X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fpostgresqlstorage.cpp;h=3c15b2c08b216bd987f54e771543e2ff5e52589a;hp=7377149905e7c9f5cbae2ca64b1d269748eba42b;hb=20f446a492d8e681156423f0dc3637db78c45bae;hpb=458c3278a4b9102bcc470d48816fac379492a588 diff --git a/src/core/postgresqlstorage.cpp b/src/core/postgresqlstorage.cpp index 73771499..3c15b2c0 100644 --- a/src/core/postgresqlstorage.cpp +++ b/src/core/postgresqlstorage.cpp @@ -1542,7 +1542,11 @@ bool PostgreSqlStorage::logMessage(Message &msg) return false; } - QSqlQuery getSenderIdQuery = executePreparedQuery("select_senderid", msg.sender(), db); + QVariantList senderParams; + senderParams << msg.sender() + << msg.realName() + << msg.avatarUrl(); + QSqlQuery getSenderIdQuery = executePreparedQuery("select_senderid", senderParams, db); int senderId; if (getSenderIdQuery.first()) { senderId = getSenderIdQuery.value(0).toInt(); @@ -1551,11 +1555,11 @@ bool PostgreSqlStorage::logMessage(Message &msg) // it's possible that the sender was already added by another thread // since the insert might fail we're setting a savepoint savePoint("sender_sp1", db); - QSqlQuery addSenderQuery = executePreparedQuery("insert_sender", msg.sender(), db); + QSqlQuery addSenderQuery = executePreparedQuery("insert_sender", senderParams, db); if (addSenderQuery.lastError().isValid()) { rollbackSavePoint("sender_sp1", db); - getSenderIdQuery = executePreparedQuery("select_senderid", msg.sender(), db); + getSenderIdQuery = executePreparedQuery("select_senderid", senderParams, db); watchQuery(getSenderIdQuery); getSenderIdQuery.first(); senderId = getSenderIdQuery.value(0).toInt(); @@ -1605,28 +1609,34 @@ bool PostgreSqlStorage::logMessages(MessageList &msgs) } QList senderIdList; - QHash senderIds; + QHash senderIds; QSqlQuery addSenderQuery; QSqlQuery selectSenderQuery;; for (int i = 0; i < msgs.count(); i++) { - const QString &sender = msgs.at(i).sender(); + auto &msg = msgs.at(i); + SenderData sender = { msg.sender(), msg.realName(), msg.avatarUrl() }; if (senderIds.contains(sender)) { senderIdList << senderIds[sender]; continue; } - selectSenderQuery = executePreparedQuery("select_senderid", sender, db); + QVariantList senderParams; + senderParams << sender.sender + << sender.realname + << sender.avatarurl; + + selectSenderQuery = executePreparedQuery("select_senderid", senderParams, db); if (selectSenderQuery.first()) { senderIdList << selectSenderQuery.value(0).toInt(); senderIds[sender] = selectSenderQuery.value(0).toInt(); } else { savePoint("sender_sp", db); - addSenderQuery = executePreparedQuery("insert_sender", sender, db); + addSenderQuery = executePreparedQuery("insert_sender", senderParams, db); if (addSenderQuery.lastError().isValid()) { // seems it was inserted meanwhile... by a different thread rollbackSavePoint("sender_sp", db); - selectSenderQuery = executePreparedQuery("select_senderid", sender, db); + selectSenderQuery = executePreparedQuery("select_senderid", senderParams, db); watchQuery(selectSenderQuery); selectSenderQuery.first(); senderIdList << selectSenderQuery.value(0).toInt(); @@ -1730,9 +1740,11 @@ QList PostgreSqlStorage::requestMsgs(UserId user, BufferId bufferId, Ms Message msg(timestamp, bufferInfo, (Message::Type)query.value(2).toUInt(), - query.value(6).toString(), + query.value(8).toString(), query.value(4).toString(), query.value(5).toString(), + query.value(6).toString(), + query.value(7).toString(), (Message::Flags)query.value(3).toUInt()); msg.setMsgId(query.value(0).toInt()); messagelist << msg; @@ -1783,9 +1795,11 @@ QList PostgreSqlStorage::requestAllMsgs(UserId user, MsgId first, MsgId Message msg(timestamp, bufferInfoHash[query.value(1).toInt()], (Message::Type)query.value(3).toUInt(), - query.value(7).toString(), + query.value(9).toString(), query.value(5).toString(), query.value(6).toString(), + query.value(7).toString(), + query.value(8).toString(), (Message::Flags)query.value(4).toUInt()); msg.setMsgId(query.value(0).toInt()); messagelist << msg; @@ -2060,6 +2074,8 @@ bool PostgreSqlMigrationWriter::writeMo(const SenderMO &sender) { bindValue(0, sender.senderId); bindValue(1, sender.sender); + bindValue(2, sender.realname); + bindValue(3, sender.avatarurl); return exec(); }