@@ 1,12 1,10 @@
-// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include "AlarmEventsTable.hpp"
#include <Interface/AlarmEventRecord.hpp>
-std::vector<AlarmEventsTableRow> retQueryUnpack(std::unique_ptr<QueryResult> retQuery);
-
AlarmEventsTableRow::AlarmEventsTableRow(uint32_t id,
const UTF8 &name,
TimePoint startDate,
@@ 51,7 49,9 @@ auto AlarmEventsTableRow::isValid() const -> bool
}
AlarmEventsTable::AlarmEventsTable(Database *db) : Table(db)
-{}
+{
+ createTableRow = [](const QueryResult &retQuery) { return AlarmEventsTableRow(retQuery); };
+}
bool AlarmEventsTable::create()
{
@@ 284,17 284,3 @@ std::string AlarmEventsTable::getFieldName(AlarmEventsTableFields field)
return "";
}
}
-
-std::vector<AlarmEventsTableRow> retQueryUnpack(std::unique_ptr<QueryResult> retQuery)
-{
- if ((retQuery == nullptr) || (retQuery->getRowCount() == 0)) {
- return {};
- }
-
- std::vector<AlarmEventsTableRow> outVector;
-
- do {
- outVector.push_back(AlarmEventsTableRow(*retQuery));
- } while (retQuery->nextRow());
- return outVector;
-}
@@ 7,46 7,33 @@
#include <Utils.hpp>
#include <magic_enum.hpp>
-MultimediaFilesTableRow CreateMultimediaFilesTableRow(const QueryResult &result)
-{
- if (result.getFieldCount() != magic_enum::enum_count<MultimediaFilesTableFields>() + 1) {
- return MultimediaFilesTableRow{};
- }
-
- return MultimediaFilesTableRow{
- result[0].getUInt32(), // ID
- result[1].getString(), // path
- result[2].getString(), // mediaType
- result[3].getUInt32(), // size
- {result[4].getString(), // title
- result[5].getString(), // artist
- result[6].getString(), // album
- result[7].getString(), // comment
- result[8].getString(), // genre
- result[9].getUInt32(), // year
- result[10].getUInt32()}, // track
- {result[11].getUInt32(), // songLength
- result[12].getUInt32(), // bitrate
- result[13].getUInt32(), // sample rate
- result[14].getUInt32()}, // channels
- };
-}
-
namespace
{
- std::vector<MultimediaFilesTableRow> retQueryUnpack(std::unique_ptr<QueryResult> retQuery)
+ MultimediaFilesTableRow CreateMultimediaFilesTableRow(const QueryResult &result)
{
- if ((retQuery == nullptr) || (retQuery->getRowCount() == 0)) {
- return {};
+ if (result.getFieldCount() != magic_enum::enum_count<MultimediaFilesTableFields>() + 1) {
+ return MultimediaFilesTableRow{};
}
- std::vector<MultimediaFilesTableRow> outVector;
-
- do {
- outVector.push_back(CreateMultimediaFilesTableRow(*retQuery));
- } while (retQuery->nextRow());
- return outVector;
+ return MultimediaFilesTableRow{
+ result[0].getUInt32(), // ID
+ result[1].getString(), // path
+ result[2].getString(), // mediaType
+ result[3].getUInt32(), // size
+ {result[4].getString(), // title
+ result[5].getString(), // artist
+ result[6].getString(), // album
+ result[7].getString(), // comment
+ result[8].getString(), // genre
+ result[9].getUInt32(), // year
+ result[10].getUInt32()}, // track
+ {result[11].getUInt32(), // songLength
+ result[12].getUInt32(), // bitrate
+ result[13].getUInt32(), // sample rate
+ result[14].getUInt32()}, // channels
+ };
}
+
} // namespace
auto MultimediaFilesTableRow::isValid() const -> bool
@@ 55,7 42,9 @@ auto MultimediaFilesTableRow::isValid() const -> bool
}
MultimediaFilesTable::MultimediaFilesTable(Database *db) : Table(db)
-{}
+{
+ createTableRow = CreateMultimediaFilesTableRow;
+}
bool MultimediaFilesTable::create()
{
@@ 139,7 128,7 @@ MultimediaFilesTableRow MultimediaFilesTable::getById(uint32_t id)
std::vector<MultimediaFilesTableRow> MultimediaFilesTable::getLimitOffset(uint32_t offset, uint32_t limit)
{
- auto retQuery = db->query("SELECT * from files LIMIT %lu OFFSET %lu;", limit, offset);
+ auto retQuery = db->query("SELECT * from files ORDER BY title ASC LIMIT %lu OFFSET %lu;", limit, offset);
return retQueryUnpack(std::move(retQuery));
}
@@ 156,8 145,11 @@ std::vector<MultimediaFilesTableRow> MultimediaFilesTable::getLimitOffsetByField
return {};
}
- retQuery =
- db->query("SELECT * FROM files WHERE %q = '%q' LIMIT %lu OFFSET %lu;", fieldName.c_str(), str, limit, offset);
+ retQuery = db->query("SELECT * FROM files WHERE %q = '%q' ORDER BY title ASC LIMIT %lu OFFSET %lu;",
+ fieldName.c_str(),
+ str,
+ limit,
+ offset);
return retQueryUnpack(std::move(retQuery));
}
@@ 1,17 1,19 @@
-// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#pragma once
+#include <Database/Database.hpp>
+
+#include <functional>
#include <stdint.h>
#include <vector>
-#include "Database/Database.hpp"
template <typename T, typename F> class Table
{
protected:
- Table(Database *db) : db(db)
+ explicit Table(Database *db) : db(db)
{}
virtual ~Table()
@@ 24,9 26,9 @@ template <typename T, typename F> class Table
return false;
}
virtual bool removeById(uint32_t id) = 0;
- virtual bool removeByField(F field, const char *str)
+ virtual bool removeByField([[maybe_unused]] F field, [[maybe_unused]] const char *str)
{
- return true;
+ return false;
}
virtual bool update(T entry) = 0;
virtual T getById(uint32_t id) = 0;
@@ 40,5 42,20 @@ template <typename T, typename F> class Table
return db->getLastInsertRowId();
}
- Database *db;
+ virtual std::vector<T> retQueryUnpack(std::unique_ptr<QueryResult> retQuery) const
+ {
+ if ((retQuery == nullptr) || (retQuery->getRowCount() == 0) || (createTableRow == nullptr)) {
+ return {};
+ }
+
+ std::vector<T> outVector;
+
+ do {
+ outVector.push_back(createTableRow(*retQuery));
+ } while (retQuery->nextRow());
+ return outVector;
+ }
+
+ Database *db = nullptr;
+ std::function<T(const QueryResult &result)> createTableRow = nullptr;
};