Skip to content

Commit

Permalink
Refactor MacroDAO::querySelect for type safety
Browse files Browse the repository at this point in the history
  • Loading branch information
JoergAtGithub committed Oct 28, 2024
1 parent a950e68 commit 8f54fe8
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 5 deletions.
39 changes: 35 additions & 4 deletions src/library/dao/macrodao.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,16 +61,47 @@ void MacroDAO::saveMacros(TrackId trackId, const QMap<int, MacroPointer>& 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<MacroColumn>& 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<int, MacroPointer> MacroDAO::loadMacros(TrackId trackId) const {
QSqlQuery query = querySelect("*", trackId);
std::vector<MacroColumn> columns = {
MacroColumn::Id,
MacroColumn::Slot,
MacroColumn::State,
MacroColumn::Label,
MacroColumn::Content};
QSqlQuery query = querySelect(columns, trackId);
QMap<int, MacroPointer> result;
if (!query.exec()) {
LOG_FAILED_QUERY(query);
Expand Down
11 changes: 10 additions & 1 deletion src/library/dao/macrodao.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,14 @@ class MacroDAO : public virtual DAO {
QMap<int, MacroPointer> 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<MacroColumn>& columns, TrackId trackId) const;
};

0 comments on commit 8f54fe8

Please sign in to comment.