diff --git a/arangod/MMFiles/MMFilesHashIndex.cpp b/arangod/MMFiles/MMFilesHashIndex.cpp index d3cb2b1068..0ac2b70d20 100644 --- a/arangod/MMFiles/MMFilesHashIndex.cpp +++ b/arangod/MMFiles/MMFilesHashIndex.cpp @@ -52,6 +52,7 @@ MMFilesHashIndexLookupBuilder::MMFilesHashIndexLookupBuilder( : _builder(trx), _usesIn(false), _isEmpty(false), + _mappingFieldConditionArena(), _mappingFieldCondition{_mappingFieldConditionArena}, _inStorage(trx) { TRI_ASSERT(node->type == aql::NODE_TYPE_OPERATOR_NARY_AND); diff --git a/arangod/MMFiles/MMFilesHashIndex.h b/arangod/MMFiles/MMFilesHashIndex.h index 85ca3b3231..c9808060ae 100644 --- a/arangod/MMFiles/MMFilesHashIndex.h +++ b/arangod/MMFiles/MMFilesHashIndex.h @@ -181,8 +181,8 @@ class MMFilesHashIndexLookupBuilder { using MappingCondition = ::arangodb::containers::SmallVector; - MappingCondition _mappingFieldCondition; MappingCondition::allocator_type::arena_type _mappingFieldConditionArena; + MappingCondition _mappingFieldCondition; std::unordered_map>> _inPosition; transaction::BuilderLeaser _inStorage; @@ -272,10 +272,10 @@ class MMFilesHashIndex final : public MMFilesPathBasedIndex { Index::FilterCosts supportsFilterCondition(std::vector> const& allIndexes, arangodb::aql::AstNode const* node, - arangodb::aql::Variable const* reference, + arangodb::aql::Variable const* reference, size_t itemsInIndex) const override; - std::unique_ptr iteratorForCondition(transaction::Methods* trx, + std::unique_ptr iteratorForCondition(transaction::Methods* trx, arangodb::aql::AstNode const* node, arangodb::aql::Variable const* reference, IndexIteratorOptions const& opts) override; diff --git a/arangod/MMFiles/MMFilesPrimaryIndex.cpp b/arangod/MMFiles/MMFilesPrimaryIndex.cpp index 2fb8841a9a..7c551c2749 100644 --- a/arangod/MMFiles/MMFilesPrimaryIndex.cpp +++ b/arangod/MMFiles/MMFilesPrimaryIndex.cpp @@ -21,7 +21,10 @@ /// @author Dr. Frank Celler //////////////////////////////////////////////////////////////////////////////// +#include + #include "Aql/AstNode.h" +#include "Aql/ExecutionBlock.h" #include "Basics/Exceptions.h" #include "Basics/StaticStrings.h" #include "Basics/hashes.h" @@ -161,7 +164,7 @@ bool MMFilesAllIndexIterator::next(LocalDocumentIdCallback const& cb, size_t lim bool MMFilesAllIndexIterator::nextDocument(DocumentCallback const& cb, size_t limit) { _documentIds.clear(); - _documentIds.reserve(limit); + _documentIds.reserve((std::min)(limit, aql::ExecutionBlock::DefaultBatchSize())); bool done = false; while (limit > 0) { @@ -475,8 +478,8 @@ std::unique_ptr MMFilesPrimaryIndex::iteratorForCondition( if (aap.opType == aql::NODE_TYPE_OPERATOR_BINARY_EQ) { // a.b == value return createEqIterator(trx, aap.attribute, aap.value); - } - + } + if (aap.opType == aql::NODE_TYPE_OPERATOR_BINARY_IN && aap.value->isArray()) { // a.b IN array