summaryrefslogtreecommitdiff
path: root/src/mongo/db/matcher/expression_optimize_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/matcher/expression_optimize_test.cpp')
-rw-r--r--src/mongo/db/matcher/expression_optimize_test.cpp51
1 files changed, 14 insertions, 37 deletions
diff --git a/src/mongo/db/matcher/expression_optimize_test.cpp b/src/mongo/db/matcher/expression_optimize_test.cpp
index 8d62f53baa1..763d80fa2cb 100644
--- a/src/mongo/db/matcher/expression_optimize_test.cpp
+++ b/src/mongo/db/matcher/expression_optimize_test.cpp
@@ -75,7 +75,8 @@ Status isValid(const std::string& queryStr, const FindCommandRequest& findComman
BSONObj queryObj = fromjson(queryStr);
std::unique_ptr<MatchExpression> me(parseMatchExpression(queryObj));
me = MatchExpression::optimize(std::move(me));
- if (auto status = CanonicalQuery::isValid(me.get(), findCommand).getStatus(); !status.isOK()) {
+ if (auto status = parsed_find_command::isValid(me.get(), findCommand).getStatus();
+ !status.isOK()) {
return status;
}
return CanonicalQuery::isValidNormalized(me.get());
@@ -350,18 +351,14 @@ TEST(ExpressionOptimizeTest, AndWithAlwaysFalseChildOptimizesToAlwaysFalse) {
BSONObj obj = fromjson("{$and: [{a: 1}, {$alwaysFalse: 1}]}");
std::unique_ptr<MatchExpression> matchExpression(parseMatchExpression(obj));
auto optimizedMatchExpression = MatchExpression::optimize(std::move(matchExpression));
- BSONObjBuilder bob;
- optimizedMatchExpression->serialize(&bob, true);
- ASSERT_BSONOBJ_EQ(bob.obj(), fromjson("{$alwaysFalse: 1}"));
+ ASSERT_BSONOBJ_EQ(optimizedMatchExpression->serialize(), fromjson("{$alwaysFalse: 1}"));
}
TEST(ExpressionOptimizeTest, AndRemovesAlwaysTrueChildren) {
BSONObj obj = fromjson("{$and: [{a: 1}, {$alwaysTrue: 1}]}");
std::unique_ptr<MatchExpression> matchExpression(parseMatchExpression(obj));
auto optimizedMatchExpression = MatchExpression::optimize(std::move(matchExpression));
- BSONObjBuilder bob;
- optimizedMatchExpression->serialize(&bob, true);
- ASSERT_BSONOBJ_EQ(bob.obj(), fromjson("{a: {$eq: 1}}"));
+ ASSERT_BSONOBJ_EQ(optimizedMatchExpression->serialize(), fromjson("{a: {$eq: 1}}"));
}
TEST(ExpressionOptimizeTest, AndWithSingleChildAlwaysTrueOptimizesToEmptyAnd) {
@@ -370,9 +367,7 @@ TEST(ExpressionOptimizeTest, AndWithSingleChildAlwaysTrueOptimizesToEmptyAnd) {
auto optimizedMatchExpression = MatchExpression::optimize(std::move(matchExpression));
// TODO SERVER-34759 We want this to optimize to an AlwaysTrueMatchExpression.
ASSERT_TRUE(dynamic_cast<AndMatchExpression*>(optimizedMatchExpression.get()));
- BSONObjBuilder bob;
- optimizedMatchExpression->serialize(&bob, true);
- ASSERT_BSONOBJ_EQ(bob.obj(), fromjson("{}"));
+ ASSERT_BSONOBJ_EQ(optimizedMatchExpression->serialize(), fromjson("{}"));
}
TEST(ExpressionOptimizeTest, AndWithEachChildAlwaysTrueOptimizesToEmptyAnd) {
@@ -381,36 +376,28 @@ TEST(ExpressionOptimizeTest, AndWithEachChildAlwaysTrueOptimizesToEmptyAnd) {
auto optimizedMatchExpression = MatchExpression::optimize(std::move(matchExpression));
// TODO SERVER-34759 We want this to optimize to an AlwaysTrueMatchExpression.
ASSERT_TRUE(dynamic_cast<AndMatchExpression*>(optimizedMatchExpression.get()));
- BSONObjBuilder bob;
- optimizedMatchExpression->serialize(&bob, true);
- ASSERT_BSONOBJ_EQ(bob.obj(), fromjson("{}"));
+ ASSERT_BSONOBJ_EQ(optimizedMatchExpression->serialize(), fromjson("{}"));
}
TEST(ExpressionOptimizeTest, NestedAndWithAlwaysFalseOptimizesToAlwaysFalse) {
BSONObj obj = fromjson("{$and: [{$and: [{$alwaysFalse: 1}, {a: 1}]}, {b: 1}]}");
std::unique_ptr<MatchExpression> matchExpression(parseMatchExpression(obj));
auto optimizedMatchExpression = MatchExpression::optimize(std::move(matchExpression));
- BSONObjBuilder bob;
- optimizedMatchExpression->serialize(&bob, true);
- ASSERT_BSONOBJ_EQ(bob.obj(), fromjson("{$alwaysFalse: 1}"));
+ ASSERT_BSONOBJ_EQ(optimizedMatchExpression->serialize(), fromjson("{$alwaysFalse: 1}"));
}
TEST(ExpressionOptimizeTest, OrWithAlwaysTrueOptimizesToAlwaysTrue) {
BSONObj obj = fromjson("{$or: [{a: 1}, {$alwaysTrue: 1}]}");
std::unique_ptr<MatchExpression> matchExpression(parseMatchExpression(obj));
auto optimizedMatchExpression = MatchExpression::optimize(std::move(matchExpression));
- BSONObjBuilder bob;
- optimizedMatchExpression->serialize(&bob, true);
- ASSERT_BSONOBJ_EQ(bob.obj(), fromjson("{$alwaysTrue: 1}"));
+ ASSERT_BSONOBJ_EQ(optimizedMatchExpression->serialize(), fromjson("{$alwaysTrue: 1}"));
}
TEST(ExpressionOptimizeTest, OrRemovesAlwaysFalseChildren) {
BSONObj obj = fromjson("{$or: [{a: 1}, {$alwaysFalse: 1}]}");
std::unique_ptr<MatchExpression> matchExpression(parseMatchExpression(obj));
auto optimizedMatchExpression = MatchExpression::optimize(std::move(matchExpression));
- BSONObjBuilder bob;
- optimizedMatchExpression->serialize(&bob, true);
- ASSERT_BSONOBJ_EQ(bob.obj(), fromjson("{a: {$eq: 1}}"));
+ ASSERT_BSONOBJ_EQ(optimizedMatchExpression->serialize(), fromjson("{a: {$eq: 1}}"));
}
TEST(ExpressionOptimizeTest, OrPromotesSingleAlwaysFalseAfterOptimize) {
@@ -419,9 +406,7 @@ TEST(ExpressionOptimizeTest, OrPromotesSingleAlwaysFalseAfterOptimize) {
std::unique_ptr<MatchExpression> matchExpression(parseMatchExpression(obj));
auto optimizedMatchExpression = MatchExpression::optimize(std::move(matchExpression));
ASSERT_TRUE(dynamic_cast<AlwaysFalseMatchExpression*>(optimizedMatchExpression.get()));
- BSONObjBuilder bob;
- optimizedMatchExpression->serialize(&bob, true);
- ASSERT_BSONOBJ_EQ(bob.obj(), fromjson("{$alwaysFalse: 1}"));
+ ASSERT_BSONOBJ_EQ(optimizedMatchExpression->serialize(), fromjson("{$alwaysFalse: 1}"));
}
TEST(ExpressionOptimizeTest, OrPromotesSingleAlwaysFalse) {
@@ -429,9 +414,7 @@ TEST(ExpressionOptimizeTest, OrPromotesSingleAlwaysFalse) {
std::unique_ptr<MatchExpression> matchExpression(parseMatchExpression(obj));
auto optimizedMatchExpression = MatchExpression::optimize(std::move(matchExpression));
ASSERT_TRUE(dynamic_cast<AlwaysFalseMatchExpression*>(optimizedMatchExpression.get()));
- BSONObjBuilder bob;
- optimizedMatchExpression->serialize(&bob, true);
- ASSERT_BSONOBJ_EQ(bob.obj(), fromjson("{$alwaysFalse: 1}"));
+ ASSERT_BSONOBJ_EQ(optimizedMatchExpression->serialize(), fromjson("{$alwaysFalse: 1}"));
}
TEST(ExpressionOptimizeTest, OrPromotesMultipleAlwaysFalse) {
@@ -439,18 +422,14 @@ TEST(ExpressionOptimizeTest, OrPromotesMultipleAlwaysFalse) {
std::unique_ptr<MatchExpression> matchExpression(parseMatchExpression(obj));
auto optimizedMatchExpression = MatchExpression::optimize(std::move(matchExpression));
ASSERT_TRUE(dynamic_cast<AlwaysFalseMatchExpression*>(optimizedMatchExpression.get()));
- BSONObjBuilder bob;
- optimizedMatchExpression->serialize(&bob, true);
- ASSERT_BSONOBJ_EQ(bob.obj(), fromjson("{$alwaysFalse: 1}"));
+ ASSERT_BSONOBJ_EQ(optimizedMatchExpression->serialize(), fromjson("{$alwaysFalse: 1}"));
}
TEST(ExpressionOptimizeTest, NestedOrWithAlwaysTrueOptimizesToAlwaysTrue) {
BSONObj obj = fromjson("{$or: [{$or: [{$alwaysTrue: 1}, {a: 1}]}, {b: 1}]}");
std::unique_ptr<MatchExpression> matchExpression(parseMatchExpression(obj));
auto optimizedMatchExpression = MatchExpression::optimize(std::move(matchExpression));
- BSONObjBuilder bob;
- optimizedMatchExpression->serialize(&bob, true);
- ASSERT_BSONOBJ_EQ(bob.obj(), fromjson("{$alwaysTrue: 1}"));
+ ASSERT_BSONOBJ_EQ(optimizedMatchExpression->serialize(), fromjson("{$alwaysTrue: 1}"));
}
TEST(ExpressionOptimizeTest, OrRewrittenToIn) {
@@ -477,9 +456,7 @@ TEST(ExpressionOptimizeTest, OrRewrittenToIn) {
auto obj = fromjson(exprStr);
std::unique_ptr<MatchExpression> matchExpression(parseMatchExpression(obj));
auto optimizedMatchExpression = MatchExpression::optimize(std::move(matchExpression));
- BSONObjBuilder bob;
- optimizedMatchExpression->serialize(&bob, true);
- return bob.obj();
+ return optimizedMatchExpression->serialize();
};
ASSERT_BSONOBJ_EQ(optimizeExpr(queries[0].first), fromjson(queries[0].second));