diff options
Diffstat (limited to 'src/mongo/db/matcher/expression_leaf.cpp')
| -rw-r--r-- | src/mongo/db/matcher/expression_leaf.cpp | 10 |
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(); |
