From 5c1ae5b1f0e743096538e3a2307565c05124be11 Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Fri, 21 Nov 2008 14:21:26 +0100 Subject: [PATCH] getting rid of cached queries - they make no sense anymore --- src/core/abstractsqlstorage.cpp | 46 +++------------------------------ src/core/abstractsqlstorage.h | 19 ++++---------- src/core/sqlitestorage.cpp | 1 - 3 files changed, 8 insertions(+), 58 deletions(-) diff --git a/src/core/abstractsqlstorage.cpp b/src/core/abstractsqlstorage.cpp index 467b2260..a3ac2708 100644 --- a/src/core/abstractsqlstorage.cpp +++ b/src/core/abstractsqlstorage.cpp @@ -60,10 +60,9 @@ void AbstractSqlStorage::addConnectionToPool() { int connectionId = _nextConnectionId++; - Connection *connection = new Connection(QLatin1String(QString("quassel_connection_%1").arg(connectionId).toLatin1()), this); + Connection *connection = new Connection(QLatin1String(QString("quassel_connection_%1").arg(connectionId).toLatin1())); qDebug() << "new connection" << connection->name() << currentThread << QLatin1String(QString("quassel_connection_%1").arg(connectionId).toLatin1()); connection->moveToThread(currentThread); - connect(this, SIGNAL(syncCachedQueries()), connection, SLOT(syncCachedQueries())); connect(this, SIGNAL(destroyed()), connection, SLOT(deleteLater())); connect(currentThread, SIGNAL(destroyed()), connection, SLOT(deleteLater())); connect(connection, SIGNAL(destroyed()), this, SLOT(connectionDestroyed())); @@ -112,10 +111,6 @@ bool AbstractSqlStorage::init(const QVariantMap &settings) { return true; } -void AbstractSqlStorage::sync() { - emit syncCachedQueries(); -} - QString AbstractSqlStorage::queryString(const QString &queryName, int version) { if(version == 0) version = schemaVersion(); @@ -135,12 +130,6 @@ QString AbstractSqlStorage::queryString(const QString &queryName, int version) { return query.trimmed(); } -QSqlQuery &AbstractSqlStorage::cachedQuery(const QString &queryName, int version) { - Q_ASSERT(_connectionPool.contains(QThread::currentThread())); - qDebug() << "cached query" << queryName << "using" << _connectionPool[QThread::currentThread()]->name() << QThread::currentThread(); - return _connectionPool[QThread::currentThread()]->cachedQuery(queryName, version); -} - QStringList AbstractSqlStorage::setupQueries() { QStringList queries; QDir dir = QDir(QString(":/SQL/%1/%2/").arg(displayName()).arg(schemaVersion())); @@ -246,19 +235,13 @@ void AbstractSqlStorage::connectionDestroyed() { // ======================================== // AbstractSqlStorage::Connection // ======================================== -AbstractSqlStorage::Connection::Connection(const QString &name, AbstractSqlStorage *storage, QObject *parent) +AbstractSqlStorage::Connection::Connection(const QString &name, QObject *parent) : QObject(parent), - _name(name.toLatin1()), - _storageEngine(storage) + _name(name.toLatin1()) { } AbstractSqlStorage::Connection::~Connection() { - QHash, QSqlQuery *>::iterator iter = _queryCache.begin(); - while(iter != _queryCache.end()) { - delete *iter; - iter = _queryCache.erase(iter); - } { QSqlDatabase db = QSqlDatabase::database(name(), false); if(db.isOpen()) { @@ -268,26 +251,3 @@ AbstractSqlStorage::Connection::~Connection() { } QSqlDatabase::removeDatabase(name()); } - -QSqlQuery &AbstractSqlStorage::Connection::cachedQuery(const QString &queryName, int version) { - QPair queryId = qMakePair(queryName, version); - if(_queryCache.contains(queryId)) { - return *(_queryCache[queryId]); - } - - QSqlQuery *query = new QSqlQuery(QSqlDatabase::database(name())); - query->prepare(_storageEngine->queryString(queryName, version)); - _queryCache[queryId] = query; - return *query; -} - -void AbstractSqlStorage::Connection::syncCachedQueries() { - QHash, QSqlQuery *>::iterator iter = _queryCache.begin(); - while(iter != _queryCache.end()) { - delete *iter; - iter = _queryCache.erase(iter); - } - QSqlDatabase db = QSqlDatabase::database(name(), false); - if(db.isOpen()) - db.commit(); -} diff --git a/src/core/abstractsqlstorage.h b/src/core/abstractsqlstorage.h index bbe4d081..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,9 +60,6 @@ protected: inline virtual QString userName() { return QString(); } inline virtual QString password() { return QString(); } -signals: - void syncCachedQueries(); - private slots: void connectionDestroyed(); @@ -76,6 +70,9 @@ private: 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; }; @@ -87,19 +84,13 @@ class AbstractSqlStorage::Connection : public QObject { Q_OBJECT public: - Connection(const QString &name, AbstractSqlStorage *storage, QObject *parent = 0); + Connection(const QString &name, QObject *parent = 0); ~Connection(); inline QLatin1String name() const { return QLatin1String(_name); } - QSqlQuery &cachedQuery(const QString &queryName, int version); - -public slots: - void syncCachedQueries(); private: QByteArray _name; - QHash, QSqlQuery *> _queryCache; - AbstractSqlStorage *_storageEngine; }; #endif diff --git a/src/core/sqlitestorage.cpp b/src/core/sqlitestorage.cpp index 7b024016..6e9a47d3 100644 --- a/src/core/sqlitestorage.cpp +++ b/src/core/sqlitestorage.cpp @@ -683,7 +683,6 @@ MsgId SqliteStorage::logMessage(Message msg) { addSenderQuery.prepare(queryString("insert_sender")); addSenderQuery.bindValue(":sender", msg.sender()); addSenderQuery.exec(); - watchQuery(addSenderQuery); logMessageQuery.exec(); if(!watchQuery(logMessageQuery)) return 0; -- 2.20.1