Program Listing for File dbRoot.hpp
↰ Return to documentation for file (include/db/dbRoot.hpp
)
#pragma once
#include <string>
#include <vector>
#include <optional>
#include <sqlite3.h>
#include <rocksdb/db.h>
#include <rocksdb/options.h>
#include <rocksdb/table.h>
#include <rocksdb/filter_policy.h>
#include "musicDB.hpp"
#include "trackDB.hpp"
#include <filesystem>
#include "PDJE_EXPORT_SETTER.hpp"
namespace fs = std::filesystem;
using MUS_VEC = std::vector<musdata>;
using MAYBE_MUS_VEC = std::optional<MUS_VEC>;
using TRACK_VEC = std::vector<trackdata>;
using MAYBE_TRACK_VEC = std::optional<TRACK_VEC>;
namespace RDB = ROCKSDB_NAMESPACE;
class PDJE_API litedb{
private:
fs::path ROOT_PATH;
fs::path sqldbPath;
fs::path kvdbPath;
fs::path vectordbPath;
sqlite3* sdb = nullptr;
RDB::DB* kvdb = nullptr;
RDB::WriteOptions wops;
RDB::ReadOptions rops;
bool CheckTables();
public:
template<typename DBType>
std::optional<std::vector<DBType>>
operator<<(DBType& searchClue);
template<typename DBType>
bool
operator<=(DBType& insertObject);
template<typename DBType>
bool
DeleteData(DBType& deleteObject);
template<typename DBType>
bool
EditData(DBType& searchObject, DBType& editObject); //to-do impl
bool
KVGet(const SANITIZED& K, DONT_SANITIZE& V);
bool
KVPut(const SANITIZED& K, const DONT_SANITIZE& V);
bool openDB(const fs::path& dbPath);
const fs::path
getRoot(){
return ROOT_PATH;
}
litedb();
~litedb();
};
template<typename DBType>
std::optional<std::vector<DBType>>
litedb::operator<<(DBType& searchClue)
{
stmt dbstate = stmt();
if(searchClue.GenSearchSTMT(dbstate, sdb)){
std::vector<DBType> data;
while(sqlite3_step(dbstate.S) == SQLITE_ROW){
data.emplace_back(&dbstate);
}
return std::move(data);
}
else{
return std::nullopt;
}
}
#include <iostream>
template<typename DBType>
bool
litedb::operator<=(DBType& insertObject)
{
sqlite3_exec(sdb, "BEGIN TRANSACTION;", NULL, NULL, NULL);
std::cout << "dbRoot.hpp:115 operator" << " " << std::endl;
stmt dbstate = stmt();
if(insertObject.GenInsertSTMT(dbstate, sdb)){
auto insertRes = sqlite3_step(dbstate.S);
if(insertRes != SQLITE_DONE){
std::cout << "dbRoot.hpp:119 FATAL ERROR: insertRes-" << insertRes << " " << std::endl;
sqlite3_exec(sdb, "ROLLBACK;", NULL, NULL, NULL);
return false;
}
sqlite3_exec(sdb, "COMMIT;", nullptr, nullptr, NULL);
return true;
}
std::cout << "dbRoot.hpp:124 FATAL ERROR: GenInsertSTMT ERROR" << std::endl;
return false;
}
template<typename DBType>
bool
litedb::DeleteData(DBType& deleteObject)
{
stmt dbstate = stmt();
if(deleteObject.GenDeleteSTMT(dbstate, sdb)){
auto deleteRes = sqlite3_step(dbstate.S);
if(deleteRes != SQLITE_DONE){
return false;
}
return true;
}
return false;
}
template<typename DBType>
bool
litedb::EditData(DBType& searchObject, DBType& editObject)
{
stmt dbstate = stmt();
if(searchObject.GenEditSTMT(dbstate, sdb, editObject)){
auto editRes = sqlite3_step(dbstate.S);
if(editRes != SQLITE_DONE){
return false;
}
return true;
}
return false;
}