big refactoring part 1

This commit is contained in:
Blue 2023-03-20 18:37:13 +03:00
parent 6a8f67ac34
commit 19229f6c26
Signed by: blue
GPG key ID: 9B203B252A63EE38
28 changed files with 867 additions and 795 deletions

View file

@ -14,28 +14,41 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef CORE_DATABASE_H
#define CORE_DATABASE_H
#ifndef LMDBDATABASE_DATABASE_H
#define LMDBDATABASE_DATABASE_H
#include <map>
#include <set>
#include <string>
#include <optional>
#include <limits>
#include <QString>
#include <QStandardPaths>
#include <QDir>
#include <lmdb.h>
class DataBase
{
class _Table;
template<class T>
class Serializer;
#include "exceptions.h"
namespace LMDBDataBase {
class StorageBase;
template<class T>
class Serializer;
template <class K, class V>
class Storage;
template <class K, class V>
class Cache;
typedef MDB_txn* TransactionID;
class DataBase {
friend class StorageBase;
public:
template <class K, class V>
class Table;
template <class K, class V>
class Cache;
DataBase(const QString& name, uint16_t mapSize = 10);
~DataBase();
@ -48,69 +61,74 @@ public:
QString getName() const;
void drop();
TransactionID beginReadOnlyTransaction() const;
TransactionID beginTransaction() const;
void commitTransaction(TransactionID id) const;
void abortTransaction(TransactionID id) const;
template <class K, class V>
Table<K, V>* addTable(const std::string& name);
Storage<K, V>* addTable(const std::string& name);
template <class K, class V>
Cache<K, V>* addCache(const std::string& name);
template <class K, class V>
Table<K, V>* getTable(const std::string& name);
Storage<K, V>* getTable(const std::string& name);
template <class K, class V>
Cache<K, V>* getCache(const std::string& name);
public:
//exceptions
class Exception;
class Directory;
class Closed;
class Opened;
class NotFound;
class Exist;
class Unknown;
private:
typedef std::map<std::string, StorageBase*> Tables;
typedef std::set<TransactionID> Transactions;
TransactionID beginReadOnlyTransaction(const std::string& storageName) const;
TransactionID beginTransaction(const std::string& storageName) const;
void commitTransaction(TransactionID id, const std::string& storageName) const;
void abortTransaction(TransactionID id, const std::string& storageName) const;
private:
std::string name;
bool opened;
uint16_t size;
MDB_env* environment;
std::map<std::string, _Table*> tables;
Tables tables;
Transactions* transactions;
inline static const std::string emptyName = "";
};
#include "exceptions.h"
}
#include "operators.hpp"
template <class K, class V>
DataBase::Table<K, V>* DataBase::addTable(const std::string& p_name) {
LMDBDataBase::Storage<K, V>* LMDBDataBase::DataBase::addTable(const std::string& p_name) {
if (opened) {
throw Opened(name, "add table " + p_name);
}
DataBase::Table<K, V>* table = new DataBase::Table<K, V>(p_name, this);
tables.insert(std::make_pair(p_name, (_Table*)table));
Storage<K, V>* table = new Storage<K, V>(p_name, this);
tables.insert(std::make_pair(p_name, (StorageBase*)table));
return table;
}
template<class K, class V>
DataBase::Cache<K, V> * DataBase::addCache(const std::string& p_name) {
LMDBDataBase::Cache<K, V> * LMDBDataBase::DataBase::addCache(const std::string& p_name) {
if (opened) {
throw Opened(name, "add cache " + p_name);
}
DataBase::Cache<K, V>* cache = new DataBase::Cache<K, V>(p_name, this);
tables.insert(std::make_pair(p_name, (_Table*)cache));
Cache<K, V>* cache = new Cache<K, V>(p_name, this);
tables.insert(std::make_pair(p_name, (StorageBase*)cache));
return cache;
}
template <class K, class V>
DataBase::Table<K, V>* DataBase::getTable(const std::string& p_name) {
return static_cast<DataBase::Table<K, V>*>(tables.at(p_name));
LMDBDataBase::Storage<K, V>* LMDBDataBase::DataBase::getTable(const std::string& p_name) {
return static_cast<Storage<K, V>*>(tables.at(p_name));
}
template <class K, class V>
DataBase::Cache<K, V>* DataBase::getCache(const std::string& p_name) {
return static_cast<DataBase::Cache<K, V>*>(tables.at(p_name));
LMDBDataBase::Cache<K, V>* LMDBDataBase::DataBase::getCache(const std::string& p_name) {
return static_cast<Cache<K, V>*>(tables.at(p_name));
}
#endif // CORE_DATABASE_H
#endif // LMDBDATABASE_DATABASE_H