From bf6a4fedd90fabef341f3a91dc9e8d225a165f39 Mon Sep 17 00:00:00 2001 From: Michael Hackstein Date: Wed, 23 Mar 2016 17:31:11 +0100 Subject: [PATCH 1/2] Fixed array index insertion. --- arangod/Indexes/PathBasedIndex.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arangod/Indexes/PathBasedIndex.cpp b/arangod/Indexes/PathBasedIndex.cpp index c6af6f1d7f..a67c1fcfd3 100644 --- a/arangod/Indexes/PathBasedIndex.cpp +++ b/arangod/Indexes/PathBasedIndex.cpp @@ -308,17 +308,17 @@ void PathBasedIndex::buildIndexValues( auto moveOn = [&](VPackSlice something) -> void { auto it = seen.find(something); - if (it != seen.end()) { + if (it == seen.end()) { seen.insert(something); sliceStack.push_back(something); - buildIndexValues(document, level+1, toInsert, sliceStack); + buildIndexValues(document, level + 1, toInsert, sliceStack); sliceStack.pop_back(); } }; for (auto const& member : VPackArrayIterator(current)) { VPackSlice current2(member); bool doneNull = false; - for (size_t i = _expanding[level]+1; i < n; i++) { + for (size_t i = _expanding[level] + 1; i < n; i++) { if (!current2.isObject()) { if (!_sparse) { moveOn(arangodb::basics::VelocyPackHelper::NullValue()); From af14e598d14ed8fbd1c39d2cf8b7604868e122ef Mon Sep 17 00:00:00 2001 From: Michael Hackstein Date: Thu, 24 Mar 2016 11:22:01 +0100 Subject: [PATCH 2/2] Fixed Array Indexing. All tests are green again --- arangod/Indexes/PathBasedIndex.cpp | 6 +++--- lib/Basics/VelocyPackHelper.cpp | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/arangod/Indexes/PathBasedIndex.cpp b/arangod/Indexes/PathBasedIndex.cpp index a67c1fcfd3..b5c9bc9d20 100644 --- a/arangod/Indexes/PathBasedIndex.cpp +++ b/arangod/Indexes/PathBasedIndex.cpp @@ -248,11 +248,11 @@ void PathBasedIndex::buildIndexValues( if (_expanding[level] == -1) { // the trivial, non-expanding case VPackSlice slice = document.get(_paths[level]); - if (slice.isNone()) { + if (slice.isNone() || slice.isNull()) { if (_sparse) { return; } - slice.set(reinterpret_cast("\0x18")); // null + slice = arangodb::basics::VelocyPackHelper::NullValue(); } sliceStack.push_back(slice); buildIndexValues(document, level+1, toInsert, sliceStack); @@ -267,7 +267,7 @@ void PathBasedIndex::buildIndexValues( // with None values to be able to use the index for a prefix match. auto finishWithNones = [&]() -> void { - if (level > 0 && !_allowPartialIndex) { + if (!_allowPartialIndex || level == 0) { return; } // Trivial case to bottom out with None types. diff --git a/lib/Basics/VelocyPackHelper.cpp b/lib/Basics/VelocyPackHelper.cpp index de5dfd5945..fef58f14da 100644 --- a/lib/Basics/VelocyPackHelper.cpp +++ b/lib/Basics/VelocyPackHelper.cpp @@ -221,6 +221,8 @@ static int TypeWeight(VPackSlice const& slice) { return 4; case VPackValueType::Object: return 5; + case VPackValueType::None: + return 6; default: // All other values have equal weight return 0;