StatusWith<boost::optional<BSONObj>> RouterStageSkip::next() { while (_skippedSoFar < _skip) { auto next = getChildStage()->next(); if (!next.isOK()) { return next; } if (!next.getValue()) { return next; } ++_skippedSoFar; } return getChildStage()->next(); }
StatusWith<boost::optional<BSONObj>> RouterStageLimit::next() { if (_returnedSoFar >= _limit) { return {boost::none}; } auto childResult = getChildStage()->next(); if (!childResult.isOK()) { return childResult; } if (childResult.getValue()) { ++_returnedSoFar; } return childResult; }
StatusWith<boost::optional<BSONObj>> RouterStageRemoveSortKey::next() { auto childResult = getChildStage()->next(); if (!childResult.isOK() || !childResult.getValue()) { return childResult; } BSONObjBuilder builder; for (BSONElement elt : *childResult.getValue()) { if (!str::equals(elt.fieldName(), ClusterClientCursorParams::kSortKeyField)) { builder.append(elt); } } return {builder.obj()}; }
StatusWith<ClusterQueryResult> RouterStageLimit::next(RouterExecStage::ExecContext execContext) { if (_returnedSoFar >= _limit) { return {ClusterQueryResult()}; } auto childResult = getChildStage()->next(execContext); if (!childResult.isOK()) { return childResult; } if (!childResult.getValue().isEOF()) { ++_returnedSoFar; } return childResult; }
void RouterStageSkip::kill() { getChildStage()->kill(); }
Status RouterStageLimit::setAwaitDataTimeout(Milliseconds awaitDataTimeout) { return getChildStage()->setAwaitDataTimeout(awaitDataTimeout); }
bool RouterStageLimit::remotesExhausted() { return getChildStage()->remotesExhausted(); }
void RouterStageLimit::kill() { getChildStage()->kill(); }
bool RouterStageRemoveSortKey::remotesExhausted() { return getChildStage()->remotesExhausted(); }
void RouterStageRemoveSortKey::kill() { getChildStage()->kill(); }