summaryrefslogtreecommitdiff
path: root/src/mongo/db/matcher/expression_leaf.h
diff options
context:
space:
mode:
authorApollon Oikonomopoulos <apoikos@debian.org>2018-03-22 12:04:55 +0200
committerApollon Oikonomopoulos <apoikos@debian.org>2018-03-22 12:04:55 +0200
commitc49e99631589113663b1a3ac691870421965a315 (patch)
treeac8127a5a6816f169a6656511bf131a35af2f74a /src/mongo/db/matcher/expression_leaf.h
parentd982a88efa79f510c03f1c6c8c63360680ebbf88 (diff)
New upstream version 3.4.14upstream/3.4.14
Diffstat (limited to 'src/mongo/db/matcher/expression_leaf.h')
-rw-r--r--src/mongo/db/matcher/expression_leaf.h22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/mongo/db/matcher/expression_leaf.h b/src/mongo/db/matcher/expression_leaf.h
index 128d3070737..5761f2ca2a2 100644
--- a/src/mongo/db/matcher/expression_leaf.h
+++ b/src/mongo/db/matcher/expression_leaf.h
@@ -30,9 +30,11 @@
#pragma once
+#include "mongo/bson/bsonelement_comparator.h"
#include "mongo/bson/bsonmisc.h"
#include "mongo/bson/bsonobj.h"
#include "mongo/db/matcher/expression.h"
+#include "mongo/db/query/collation/collator_interface.h"
#include "mongo/stdx/memory.h"
#include "mongo/stdx/unordered_map.h"
@@ -330,7 +332,10 @@ public:
*/
class InMatchExpression : public LeafMatchExpression {
public:
- InMatchExpression() : LeafMatchExpression(MATCH_IN) {}
+ InMatchExpression()
+ : LeafMatchExpression(MATCH_IN),
+ _eltCmp(BSONElementComparator::FieldNamesMode::kIgnore, _collator),
+ _equalitySet(_eltCmp.makeBSONEltFlatSet(_originalEqualityVector)) {}
Status init(StringData path);
@@ -349,11 +354,11 @@ public:
*/
virtual void _doSetCollator(const CollatorInterface* collator);
- Status addEquality(const BSONElement& elt);
+ Status setEqualities(std::vector<BSONElement> equalities);
Status addRegex(std::unique_ptr<RegexMatchExpression> expr);
- const BSONElementSet& getEqualities() const {
+ const BSONEltFlatSet& getEqualities() const {
return _equalitySet;
}
@@ -380,17 +385,20 @@ private:
// Whether or not '_equalities' has an empty array element in it.
bool _hasEmptyArray = false;
- // Collator used to compare elements. By default, simple binary comparison will be used.
+ // Collator used to construct '_eltCmp';
const CollatorInterface* _collator = nullptr;
- // Set of equality elements associated with this expression. '_collator' is used as a comparator
- // for this set.
- BSONElementSet _equalitySet;
+ // Comparator used to compare elements. By default, simple binary comparison will be used.
+ BSONElementComparator _eltCmp;
// Original container of equality elements, including duplicates. Needed for re-computing
// '_equalitySet' in case '_collator' changes after elements have been added.
std::vector<BSONElement> _originalEqualityVector;
+ // Set of equality elements associated with this expression. '_eltCmp' is used as a comparator
+ // for this set.
+ BSONEltFlatSet _equalitySet;
+
// Container of regex elements this object owns.
std::vector<std::unique_ptr<RegexMatchExpression>> _regexes;
};