From 2b4474715604697acacca70c7f7647947b2c82f1 Mon Sep 17 00:00:00 2001 From: Qingyang Chen Date: Fri, 5 Jun 2015 16:10:06 -0400 Subject: SERVER-18309 have {$in: [.., null, ..]} not use sparse indexes Closes #979 Signed-off-by: Jason Rassi --- src/mongo/db/query/plan_cache_indexability.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/mongo/db/query/plan_cache_indexability.cpp') 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(queryExpr); + return !queryExprEquality->getData().isNull(); + } + else if (queryExpr->matchType() == MatchExpression::MATCH_IN) { + const auto* queryExprIn = + static_cast(queryExpr); + return !queryExprIn->getData().hasNull(); + } + else { return true; } - const auto* queryExprEquality = - static_cast(queryExpr); - return !queryExprEquality->getData().isNull(); } ); } -- cgit v1.2.1