From 9d2f550759fc9d46e1039368ef77988cdc3a61e4 Mon Sep 17 00:00:00 2001 From: Aaron Seigo Date: Mon, 9 Feb 2015 12:56:08 +0100 Subject: catch unqlite impl up to current Storage API --- common/storage_unqlite.cpp | 47 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 11 deletions(-) (limited to 'common') diff --git a/common/storage_unqlite.cpp b/common/storage_unqlite.cpp index 263e7e6..6950acd 100644 --- a/common/storage_unqlite.cpp +++ b/common/storage_unqlite.cpp @@ -41,7 +41,7 @@ static const char *s_unqliteDir = "/unqlite/"; class Storage::Private { public: - Private(const QString &s, const QString &name, AccessMode m); + Private(const QString &s, const QString &name, AccessMode m, bool allowDuplicates); ~Private(); void reportDbError(const char *functionName); @@ -53,14 +53,16 @@ public: AccessMode mode; unqlite *db; + bool allowDuplicates; bool inTransaction; }; -Storage::Private::Private(const QString &s, const QString &n, AccessMode m) +Storage::Private::Private(const QString &s, const QString &n, AccessMode m, bool duplicates) : storageRoot(s), name(n), mode(m), db(0), + allowDuplicates(duplicates), //FIXME: currently does nothing ... should do what it says inTransaction(false) { const QString fullPath(storageRoot + s_unqliteDir + name); @@ -121,8 +123,8 @@ void Storage::Private::reportDbError(const char *functionName, int errorCode, errorHandler(error); } -Storage::Storage(const QString &storageRoot, const QString &name, AccessMode mode) - : d(new Private(storageRoot, name, mode)) +Storage::Storage(const QString &storageRoot, const QString &name, AccessMode mode, bool allowDuplicates) + : d(new Private(storageRoot, name, mode, allowDuplicates)) { } @@ -189,18 +191,13 @@ void Storage::abortTransaction() d->inTransaction = false; } -bool Storage::write(const char *key, size_t keySize, const char *value, size_t valueSize) -{ - return write(std::string(key, keySize), std::string(value, valueSize)); -} - -bool Storage::write(const std::string &sKey, const std::string &sValue) +bool Storage::write(const void *key, size_t keySize, const void *value, size_t valueSize) { if (!d->db) { return false; } - int rc = unqlite_kv_store(d->db, sKey.data(), -1, sValue.data(), sValue.size()); + int rc = unqlite_kv_store(d->db, key, keySize, value, valueSize); if (rc != UNQLITE_OK) { d->reportDbError("unqlite_kv_store"); @@ -209,6 +206,11 @@ bool Storage::write(const std::string &sKey, const std::string &sValue) return !rc; } +bool Storage::write(const std::string &sKey, const std::string &sValue) +{ + return write(sKey.data(), sKey.size(), sValue.data(), sKey.size()); +} + void Storage::read(const std::string &sKey, const std::function &resultHandler, const std::function &errorHandler) @@ -233,6 +235,24 @@ void Storage::read(const std::string &sKey, }, errorHandler); } +void Storage::remove(const void *keyData, uint keySize) +{ + remove(keyData, keySize, basicErrorHandler()); +} + +void Storage::remove(const void *keyData, uint keySize, + const std::function &errorHandler) +{ + if (!d->db) { + Error error(d->name.toStdString(), -1, "Not open"); + errorHandler(error); + return; + } + + unqlite_kv_delete(d->db, keyData, keySize); +} + + void fetchCursorData(unqlite_kv_cursor *cursor, void **keyBuffer, int *keyBufferLength, void **dataBuffer, unqlite_int64 *dataBufferLength, const std::function &resultHandler) @@ -307,6 +327,11 @@ qint64 Storage::diskUsage() const return info.size(); } +bool Storage::exists() const +{ + return d->db != 0; +} + void Storage::removeFromDisk() const { QFile::remove(d->storageRoot + s_unqliteDir + d->name); -- cgit v1.2.3