X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcore%2Fpostgresqlstorage.h;h=83b24e228b153d7ee8ca5220d8f5daf6868986b3;hb=a72e2b4a90ce18c58b54e111161691ba008dc47d;hp=f78422a010c667c1b5593480ab13cab00451aad1;hpb=aca3263f8f94e0d6640bdf857e71115151b85037;p=quassel.git diff --git a/src/core/postgresqlstorage.h b/src/core/postgresqlstorage.h index f78422a0..83b24e22 100644 --- a/src/core/postgresqlstorage.h +++ b/src/core/postgresqlstorage.h @@ -33,22 +33,25 @@ public: PostgreSqlStorage(QObject *parent = 0); virtual ~PostgreSqlStorage(); + virtual AbstractSqlMigrationWriter *createMigrationWriter(); + public slots: /* General */ - - bool isAvailable() const; - QString displayName() const; - QString description() const; - QVariantMap setupKeys() const; + virtual bool isAvailable() const; + virtual QString displayName() const; + virtual QString description() const; + virtual QStringList setupKeys() const; + virtual QVariantMap setupDefaults() const; // TODO: Add functions for configuring the backlog handling, i.e. defining auto-cleanup settings etc /* User handling */ virtual UserId addUser(const QString &user, const QString &password); - virtual void updateUser(UserId user, const QString &password); + virtual bool updateUser(UserId user, const QString &password); virtual void renameUser(UserId user, const QString &newName); virtual UserId validateUser(const QString &user, const QString &password); + virtual UserId getUserId(const QString &username); virtual UserId internalUser(); virtual void delUser(UserId user); virtual void setUserSetting(UserId userId, const QString &settingName, const QVariant &data); @@ -89,6 +92,8 @@ public slots: virtual bool mergeBuffersPermanently(const UserId &user, const BufferId &bufferId1, const BufferId &bufferId2); virtual void setBufferLastSeenMsg(UserId user, const BufferId &bufferId, const MsgId &msgId); virtual QHash bufferLastSeenMsgIds(UserId user); + virtual void setBufferMarkerLineMsg(UserId user, const BufferId &bufferId, const MsgId &msgId); + virtual QHash bufferMarkerLineMsgIds(UserId user); /* Message handling */ virtual bool logMessage(Message &msg); @@ -97,6 +102,7 @@ public slots: virtual QList requestAllMsgs(UserId user, MsgId first = -1, MsgId last = -1, int limit = -1); protected: + virtual void initDbSession(QSqlDatabase &db); virtual void setConnectionProperties(const QVariantMap &properties); inline virtual QString driverName() { return "QPSQL"; } inline virtual QString hostName() { return _hostName; } @@ -111,10 +117,9 @@ protected: bool beginReadOnlyTransaction(QSqlDatabase &db); - bool prepareQuery(const QString &handle, const QString &query, const QSqlDatabase &db); - QSqlQuery executePreparedQuery(const QString &handle, const QVariantList ¶ms, const QSqlDatabase &db); - QSqlQuery executePreparedQuery(const QString &handle, const QVariant ¶m, const QSqlDatabase &db); - void deallocateQuery(const QString &handle, const QSqlDatabase &db); + QSqlQuery executePreparedQuery(const QString &queryname, const QVariantList ¶ms, const QSqlDatabase &db); + QSqlQuery executePreparedQuery(const QString &queryname, const QVariant ¶m, const 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)); } inline void rollbackSavePoint(const QString &handle, const QSqlDatabase &db) { db.exec(QString("ROLLBACK TO SAVEPOINT %1").arg(handle)); } @@ -123,17 +128,14 @@ protected: 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); } QString _hostName; int _port; QString _databaseName; QString _userName; QString _password; - - typedef QHash QueryHash; - QHash _preparedQueries; // one query hash per db connection - QMutex _queryHashMutex; - }; inline void PostgreSqlStorage::safeExec(QSqlQuery &query) { query.exec(); } @@ -147,16 +149,6 @@ class PostgreSqlMigrationWriter : public PostgreSqlStorage, public AbstractSqlMi public: PostgreSqlMigrationWriter(); - -// virtual bool writeUser(const QuasselUserMO &user); -// virtual bool writeSender(const SenderMO &sender); -// virtual bool writeIdentity(const IdentityMO &identity); -// virtual bool writeIdentityNick(const IdentityNickMO &identityNick); -// virtual bool writeNetwork(const NetworkMO &network); -// virtual bool writeBuffer(const BufferMO &buffer); -// virtual bool writeBacklog(const BacklogMO &backlog); -// virtual bool writeIrcServer(const IrcServerMO &ircserver); -// virtual bool writeUserSetting(const UserSettingMO &userSetting); virtual bool writeMo(const QuasselUserMO &user); virtual bool writeMo(const SenderMO &sender); @@ -170,10 +162,22 @@ public: bool prepareQuery(MigrationObject mo); + virtual bool postProcess(); + protected: virtual inline bool transaction() { return logDb().transaction(); } virtual inline void rollback() { logDb().rollback(); } virtual inline bool commit() { return logDb().commit(); } + +private: + // helper struct + struct Sequence { + QLatin1String table; + QLatin1String field; + Sequence(const char *table, const char *field) : table(table), field(field) {} + }; + + QSet _validIdentities; }; #endif