From 4798de83c9f198bfc0a802a987c9002968fb6c2c Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 31 May 2016 15:07:12 +0200 Subject: Fixed revision sorting We used to sort wrong as soon as we got over revision 9. --- common/storage_common.cpp | 3 ++- tests/storagetest.cpp | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/common/storage_common.cpp b/common/storage_common.cpp index 0b9d324..4ca484a 100644 --- a/common/storage_common.cpp +++ b/common/storage_common.cpp @@ -153,8 +153,9 @@ bool Storage::isInternalKey(const QByteArray &key) QByteArray Storage::assembleKey(const QByteArray &key, qint64 revision) { + Q_ASSERT(revision <= 9999); Q_ASSERT(key.size() == 38); - return key + QByteArray::number(revision); + return key + QByteArray::number(revision).rightJustified(4, '0', false); } QByteArray Storage::uidFromKey(const QByteArray &key) diff --git a/tests/storagetest.cpp b/tests/storagetest.cpp index 31809ce..ee6900d 100644 --- a/tests/storagetest.cpp +++ b/tests/storagetest.cpp @@ -436,6 +436,20 @@ private slots: QCOMPARE(Sink::Storage::getTypeFromRevision(transaction, 1), QByteArray("type")); QCOMPARE(Sink::Storage::getUidFromRevision(transaction, 1), QByteArray("uid")); } + + void testRecordRevisionSorting() + { + Sink::Storage store(testDataPath, dbName, Sink::Storage::ReadWrite); + auto transaction = store.createTransaction(Sink::Storage::ReadWrite); + QByteArray result; + auto db = transaction.openDatabase("test", nullptr, false); + const auto uid = "{c5d06a9f-1534-4c52-b8ea-415db68bdadf}"; + //Ensure we can sort 1 and 10 properly (by default string comparison 10 comes before 6) + db.write(Sink::Storage::assembleKey(uid, 6), "value1"); + db.write(Sink::Storage::assembleKey(uid, 10), "value2"); + db.findLatest(uid, [&](const QByteArray &key, const QByteArray &value) { result = value; }); + QCOMPARE(result, QByteArray("value2")); + } }; QTEST_MAIN(StorageTest) -- cgit v1.2.3