2011-12-26 20:06:36 +01:00
|
|
|
// Yield and delete test case for query optimizer cursor. SERVER-4401
|
2011-12-01 07:18:41 +01:00
|
|
|
|
|
|
|
t = db.jstests_distinct3;
|
|
|
|
t.drop();
|
|
|
|
|
2016-03-09 18:17:50 +01:00
|
|
|
t.ensureIndex({a: 1});
|
|
|
|
t.ensureIndex({b: 1});
|
2011-12-01 07:18:41 +01:00
|
|
|
|
2014-01-14 20:09:42 +01:00
|
|
|
var bulk = t.initializeUnorderedBulkOp();
|
2016-03-09 18:17:50 +01:00
|
|
|
for (i = 0; i < 50; ++i) {
|
|
|
|
for (j = 0; j < 2; ++j) {
|
|
|
|
bulk.insert({a: i, c: i, d: j});
|
2011-12-01 07:18:41 +01:00
|
|
|
}
|
|
|
|
}
|
2016-03-09 18:17:50 +01:00
|
|
|
for (i = 0; i < 100; ++i) {
|
|
|
|
bulk.insert({b: i, c: i + 50});
|
2011-12-01 07:18:41 +01:00
|
|
|
}
|
2014-01-14 20:09:42 +01:00
|
|
|
assert.writeOK(bulk.execute());
|
2011-12-01 07:18:41 +01:00
|
|
|
|
2012-08-29 08:14:12 +02:00
|
|
|
// Attempt to remove the last match for the {a:1} index scan while distinct is yielding.
|
2016-03-09 18:17:50 +01:00
|
|
|
p = startParallelShell('for( i = 0; i < 100; ++i ) { ' +
|
|
|
|
' var bulk = db.jstests_distinct3.initializeUnorderedBulkOp();' +
|
|
|
|
' bulk.find( { a:49 } ).remove(); ' +
|
|
|
|
' for( j = 0; j < 20; ++j ) { ' +
|
|
|
|
' bulk.insert( { a:49, c:49, d:j } ); ' +
|
|
|
|
' } ' +
|
|
|
|
' assert.writeOK(bulk.execute()); ' +
|
|
|
|
'} ');
|
2011-12-01 07:18:41 +01:00
|
|
|
|
2016-03-09 18:17:50 +01:00
|
|
|
for (i = 0; i < 100; ++i) {
|
|
|
|
count = t.distinct('c', {$or: [{a: {$gte: 0}, d: 0}, {b: {$gte: 0}}]}).length;
|
|
|
|
assert.gt(count, 100);
|
2011-12-01 07:18:41 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
p();
|