summaryrefslogtreecommitdiff
path: root/src/mongo/db/matcher/expression_leaf.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/matcher/expression_leaf.cpp')
-rw-r--r--src/mongo/db/matcher/expression_leaf.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/mongo/db/matcher/expression_leaf.cpp b/src/mongo/db/matcher/expression_leaf.cpp
index 0bf8d8685bc..c055f46ca3d 100644
--- a/src/mongo/db/matcher/expression_leaf.cpp
+++ b/src/mongo/db/matcher/expression_leaf.cpp
@@ -658,6 +658,11 @@ void InMatchExpression::_doSetCollator(const CollatorInterface* collator) {
_collator = collator;
_eltCmp = BSONElementComparator(BSONElementComparator::FieldNamesMode::kIgnore, _collator);
+ // Re-sort the list of equalities according to our current comparator. This is necessary to work
+ // around https://svn.boost.org/trac10/ticket/13140.
+ std::sort(
+ _originalEqualityVector.begin(), _originalEqualityVector.end(), _eltCmp.makeLessThan());
+
// We need to re-compute '_equalitySet', since our set comparator has changed.
_equalitySet = _eltCmp.makeBSONEltFlatSet(_originalEqualityVector);
}
@@ -677,8 +682,13 @@ Status InMatchExpression::setEqualities(std::vector<BSONElement> equalities) {
_hasEmptyArray = true;
}
}
+
_originalEqualityVector = std::move(equalities);
+ // Sort the list of equalities to work around https://svn.boost.org/trac10/ticket/13140.
+ std::sort(
+ _originalEqualityVector.begin(), _originalEqualityVector.end(), _eltCmp.makeLessThan());
+
_equalitySet = _eltCmp.makeBSONEltFlatSet(_originalEqualityVector);
return Status::OK();