X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fabstractsqlstorage.h;h=81b9563ae8a140617290de710db74d3fec4e1598;hp=901850916fa422948f0550813a12803bde435a68;hb=5c1ae5b1f0e743096538e3a2307565c05124be11;hpb=cfa01e5ffc7988e7976b8dc0777dabf26b0eacc5 diff --git a/src/core/abstractsqlstorage.h b/src/core/abstractsqlstorage.h index 90185091..81b9563a 100644 --- a/src/core/abstractsqlstorage.h +++ b/src/core/abstractsqlstorage.h @@ -36,16 +36,13 @@ public: protected: virtual bool init(const QVariantMap &settings = QVariantMap()); - virtual void sync(); + inline virtual void sync() {}; QSqlDatabase logDb(); QString queryString(const QString &queryName, int version); inline QString queryString(const QString &queryName) { return queryString(queryName, 0); } - QSqlQuery &cachedQuery(const QString &queryName, int version); - inline QSqlQuery &cachedQuery(const QString &queryName) { return cachedQuery(queryName, 0); } - QStringList setupQueries(); bool setup(const QVariantMap &settings = QVariantMap()); @@ -63,13 +60,37 @@ protected: inline virtual QString userName() { return QString(); } inline virtual QString password() { return QString(); } +private slots: + void connectionDestroyed(); + private: - bool openDb(); + void addConnectionToPool(); int _schemaVersion; - QHash, QSqlQuery *> _queryCache; + int _nextConnectionId; + QMutex _connectionPoolMutex; + // we let a Connection Object manage each actual db connection + // those objects reside in the thread the connection belongs to + // which allows us thread safe termination of a connection + class Connection; + QHash _connectionPool; }; +// ======================================== +// AbstractSqlStorage::Connection +// ======================================== +class AbstractSqlStorage::Connection : public QObject { + Q_OBJECT + +public: + Connection(const QString &name, QObject *parent = 0); + ~Connection(); + + inline QLatin1String name() const { return QLatin1String(_name); } + +private: + QByteArray _name; +}; #endif