summaryrefslogtreecommitdiff
path: root/src/mongo/db/matcher/expression_leaf_test.cpp
diff options
context:
space:
mode:
authorJason Rassi <rassi@10gen.com>2014-11-19 17:56:32 -0500
committerJason Rassi <rassi@10gen.com>2014-11-20 09:18:54 -0500
commitacc09c2ec26b27c6d201f5f98a2a9c7b4215b1ae (patch)
tree746b30247163732dda3b423a9e30273848a94331 /src/mongo/db/matcher/expression_leaf_test.cpp
parent442d1dc06fd8d04e27a2838995f1eef8bf87d27a (diff)
downloadmongo-acc09c2ec26b27c6d201f5f98a2a9c7b4215b1ae.tar.gz
SERVER-14886 BSONElementIterator::next() set array offset correctly
Diffstat (limited to 'src/mongo/db/matcher/expression_leaf_test.cpp')
-rw-r--r--src/mongo/db/matcher/expression_leaf_test.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/mongo/db/matcher/expression_leaf_test.cpp b/src/mongo/db/matcher/expression_leaf_test.cpp
index 65c3a3aabaa..b28f3f13713 100644
--- a/src/mongo/db/matcher/expression_leaf_test.cpp
+++ b/src/mongo/db/matcher/expression_leaf_test.cpp
@@ -176,6 +176,22 @@ namespace mongo {
ASSERT_EQUALS( "2", details.elemMatchKey() );
}
+ // SERVER-14886: when an array is being traversed explictly at the same time that a nested array
+ // is being traversed implicitly, the elemMatch key should refer to the offset of the array
+ // being implicitly traversed.
+ TEST( EqOp, ElemMatchKeyWithImplicitAndExplicitTraversal ) {
+ BSONObj operand = BSON( "a.0.b" << 3 );
+ BSONElement operandFirstElt = operand.firstElement();
+ EqualityMatchExpression eq;
+ ASSERT( eq.init( operandFirstElt.fieldName(), operandFirstElt ).isOK() );
+ MatchDetails details;
+ details.requestElemMatchKey();
+ BSONObj obj = fromjson("{a: [{b: [2, 3]}, {b: [4, 5]}]}");
+ ASSERT( eq.matchesBSON( obj, &details ) );
+ ASSERT( details.hasElemMatchKey() );
+ ASSERT_EQUALS( "1", details.elemMatchKey() );
+ }
+
TEST( EqOp, Equality1 ) {
EqualityMatchExpression eq1;
EqualityMatchExpression eq2;