From d8966b7d703cc34dd71ca7688b3d0f08c7a2a902 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Thu, 4 Dec 2014 23:04:02 +0100 Subject: Adapted to new interface. --- store/database.cpp | 36 +++++++++++++++++++++++++++++------- store/database.h | 5 ++++- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/store/database.cpp b/store/database.cpp index fd3aa8f..c58379c 100644 --- a/store/database.cpp +++ b/store/database.cpp @@ -14,9 +14,11 @@ class Database::Private { public: - Private(const QString &path); + Private(const QString &s, const QString &name); ~Private(); + QString storageRoot; + QString name; MDB_dbi dbi; MDB_env *env; MDB_txn *transaction; @@ -24,19 +26,21 @@ public: bool firstOpen; }; -Database::Private::Private(const QString &path) +Database::Private::Private(const QString &s, const QString &n) : transaction(0), readTransaction(false), - firstOpen(true) + firstOpen(true), + storageRoot(s), + name(n) { QDir dir; - dir.mkdir(path); + dir.mkdir(storageRoot); //create file if (mdb_env_create(&env)) { // TODO: handle error } else { - int rc = mdb_env_open(env, path.toStdString().data(), 0, 0664); + int rc = mdb_env_open(env, (storageRoot+name).toStdString().data(), 0, 0664); if (rc) { std::cerr << "mdb_env_open: " << rc << " " << mdb_strerror(rc) << std::endl; @@ -60,8 +64,8 @@ Database::Private::~Private() mdb_env_close(env); } -Database::Database(const QString &path) - : d(new Private(path)) +Database::Database(const QString &storageRoot, const QString &name) + : d(new Private(storageRoot, name)) { } @@ -141,6 +145,11 @@ void Database::abortTransaction() d->transaction = 0; } +bool Database::write(const char *key, size_t keySize, const char *value, size_t valueSize) +{ + write(std::string(key, keySize), std::string(value, valueSize)); +} + bool Database::write(const std::string &sKey, const std::string &sValue) { if (!d->env) { @@ -249,3 +258,16 @@ void Database::read(const std::string &sKey, const std::functionstorageRoot+d->name); + return info.size(); +} + +void Database::removeFromDisk() const +{ + QFileInfo info(d->storageRoot+d->name); + QDir dir = info.dir(); + dir.remove("data.mdb"); + dir.remove("lock.mdb"); +} diff --git a/store/database.h b/store/database.h index 2bf0556..e752ff5 100644 --- a/store/database.h +++ b/store/database.h @@ -7,17 +7,20 @@ class Database { public: enum TransactionType { ReadOnly, ReadWrite }; - Database(const QString &path); + Database(const QString &storageRoot, const QString &name); ~Database(); bool isInTransaction() const; bool startTransaction(TransactionType type = ReadWrite); bool commitTransaction(); void abortTransaction(); + bool write(const char *key, size_t keySize, const char *value, size_t valueSize); bool write(const std::string &sKey, const std::string &sValue); //Perhaps prefer iterators (assuming we need to be able to match multiple values void read(const std::string &sKey, const std::function &); void read(const std::string &sKey, const std::function &); + qint64 diskUsage() const; + void removeFromDisk() const; private: class Private; Private * const d; -- cgit v1.2.3