/***************************************************************************
- * Copyright (C) 2005-09 by the Quassel Project *
+ * Copyright (C) 2005-2016 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
#ifndef POSTGRESQLSTORAGE_H
virtual QHash<BufferId, MsgId> bufferLastSeenMsgIds(UserId user);
virtual void setBufferMarkerLineMsg(UserId user, const BufferId &bufferId, const MsgId &msgId);
virtual QHash<BufferId, MsgId> bufferMarkerLineMsgIds(UserId user);
+ /**
+ * Sets the last known valid message ID for the given buffer.
+ *
+ * This limits LastSeenMsgIds from being set to message IDs in the future, improving performance
+ * when searching for messages in the backlog.
+ *
+ * @see PostgreSqlStorage::setBufferLastSeenMsg()
+ *
+ * @param bufferId[in] ID of the Buffer
+ * @param msgId[in] ID of latest message for this buffer
+ */
+ virtual void setBufferLastMsg(const BufferId &bufferId, const MsgId &msgId);
/* Message handling */
virtual bool logMessage(Message &msg);
virtual QList<Message> requestAllMsgs(UserId user, MsgId first = -1, MsgId last = -1, int limit = -1);
protected:
- virtual void initDbSession(QSqlDatabase &db);
+ virtual bool initDbSession(QSqlDatabase &db);
virtual void setConnectionProperties(const QVariantMap &properties);
inline virtual QString driverName() { return "QPSQL"; }
inline virtual QString hostName() { return _hostName; }
virtual bool setupSchemaVersion(int version);
void safeExec(QSqlQuery &query);
+ bool beginTransaction(QSqlDatabase &db);
bool beginReadOnlyTransaction(QSqlDatabase &db);
- QSqlQuery executePreparedQuery(const QString &queryname, const QVariantList ¶ms, const QSqlDatabase &db);
- QSqlQuery executePreparedQuery(const QString &queryname, const QVariant ¶m, const QSqlDatabase &db);
+ QSqlQuery executePreparedQuery(const QString &queryname, const QVariantList ¶ms, QSqlDatabase &db);
+ QSqlQuery executePreparedQuery(const QString &queryname, const QVariant ¶m, QSqlDatabase &db);
void deallocateQuery(const QString &queryname, const QSqlDatabase &db);
inline void savePoint(const QString &handle, const QSqlDatabase &db) { db.exec(QString("SAVEPOINT %1").arg(handle)); }
private:
void bindNetworkInfo(QSqlQuery &query, const NetworkInfo &info);
void bindServerInfo(QSqlQuery &query, const Network::Server &server);
- QSqlQuery prepareAndExecuteQuery(const QString &queryname, const QString ¶mstring, const QSqlDatabase &db);
- inline QSqlQuery prepareAndExecuteQuery(const QString &queryname, const QSqlDatabase &db) { return prepareAndExecuteQuery(queryname, QString(), db); }
+ QSqlQuery prepareAndExecuteQuery(const QString &queryname, const QString ¶mstring, QSqlDatabase &db);
+ inline QSqlQuery prepareAndExecuteQuery(const QString &queryname, QSqlDatabase &db) { return prepareAndExecuteQuery(queryname, QString(), db); }
QString _hostName;
int _port;
};
-inline void PostgreSqlStorage::safeExec(QSqlQuery &query) { query.exec(); }
-
// ========================================
// PostgreSqlMigration
// ========================================