summaryrefslogtreecommitdiff
path: root/src/mongo/db/exec/merge_sort.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/merge_sort.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/merge_sort.cpp')
-rw-r--r--src/mongo/db/exec/merge_sort.cpp44
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;
}