diff options
author | Drew Paroski <drew.paroski@mongodb.com> | 2020-07-27 15:42:04 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-07-28 02:18:00 +0000 |
commit | 46af3f0a7e6c9d26423ac72d0f4faec8f3ee1350 (patch) | |
tree | 4d008994890dd8fbd40ef87fdf82d1af664349ad /src/mongo/db/matcher | |
parent | 81b362abbfbb71f1da25c1aaad8b02df6d1e5869 (diff) | |
download | mongo-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.cpp | 17 | ||||
-rw-r--r-- | src/mongo/db/matcher/matcher_type_set.h | 7 |
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 { |