X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fsqlitestorage.cpp;h=79ccd27fda68cf56dc3a3cc34340e4cbf6386b5f;hp=f495acdf82baba66f95b3082c8a52dc5bdf32827;hb=9ba9f4c7b0122803fe0d73a8556b1506e77d32a4;hpb=26b9300ccab24e526a9f43bef95a2a70f59161df diff --git a/src/core/sqlitestorage.cpp b/src/core/sqlitestorage.cpp index f495acdf..79ccd27f 100644 --- a/src/core/sqlitestorage.cpp +++ b/src/core/sqlitestorage.cpp @@ -693,118 +693,71 @@ MsgId SqliteStorage::logMessage(Message msg) { return msgId; } -QList SqliteStorage::requestMsgs(UserId user, BufferId bufferId, int limit, int offset) { +QList SqliteStorage::requestMsgs(UserId user, BufferId bufferId, MsgId first, MsgId last, int limit) { QList messagelist; BufferInfo bufferInfo = getBufferInfo(user, bufferId); if(!bufferInfo.isValid()) return messagelist; - if(offset == -1) { - offset = 0; + QSqlQuery query(logDb()); + if(last == -1) { + query.prepare(queryString("select_messagesNew")); } else { - // we have to determine the real offset first - QSqlQuery offsetQuery(logDb()); - offsetQuery.prepare(queryString("select_messagesOffset")); - - offsetQuery.bindValue(":bufferid", bufferId.toInt()); - offsetQuery.bindValue(":messageid", offset); - safeExec(offsetQuery); - offsetQuery.first(); - offset = offsetQuery.value(0).toInt(); + query.prepare(queryString("select_messages")); + query.bindValue(":lastmsg", last.toInt()); } - // now let's select the messages - QSqlQuery msgQuery(logDb()); - msgQuery.prepare(queryString("select_messages")); - - msgQuery.bindValue(":bufferid", bufferId.toInt()); - msgQuery.bindValue(":limit", limit); - msgQuery.bindValue(":offset", offset); - safeExec(msgQuery); + query.bindValue(":bufferid", bufferId.toInt()); + query.bindValue(":firstmsg", first.toInt()); + query.bindValue(":limit", limit); + safeExec(query); - watchQuery(msgQuery); + watchQuery(query); - while(msgQuery.next()) { - Message msg(QDateTime::fromTime_t(msgQuery.value(1).toInt()), + while(query.next()) { + Message msg(QDateTime::fromTime_t(query.value(1).toInt()), bufferInfo, - (Message::Type)msgQuery.value(2).toUInt(), - msgQuery.value(5).toString(), - msgQuery.value(4).toString(), - (Message::Flags)msgQuery.value(3).toUInt()); - msg.setMsgId(msgQuery.value(0).toInt()); + (Message::Type)query.value(2).toUInt(), + query.value(5).toString(), + query.value(4).toString(), + (Message::Flags)query.value(3).toUInt()); + msg.setMsgId(query.value(0).toInt()); messagelist << msg; } return messagelist; } - -QList SqliteStorage::requestMsgs(UserId user, BufferId bufferId, QDateTime since, int offset) { +QList SqliteStorage::requestAllMsgs(UserId user, MsgId first, MsgId last, int limit) { QList messagelist; - BufferInfo bufferInfo = getBufferInfo(user, bufferId); - if(!bufferInfo.isValid()) - return messagelist; - - // we have to determine the real offset first - QSqlQuery offsetQuery(logDb()); - offsetQuery.prepare(queryString("select_messagesSinceOffset")); - - offsetQuery.bindValue(":bufferid", bufferId.toInt()); - offsetQuery.bindValue(":since", since.toTime_t()); - safeExec(offsetQuery); - offsetQuery.first(); - offset = offsetQuery.value(0).toInt(); - - // now let's select the messages - QSqlQuery msgQuery(logDb()); - msgQuery.prepare(queryString("select_messagesSince")); - msgQuery.bindValue(":bufferid", bufferId.toInt()); - msgQuery.bindValue(":since", since.toTime_t()); - msgQuery.bindValue(":offset", offset); - safeExec(msgQuery); - - watchQuery(msgQuery); - - while(msgQuery.next()) { - Message msg(QDateTime::fromTime_t(msgQuery.value(1).toInt()), - bufferInfo, - (Message::Type)msgQuery.value(2).toUInt(), - msgQuery.value(5).toString(), - msgQuery.value(4).toString(), - (Message::Flags)msgQuery.value(3).toUInt()); - msg.setMsgId(msgQuery.value(0).toInt()); - messagelist << msg; + QHash bufferInfoHash; + foreach(BufferInfo bufferInfo, requestBuffers(user)) { + bufferInfoHash[bufferInfo.bufferId()] = bufferInfo; } - return messagelist; -} - - -QList SqliteStorage::requestMsgRange(UserId user, BufferId bufferId, int first, int last) { - QList messagelist; - - BufferInfo bufferInfo = getBufferInfo(user, bufferId); - if(!bufferInfo.isValid()) - return messagelist; - - QSqlQuery rangeQuery(logDb()); - rangeQuery.prepare(queryString("select_messageRange")); - rangeQuery.bindValue(":bufferid", bufferId.toInt()); - rangeQuery.bindValue(":firstmsg", first); - rangeQuery.bindValue(":lastmsg", last); - safeExec(rangeQuery); + QSqlQuery query(logDb()); + if(last == -1) { + query.prepare(queryString("select_messagesAllNew")); + } else { + query.prepare(queryString("select_messagesAll")); + query.bindValue(":lastmsg", last.toInt()); + } + query.bindValue(":userid", user.toInt()); + query.bindValue(":firstmsg", first.toInt()); + query.bindValue(":limit", limit); + safeExec(query); - watchQuery(rangeQuery); + watchQuery(query); - while(rangeQuery.next()) { - Message msg(QDateTime::fromTime_t(rangeQuery.value(1).toInt()), - bufferInfo, - (Message::Type)rangeQuery.value(2).toUInt(), - rangeQuery.value(5).toString(), - rangeQuery.value(4).toString(), - (Message::Flags)rangeQuery.value(3).toUInt()); - msg.setMsgId(rangeQuery.value(0).toInt()); + while(query.next()) { + Message msg(QDateTime::fromTime_t(query.value(2).toInt()), + bufferInfoHash[query.value(1).toInt()], + (Message::Type)query.value(3).toUInt(), + query.value(6).toString(), + query.value(5).toString(), + (Message::Flags)query.value(4).toUInt()); + msg.setMsgId(query.value(0).toInt()); messagelist << msg; }