#include "abstractsqlstorage.h"
+#include "logger.h"
+
#include <QSqlError>
#include <QSqlQuery>
}
AbstractSqlStorage::~AbstractSqlStorage() {
+ QHash<QPair<QString, int>, QSqlQuery *>::iterator iter = _queryCache.begin();
+ while(iter != _queryCache.end()) {
+ delete *iter;
+ iter = _queryCache.erase(iter);
+ }
+
{
QSqlDatabase db = QSqlDatabase::database("quassel_connection");
db.commit();
return db;
if(!openDb()) {
- qWarning() << "Unable to Open Database" << engineName();
- qWarning() << " -" << db.lastError().text();
+ quWarning() << "Unable to Open Database" << displayName();
+ quWarning() << "-" << db.lastError().text();
}
return QSqlDatabase::database("quassel_connection");
return false;
if(installedSchemaVersion() == -1) {
- qDebug() << "Storage Schema is missing!";
+ quError() << "Storage Schema is missing!";
return false;
}
if(installedSchemaVersion() > schemaVersion()) {
- qWarning() << "Installed Schema is newer then any known Version.";
+ quError() << "Installed Schema is newer then any known Version.";
return false;
}
if(installedSchemaVersion() < schemaVersion()) {
- qWarning() << "Installed Schema is not up to date. Upgrading...";
+ quWarning() << "Installed Schema is not up to date. Upgrading...";
if(!upgradeDb())
return false;
}
- qDebug() << "Storage Backend is ready. Quassel Schema Version:" << installedSchemaVersion();
+ quInfo() << "Storage Backend is ready. Quassel Schema Version:" << installedSchemaVersion();
return true;
}
+void AbstractSqlStorage::sync() {
+ QHash<QPair<QString, int>, QSqlQuery *>::iterator iter = _queryCache.begin();
+ while(iter != _queryCache.end()) {
+ delete *iter;
+ iter = _queryCache.erase(iter);
+ }
+
+ logDb().commit();
+}
+
QString AbstractSqlStorage::queryString(const QString &queryName, int version) {
if(version == 0)
version = schemaVersion();
- QFileInfo queryInfo(QString(":/SQL/%1/%2/%3.sql").arg(engineName()).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()) {
- qWarning() << "Unable to read SQL-Query" << queryName << "for Engine" << engineName();
+ quError() << "Unable to read SQL-Query" << queryName << "for engine" << displayName();
return QString();
}
query->prepare(queryString(queryName, version));
_queryCache[queryId] = query;
}
-
return _queryCache[queryId];
}
QStringList AbstractSqlStorage::setupQueries() {
QStringList queries;
- QDir dir = QDir(QString(":/SQL/%1/%2/").arg(engineName()).arg(schemaVersion()));
+ QDir dir = QDir(QString(":/SQL/%1/%2/").arg(displayName()).arg(schemaVersion()));
foreach(QFileInfo fileInfo, dir.entryInfoList(QStringList() << "setup*", QDir::NoFilter, QDir::Name)) {
queries << queryString(fileInfo.baseName());
}
Q_UNUSED(settings)
QSqlDatabase db = logDb();
if(!db.isOpen()) {
- qWarning() << "Unable to setup Logging Backend!";
+ quError() << "Unable to setup Logging Backend!";
return false;
}
foreach(QString queryString, setupQueries()) {
QSqlQuery query = db.exec(queryString);
if(!watchQuery(&query)) {
- qWarning() << "Unable to setup Logging Backend!";
+ quError() << "Unable to setup Logging Backend!";
return false;
}
}
QStringList AbstractSqlStorage::upgradeQueries(int version) {
QStringList queries;
- QDir dir = QDir(QString(":/SQL/%1/%2/").arg(engineName()).arg(version));
+ QDir dir = QDir(QString(":/SQL/%1/%2/").arg(displayName()).arg(version));
foreach(QFileInfo fileInfo, dir.entryInfoList(QStringList() << "upgrade*", QDir::NoFilter, QDir::Name)) {
- qDebug() << queryString(fileInfo.baseName());
- queries << queryString(fileInfo.baseName());
+ queries << queryString(fileInfo.baseName(), version);
}
return queries;
}
foreach(QString queryString, upgradeQueries(ver)) {
QSqlQuery query = db.exec(queryString);
if(!watchQuery(&query)) {
- qWarning() << "Unable to upgrade Logging Backend!";
+ quError() << "Unable to upgrade Logging Backend!";
return false;
}
}
int version;
bool ok;
- QDir dir = QDir(":/SQL/" + engineName());
+ QDir dir = QDir(":/SQL/" + displayName());
foreach(QFileInfo fileInfo, dir.entryInfoList()) {
if(!fileInfo.isDir())
continue;
bool AbstractSqlStorage::watchQuery(QSqlQuery *query) {
if(query->lastError().isValid()) {
- qWarning() << "unhandled Error in QSqlQuery!";
- qWarning() << " last Query:" << query->lastQuery();
- qWarning() << " executed Query:" << query->executedQuery();
- qWarning() << " bound Values:" << query->boundValues();
- qWarning() << " Error Number:" << query->lastError().number();
- qWarning() << " Error Message:" << query->lastError().text();
- qWarning() << " Driver Message:" << query->lastError().driverText();
- qWarning() << " DB Message:" << query->lastError().databaseText();
+ quError() << "unhandled Error in QSqlQuery!";
+ quError() << " last Query:\n" << query->lastQuery();
+ quError() << " executed Query:\n" << query->executedQuery();
+ quError() << " bound Values:";
+ QList<QVariant> list = query->boundValues().values();
+ for (int i = 0; i < list.size(); ++i)
+ quError() << i << ": " << list.at(i).toString().toAscii().data();
+ quError() << " Error Number:" << query->lastError().number();
+ quError() << " Error Message:" << query->lastError().text();
+ quError() << " Driver Message:" << query->lastError().driverText();
+ quError() << " DB Message:" << query->lastError().databaseText();
return false;
}