M module-apps/application-alarm-clock/models/AlarmsRepository.cpp => module-apps/application-alarm-clock/models/AlarmsRepository.cpp +1 -1
@@ 28,7 28,7 @@ namespace app::alarmClock
return false;
}
if (callback) {
- callback(result->alarms, result->alarms.size());
+ callback(result->alarms, result->count);
}
return true;
};
M module-db/Interface/AlarmEventRecord.cpp => module-db/Interface/AlarmEventRecord.cpp +3 -3
@@ 1,4 1,4 @@
-// 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 "AlarmEventRecord.hpp"
@@ 107,11 107,11 @@ std::unique_ptr<db::query::alarmEvents::GetResult> AlarmEventRecordInterface::ru
std::unique_ptr<db::query::alarmEvents::GetBetweenDatesResult> AlarmEventRecordInterface::runQueryImplGetBetweenDates(
std::shared_ptr<db::query::alarmEvents::GetBetweenDates> query)
{
- const auto alarmEventsRows =
+ const auto [alarmEventsRows, count] =
eventsDB->alarmEvents.getBetweenDates(query->start, query->end, query->offset, query->limit);
const auto recordVector = generateRecordsVector(alarmEventsRows);
- auto response = std::make_unique<db::query::alarmEvents::GetBetweenDatesResult>(recordVector);
+ auto response = std::make_unique<db::query::alarmEvents::GetBetweenDatesResult>(recordVector, count);
response->setRequestQuery(query);
return response;
M module-db/Tables/AlarmEventsTable.cpp => module-db/Tables/AlarmEventsTable.cpp +5 -5
@@ 180,10 180,10 @@ std::vector<AlarmEventsTableRow> AlarmEventsTable::getLimitOffsetByField(uint32_
return retQueryUnpack(std::move(retQuery));
}
-std::vector<AlarmEventsTableRow> AlarmEventsTable::getBetweenDates(TimePoint startDate,
- TimePoint endDate,
- uint32_t offset,
- uint32_t limit)
+std::pair<std::vector<AlarmEventsTableRow>, std::uint32_t> AlarmEventsTable::getBetweenDates(TimePoint startDate,
+ TimePoint endDate,
+ std::uint32_t offset,
+ std::uint32_t limit)
{
auto retQuery = db->query("SELECT * FROM events e "
"JOIN alarm_events ae ON ae.event_id = e._id "
@@ 194,7 194,7 @@ std::vector<AlarmEventsTableRow> AlarmEventsTable::getBetweenDates(TimePoint sta
limit,
offset);
- return retQueryUnpack(std::move(retQuery));
+ return {retQueryUnpack(std::move(retQuery)), count()};
}
std::vector<AlarmEventsTableRow> AlarmEventsTable::getRecurringBetweenDates(TimePoint startDate,
M module-db/Tables/AlarmEventsTable.hpp => module-db/Tables/AlarmEventsTable.hpp +2 -2
@@ 63,8 63,8 @@ class AlarmEventsTable : public Table<AlarmEventsTableRow, AlarmEventsTableField
auto getLimitOffset(uint32_t offset, uint32_t limit) -> std::vector<AlarmEventsTableRow> override;
auto getLimitOffsetByField(uint32_t offset, uint32_t limit, AlarmEventsTableFields field, const char *str)
-> std::vector<AlarmEventsTableRow> override;
- auto getBetweenDates(TimePoint startDate, TimePoint endDate, uint32_t offset, uint32_t limit)
- -> std::vector<AlarmEventsTableRow>;
+ auto getBetweenDates(TimePoint startDate, TimePoint endDate, std::uint32_t offset, std::uint32_t limit)
+ -> std::pair<std::vector<AlarmEventsTableRow>, std::uint32_t>;
auto getRecurringBetweenDates(TimePoint startDate, TimePoint endDate, uint32_t offset, uint32_t limit)
-> std::vector<AlarmEventsTableRow>;
auto getNext(TimePoint start, uint32_t offset, uint32_t limit) -> std::vector<AlarmEventsTableRow>;
M module-db/Tables/Table.hpp => module-db/Tables/Table.hpp +2 -0
@@ 3,6 3,7 @@
#pragma once
+#include "Record.hpp"
#include <Database/Database.hpp>
#include <functional>
@@ 49,6 50,7 @@ template <typename T, typename F> class Table
}
std::vector<T> outVector;
+ outVector.reserve(retQuery->getRowCount());
do {
outVector.push_back(createTableRow(*retQuery));
M module-db/queries/alarm_events/QueryAlarmEventsGetBetweenDates.cpp => module-db/queries/alarm_events/QueryAlarmEventsGetBetweenDates.cpp +6 -5
@@ 1,4 1,4 @@
-// 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 "QueryAlarmEventsGetBetweenDates.hpp"
@@ 7,7 7,7 @@
namespace db::query::alarmEvents
{
- GetBetweenDates::GetBetweenDates(TimePoint start, TimePoint end, uint32_t offset, uint32_t limit)
+ GetBetweenDates::GetBetweenDates(TimePoint start, TimePoint end, std::uint32_t offset, std::uint32_t limit)
: Query(Query::Type::Read), start(start), end(end), offset(offset), limit(limit)
{}
@@ 16,12 16,13 @@ namespace db::query::alarmEvents
return std::string{"GetBetweenDates"};
}
- GetBetweenDatesResult::GetBetweenDatesResult(std::vector<AlarmEventRecord> records) : records(std::move(records))
+ GetBetweenDatesResult::GetBetweenDatesResult(std::vector<AlarmEventRecord> records, std::uint32_t count)
+ : records(std::move(records)), count(count)
{}
- auto GetBetweenDatesResult::getResult() const -> std::vector<AlarmEventRecord>
+ auto GetBetweenDatesResult::getResult() const -> std::pair<std::vector<AlarmEventRecord>, std::uint32_t>
{
- return records;
+ return {records, count};
}
auto GetBetweenDatesResult::debugInfo() const -> std::string
M module-db/queries/alarm_events/QueryAlarmEventsGetBetweenDates.hpp => module-db/queries/alarm_events/QueryAlarmEventsGetBetweenDates.hpp +7 -7
@@ 1,4 1,4 @@
-// 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
@@ 14,23 14,23 @@ namespace db::query::alarmEvents
class GetBetweenDates : public Query
{
public:
- GetBetweenDates(TimePoint start, TimePoint end, uint32_t offset, uint32_t limit);
+ GetBetweenDates(TimePoint start, TimePoint end, std::uint32_t offset, std::uint32_t limit);
[[nodiscard]] auto debugInfo() const -> std::string override;
const TimePoint start = TIME_POINT_INVALID;
const TimePoint end = TIME_POINT_INVALID;
- const uint32_t offset = 0;
- const uint32_t limit = 0;
+ const std::uint32_t offset = 0;
+ const std::uint32_t limit = 0;
};
class GetBetweenDatesResult : public QueryResult
{
const std::vector<AlarmEventRecord> records;
+ const std::uint32_t count = 0;
public:
- explicit GetBetweenDatesResult(std::vector<AlarmEventRecord> records);
- [[nodiscard]] auto getResult() const -> std::vector<AlarmEventRecord>;
-
+ explicit GetBetweenDatesResult(std::vector<AlarmEventRecord> records, std::uint32_t count);
+ [[nodiscard]] auto getResult() const -> std::pair<std::vector<AlarmEventRecord>, std::uint32_t>;
[[nodiscard]] auto debugInfo() const -> std::string override;
};
M module-db/tests/AlarmEventRecord_tests.cpp => module-db/tests/AlarmEventRecord_tests.cpp +13 -9
@@ 387,19 387,21 @@ TEST_CASE("AlarmEventRecord tests")
auto retAlarmEvents = getBetweenDatesQuery(
TimePointFromString("2020-01-01 00:00:00"), TimePointFromString("2020-02-01 00:00:00"), 0, 10);
- REQUIRE(retAlarmEvents.size() == 1);
- REQUIRE(retAlarmEvents[0].ID == 1);
+ REQUIRE(retAlarmEvents.first.size() == 1);
+ REQUIRE(retAlarmEvents.first[0].ID == 1);
retAlarmEvents = getBetweenDatesQuery(
TimePointFromString("2020-05-01 00:00:00"), TimePointFromString("2020-10-01 00:00:00"), 0, 10);
- REQUIRE(retAlarmEvents.size() == 2);
- REQUIRE(retAlarmEvents[0].ID == 2);
- REQUIRE(retAlarmEvents[1].ID == 3);
+ REQUIRE(retAlarmEvents.first.size() == 2);
+ REQUIRE(retAlarmEvents.first[0].ID == 2);
+ REQUIRE(retAlarmEvents.first[1].ID == 3);
retAlarmEvents = getBetweenDatesQuery(
TimePointFromString("2020-05-01 00:00:00"), TimePointFromString("2020-10-01 00:00:00"), 1, 10);
- REQUIRE(retAlarmEvents.size() == 1);
- REQUIRE(retAlarmEvents[0].ID == 3);
+ REQUIRE(retAlarmEvents.first.size() == 1);
+ REQUIRE(retAlarmEvents.first[0].ID == 3);
+
+ REQUIRE(retAlarmEvents.second == 3);
}
SECTION("Get Next")
@@ 446,8 448,10 @@ TEST_CASE("AlarmEventRecord tests")
testEnabled,
testSnoozeDuration);
- retAlarmEvents = getBetweenDatesQuery(
- TimePointFromString("2020-05-01 00:00:00"), TimePointFromString("2020-10-01 00:00:00"), 1, 10);
+ retAlarmEvents =
+ getBetweenDatesQuery(
+ TimePointFromString("2020-05-01 00:00:00"), TimePointFromString("2020-10-01 00:00:00"), 1, 10)
+ .first;
retAlarmEvents = getNextQuery(TimePointFromString("2020-01-01 00:00:00"), 0, 10);
REQUIRE(retAlarmEvents.size() == 2);
REQUIRE((((retAlarmEvents[0].ID == 3) && (retAlarmEvents[1].ID == 4)) ||
M module-services/service-time/AlarmMessageHandler.cpp => module-services/service-time/AlarmMessageHandler.cpp +2 -2
@@ 57,11 57,11 @@ namespace alarms
{
return handleWithCallback<AlarmsGetInRangeRequestMessage,
AlarmsGetInRangeResponseMessage,
- std::vector<AlarmEventRecord>>(
+ std::pair<std::vector<AlarmEventRecord>, std::uint32_t>>(
request,
[&](AlarmsGetInRangeRequestMessage *request, IAlarmOperations::OnGetAlarmsInRangeProcessed callback) {
alarmOperations->getAlarmsInRange(
- request->start, request->end, request->offset, request->limit, callback);
+ request->start, request->end, request->offset, request->limit, std::move(callback));
});
}
M module-services/service-time/AlarmOperations.cpp => module-services/service-time/AlarmOperations.cpp +1 -3
@@ 72,9 72,7 @@ namespace alarms
void AlarmOperations::getAlarmsInRange(
TimePoint start, TimePoint end, std::uint32_t offset, std::uint32_t limit, OnGetAlarmsInRangeProcessed callback)
{
- OnGetAlarmEventsInRangeCallback repoCallback = [callback](std::vector<AlarmEventRecord> records) {
- callback(records);
- };
+ OnGetAlarmEventsInRangeCallback repoCallback = [callback](auto vals) { callback(std::move(vals)); };
alarmEventsRepo->getAlarmEventsInRange(start, end, offset, limit, repoCallback);
}
M module-services/service-time/AlarmOperations.hpp => module-services/service-time/AlarmOperations.hpp +1 -1
@@ 16,7 16,7 @@ namespace alarms
{
public:
using OnGetAlarmProcessed = std::function<void(AlarmEventRecord)>;
- using OnGetAlarmsInRangeProcessed = std::function<void(std::vector<AlarmEventRecord>)>;
+ using OnGetAlarmsInRangeProcessed = std::function<void(std::pair<std::vector<AlarmEventRecord>, uint32_t>)>;
using OnAddAlarmProcessed = std::function<void(bool)>;
using OnUpdateAlarmProcessed = std::function<void(bool)>;
using OnRemoveAlarmProcessed = std::function<void(bool)>;
M module-services/service-time/AlarmRepository.hpp => module-services/service-time/AlarmRepository.hpp +2 -1
@@ 21,7 21,8 @@ namespace alarms
{
using OnGetAlarmEventCallback = std::function<void(AlarmEventRecord)>;
using OnGetAlarmEventsCallback = std::function<void(std::vector<AlarmEventRecord>)>;
- using OnGetAlarmEventsInRangeCallback = std::function<void(std::vector<AlarmEventRecord>)>;
+ using OnGetAlarmEventsInRangeCallback =
+ std::function<void(std::pair<std::vector<AlarmEventRecord>, std::uint32_t>)>;
using OnAddAlarmEventCallback = std::function<void(bool)>;
using OnUpdateAlarmEventCallback = std::function<void(bool)>;
using OnRemoveAlarmEventCallback = std::function<void(bool)>;
M module-services/service-time/include/service-time/AlarmMessage.hpp => module-services/service-time/include/service-time/AlarmMessage.hpp +3 -2
@@ 98,9 98,10 @@ namespace alarms
class AlarmsGetInRangeResponseMessage : public AlarmResponse
{
public:
- AlarmsGetInRangeResponseMessage(std::vector<AlarmEventRecord> alarms = std::vector<AlarmEventRecord>())
- : alarms(alarms){};
+ explicit AlarmsGetInRangeResponseMessage(std::pair<std::vector<AlarmEventRecord>, std::uint32_t> p)
+ : alarms(std::move(p.first)), count(p.second){};
std::vector<AlarmEventRecord> alarms;
+ const std::uint32_t count = 0;
};
class AlarmGetNextSingleEventsRequestMessage : public AlarmMessage