diff --git a/autotests/unit/engine/mtimedbtest.cpp b/autotests/unit/engine/mtimedbtest.cpp --- a/autotests/unit/engine/mtimedbtest.cpp +++ b/autotests/unit/engine/mtimedbtest.cpp @@ -71,6 +71,15 @@ QCOMPARE(it->docId(), static_cast(val)); } + it = db.iter(10, MTimeDB::LessEqual); + QVERIFY(it); + + result = {1, 2, 3, 4, 5, 6}; + for (quint64 val : result) { + QCOMPARE(it->next(), static_cast(val)); + QCOMPARE(it->docId(), static_cast(val)); + } + it = db.iter(7, MTimeDB::LessEqual); QVERIFY(it); diff --git a/src/engine/mtimedb.cpp b/src/engine/mtimedb.cpp --- a/src/engine/mtimedb.cpp +++ b/src/engine/mtimedb.cpp @@ -158,6 +158,9 @@ MDB_val val{0, nullptr}; // Set cursor at first element greater or equal key int rc = mdb_cursor_get(cursor, &key, &val, MDB_SET_RANGE); + if (com == LessEqual && rc == MDB_NOTFOUND) { + rc = mdb_cursor_get(cursor, &key, &val, MDB_LAST); + } if (rc) { if (rc != MDB_NOTFOUND) { qCWarning(ENGINE) << "MTimeDB::iter" << mtime << mdb_strerror(rc); @@ -183,7 +186,7 @@ } } else { quint32 time = *static_cast(key.mv_data); - if (time == mtime) { + if (time <= mtime) { // set cursor to last element equal key rc = mdb_cursor_get(cursor, &key, &val, MDB_LAST_DUP); } else {