Program Listing for File dbRoot.cpp

Return to documentation for file (include/db/dbRoot.cpp)

#include <stdexcept>
#include "dbRoot.hpp"


litedb::litedb(){}

bool
litedb::openDB(const std::string& dbPath)
{
    if (sqlite3_open(dbPath.c_str(), &db) != SQLITE_OK){
        return false;
    }
    if(!CheckTables()){
        return false;
    }
    ROOT_PATH = dbPath;
    return true;
}

litedb::~litedb()
{
    if(db != nullptr){
        sqlite3_close(db);
    }
}

bool
litedb::CheckTables()
{
    sqlite3_stmt* chk_mus;
    sqlite3_stmt* chk_trk;
    std::string msql = "PRAGMA table_info('MUSIC')";
    std::string tsql = "PRAGMA table_info('TRACK')";
    if (sqlite3_prepare_v2(db, msql.c_str(), -1, &chk_mus, nullptr) != SQLITE_OK) {
        return false;
    }
    if (sqlite3_prepare_v2(db, tsql.c_str(), -1, &chk_trk, nullptr) != SQLITE_OK) {
        return false;
    }
    if(sqlite3_step(chk_mus) != SQLITE_ROW){
        std::string musmake =
        "CREATE TABLE MUSIC ( "
        "Title TEXT NOT NULL, "
        "Composer TEXT NOT NULL, "
        "MusicPath TEXT NOT NULL, "
        "Bpm DOUBLE NOT NULL, "
        "BpmBinary BLOB NOT NULL, "
        "FirstBar TEXT NOT NULL "
        ");";
        if(sqlite3_exec(db, musmake.c_str(), nullptr, nullptr, nullptr) != SQLITE_OK){
            return false;
        }
    }
    if(sqlite3_step(chk_trk) != SQLITE_ROW){
        std::string trackmake =
        "CREATE TABLE TRACK ( "
        "TrackTitle TEXT NOT NULL, "
        "MixBinary BLOB NOT NULL, "
        "NoteBinary BLOB NOT NULL, "
        "CachedMixList TEXT NOT NULL "
        ");";
        if(sqlite3_exec(db, trackmake.c_str(), nullptr, nullptr, nullptr) != SQLITE_OK){
            return false;
        }
    }
    sqlite3_finalize(chk_mus);
    sqlite3_finalize(chk_trk);
    return true;
}