From 8f54fe8c6aa8c6634c007efca8eacf85c1b343d5 Mon Sep 17 00:00:00 2001 From: Joerg Date: Mon, 28 Oct 2024 22:50:28 +0100 Subject: [PATCH] Refactor MacroDAO::querySelect for type safety --- src/library/dao/macrodao.cpp | 39 ++++++++++++++++++++++++++++++++---- src/library/dao/macrodao.h | 11 +++++++++- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/src/library/dao/macrodao.cpp b/src/library/dao/macrodao.cpp index 179e9e0cea5..b99a16f1b44 100644 --- a/src/library/dao/macrodao.cpp +++ b/src/library/dao/macrodao.cpp @@ -61,16 +61,47 @@ void MacroDAO::saveMacros(TrackId trackId, const QMap& macros } } -QSqlQuery MacroDAO::querySelect(const QString& columns, TrackId trackId) const { +QString MacroDAO::columnToString(MacroColumn column) const { + switch (column) { + case MacroColumn::Id: + return "id"; + case MacroColumn::TrackId: + return "track_id"; + case MacroColumn::Slot: + return "slot"; + case MacroColumn::Label: + return "label"; + case MacroColumn::State: + return "state"; + case MacroColumn::Content: + return "content"; + default: + DEBUG_ASSERT(false); + return QString(); + } +} + +QSqlQuery MacroDAO::querySelect(const std::vector& columns, TrackId trackId) const { + QStringList columnNames; + for (const auto& column : columns) { + columnNames << columnToString(column); + } + QString columnList = columnNames.join(", "); + QSqlQuery query(m_database); - query.prepare(QString("SELECT %1 FROM macros WHERE track_id=:trackId") - .arg(columns)); + query.prepare(QString("SELECT %1 FROM macros WHERE track_id=:trackId").arg(columnList)); query.bindValue(":trackId", trackId.toVariant()); return query; } QMap MacroDAO::loadMacros(TrackId trackId) const { - QSqlQuery query = querySelect("*", trackId); + std::vector columns = { + MacroColumn::Id, + MacroColumn::Slot, + MacroColumn::State, + MacroColumn::Label, + MacroColumn::Content}; + QSqlQuery query = querySelect(columns, trackId); QMap result; if (!query.exec()) { LOG_FAILED_QUERY(query); diff --git a/src/library/dao/macrodao.h b/src/library/dao/macrodao.h index 5bee50cab08..da42293bdb1 100644 --- a/src/library/dao/macrodao.h +++ b/src/library/dao/macrodao.h @@ -12,5 +12,14 @@ class MacroDAO : public virtual DAO { QMap loadMacros(TrackId trackId) const; private: - QSqlQuery querySelect(const QString& columns, TrackId trackId) const; + enum class MacroColumn { + Id, + TrackId, + Slot, + Label, + State, + Content + }; + QString columnToString(MacroColumn column) const; + QSqlQuery querySelect(const std::vector& columns, TrackId trackId) const; };