Simplify code

Merge two very similar functions into one while keeping the best parts
of both.
This commit is contained in:
Martin Kleusberg
2018-10-30 21:38:57 +01:00
parent abb6f686a3
commit 064ce6f8fe
3 changed files with 18 additions and 41 deletions

View File

@@ -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<const char*>(sqlite3_column_blob(stmt, 0)), bytes);
retval = QByteArray(static_cast<const char*>(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<QByteArray>& 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)

View File

@@ -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);

View File

@@ -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();
}
}