From 8fe4eace598997c3ff4c74aa04f723e8ea444239 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sun, 16 Jul 2017 19:52:23 +0200 Subject: Better error messages --- common/storage_lmdb.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'common/storage_lmdb.cpp') diff --git a/common/storage_lmdb.cpp b/common/storage_lmdb.cpp index f7999d1..9fb2feb 100644 --- a/common/storage_lmdb.cpp +++ b/common/storage_lmdb.cpp @@ -406,7 +406,7 @@ int DataStore::NamedDatabase::scan(const QByteArray &k, const std::functionname.toLatin1() + d->db, getErrorCode(rc), QByteArray("Key: ") + k + " : " + QByteArray(mdb_strerror(rc))); + Error error(d->name.toLatin1() + d->db, getErrorCode(rc), QByteArray("Error during scan. Key: ") + k + " : " + QByteArray(mdb_strerror(rc))); errorHandler ? errorHandler(error) : d->defaultErrorHandler(error); } @@ -420,6 +420,11 @@ void DataStore::NamedDatabase::findLatest(const QByteArray &k, const std::functi // Not an error. We rely on this to read nothing from non-existing databases. return; } + if (k.isEmpty()) { + Error error(d->name.toLatin1() + d->db, GenericError, QByteArray("Can't use findLatest with empty key.")); + errorHandler ? errorHandler(error) : d->defaultErrorHandler(error); + return; + } int rc; MDB_val key; @@ -471,10 +476,10 @@ void DataStore::NamedDatabase::findLatest(const QByteArray &k, const std::functi mdb_cursor_close(cursor); if (rc) { - Error error(d->name.toLatin1(), getErrorCode(rc), QByteArray("Key: ") + k + " : " + QByteArray(mdb_strerror(rc))); + Error error(d->name.toLatin1(), getErrorCode(rc), QByteArray("Error during find latest. Key: ") + k + " : " + QByteArray(mdb_strerror(rc))); errorHandler ? errorHandler(error) : d->defaultErrorHandler(error); } else if (!foundValue) { - Error error(d->name.toLatin1(), 1, QByteArray("Key: ") + k + " : No value found"); + Error error(d->name.toLatin1(), 1, QByteArray("Error during find latest. Key: ") + k + " : No value found"); errorHandler ? errorHandler(error) : d->defaultErrorHandler(error); } -- cgit v1.2.3 From 942f5b11f2d91c030a4c87d13f8075538c21abc1 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sun, 16 Jul 2017 19:53:05 +0200 Subject: Simplified code The while loop is executed at least once, so advanced is always true. --- common/storage_lmdb.cpp | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'common/storage_lmdb.cpp') diff --git a/common/storage_lmdb.cpp b/common/storage_lmdb.cpp index 9fb2feb..58e3a9a 100644 --- a/common/storage_lmdb.cpp +++ b/common/storage_lmdb.cpp @@ -446,25 +446,23 @@ void DataStore::NamedDatabase::findLatest(const QByteArray &k, const std::functi if ((rc = mdb_cursor_get(cursor, &key, &data, op)) == 0) { // The first lookup will find a key that is equal or greather than our key if (QByteArray::fromRawData((char *)key.mv_data, key.mv_size).startsWith(k)) { - bool advanced = false; + //Read next value until we no longer match while (QByteArray::fromRawData((char *)key.mv_data, key.mv_size).startsWith(k)) { - advanced = true; MDB_cursor_op nextOp = MDB_NEXT; rc = mdb_cursor_get(cursor, &key, &data, nextOp); if (rc) { break; } } - if (advanced) { - MDB_cursor_op prefOp = MDB_PREV; - // We read past the end above, just take the last value - if (rc == MDB_NOTFOUND) { - prefOp = MDB_LAST; - } - rc = mdb_cursor_get(cursor, &key, &data, prefOp); - foundValue = true; - resultHandler(QByteArray::fromRawData((char *)key.mv_data, key.mv_size), QByteArray::fromRawData((char *)data.mv_data, data.mv_size)); + //Now read the previous value, and that's the latest one + MDB_cursor_op prefOp = MDB_PREV; + // We read past the end above, just take the last value + if (rc == MDB_NOTFOUND) { + prefOp = MDB_LAST; } + rc = mdb_cursor_get(cursor, &key, &data, prefOp); + foundValue = true; + resultHandler(QByteArray::fromRawData((char *)key.mv_data, key.mv_size), QByteArray::fromRawData((char *)data.mv_data, data.mv_size)); } } -- cgit v1.2.3