diff options
author | Jason Rassi <rassi@10gen.com> | 2014-11-19 17:56:32 -0500 |
---|---|---|
committer | Jason Rassi <rassi@10gen.com> | 2014-11-20 09:18:54 -0500 |
commit | acc09c2ec26b27c6d201f5f98a2a9c7b4215b1ae (patch) | |
tree | 746b30247163732dda3b423a9e30273848a94331 /src/mongo/db/matcher/expression_leaf_test.cpp | |
parent | 442d1dc06fd8d04e27a2838995f1eef8bf87d27a (diff) | |
download | mongo-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.cpp | 16 |
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; |