Program Listing for File trackDB.cpp
↰ Return to documentation for file (include/db/trackDB.cpp
)
#include "trackDB.hpp"
// #include "errorTable.hpp"
#include "PDJE_LOG_SETTER.hpp"
#include "fileNameSanitizer.hpp"
#include <source_location>
#define CHK_BIND(res) \
if (res != SQLITE_OK) { \
auto now = std::source_location::current(); \
critlog("failed on sqlite."); \
critlog(now.file_name()); \
std::string lineNumber = std::to_string(now.line()); \
critlog(lineNumber); \
critlog(now.function_name()); \
std::string sqlLog = sqlite3_errmsg(db); \
critlog(sqlLog); \
return false; \
}
trackdata::trackdata(stmt *dbstate)
{
trackTitle = dbstate->colGet<COL_TYPE::PDJE_TEXT, std::string>(0);
mixBinary = dbstate->colGet<COL_TYPE::PDJE_BLOB, BIN>(1);
noteBinary = dbstate->colGet<COL_TYPE::PDJE_BLOB, BIN>(2);
cachedMixList = dbstate->colGet<COL_TYPE::PDJE_TEXT, std::string>(3);
}
trackdata::trackdata(const UNSANITIZED &trackTitle__)
{
auto safeTitle = PDJE_Name_Sanitizer::sanitizeFileName(trackTitle__);
if (!safeTitle) {
critlog("failed to sanitize filename. from trackdata(tracktitle). "
"ErrtrackTitle: ");
critlog(trackTitle__);
return;
}
trackTitle = safeTitle.value();
}
bool
trackdata::GenSearchSTMT(stmt &dbstate, sqlite3 *db)
{
dbstate.placeHold = "SELECT * FROM TRACK "
"WHERE (? = -1 OR TrackTitle = ?);";
if (!dbstate.activate(db)) {
critlog("failed to execute sql. from trackdata GenSearchSTMT.");
return false;
}
if (trackTitle == "") {
CHK_BIND((dbstate.bind_int(1, -1)))
}
CHK_BIND(dbstate.bind_text(2, trackTitle))
return true;
}
bool
trackdata::GenInsertSTMT(stmt &dbstate, sqlite3 *db)
{
dbstate.placeHold = "INSERT INTO TRACK "
"(TrackTitle, MixBinary, NoteBinary, CachedMixList) "
"VALUES "
"(?, ?, ?, ?); ";
if (!dbstate.activate(db)) {
critlog("failed to execute sql. from trackdata GenInsertSTMT.");
return false;
}
CHK_BIND(dbstate.bind_text(1, trackTitle));
CHK_BIND(dbstate.bind_blob(2, mixBinary));
CHK_BIND(dbstate.bind_blob(3, noteBinary));
CHK_BIND(dbstate.bind_text(4, cachedMixList));
return true;
}
bool
trackdata::GenEditSTMT(stmt &dbstate, sqlite3 *db, trackdata &toEdit)
{
dbstate.placeHold =
"UPDATE TRACK "
"SET TrackTitle = ?, MixBinary = ?, NoteBinary = ?, CachedMixList = ? "
"WHERE TrackTitle = ?; ";
if (!dbstate.activate(db)) {
critlog("failed to execute sql. from trackdata GenEditSTMT.");
return false;
}
CHK_BIND(dbstate.bind_text(1, toEdit.trackTitle))
CHK_BIND(dbstate.bind_blob(2, toEdit.mixBinary))
CHK_BIND(dbstate.bind_blob(3, toEdit.noteBinary))
CHK_BIND(dbstate.bind_text(4, toEdit.cachedMixList))
CHK_BIND(dbstate.bind_text(5, trackTitle))
return true;
}
bool
trackdata::GenDeleteSTMT(stmt &dbstate, sqlite3 *db)
{
dbstate.placeHold = "DELETE FROM TRACK "
"WHERE TrackTitle = ?; ";
if (!dbstate.activate(db)) {
critlog("failed to execute sql. from trackdata GenDeleteSTMT.");
return false;
}
CHK_BIND(dbstate.bind_text(1, trackTitle))
return true;
}
#undef CHK_BIND