X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fabstractsqlstorage.cpp;h=c100d4ef008ac797ab6ec6a573541c9164202b34;hp=dce39cb215ea0f98c523084bf80761a6d70536ea;hb=3cf5c49e7753be48a994917fe898730add4292b1;hpb=6605882f41331c80f7ac3a6992650a702ec71283 diff --git a/src/core/abstractsqlstorage.cpp b/src/core/abstractsqlstorage.cpp index dce39cb2..c100d4ef 100644 --- a/src/core/abstractsqlstorage.cpp +++ b/src/core/abstractsqlstorage.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2015 by the Quassel Project * + * Copyright (C) 2005-2016 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -41,7 +41,7 @@ AbstractSqlStorage::~AbstractSqlStorage() { // disconnect the connections, so their deletion is no longer interessting for us QHash::iterator conIter; - for (conIter = _connectionPool.begin(); conIter != _connectionPool.end(); conIter++) { + for (conIter = _connectionPool.begin(); conIter != _connectionPool.end(); ++conIter) { QSqlDatabase::removeDatabase(conIter.value()->name()); disconnect(conIter.value(), 0, this, 0); } @@ -151,10 +151,20 @@ Storage::State AbstractSqlStorage::init(const QVariantMap &settings) QString AbstractSqlStorage::queryString(const QString &queryName, int version) { - if (version == 0) - version = schemaVersion(); + QFileInfo queryInfo; + + // The current schema is stored in the root folder, while upgrade queries are stored in the + // 'versions/##' subfolders. + if (version == 0) { + // Use the current SQL schema, not a versioned request + queryInfo = QFileInfo(QString(":/SQL/%1/%2.sql").arg(displayName()).arg(queryName)); + // If version is needed later, get it via version = schemaVersion(); + } else { + // Use the specified schema version, not the general folder + queryInfo = QFileInfo(QString(":/SQL/%1/version/%2/%3.sql") + .arg(displayName()).arg(version).arg(queryName)); + } - QFileInfo queryInfo(QString(":/SQL/%1/%2/%3.sql").arg(displayName()).arg(version).arg(queryName)); if (!queryInfo.exists() || !queryInfo.isFile() || !queryInfo.isReadable()) { qCritical() << "Unable to read SQL-Query" << queryName << "for engine" << displayName(); return QString(); @@ -173,7 +183,8 @@ QString AbstractSqlStorage::queryString(const QString &queryName, int version) QStringList AbstractSqlStorage::setupQueries() { QStringList queries; - QDir dir = QDir(QString(":/SQL/%1/%2/").arg(displayName()).arg(schemaVersion())); + // The current schema is stored in the root folder, including setup scripts. + QDir dir = QDir(QString(":/SQL/%1/").arg(displayName())); foreach(QFileInfo fileInfo, dir.entryInfoList(QStringList() << "setup*", QDir::NoFilter, QDir::Name)) { queries << queryString(fileInfo.baseName()); } @@ -211,7 +222,8 @@ bool AbstractSqlStorage::setup(const QVariantMap &settings) QStringList AbstractSqlStorage::upgradeQueries(int version) { QStringList queries; - QDir dir = QDir(QString(":/SQL/%1/%2/").arg(displayName()).arg(version)); + // Upgrade queries are stored in the 'version/##' subfolders. + QDir dir = QDir(QString(":/SQL/%1/version/%2/").arg(displayName()).arg(version)); foreach(QFileInfo fileInfo, dir.entryInfoList(QStringList() << "upgrade*", QDir::NoFilter, QDir::Name)) { queries << queryString(fileInfo.baseName(), version); } @@ -248,7 +260,8 @@ int AbstractSqlStorage::schemaVersion() int version; bool ok; - QDir dir = QDir(":/SQL/" + displayName()); + // Schema versions are stored in the 'version/##' subfolders. + QDir dir = QDir(QString(":/SQL/%1/version/").arg(displayName())); foreach(QFileInfo fileInfo, dir.entryInfoList()) { if (!fileInfo.isDir()) continue; @@ -275,7 +288,7 @@ bool AbstractSqlStorage::watchQuery(QSqlQuery &query) QVariantMap boundValues = query.boundValues(); QStringList valueStrings; QVariantMap::const_iterator iter; - for (iter = boundValues.constBegin(); iter != boundValues.constEnd(); iter++) { + for (iter = boundValues.constBegin(); iter != boundValues.constEnd(); ++iter) { QString value; QSqlField field; if (query.driver()) {