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,'');";
};