diff options
author | james.wahlin@10gen.com <james.wahlin@10gen.com> | 2015-03-18 15:45:05 -0400 |
---|---|---|
committer | David Storch <david.storch@10gen.com> | 2015-03-19 16:59:02 -0400 |
commit | 879f306b22daec81a9a2388304539e21b3df0483 (patch) | |
tree | 067c3de03d24621ed182fabbe0cded28416c7a09 /src | |
parent | 2c6ab1eaae38caeee322f0c9afc4ef973fb667ea (diff) | |
download | mongo-879f306b22daec81a9a2388304539e21b3df0483.tar.gz |
SERVER-17158 add delimiter to planCacheKey for sort args
Closes #938
Signed-off-by: David Storch <david.storch@10gen.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/db/commands/plan_cache_commands_test.cpp | 18 | ||||
-rw-r--r-- | src/mongo/db/query/canonical_query.cpp | 5 |
2 files changed, 20 insertions, 3 deletions
diff --git a/src/mongo/db/commands/plan_cache_commands_test.cpp b/src/mongo/db/commands/plan_cache_commands_test.cpp index 3ed53afc8f8..8f1be2d9623 100644 --- a/src/mongo/db/commands/plan_cache_commands_test.cpp +++ b/src/mongo/db/commands/plan_cache_commands_test.cpp @@ -205,9 +205,21 @@ namespace { // Sort query should generate different key from unsorted query. ASSERT_OK(PlanCacheCommand::canonicalize(&txn, ns, - fromjson("{query: {a: 1, b: 1}, sort: {a: 1}}"), &cqRaw)); - scoped_ptr<CanonicalQuery> sortQuery(cqRaw); - ASSERT_NOT_EQUALS(query->getPlanCacheKey(), sortQuery->getPlanCacheKey()); + fromjson("{query: {a: 1, b: 1}, sort: {a: 1, b: 1}}"), &cqRaw)); + scoped_ptr<CanonicalQuery> sortQuery1(cqRaw); + ASSERT_NOT_EQUALS(query->getPlanCacheKey(), sortQuery1->getPlanCacheKey()); + + // Confirm sort arguments are properly delimited (SERVER-17158) + ASSERT_OK(PlanCacheCommand::canonicalize(&txn, ns, + fromjson("{query: {a: 1, b: 1}, sort: {aab: 1}}"), &cqRaw)); + scoped_ptr<CanonicalQuery> sortQuery2(cqRaw); + ASSERT_NOT_EQUALS(sortQuery1->getPlanCacheKey(), sortQuery2->getPlanCacheKey()); + + // Changing order and/or value of predicates should not change key + ASSERT_OK(PlanCacheCommand::canonicalize(&txn, ns, + fromjson("{query: {b: 3, a: 3}, sort: {a: 1, b: 1}}"), &cqRaw)); + scoped_ptr<CanonicalQuery> sortQuery3(cqRaw); + ASSERT_EQUALS(sortQuery1->getPlanCacheKey(), sortQuery3->getPlanCacheKey()); // Projected query should generate different key from unprojected query. ASSERT_OK(PlanCacheCommand::canonicalize(&txn, ns, diff --git a/src/mongo/db/query/canonical_query.cpp b/src/mongo/db/query/canonical_query.cpp index 7a1bc7a11f1..c3b2442113c 100644 --- a/src/mongo/db/query/canonical_query.cpp +++ b/src/mongo/db/query/canonical_query.cpp @@ -275,6 +275,11 @@ namespace { *os << "d"; } encodeUserString(elt.fieldName(), os); + + // Sort argument separator + if (it.more()) { + *os << ","; + } } } |