DBManager: ORDER BY parameter added to getRecord(s) (#770)

-> All instances are now sorted in ascending order using the instance ID
-> The web interface gets an incorrect instance order, which causes further problems
This commit is contained in:
SJunkies 2020-07-12 11:04:16 +02:00 committed by GitHub
parent 8c188d71d9
commit 9110b3e690
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 9 deletions

View File

@ -83,18 +83,20 @@ public:
/// @param[in] conditions condition to search for (WHERE) /// @param[in] conditions condition to search for (WHERE)
/// @param[out] results results of query /// @param[out] results results of query
/// @param[in] tColumns target columns to search in (optional) if not provided returns all columns /// @param[in] tColumns target columns to search in (optional) if not provided returns all columns
/// @param[in] tOrder target order columns with order by ASC/DESC (optional)
/// @return True on success else false /// @return True on success else false
/// ///
bool getRecord(const VectorPair& conditions, QVariantMap& results, const QStringList& tColumns = QStringList()) const; bool getRecord(const VectorPair& conditions, QVariantMap& results, const QStringList& tColumns = QStringList(), const QStringList& tOrder = QStringList()) const;
/// ///
/// @brief Get data of multiple records, you need to specify the columns. This search is without conditions. Good to grab all data from db /// @brief Get data of multiple records, you need to specify the columns. This search is without conditions. Good to grab all data from db
/// @param[in] conditions condition to search for (WHERE) /// @param[in] conditions condition to search for (WHERE)
/// @param[out] results results of query /// @param[out] results results of query
/// @param[in] tColumns target columns to search in (optional) if not provided returns all columns /// @param[in] tColumns target columns to search in (optional) if not provided returns all columns
/// @param[in] tOrder target order columns with order by ASC/DESC (optional)
/// @return True on success else false /// @return True on success else false
/// ///
bool getRecords(QVector<QVariantMap>& results, const QStringList& tColumns = QStringList()) const; bool getRecords(QVector<QVariantMap>& results, const QStringList& tColumns = QStringList(), const QStringList& tOrder = QStringList()) const;
/// ///
/// @brief Delete a record determined by conditions /// @brief Delete a record determined by conditions

View File

@ -122,7 +122,7 @@ public:
inline QVector<QVariantMap> getAllInstances(const bool& justEnabled = false) inline QVector<QVariantMap> getAllInstances(const bool& justEnabled = false)
{ {
QVector<QVariantMap> results; QVector<QVariantMap> results;
getRecords(results); getRecords(results, QStringList(), QStringList() << "instance ASC");
if(justEnabled) if(justEnabled)
{ {
for (auto it = results.begin(); it != results.end();) for (auto it = results.begin(); it != results.end();)

View File

@ -185,7 +185,7 @@ bool DBManager::updateRecord(const VectorPair& conditions, const QVariantMap& co
return true; return true;
} }
bool DBManager::getRecord(const VectorPair& conditions, QVariantMap& results, const QStringList& tColumns) const bool DBManager::getRecord(const VectorPair& conditions, QVariantMap& results, const QStringList& tColumns, const QStringList& tOrder) const
{ {
QSqlDatabase idb = getDB(); QSqlDatabase idb = getDB();
QSqlQuery query(idb); QSqlQuery query(idb);
@ -195,18 +195,24 @@ bool DBManager::getRecord(const VectorPair& conditions, QVariantMap& results, co
if(!tColumns.isEmpty()) if(!tColumns.isEmpty())
sColumns = tColumns.join(", "); sColumns = tColumns.join(", ");
QString sOrder("");
if(!tOrder.isEmpty())
{
sOrder = " ORDER BY ";
sOrder.append(tOrder.join(", "));
}
// prep conditions // prep conditions
QStringList prepCond; QStringList prepCond;
QVariantList bindVal; QVariantList bindVal;
if(!conditions.isEmpty()) if(!conditions.isEmpty())
prepCond << "WHERE"; prepCond << " WHERE";
for(const auto& pair : conditions) for(const auto& pair : conditions)
{ {
prepCond << pair.first+"=?"; prepCond << pair.first+"=?";
bindVal << pair.second; bindVal << pair.second;
} }
query.prepare(QString("SELECT %1 FROM %2 %3").arg(sColumns,_table).arg(prepCond.join(" "))); query.prepare(QString("SELECT %1 FROM %2%3%4").arg(sColumns,_table).arg(prepCond.join(" ")).arg(sOrder));
doAddBindValue(query, bindVal); doAddBindValue(query, bindVal);
if(!query.exec()) if(!query.exec())
@ -227,7 +233,7 @@ bool DBManager::getRecord(const VectorPair& conditions, QVariantMap& results, co
return true; return true;
} }
bool DBManager::getRecords(QVector<QVariantMap>& results, const QStringList& tColumns) const bool DBManager::getRecords(QVector<QVariantMap>& results, const QStringList& tColumns, const QStringList& tOrder) const
{ {
QSqlDatabase idb = getDB(); QSqlDatabase idb = getDB();
QSqlQuery query(idb); QSqlQuery query(idb);
@ -237,7 +243,14 @@ bool DBManager::getRecords(QVector<QVariantMap>& results, const QStringList& tCo
if(!tColumns.isEmpty()) if(!tColumns.isEmpty())
sColumns = tColumns.join(", "); sColumns = tColumns.join(", ");
query.prepare(QString("SELECT %1 FROM %2").arg(sColumns,_table)); QString sOrder("");
if(!tOrder.isEmpty())
{
sOrder = " ORDER BY ";
sOrder.append(tOrder.join(", "));
}
query.prepare(QString("SELECT %1 FROM %2%3").arg(sColumns,_table,sOrder));
if(!query.exec()) if(!query.exec())
{ {