diff --git a/autotests/unit/engine/postingdbtest.cpp b/autotests/unit/engine/postingdbtest.cpp --- a/autotests/unit/engine/postingdbtest.cpp +++ b/autotests/unit/engine/postingdbtest.cpp @@ -104,16 +104,16 @@ db.put("R2", {1, 8}); db.put("R3", {2, 3, 5}); - PostingIterator* it = db.compIter("R", "2", PostingDB::GreaterEqual); + PostingIterator* it = db.compIter("R", 2, PostingDB::GreaterEqual); QVERIFY(it); QVector result = {1, 2, 3, 5, 8}; for (quint64 val : result) { QCOMPARE(it->next(), static_cast(val)); QCOMPARE(it->docId(), static_cast(val)); } - it = db.compIter("R", "2", PostingDB::LessEqual); + it = db.compIter("R", 2, PostingDB::LessEqual); QVERIFY(it); result = {1, 3, 5, 7, 8}; for (quint64 val : result) { diff --git a/src/engine/postingdb.h b/src/engine/postingdb.h --- a/src/engine/postingdb.h +++ b/src/engine/postingdb.h @@ -58,7 +58,7 @@ LessEqual, GreaterEqual }; - PostingIterator* compIter(const QByteArray& prefix, const QByteArray& val, Comparator com); + PostingIterator* compIter(const QByteArray& prefix, qlonglong val, Comparator com); QVector fetchTermsStartingWith(const QByteArray& term); diff --git a/src/engine/postingdb.cpp b/src/engine/postingdb.cpp --- a/src/engine/postingdb.cpp +++ b/src/engine/postingdb.cpp @@ -257,13 +257,13 @@ return iter(prefix, validate); } -PostingIterator* PostingDB::compIter(const QByteArray& prefix, const QByteArray& comVal, PostingDB::Comparator com) +PostingIterator* PostingDB::compIter(const QByteArray& prefix, qlonglong comVal, PostingDB::Comparator com) { - Q_ASSERT(!comVal.isEmpty()); int prefixLen = prefix.length(); - auto validate = [prefixLen, &comVal, com] (const QByteArray& arr) { - QByteArray term(arr.constData() + prefixLen, arr.length() - prefixLen); - return ((com == LessEqual && term <= comVal) || (com == GreaterEqual && term >= comVal)); + auto validate = [prefixLen, comVal, com] (const QByteArray& arr) { + bool ok = false; + auto val = QByteArray::fromRawData(arr.constData() + prefixLen, arr.length() - prefixLen).toLongLong(&ok); + return ok && ((com == LessEqual && val <= comVal) || (com == GreaterEqual && val >= comVal)); }; return iter(prefix, validate); } diff --git a/src/engine/transaction.h b/src/engine/transaction.h --- a/src/engine/transaction.h +++ b/src/engine/transaction.h @@ -71,7 +71,7 @@ QVector exec(const EngineQuery& query, int limit = -1) const; PostingIterator* postingIterator(const EngineQuery& query) const; - PostingIterator* postingCompIterator(const QByteArray& prefix, const QByteArray& value, PostingDB::Comparator com) const; + PostingIterator* postingCompIterator(const QByteArray& prefix, qlonglong value, PostingDB::Comparator com) const; PostingIterator* mTimeIter(quint32 mtime, MTimeDB::Comparator com) const; PostingIterator* mTimeRangeIter(quint32 beginTime, quint32 endTime) const; PostingIterator* docUrlIter(quint64 id) const; diff --git a/src/engine/transaction.cpp b/src/engine/transaction.cpp --- a/src/engine/transaction.cpp +++ b/src/engine/transaction.cpp @@ -349,7 +349,7 @@ return nullptr; } -PostingIterator* Transaction::postingCompIterator(const QByteArray& prefix, const QByteArray& value, PostingDB::Comparator com) const +PostingIterator* Transaction::postingCompIterator(const QByteArray& prefix, qlonglong value, PostingDB::Comparator com) const { PostingDB postingDb(m_dbis.postingDbi, m_txn); return postingDb.compIter(prefix, value, com); diff --git a/src/lib/searchstore.cpp b/src/lib/searchstore.cpp --- a/src/lib/searchstore.cpp +++ b/src/lib/searchstore.cpp @@ -279,8 +279,7 @@ } const QByteArray prefix = "R"; - const QByteArray val = QByteArray::number(rating); - return tr->postingCompIterator(prefix, val, pcom); + return tr->postingCompIterator(prefix, rating, pcom); } else if (property == "tag") { if (term.comparator() == Term::Equal) { const QByteArray prefix = "TAG-"; @@ -317,7 +316,7 @@ QVariant val = term.value(); if (val.type() == QVariant::Int) { - int intVal = value.toInt(); + qlonglong intVal = value.toLongLong(); PostingDB::Comparator pcom; if (term.comparator() == Term::Greater || term.comparator() == Term::GreaterEqual) { @@ -335,7 +334,7 @@ return nullptr; } - return tr->postingCompIterator(prefix, QByteArray::number(intVal), pcom); + return tr->postingCompIterator(prefix, intVal, pcom); } return nullptr;