summaryrefslogtreecommitdiff
path: root/src/mongo/db/query/plan_cache_indexability.cpp
diff options
context:
space:
mode:
authorQingyang Chen <qingyang.chen@10gen.com>2015-06-05 16:10:06 -0400
committerJason Rassi <rassi@10gen.com>2015-06-16 18:41:49 -0400
commit2b4474715604697acacca70c7f7647947b2c82f1 (patch)
tree6176ac301782aaf15069ab91cc013313c6662e6d /src/mongo/db/query/plan_cache_indexability.cpp
parent2bf8ac5739d517df9d762e25687eec4456738d49 (diff)
downloadmongo-2b4474715604697acacca70c7f7647947b2c82f1.tar.gz
SERVER-18309 have {$in: [.., null, ..]} not use sparse indexes
Closes #979 Signed-off-by: Jason Rassi <rassi@10gen.com>
Diffstat (limited to 'src/mongo/db/query/plan_cache_indexability.cpp')
-rw-r--r--src/mongo/db/query/plan_cache_indexability.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/mongo/db/query/plan_cache_indexability.cpp b/src/mongo/db/query/plan_cache_indexability.cpp
index 043ba1d7a40..24e60bbd7b7 100644
--- a/src/mongo/db/query/plan_cache_indexability.cpp
+++ b/src/mongo/db/query/plan_cache_indexability.cpp
@@ -45,12 +45,19 @@ namespace mongo {
for (BSONElement elem : keyPattern) {
_pathDiscriminatorsMap[elem.fieldNameStringData()].push_back(
[] (const MatchExpression* queryExpr) {
- if (queryExpr->matchType() != MatchExpression::EQ) {
+ if (queryExpr->matchType() == MatchExpression::EQ) {
+ const auto* queryExprEquality =
+ static_cast<const EqualityMatchExpression*>(queryExpr);
+ return !queryExprEquality->getData().isNull();
+ }
+ else if (queryExpr->matchType() == MatchExpression::MATCH_IN) {
+ const auto* queryExprIn =
+ static_cast<const InMatchExpression*>(queryExpr);
+ return !queryExprIn->getData().hasNull();
+ }
+ else {
return true;
}
- const auto* queryExprEquality =
- static_cast<const EqualityMatchExpression*>(queryExpr);
- return !queryExprEquality->getData().isNull();
}
);
}