~aleteoryx/muditaos

05847f09d10bef7c7579b55de45f22a462ccb4b4 — Paweł Joński 4 years ago 6ab09d5
[BH-743] Fix alarm deletion from DB

Remove cascade deletion from sql
Add manual deletion from 2 tables
M module-db/Tables/AlarmEventsTable.cpp => module-db/Tables/AlarmEventsTable.cpp +7 -19
@@ 87,28 87,16 @@ bool AlarmEventsTable::add(AlarmEventsTableRow entry)

bool AlarmEventsTable::removeById(uint32_t id)
{
    return db->execute("DELETE FROM events "
                       "WHERE events._id = (SELECT event_id FROM alarm_events WHERE _id=%lu);",
    return db->execute("BEGIN TRANSACTION; "
                       "DELETE FROM events "
                       "WHERE events._id = (SELECT event_id FROM alarm_events WHERE _id=%lu); "
                       "DELETE FROM alarm_events "
                       "WHERE event_id = %lu; "
                       "COMMIT;",
                       id,
                       id);
}

bool AlarmEventsTable::removeByField(AlarmEventsTableFields field, const char *str)
{
    const auto &fieldName = getFieldName(field);

    if (fieldName.empty()) {
        return false;
    }

    return db->execute("DELETE e "
                       "FROM events e "
                       "INNER JOIN alarm_events ae "
                       "  ON e._id = ae.event_id "
                       "WHERE %q = '%q';",
                       fieldName.c_str(),
                       str);
}

bool AlarmEventsTable::update(AlarmEventsTableRow entry)
{
    return db->execute(

M module-db/Tables/AlarmEventsTable.hpp => module-db/Tables/AlarmEventsTable.hpp +0 -1
@@ 57,7 57,6 @@ class AlarmEventsTable : public Table<AlarmEventsTableRow, AlarmEventsTableField
    auto create() -> bool override;
    auto add(AlarmEventsTableRow entry) -> bool override;
    auto removeById(uint32_t id) -> bool override;
    auto removeByField(AlarmEventsTableFields field, const char *str) -> bool override;
    auto update(AlarmEventsTableRow entry) -> bool override;
    auto getById(uint32_t id) -> AlarmEventsTableRow override;
    auto getLimitOffset(uint32_t offset, uint32_t limit) -> std::vector<AlarmEventsTableRow> override;

M module-db/tests/AlarmEventRecord_tests.cpp => module-db/tests/AlarmEventRecord_tests.cpp +39 -0
@@ 139,6 139,45 @@ TEST_CASE("AlarmEventRecord tests")
        return alarmsRec;
    };

    SECTION("Add remove add")
    {
        auto retAlarmEvents = getLimitedQuery(0, 10);
        REQUIRE(retAlarmEvents.size() == 0);

        addQuery(testName1,
                 testEventStart,
                 testDuration,
                 testIsAllDay,
                 testRRuleDaily,
                 testMusicTone,
                 testEnabled,
                 testSnoozeDuration);

        retAlarmEvents = getLimitedQuery(0, 10);
        REQUIRE(retAlarmEvents.size() == 1);

        const auto queryRemove  = std::make_shared<db::query::alarmEvents::Remove>(1);
        const auto retRemove    = alarmEventRecordInterface.runQuery(queryRemove);
        const auto resultRemove = dynamic_cast<db::query::alarmEvents::RemoveResult *>(retRemove.get());
        REQUIRE(resultRemove != nullptr);
        REQUIRE(resultRemove->getResult());

        retAlarmEvents = getLimitedQuery(0, 10);
        REQUIRE(retAlarmEvents.size() == 0);

        addQuery(testName1,
                 testEventStart,
                 testDuration,
                 testIsAllDay,
                 testRRuleDaily,
                 testMusicTone,
                 testEnabled,
                 testSnoozeDuration);

        retAlarmEvents = getLimitedQuery(0, 10);
        REQUIRE(retAlarmEvents.size() == 1);
    }

    SECTION("Add & Get")
    {
        addQuery(testName1,