summaryrefslogtreecommitdiff
path: root/jstests/queryoptimizer9.js
diff options
context:
space:
mode:
authorAaron <aaron@10gen.com>2012-04-15 23:26:01 -0700
committerAaron <aaron@10gen.com>2012-04-19 19:00:20 -0700
commit870e5cf7e25951c6dc8ed75e2d7343db4f0bfd8c (patch)
tree627b75866f0155b5b1ce2bfadc86fef2468b8d8e /jstests/queryoptimizer9.js
parent4a4bb19808c32d29cdac876bc3b6a6fac1190e50 (diff)
downloadmongo-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.js31
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() );