~aleteoryx/muditaos

6e248eb3ca00522541b0f979514479f7a6cf7c73 — Tomek Sobkowiak 5 years ago 57c7672
[EDG-4349] Load script to init alarms database (#1000)

A image/user/db/alarms_001.sql => image/user/db/alarms_001.sql +8 -0
@@ 0,0 1,8 @@
CREATE TABLE IF NOT EXISTS alarms
(
    _id    INTEGER PRIMARY KEY,
    time   INTEGER,
    snooze INTEGER,
    status INTEGER,
    path   TEXT DEFAULT ''
);

A image/user/db/alarms_002.sql => image/user/db/alarms_002.sql +2 -0
@@ 0,0 1,2 @@
INSERT or ignore INTO alarms (_id, time, snooze, status, path)
VALUES (1, 0, 0, 0, '');

M module-db/Database/Database.cpp => module-db/Database/Database.cpp +8 -1
@@ 2,6 2,8 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "Database.hpp"
#include "DatabaseInitializer.hpp"

#include "log/log.hpp"
#include "vfs.hpp"
#include <assert.h>


@@ 61,7 63,9 @@ extern "C"
    }
}

Database::Database(const char *name) : dbConnection(nullptr), dbName(name), isInitialized_(false)
Database::Database(const char *name)
    : dbConnection(nullptr), dbName(name), isInitialized_(false),
      initializer(std::make_unique<DatabaseInitializer>(this))
{
    LOG_INFO("creating database: %s", dbName.c_str());
    auto rc = sqlite3_open(name, &dbConnection);


@@ 71,6 75,9 @@ Database::Database(const char *name) : dbConnection(nullptr), dbName(name), isIn
    assert(rc == SQLITE_OK);
    pragmaQuery("PRAGMA integrity_check;");
    pragmaQuery("PRAGMA locking_mode=EXCLUSIVE");

    LOG_INFO("running scripts: %s", USER_PATH("db"));
    isInitialized_ = initializer->run(USER_PATH("db"), INIT_SCRIPTS_EXT);
}

Database::~Database()

M module-db/Database/Database.hpp => module-db/Database/Database.hpp +5 -0
@@ 11,8 11,12 @@
#include <memory>
#include <set>

class DatabaseInitializer;

class Database
{
    static constexpr char INIT_SCRIPTS_EXT[] = "sql";

  public:
    Database(const char *name);



@@ 59,4 63,5 @@ class Database
    sqlite3 *dbConnection;
    std::string dbName;
    bool isInitialized_;
    std::unique_ptr<DatabaseInitializer> initializer;
};

M module-db/Database/DatabaseInitializer.cpp => module-db/Database/DatabaseInitializer.cpp +1 -0
@@ 18,6 18,7 @@ bool DatabaseInitializer::run(fs::path path, std::string ext)

    auto files = listFiles(path, dbname, ext);
    for (auto file : files) {
        LOG_DEBUG("Runing db script: %s", file.c_str());
        auto commands = readCommands(file);
        if (!executeOnDb(commands)) {
            LOG_ERROR("Can't initialize database [%s] with [%s]", db->getName().c_str(), file.c_str());

M module-db/Databases/AlarmsDB.cpp => module-db/Databases/AlarmsDB.cpp +0 -9
@@ 14,13 14,4 @@
const char *AlarmsDB::dbName = USER_PATH("alarms.db");

AlarmsDB::AlarmsDB() : Database(dbName), alarms(this)
{

    if (alarms.create() == false)
        return;

    isInitialized_ = true;
}

AlarmsDB::~AlarmsDB()
{}

M module-db/Databases/AlarmsDB.hpp => module-db/Databases/AlarmsDB.hpp +1 -1
@@ 17,7 17,7 @@ class AlarmsDB : public Database
{
  public:
    AlarmsDB();
    ~AlarmsDB();
    ~AlarmsDB() = default;

    AlarmsTable alarms;


M module-db/Tables/AlarmsTable.cpp => module-db/Tables/AlarmsTable.cpp +1 -12
@@ 13,20 13,9 @@
AlarmsTable::AlarmsTable(Database *db) : Table(db)
{}

AlarmsTable::~AlarmsTable()
{}

bool AlarmsTable::create()
{
    bool ret = true;
    ret      = db->execute(createTableQuery);

    if (!ret) {
        return false;
    }

    ret = db->execute(alarmsInitialization);
    return ret;
    return true;
}

bool AlarmsTable::add(AlarmsTableRow entry)

M module-db/Tables/AlarmsTable.hpp => module-db/Tables/AlarmsTable.hpp +1 -12
@@ 36,7 36,7 @@ class AlarmsTable : public Table<AlarmsTableRow, AlarmsTableFields>
{
  public:
    AlarmsTable(Database *db);
    virtual ~AlarmsTable();
    virtual ~AlarmsTable() = default;

    bool create() override final;
    bool add(AlarmsTableRow entry) override final;


@@ 54,15 54,4 @@ class AlarmsTable : public Table<AlarmsTableRow, AlarmsTableFields>
    uint32_t countByFieldId(const char *field, uint32_t id) override final;

    AlarmsTableRow next(time_t time);

  private:
    const char *createTableQuery = "CREATE TABLE IF NOT EXISTS alarms("
                                   "_id INTEGER PRIMARY KEY,"
                                   "time INTEGER,"
                                   "snooze INTEGER,"
                                   "status INTEGER,"
                                   "path TEXT DEFAULT '');";
    // "INSERT or ignore INTO alarms (_id, time, snooze, status, path ) VALUES (1,0,0,0,'');"
    const char *alarmsInitialization =
        "INSERT or ignore INTO alarms (_id, time, snooze, status, path ) VALUES (1,0,0,0,'');";
};