summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYoonsoo Kim <yoonsoo.kim@mongodb.com>2021-02-05 18:20:03 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-02-09 00:38:52 +0000
commitf9cc115ef03eef4e8a018585c73d0c86751217f7 (patch)
tree437b74fc911c87e94fcf95fab21586a2d7f85d6b
parent93bddb471583e84afc412b68c7e9c06871d42c43 (diff)
downloadmongo-f9cc115ef03eef4e8a018585c73d0c86751217f7.tar.gz
SERVER-53039 Make SpecificStats::clone() return unique_ptr
-rw-r--r--src/mongo/db/exec/near.cpp2
-rw-r--r--src/mongo/db/exec/plan_stats.h150
-rw-r--r--src/mongo/db/exec/sbe/stages/plan_stats.h36
3 files changed, 85 insertions, 103 deletions
diff --git a/src/mongo/db/exec/near.cpp b/src/mongo/db/exec/near.cpp
index 3b095958986..05bc2735af1 100644
--- a/src/mongo/db/exec/near.cpp
+++ b/src/mongo/db/exec/near.cpp
@@ -264,7 +264,7 @@ bool NearStage::isEOF() {
unique_ptr<PlanStageStats> NearStage::getStats() {
unique_ptr<PlanStageStats> ret = std::make_unique<PlanStageStats>(_commonStats, _stageType);
- ret->specific.reset(_specificStats.clone());
+ ret->specific = _specificStats.clone();
for (size_t i = 0; i < _childrenIntervals.size(); ++i) {
ret->children.emplace_back(_childrenIntervals[i]->covering->getStats());
}
diff --git a/src/mongo/db/exec/plan_stats.h b/src/mongo/db/exec/plan_stats.h
index 2bb25ad0c6a..a40685f03aa 100644
--- a/src/mongo/db/exec/plan_stats.h
+++ b/src/mongo/db/exec/plan_stats.h
@@ -52,7 +52,7 @@ struct SpecificStats {
/**
* Make a deep copy.
*/
- virtual SpecificStats* clone() const = 0;
+ virtual std::unique_ptr<SpecificStats> clone() const = 0;
virtual uint64_t estimateObjectSizeInBytes() const = 0;
@@ -125,7 +125,7 @@ struct BasePlanStageStats {
BasePlanStageStats<C, T>* clone() const {
auto stats = new BasePlanStageStats<C, T>(common, stageType);
if (specific.get()) {
- stats->specific.reset(specific->clone());
+ stats->specific = specific->clone();
}
for (size_t i = 0; i < children.size(); ++i) {
invariant(children[i]);
@@ -173,9 +173,8 @@ using PlanStageStats = BasePlanStageStats<CommonStats, StageType>;
struct AndHashStats : public SpecificStats {
AndHashStats() = default;
- SpecificStats* clone() const final {
- AndHashStats* specific = new AndHashStats(*this);
- return specific;
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<AndHashStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -200,9 +199,8 @@ struct AndHashStats : public SpecificStats {
struct AndSortedStats : public SpecificStats {
AndSortedStats() = default;
- SpecificStats* clone() const final {
- AndSortedStats* specific = new AndSortedStats(*this);
- return specific;
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<AndSortedStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -216,8 +214,8 @@ struct AndSortedStats : public SpecificStats {
struct CachedPlanStats : public SpecificStats {
CachedPlanStats() = default;
- SpecificStats* clone() const final {
- return new CachedPlanStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<CachedPlanStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -230,9 +228,8 @@ struct CachedPlanStats : public SpecificStats {
struct CollectionScanStats : public SpecificStats {
CollectionScanStats() : docsTested(0), direction(1) {}
- SpecificStats* clone() const final {
- CollectionScanStats* specific = new CollectionScanStats(*this);
- return specific;
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<CollectionScanStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -261,9 +258,8 @@ struct CollectionScanStats : public SpecificStats {
struct CountStats : public SpecificStats {
CountStats() : nCounted(0), nSkipped(0) {}
- SpecificStats* clone() const final {
- CountStats* specific = new CountStats(*this);
- return specific;
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<CountStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -286,8 +282,8 @@ struct CountScanStats : public SpecificStats {
isUnique(false),
keysExamined(0) {}
- SpecificStats* clone() const final {
- CountScanStats* specific = new CountScanStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ auto specific = std::make_unique<CountScanStats>(*this);
// BSON objects have to be explicitly copied.
specific->keyPattern = keyPattern.getOwned();
specific->collation = collation.getOwned();
@@ -341,8 +337,8 @@ struct CountScanStats : public SpecificStats {
struct DeleteStats : public SpecificStats {
DeleteStats() = default;
- SpecificStats* clone() const final {
- return new DeleteStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<DeleteStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -353,8 +349,8 @@ struct DeleteStats : public SpecificStats {
};
struct DistinctScanStats : public SpecificStats {
- SpecificStats* clone() const final {
- DistinctScanStats* specific = new DistinctScanStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ auto specific = std::make_unique<DistinctScanStats>(*this);
// BSON objects have to be explicitly copied.
specific->keyPattern = keyPattern.getOwned();
specific->collation = collation.getOwned();
@@ -405,9 +401,8 @@ struct DistinctScanStats : public SpecificStats {
struct EnsureSortedStats : public SpecificStats {
EnsureSortedStats() : nDropped(0) {}
- SpecificStats* clone() const final {
- EnsureSortedStats* specific = new EnsureSortedStats(*this);
- return specific;
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<EnsureSortedStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -421,9 +416,8 @@ struct EnsureSortedStats : public SpecificStats {
struct FetchStats : public SpecificStats {
FetchStats() = default;
- SpecificStats* clone() const final {
- FetchStats* specific = new FetchStats(*this);
- return specific;
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<FetchStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -440,9 +434,8 @@ struct FetchStats : public SpecificStats {
struct IDHackStats : public SpecificStats {
IDHackStats() : keysExamined(0), docsExamined(0) {}
- SpecificStats* clone() const final {
- IDHackStats* specific = new IDHackStats(*this);
- return specific;
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<IDHackStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -459,8 +452,8 @@ struct IDHackStats : public SpecificStats {
};
struct ReturnKeyStats : public SpecificStats {
- SpecificStats* clone() const final {
- return new ReturnKeyStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<ReturnKeyStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -481,8 +474,8 @@ struct IndexScanStats : public SpecificStats {
keysExamined(0),
seeks(0) {}
- SpecificStats* clone() const final {
- IndexScanStats* specific = new IndexScanStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ auto specific = std::make_unique<IndexScanStats>(*this);
// BSON objects have to be explicitly copied.
specific->keyPattern = keyPattern.getOwned();
specific->collation = collation.getOwned();
@@ -546,9 +539,8 @@ struct IndexScanStats : public SpecificStats {
struct LimitStats : public SpecificStats {
LimitStats() : limit(0) {}
- SpecificStats* clone() const final {
- LimitStats* specific = new LimitStats(*this);
- return specific;
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<LimitStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -561,8 +553,8 @@ struct LimitStats : public SpecificStats {
struct MockStats : public SpecificStats {
MockStats() {}
- SpecificStats* clone() const final {
- return new MockStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<MockStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -573,8 +565,8 @@ struct MockStats : public SpecificStats {
struct MultiPlanStats : public SpecificStats {
MultiPlanStats() {}
- SpecificStats* clone() const final {
- return new MultiPlanStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<MultiPlanStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -585,9 +577,8 @@ struct MultiPlanStats : public SpecificStats {
struct OrStats : public SpecificStats {
OrStats() = default;
- SpecificStats* clone() const final {
- OrStats* specific = new OrStats(*this);
- return specific;
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<OrStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -601,9 +592,8 @@ struct OrStats : public SpecificStats {
struct ProjectionStats : public SpecificStats {
ProjectionStats() {}
- SpecificStats* clone() const final {
- ProjectionStats* specific = new ProjectionStats(*this);
- return specific;
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<ProjectionStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -619,9 +609,8 @@ struct SortStats : public SpecificStats {
SortStats(uint64_t limit, uint64_t maxMemoryUsageBytes)
: limit(limit), maxMemoryUsageBytes(maxMemoryUsageBytes) {}
- SpecificStats* clone() const {
- SortStats* specific = new SortStats(*this);
- return specific;
+ std::unique_ptr<SpecificStats> clone() const {
+ return std::make_unique<SortStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -662,9 +651,8 @@ struct SortStats : public SpecificStats {
struct MergeSortStats : public SpecificStats {
MergeSortStats() = default;
- SpecificStats* clone() const final {
- MergeSortStats* specific = new MergeSortStats(*this);
- return specific;
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<MergeSortStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -681,9 +669,8 @@ struct MergeSortStats : public SpecificStats {
struct ShardingFilterStats : public SpecificStats {
ShardingFilterStats() : chunkSkips(0) {}
- SpecificStats* clone() const final {
- ShardingFilterStats* specific = new ShardingFilterStats(*this);
- return specific;
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<ShardingFilterStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -696,9 +683,8 @@ struct ShardingFilterStats : public SpecificStats {
struct SkipStats : public SpecificStats {
SkipStats() : skip(0) {}
- SpecificStats* clone() const final {
- SkipStats* specific = new SkipStats(*this);
- return specific;
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<SkipStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -725,8 +711,8 @@ struct IntervalStats {
struct NearStats : public SpecificStats {
NearStats() : indexVersion(0) {}
- SpecificStats* clone() const final {
- return new NearStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<NearStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -744,8 +730,8 @@ struct NearStats : public SpecificStats {
struct UpdateStats : public SpecificStats {
UpdateStats() : nMatched(0), nModified(0), isModUpdate(false), nUpserted(0) {}
- SpecificStats* clone() const final {
- return new UpdateStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<UpdateStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -771,9 +757,8 @@ struct UpdateStats : public SpecificStats {
struct TextStats : public SpecificStats {
TextStats() : parsedTextQuery(), textIndexVersion(0) {}
- SpecificStats* clone() const final {
- TextStats* specific = new TextStats(*this);
- return specific;
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<TextStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -795,9 +780,8 @@ struct TextStats : public SpecificStats {
struct TextMatchStats : public SpecificStats {
TextMatchStats() : docsRejected(0) {}
- SpecificStats* clone() const final {
- TextMatchStats* specific = new TextMatchStats(*this);
- return specific;
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<TextMatchStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -810,9 +794,8 @@ struct TextMatchStats : public SpecificStats {
struct TextOrStats : public SpecificStats {
TextOrStats() : fetches(0) {}
- SpecificStats* clone() const final {
- TextOrStats* specific = new TextOrStats(*this);
- return specific;
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<TextOrStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -823,9 +806,8 @@ struct TextOrStats : public SpecificStats {
};
struct TrialStats : public SpecificStats {
- SpecificStats* clone() const final {
- TrialStats* specific = new TrialStats(*this);
- return specific;
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<TrialStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -843,8 +825,8 @@ struct TrialStats : public SpecificStats {
};
struct GroupStats : public SpecificStats {
- SpecificStats* clone() const final {
- return new GroupStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<GroupStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -859,8 +841,8 @@ struct GroupStats : public SpecificStats {
};
struct DocumentSourceCursorStats : public SpecificStats {
- SpecificStats* clone() const final {
- return new DocumentSourceCursorStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<DocumentSourceCursorStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -876,8 +858,8 @@ struct DocumentSourceCursorStats : public SpecificStats {
};
struct DocumentSourceLookupStats : public SpecificStats {
- SpecificStats* clone() const final {
- return new DocumentSourceLookupStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<DocumentSourceLookupStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -894,8 +876,8 @@ struct DocumentSourceLookupStats : public SpecificStats {
};
struct UnionWithStats final : public SpecificStats {
- SpecificStats* clone() const final {
- return new UnionWithStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<UnionWithStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
diff --git a/src/mongo/db/exec/sbe/stages/plan_stats.h b/src/mongo/db/exec/sbe/stages/plan_stats.h
index 91c80efa49b..06f82af3c70 100644
--- a/src/mongo/db/exec/sbe/stages/plan_stats.h
+++ b/src/mongo/db/exec/sbe/stages/plan_stats.h
@@ -71,8 +71,8 @@ struct CommonStats {
using PlanStageStats = BasePlanStageStats<CommonStats>;
struct ScanStats final : public SpecificStats {
- SpecificStats* clone() const final {
- return new ScanStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<ScanStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const final {
@@ -87,8 +87,8 @@ struct ScanStats final : public SpecificStats {
};
struct IndexScanStats final : public SpecificStats {
- SpecificStats* clone() const final {
- return new IndexScanStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<IndexScanStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const {
@@ -104,8 +104,8 @@ struct IndexScanStats final : public SpecificStats {
};
struct FilterStats final : public SpecificStats {
- SpecificStats* clone() const final {
- return new FilterStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<FilterStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const final {
@@ -116,8 +116,8 @@ struct FilterStats final : public SpecificStats {
};
struct LimitSkipStats final : public SpecificStats {
- SpecificStats* clone() const final {
- return new LimitSkipStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<LimitSkipStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const final {
@@ -129,8 +129,8 @@ struct LimitSkipStats final : public SpecificStats {
};
struct UniqueStats : public SpecificStats {
- SpecificStats* clone() const final {
- return new UniqueStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<UniqueStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const final {
@@ -142,8 +142,8 @@ struct UniqueStats : public SpecificStats {
};
struct BranchStats final : public SpecificStats {
- SpecificStats* clone() const final {
- return new BranchStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<BranchStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const final {
@@ -158,8 +158,8 @@ struct BranchStats final : public SpecificStats {
};
struct CheckBoundsStats final : public SpecificStats {
- SpecificStats* clone() const final {
- return new CheckBoundsStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<CheckBoundsStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const final {
@@ -170,8 +170,8 @@ struct CheckBoundsStats final : public SpecificStats {
};
struct LoopJoinStats final : public SpecificStats {
- SpecificStats* clone() const final {
- return new LoopJoinStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<LoopJoinStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const final {
@@ -183,8 +183,8 @@ struct LoopJoinStats final : public SpecificStats {
};
struct TraverseStats : public SpecificStats {
- SpecificStats* clone() const final {
- return new TraverseStats(*this);
+ std::unique_ptr<SpecificStats> clone() const final {
+ return std::make_unique<TraverseStats>(*this);
}
uint64_t estimateObjectSizeInBytes() const final {