X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fabstractsqlstorage.h;h=81b9563ae8a140617290de710db74d3fec4e1598;hp=6fefb787ffda09ba094ca3733c2301ca7dafbd12;hb=e0464aa399c32231e5cc7879f8910c3ccd3b45e3;hpb=59579d82e3a16a815a197a4300c8ef279275ccfc diff --git a/src/core/abstractsqlstorage.h b/src/core/abstractsqlstorage.h index 6fefb787..81b9563a 100644 --- a/src/core/abstractsqlstorage.h +++ b/src/core/abstractsqlstorage.h @@ -34,21 +34,14 @@ public: AbstractSqlStorage(QObject *parent = 0); virtual ~AbstractSqlStorage(); - //! Returns the name of the storage backend engine - /** \return A virtual equivalent of displayName() */ - virtual QString engineName() { return ""; } - protected: - bool init(const QVariantMap &settings = QVariantMap()); - virtual void sync(); + virtual bool init(const QVariantMap &settings = QVariantMap()); + inline virtual void sync() {}; QSqlDatabase logDb(); QString queryString(const QString &queryName, int version); - QString queryString(const QString &queryName); - - QSqlQuery *cachedQuery(const QString &queryName, int version); - QSqlQuery *cachedQuery(const QString &queryName); + inline QString queryString(const QString &queryName) { return queryString(queryName, 0); } QStringList setupQueries(); bool setup(const QVariantMap &settings = QVariantMap()); @@ -56,7 +49,7 @@ protected: QStringList upgradeQueries(int ver); bool upgradeDb(); - bool watchQuery(QSqlQuery *query); + bool watchQuery(QSqlQuery &query); int schemaVersion(); virtual int installedSchemaVersion() { return -1; }; @@ -67,14 +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