diff options
author | Mathias Stearn <mathias@10gen.com> | 2015-07-08 12:40:15 -0400 |
---|---|---|
committer | Mathias Stearn <mathias@10gen.com> | 2015-07-16 14:37:02 -0400 |
commit | c832bc753c29f91597b75fa02c0d9019c3c20b0f (patch) | |
tree | 5324f665212988a354ff6ba254b239dc594d2c7d /src/mongo/db/exec/merge_sort.cpp | |
parent | f64b6c596f9dcd1bae7011a3230b517386baa255 (diff) | |
download | mongo-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/merge_sort.cpp')
-rw-r--r-- | src/mongo/db/exec/merge_sort.cpp | 44 |
1 files changed, 7 insertions, 37 deletions
diff --git a/src/mongo/db/exec/merge_sort.cpp b/src/mongo/db/exec/merge_sort.cpp index a710171975a..5bf7db4b9ea 100644 --- a/src/mongo/db/exec/merge_sort.cpp +++ b/src/mongo/db/exec/merge_sort.cpp @@ -48,21 +48,15 @@ const char* MergeSortStage::kStageType = "SORT_MERGE"; MergeSortStage::MergeSortStage(const MergeSortStageParams& params, WorkingSet* ws, const Collection* collection) - : _collection(collection), + : PlanStage(kStageType), + _collection(collection), _ws(ws), _pattern(params.pattern), _dedup(params.dedup), - _merging(StageWithValueComparison(ws, params.pattern)), - _commonStats(kStageType) {} - -MergeSortStage::~MergeSortStage() { - for (size_t i = 0; i < _children.size(); ++i) { - delete _children[i]; - } -} + _merging(StageWithValueComparison(ws, params.pattern)) {} void MergeSortStage::addChild(PlanStage* child) { - _children.push_back(child); + _children.emplace_back(child); // We have to call work(...) on every child before we can pick a min. _noResultToMerge.push(child); @@ -191,26 +185,10 @@ PlanStage::StageState MergeSortStage::work(WorkingSetID* out) { return PlanStage::ADVANCED; } -void MergeSortStage::saveState() { - ++_commonStats.yields; - for (size_t i = 0; i < _children.size(); ++i) { - _children[i]->saveState(); - } -} - -void MergeSortStage::restoreState(OperationContext* opCtx) { - ++_commonStats.unyields; - for (size_t i = 0; i < _children.size(); ++i) { - _children[i]->restoreState(opCtx); - } -} - -void MergeSortStage::invalidate(OperationContext* txn, const RecordId& dl, InvalidationType type) { - ++_commonStats.invalidates; - for (size_t i = 0; i < _children.size(); ++i) { - _children[i]->invalidate(txn, dl, type); - } +void MergeSortStage::doInvalidate(OperationContext* txn, + const RecordId& dl, + InvalidationType type) { // Go through our data and see if we're holding on to the invalidated loc. for (list<StageWithValue>::iterator valueIt = _mergingData.begin(); valueIt != _mergingData.end(); @@ -265,10 +243,6 @@ bool MergeSortStage::StageWithValueComparison::operator()(const MergingRef& lhs, return false; } -vector<PlanStage*> MergeSortStage::getChildren() const { - return _children; -} - unique_ptr<PlanStageStats> MergeSortStage::getStats() { _commonStats.isEOF = isEOF(); @@ -282,10 +256,6 @@ unique_ptr<PlanStageStats> MergeSortStage::getStats() { return ret; } -const CommonStats* MergeSortStage::getCommonStats() const { - return &_commonStats; -} - const SpecificStats* MergeSortStage::getSpecificStats() const { return &_specificStats; } |