diff options
author | Aaron <aaron@10gen.com> | 2012-04-15 23:26:01 -0700 |
---|---|---|
committer | Aaron <aaron@10gen.com> | 2012-04-19 19:00:20 -0700 |
commit | 870e5cf7e25951c6dc8ed75e2d7343db4f0bfd8c (patch) | |
tree | 627b75866f0155b5b1ce2bfadc86fef2468b8d8e /jstests/queryoptimizer9.js | |
parent | 4a4bb19808c32d29cdac876bc3b6a6fac1190e50 (diff) | |
download | mongo-870e5cf7e25951c6dc8ed75e2d7343db4f0bfd8c.tar.gz |
SERVER-5301 Clear query plan cache when an index becomes multikey.
Diffstat (limited to 'jstests/queryoptimizer9.js')
-rw-r--r-- | jstests/queryoptimizer9.js | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/jstests/queryoptimizer9.js b/jstests/queryoptimizer9.js new file mode 100644 index 00000000000..c439e494d2b --- /dev/null +++ b/jstests/queryoptimizer9.js @@ -0,0 +1,31 @@ +// When an index becomes multikey the query plan cache is cleared. SERVER-5301 + +t = db.jstests_queryoptimizer9; +t.drop(); + +function recordQueryPlan() { + t.find( { a:1, b:1 } ).explain(); +} + +function hasCachedPlan() { + return !!t.find( { a:1, b:1 } ).explain( true ).oldPlan; +} + +t.ensureIndex( { a:1 } ); +t.save( { a:1 } ); + +recordQueryPlan(); +assert( hasCachedPlan() ); + +// While the index is not multikey the cached query plan is not cleared. +t.save( { a:2 } ); +assert( hasCachedPlan() ); + +// When the index becomes multikey the cached query plan is cleared. +t.save( { a:[ 3, 4 ] } ); +assert( !hasCachedPlan() ); + +// When the index remains multikey the cached query plan is not cleared. +recordQueryPlan(); +t.save( { a:[ 5, 6 ] } ); +assert( hasCachedPlan() ); |