summaryrefslogtreecommitdiff
path: root/src/mongo/db/matcher
diff options
context:
space:
mode:
authorDrew Paroski <drew.paroski@mongodb.com>2020-07-27 15:42:04 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-07-28 02:18:00 +0000
commit46af3f0a7e6c9d26423ac72d0f4faec8f3ee1350 (patch)
tree4d008994890dd8fbd40ef87fdf82d1af664349ad /src/mongo/db/matcher
parent81b362abbfbb71f1da25c1aaad8b02df6d1e5869 (diff)
downloadmongo-46af3f0a7e6c9d26423ac72d0f4faec8f3ee1350.tar.gz
SERVER-49686 Translate $type match expression to SBE
Diffstat (limited to 'src/mongo/db/matcher')
-rw-r--r--src/mongo/db/matcher/matcher_type_set.cpp17
-rw-r--r--src/mongo/db/matcher/matcher_type_set.h7
2 files changed, 24 insertions, 0 deletions
diff --git a/src/mongo/db/matcher/matcher_type_set.cpp b/src/mongo/db/matcher/matcher_type_set.cpp
index 17681045243..1c48d32ec25 100644
--- a/src/mongo/db/matcher/matcher_type_set.cpp
+++ b/src/mongo/db/matcher/matcher_type_set.cpp
@@ -33,6 +33,7 @@
#include "mongo/db/matcher/expression_parser.h"
#include "mongo/db/matcher/schema/json_schema_parser.h"
+#include "mongo/db/query/bson_typemask.h"
namespace mongo {
namespace {
@@ -173,6 +174,22 @@ void MatcherTypeSet::toBSONArray(BSONArrayBuilder* builder) const {
}
}
+uint32_t MatcherTypeSet::getBSONTypeMask() const {
+ uint32_t mask = 0;
+ if (allNumbers) {
+ mask |= (mongo::getBSONTypeMask(BSONType::NumberInt) |
+ mongo::getBSONTypeMask(BSONType::NumberLong) |
+ mongo::getBSONTypeMask(BSONType::NumberDouble) |
+ mongo::getBSONTypeMask(BSONType::NumberDecimal));
+ }
+
+ for (auto t : bsonTypes) {
+ mask |= mongo::getBSONTypeMask(t);
+ }
+
+ return mask;
+}
+
BSONTypeSet BSONTypeSet::parseFromBSON(const BSONElement& element) {
// BSON type can be specified with a type alias, other values will be rejected.
auto typeSet = uassertStatusOK(JSONSchemaParser::parseTypeSet(element, findBSONTypeAlias));
diff --git a/src/mongo/db/matcher/matcher_type_set.h b/src/mongo/db/matcher/matcher_type_set.h
index a217b96129b..7903d03f441 100644
--- a/src/mongo/db/matcher/matcher_type_set.h
+++ b/src/mongo/db/matcher/matcher_type_set.h
@@ -104,6 +104,13 @@ struct MatcherTypeSet {
return !allNumbers && bsonTypes.empty();
}
+ /**
+ * Returns a bitmask representing the set of BSONTypes that this MatcherTypeSet contains.
+ *
+ * For details on how these bitmasks are encoded, see mongo::getBSONTypeMask().
+ */
+ uint32_t getBSONTypeMask() const;
+
void toBSONArray(BSONArrayBuilder* builder) const;
BSONArray toBSONArray() const {