diff --git a/arangod/Indexes/IndexIterator.cpp b/arangod/Indexes/IndexIterator.cpp index a920d5f244..5d26d3cc85 100644 --- a/arangod/Indexes/IndexIterator.cpp +++ b/arangod/Indexes/IndexIterator.cpp @@ -61,7 +61,8 @@ bool IndexIteratorContext::isCluster() const { int IndexIteratorContext::resolveId(char const* handle, size_t length, TRI_voc_cid_t& cid, - char const*& key) const { + char const*& key, + size_t& outLength) const { char const* p = static_cast(memchr(handle, TRI_DOCUMENT_HANDLE_SEPARATOR_CHR, length)); if (p == nullptr || *p == '\0') { @@ -80,6 +81,7 @@ int IndexIteratorContext::resolveId(char const* handle, size_t length, } key = p + 1; + outLength = length - (key - handle); return TRI_ERROR_NO_ERROR; } diff --git a/arangod/Indexes/IndexIterator.h b/arangod/Indexes/IndexIterator.h index 3af748bb00..ad7515d6e2 100644 --- a/arangod/Indexes/IndexIterator.h +++ b/arangod/Indexes/IndexIterator.h @@ -49,7 +49,7 @@ struct IndexIteratorContext { bool isCluster() const; - int resolveId(char const*, size_t, TRI_voc_cid_t&, char const*&) const; + int resolveId(char const*, size_t, TRI_voc_cid_t&, char const*&, size_t&) const; TRI_vocbase_t* vocbase; mutable CollectionNameResolver const* resolver; diff --git a/arangod/Indexes/PrimaryIndex.cpp b/arangod/Indexes/PrimaryIndex.cpp index 0f12bbf7ec..cae770edb9 100644 --- a/arangod/Indexes/PrimaryIndex.cpp +++ b/arangod/Indexes/PrimaryIndex.cpp @@ -97,7 +97,7 @@ PrimaryIndexIterator::~PrimaryIndexIterator() { TRI_doc_mptr_t* PrimaryIndexIterator::next() { while (_iterator.valid()) { - auto result = _index->lookup(_trx, _iterator.value()); + auto result = _index->lookupKey(_trx, _iterator.value()); _iterator.next(); if (result != nullptr) { @@ -518,7 +518,8 @@ void PrimaryIndex::handleValNode(IndexIteratorContext* context, // correct collection (i.e. _collection) TRI_voc_cid_t cid; char const* key; - int res = context->resolveId(valNode->getStringValue(), valNode->getStringLength(), cid, key); + size_t outLength; + int res = context->resolveId(valNode->getStringValue(), valNode->getStringLength(), cid, key, outLength); if (res != TRI_ERROR_NO_ERROR) { return; @@ -540,16 +541,8 @@ void PrimaryIndex::handleValNode(IndexIteratorContext* context, } // use _key value from _id - keys->openArray(); - keys->openObject(); - keys->add(StaticStrings::IndexEq, VPackValue(key)); - keys->close(); - keys->close(); + keys->add(VPackValuePair(key, outLength, VPackValueType::String)); } else { - keys->openArray(); - keys->openObject(); - keys->add(StaticStrings::IndexEq, VPackValuePair(valNode->getStringValue(), valNode->getStringLength(), VPackValueType::String)); - keys->close(); - keys->close(); + keys->add(VPackValuePair(valNode->getStringValue(), valNode->getStringLength(), VPackValueType::String)); } }