X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fabstractsqlstorage.h;h=e3a64816f9c08b27b4a3abe1a2f7cb429a19046d;hp=c94bc4a4ad3466db3504fcc99ad4f61129eb8f6c;hb=dc2aa39d20b60e7cd8e0ba66ca6c9ed729add008;hpb=4ed404c7a72dd21bb06b003274ae544ab5ca1ad7 diff --git a/src/core/abstractsqlstorage.h b/src/core/abstractsqlstorage.h index c94bc4a4..e3a64816 100644 --- a/src/core/abstractsqlstorage.h +++ b/src/core/abstractsqlstorage.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-07 by the Quassel IRC Team * + * Copyright (C) 2005-07 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -36,15 +36,12 @@ 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); - 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()); @@ -52,10 +49,12 @@ protected: QStringList upgradeQueries(int ver); bool upgradeDb(); - bool watchQuery(QSqlQuery *query); + bool watchQuery(QSqlQuery &query); int schemaVersion(); virtual int installedSchemaVersion() { return -1; }; + virtual bool updateSchemaVersion(int newVersion) = 0; + virtual bool setupSchemaVersion(int version) = 0; virtual QString driverName() = 0; inline virtual QString hostName() { return QString(); } @@ -63,14 +62,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