summaryrefslogtreecommitdiff
path: root/jstests/core/index/covered/coveredIndex4.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/index/covered/coveredIndex4.js')
-rw-r--r--jstests/core/index/covered/coveredIndex4.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/jstests/core/index/covered/coveredIndex4.js b/jstests/core/index/covered/coveredIndex4.js
new file mode 100644
index 00000000000..7433ed7b9d6
--- /dev/null
+++ b/jstests/core/index/covered/coveredIndex4.js
@@ -0,0 +1,43 @@
+// @tags: [
+// requires_getmore,
+// ]
+
+// Test covered index projection with $or clause, specifically in getMore
+// SERVER-4980
+
+t = db.jstests_coveredIndex4;
+t.drop();
+
+t.createIndex({a: 1});
+t.createIndex({b: 1});
+
+orClause = [];
+for (i = 0; i < 200; ++i) {
+ if (i % 2 == 0) {
+ t.save({a: i});
+ orClause.push({a: i});
+ } else {
+ t.save({b: i});
+ orClause.push({b: i});
+ }
+}
+
+c = t.find({$or: orClause}, {_id: 0, a: 1});
+
+// No odd values of a were saved, so we should not see any in the results.
+while (c.hasNext()) {
+ o = c.next();
+ if (o.a) {
+ assert.eq(0, o.a % 2, 'unexpected result: ' + tojson(o));
+ }
+}
+
+c = t.find({$or: orClause}, {_id: 0, b: 1});
+
+// No even values of b were saved, so we should not see any in the results.
+while (c.hasNext()) {
+ o = c.next();
+ if (o.b) {
+ assert.eq(1, o.b % 2, 'unexpected result: ' + tojson(o));
+ }
+}