X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fabstractsqlstorage.cpp;h=92f03cb3cb0148541dbc0fd39ba10a9be45d5206;hp=618c929b604ecd9512faf6255f18167e75dfb0bc;hb=52cfbc8ee8f4da6f28c6afef089f8179434e717d;hpb=5e5714fb2abf8feaf9cc4a27a26e86f2f9c45b30 diff --git a/src/core/abstractsqlstorage.cpp b/src/core/abstractsqlstorage.cpp index 618c929b..92f03cb3 100644 --- a/src/core/abstractsqlstorage.cpp +++ b/src/core/abstractsqlstorage.cpp @@ -23,13 +23,15 @@ #include "logger.h" #include +#include #include +#include #include +int AbstractSqlStorage::_nextConnectionId = 0; AbstractSqlStorage::AbstractSqlStorage(QObject *parent) : Storage(parent), - _schemaVersion(0), - _nextConnectionId(0) + _schemaVersion(0) { } @@ -37,6 +39,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++) { + QSqlDatabase::removeDatabase(conIter.value()->name()); disconnect(conIter.value(), 0, this, 0); } } @@ -83,6 +86,8 @@ void AbstractSqlStorage::addConnectionToPool() { if(!db.open()) { qWarning() << "Unable to open database" << displayName() << "for thread" << QThread::currentThread(); qWarning() << "-" << db.lastError().text(); + } else { + initDbSession(db); } } @@ -222,16 +227,41 @@ int AbstractSqlStorage::schemaVersion() { bool AbstractSqlStorage::watchQuery(QSqlQuery &query) { if(query.lastError().isValid()) { qCritical() << "unhandled Error in QSqlQuery!"; - qCritical() << " last Query:\n" << query.lastQuery(); - qCritical() << " executed Query:\n" << query.executedQuery(); - qCritical() << " bound Values:"; - QList list = query.boundValues().values(); - for (int i = 0; i < list.size(); ++i) - qCritical() << i << ": " << list.at(i).toString().toAscii().data(); - qCritical() << " Error Number:" << query.lastError().number(); - qCritical() << " Error Message:" << query.lastError().text(); - qCritical() << " Driver Message:" << query.lastError().driverText(); - qCritical() << " DB Message:" << query.lastError().databaseText(); + qCritical() << " last Query:\n" << qPrintable(query.lastQuery()); + qCritical() << " executed Query:\n" << qPrintable(query.executedQuery()); + QVariantMap boundValues = query.boundValues(); + QStringList valueStrings; + QVariantMap::const_iterator iter; + for(iter = boundValues.constBegin(); iter != boundValues.constEnd(); iter++) { + QString value; + QSqlField field; + if(query.driver()) { + // let the driver do the formatting + field.setType(iter.value().type()); + if(iter.value().isNull()) + field.clear(); + else + field.setValue(iter.value()); + value = query.driver()->formatValue(field); + } else { + switch(iter.value().type()) { + case QVariant::Invalid: + value = "NULL"; + break; + case QVariant::Int: + value = iter.value().toString(); + break; + default: + value = QString("'%1'").arg(iter.value().toString()); + } + } + valueStrings << QString("%1=%2").arg(iter.key(), value); + } + qCritical() << " bound Values:" << qPrintable(valueStrings.join(", ")); + qCritical() << " Error Number:" << query.lastError().number(); + qCritical() << " Error Message:" << qPrintable(query.lastError().text()); + qCritical() << " Driver Message:" << qPrintable(query.lastError().driverText()); + qCritical() << " DB Message:" << qPrintable(query.lastError().databaseText()); return false; } @@ -350,11 +380,11 @@ AbstractSqlMigrationReader::AbstractSqlMigrationReader() bool AbstractSqlMigrationReader::migrateTo(AbstractSqlMigrationWriter *writer) { if(!transaction()) { - qWarning() << "AbstractSqlMigrationReader::migrateTo(): unable to start reader stransaction!"; + qWarning() << "AbstractSqlMigrationReader::migrateTo(): unable to start reader's transaction!"; return false; } if(!writer->transaction()) { - qWarning() << "AbstractSqlMigrationReader::migrateTo(): unable to start writer stransaction!"; + qWarning() << "AbstractSqlMigrationReader::migrateTo(): unable to start writer's transaction!"; rollback(); // close the reader transaction; return false; } @@ -366,10 +396,6 @@ bool AbstractSqlMigrationReader::migrateTo(AbstractSqlMigrationWriter *writer) { if(!transferMo(QuasselUser, quasselUserMo)) return false; - SenderMO senderMo; - if(!transferMo(Sender, senderMo)) - return false; - IdentityMO identityMo; if(!transferMo(Identity, identityMo)) return false; @@ -386,6 +412,10 @@ bool AbstractSqlMigrationReader::migrateTo(AbstractSqlMigrationWriter *writer) { if(!transferMo(Buffer, bufferMo)) return false; + SenderMO senderMo; + if(!transferMo(Sender, senderMo)) + return false; + BacklogMO backlogMo; if(!transferMo(Backlog, backlogMo)) return false; @@ -455,6 +485,7 @@ bool AbstractSqlMigrationReader::transferMo(MigrationObject moType, T &mo) { int i = 0; QFile file; file.open(stdout, QIODevice::WriteOnly); + while(readMo(mo)) { if(!_writer->writeMo(mo)) { abortMigration(QString("AbstractSqlMigrationReader::transferMo(): unable to transfer Migratable Object of type %1!").arg(AbstractSqlMigrator::migrationObject(moType))); @@ -470,6 +501,7 @@ bool AbstractSqlMigrationReader::transferMo(MigrationObject moType, T &mo) { file.write("\n"); file.flush(); } + qDebug() << "Done."; return true; }