X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fabstractsqlstorage.cpp;h=00c818fe2240375f0ac4938b6584e727fe157918;hp=6886c0fa89c8ba9375839d4fdfde94d22ec144cf;hb=0cba5df52ef9e773aef1a301ca6a4cfe8199bfd1;hpb=d2e0e3150248063f7d8c27ae1680ce7ea665f227 diff --git a/src/core/abstractsqlstorage.cpp b/src/core/abstractsqlstorage.cpp index 6886c0fa..00c818fe 100644 --- a/src/core/abstractsqlstorage.cpp +++ b/src/core/abstractsqlstorage.cpp @@ -19,11 +19,14 @@ ***************************************************************************/ #include "abstractsqlstorage.h" +#include "quassel.h" #include "logger.h" #include +#include #include +#include #include int AbstractSqlStorage::_nextConnectionId = 0; @@ -84,12 +87,16 @@ void AbstractSqlStorage::addConnectionToPool() { if(!db.open()) { qWarning() << "Unable to open database" << displayName() << "for thread" << QThread::currentThread(); qWarning() << "-" << db.lastError().text(); + } else { + initDbSession(db); } } Storage::State AbstractSqlStorage::init(const QVariantMap &settings) { setConnectionProperties(settings); + _debug = Quassel::isOptionSet("debug"); + QSqlDatabase db = logDb(); if(!db.isValid() || !db.isOpen()) return NotAvailable; @@ -221,20 +228,47 @@ 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(); + bool queryError = query.lastError().isValid(); + if(queryError || _debug) { + if(queryError) + qCritical() << "unhandled Error in QSqlQuery!"; + 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; + return !queryError; } return true; }