diff --git a/src/sqlitedb.cpp b/src/sqlitedb.cpp index 1189704b..274e8b14 100644 --- a/src/sqlitedb.cpp +++ b/src/sqlitedb.cpp @@ -986,16 +986,18 @@ bool DBBrowserDB::executeMultiSQL(const QString& statement, bool dirty, bool log return true; } -QVariant DBBrowserDB::querySingleValueFromDb(const QString& statement, bool log) +QByteArray DBBrowserDB::querySingleValueFromDb(const QString& sql, bool log) { waitForDbRelease(); if(!_db) - return QVariant(); + return QByteArray(); if(log) - logSQL(statement, kLogMsg_App); + logSQL(sql, kLogMsg_App); - QByteArray utf8Query = statement.toUtf8(); + QByteArray retval; + + QByteArray utf8Query = sql.toUtf8(); sqlite3_stmt* stmt; if(sqlite3_prepare_v2(_db, utf8Query, utf8Query.size(), &stmt, nullptr) == SQLITE_OK) { @@ -1005,16 +1007,22 @@ QVariant DBBrowserDB::querySingleValueFromDb(const QString& statement, bool log) { int bytes = sqlite3_column_bytes(stmt, 0); if(bytes) - return QByteArray(static_cast(sqlite3_column_blob(stmt, 0)), bytes); + retval = QByteArray(static_cast(sqlite3_column_blob(stmt, 0)), bytes); else - return ""; + retval = ""; } sqlite3_finalize(stmt); + } else { + lastErrorMessage = tr("didn't receive any output from %1").arg(sql); + qWarning() << lastErrorMessage; } + } else { + lastErrorMessage = tr("could not execute command: %1").arg(sqlite3_errmsg(_db)); + qWarning() << lastErrorMessage; } - return QVariant(); + return retval; } bool DBBrowserDB::getRow(const sqlb::ObjectIdentifier& table, const QString& rowid, QVector& rowdata) @@ -1725,36 +1733,6 @@ void DBBrowserDB::updateSchema() emit structureUpdated(); } -QString DBBrowserDB::selectSingleCell(const QString& sql, bool logsql) -{ - waitForDbRelease(); - - if(!isOpen()) - return QString(); - - sqlite3_stmt* vm; - const char* tail; - QString retval; - - // Get value from DB - int err = sqlite3_prepare_v2(_db, sql.toUtf8(), sql.toUtf8().length(), &vm, &tail); - if(err == SQLITE_OK){ - if (logsql) - logSQL(sql, kLogMsg_App); - if(sqlite3_step(vm) == SQLITE_ROW) - retval = QString::fromUtf8((const char *) sqlite3_column_text(vm, 0)); - else - qWarning() << tr("didn't receive any output from %1").arg(sql); - - sqlite3_finalize(vm); - } else { - qWarning() << tr("could not execute command: %1, %2").arg(err).arg(sqlite3_errmsg(_db)); - } - - // Return it - return retval; -} - QString DBBrowserDB::getPragma(const QString& pragma) { QString sql; @@ -1762,7 +1740,7 @@ QString DBBrowserDB::getPragma(const QString& pragma) sql = "SELECT 'x' NOT LIKE 'X'"; else sql = QString("PRAGMA %1").arg(pragma); - return selectSingleCell(sql); + return querySingleValueFromDb(sql); } bool DBBrowserDB::setPragma(const QString& pragma, const QString& value) diff --git a/src/sqlitedb.h b/src/sqlitedb.h index d4931008..0c01cda2 100644 --- a/src/sqlitedb.h +++ b/src/sqlitedb.h @@ -96,7 +96,7 @@ public: bool executeSQL(QString statement, bool dirtyDB = true, bool logsql = true); bool executeMultiSQL(const QString& statement, bool dirty = true, bool log = false); - QVariant querySingleValueFromDb(const QString& statement, bool log = true); + QByteArray querySingleValueFromDb(const QString& sql, bool log = true); const QString& lastError() const { return lastErrorMessage; } @@ -176,7 +176,6 @@ public: /// log an SQL statement [thread-safe] void logSQL(QString statement, int msgtype); - QString selectSingleCell(const QString& sql, bool logsql = true); QString getPragma(const QString& pragma); bool setPragma(const QString& pragma, const QString& value); bool setPragma(const QString& pragma, const QString& value, QString& originalvalue); diff --git a/src/sqlitetablemodel.cpp b/src/sqlitetablemodel.cpp index 7eb7c71d..1210211e 100644 --- a/src/sqlitetablemodel.cpp +++ b/src/sqlitetablemodel.cpp @@ -314,7 +314,7 @@ QVariant SqliteTableModel::data(const QModelIndex &index, int role) const else sql = QString("SELECT '%1' %2").arg(value, eachCondFormat.sqlCondition()); - if (m_db.selectSingleCell(sql, false) == "1") + if (m_db.querySingleValueFromDb(sql, false) == "1") return eachCondFormat.color(); } }