summaryrefslogtreecommitdiff
path: root/src/mongo/db/exec/limit.cpp
diff options
context:
space:
mode:
authorMathias Stearn <mathias@10gen.com>2015-07-08 12:40:15 -0400
committerMathias Stearn <mathias@10gen.com>2015-07-16 14:37:02 -0400
commitc832bc753c29f91597b75fa02c0d9019c3c20b0f (patch)
tree5324f665212988a354ff6ba254b239dc594d2c7d /src/mongo/db/exec/limit.cpp
parentf64b6c596f9dcd1bae7011a3230b517386baa255 (diff)
downloadmongo-c832bc753c29f91597b75fa02c0d9019c3c20b0f.tar.gz
SERVER-17364 Unify handling of child stages into PlanStage base class
This is prep for adding more methods that need to propagate to children.
Diffstat (limited to 'src/mongo/db/exec/limit.cpp')
-rw-r--r--src/mongo/db/exec/limit.cpp34
1 files changed, 5 insertions, 29 deletions
diff --git a/src/mongo/db/exec/limit.cpp b/src/mongo/db/exec/limit.cpp
index 06566149cd8..a2c1d73b399 100644
--- a/src/mongo/db/exec/limit.cpp
+++ b/src/mongo/db/exec/limit.cpp
@@ -43,14 +43,15 @@ using stdx::make_unique;
const char* LimitStage::kStageType = "LIMIT";
LimitStage::LimitStage(long long limit, WorkingSet* ws, PlanStage* child)
- : _ws(ws), _child(child), _numToReturn(limit), _commonStats(kStageType) {
+ : PlanStage(kStageType), _ws(ws), _numToReturn(limit) {
_specificStats.limit = _numToReturn;
+ _children.emplace_back(child);
}
LimitStage::~LimitStage() {}
bool LimitStage::isEOF() {
- return (0 == _numToReturn) || _child->isEOF();
+ return (0 == _numToReturn) || child()->isEOF();
}
PlanStage::StageState LimitStage::work(WorkingSetID* out) {
@@ -65,7 +66,7 @@ PlanStage::StageState LimitStage::work(WorkingSetID* out) {
}
WorkingSetID id = WorkingSet::INVALID_ID;
- StageState status = _child->work(&id);
+ StageState status = child()->work(&id);
if (PlanStage::ADVANCED == status) {
*out = id;
@@ -94,39 +95,14 @@ PlanStage::StageState LimitStage::work(WorkingSetID* out) {
return status;
}
-void LimitStage::saveState() {
- ++_commonStats.yields;
- _child->saveState();
-}
-
-void LimitStage::restoreState(OperationContext* opCtx) {
- ++_commonStats.unyields;
- _child->restoreState(opCtx);
-}
-
-void LimitStage::invalidate(OperationContext* txn, const RecordId& dl, InvalidationType type) {
- ++_commonStats.invalidates;
- _child->invalidate(txn, dl, type);
-}
-
-vector<PlanStage*> LimitStage::getChildren() const {
- vector<PlanStage*> children;
- children.push_back(_child.get());
- return children;
-}
-
unique_ptr<PlanStageStats> LimitStage::getStats() {
_commonStats.isEOF = isEOF();
unique_ptr<PlanStageStats> ret = make_unique<PlanStageStats>(_commonStats, STAGE_LIMIT);
ret->specific = make_unique<LimitStats>(_specificStats);
- ret->children.push_back(_child->getStats().release());
+ ret->children.push_back(child()->getStats().release());
return ret;
}
-const CommonStats* LimitStage::getCommonStats() const {
- return &_commonStats;
-}
-
const SpecificStats* LimitStage::getSpecificStats() const {
return &_specificStats;
}