SERVER-113400 Move IdGenerator to sbe/util (#43510)

GitOrigin-RevId: 0a2975c1928324a5bc7aa76c6d6f48714523d054
This commit is contained in:
Ivan Fefer 2025-11-05 16:11:10 +01:00 committed by MongoDB Bot
parent 23b7e43fd7
commit 24f23cd9de
9 changed files with 15 additions and 27 deletions

View File

@ -2237,6 +2237,7 @@ mongo_cc_library(
"//src/mongo/db/exec/sbe/stages:stages.h",
"//src/mongo/db/exec/sbe/stages:window.h",
"//src/mongo/db/exec/sbe/util:debug_print.h",
"//src/mongo/db/exec/sbe/util:id_generator.h",
"//src/mongo/db/exec/sbe/util:print_options.h",
"//src/mongo/db/exec/sbe/util:spilling.h",
"//src/mongo/db/exec/sbe/values:arith_common.h",

View File

@ -268,7 +268,6 @@ mongo_cc_library(
"//src/mongo/scripting:engine.h",
"//src/mongo/util:elapsed_tracker.h",
"//src/mongo/util:histogram.h",
"//src/mongo/util:id_generator.h",
"//src/mongo/util:lazily_initialized.h",
"//src/mongo/util:pcre.h",
"//src/mongo/util:processinfo.h",

View File

@ -60,7 +60,6 @@
#include "mongo/db/query/compiler/physical_model/query_solution/stage_types.h"
#include "mongo/db/storage/key_string/key_string.h"
#include "mongo/unittest/unittest.h"
#include "mongo/util/id_generator.h"
#include "mongo/util/uuid.h"
#include <cstddef>

View File

@ -65,7 +65,6 @@
#include "mongo/db/yieldable.h"
#include "mongo/unittest/unittest.h"
#include "mongo/util/duration.h"
#include "mongo/util/id_generator.h"
namespace mongo::sbe {

View File

@ -35,32 +35,27 @@ namespace mongo {
* increment to the previously generated id. This generator is not thread safe; calls to
* generateByIncrementing must be serialized.
*/
template <class T>
template <class T, T IncrementStep = 1>
class IncrementingIdGenerator {
protected:
/**
* Constructs a new generator using 'startingId' as the first generated id and 'incrementStep'
* as the value to add to generate subsequent ids. Note that 'incrementStep' may be negative but
* must not be zero.
* Constructs a new generator using 'startingId' as the first generated id.
*/
IncrementingIdGenerator(T startingId, T incrementStep)
: _currentId(startingId), _incrementStep(incrementStep) {}
IncrementingIdGenerator(T startingId) : _currentId(startingId) {}
T generateByIncrementing() {
_currentId += _incrementStep;
_currentId += IncrementStep;
return _currentId;
}
private:
T _currentId;
T _incrementStep;
};
template <class T, class Container = std::vector<T>>
class IdGenerator : IncrementingIdGenerator<T> {
template <class T, class Container = std::vector<T>, T IncrementStep = 1>
class IdGenerator : IncrementingIdGenerator<T, IncrementStep> {
public:
IdGenerator(T startingId = 0, T incrementStep = 1)
: IncrementingIdGenerator<T>(startingId, incrementStep) {}
IdGenerator(T startingId = 0) : IncrementingIdGenerator<T, IncrementStep>(startingId) {}
T generate() {
return this->generateByIncrementing();

View File

@ -31,10 +31,10 @@
#include "mongo/bson/bsonobj.h"
#include "mongo/config.h"
#include "mongo/db/exec/sbe/util/id_generator.h"
#include "mongo/db/exec/sbe/values/row.h"
#include "mongo/db/exec/sbe/values/slot_util.h"
#include "mongo/db/exec/sbe/values/value.h"
#include "mongo/util/id_generator.h"
#include <type_traits>

View File

@ -32,7 +32,6 @@
#include "mongo/db/exec/sbe/values/slot.h"
#include "mongo/db/exec/sbe/vm/vm.h"
#include "mongo/unittest/unittest.h"
#include "mongo/util/id_generator.h"
namespace mongo {
/**

View File

@ -297,11 +297,11 @@ std::string QuerySolution::summaryString() const {
return sb.str();
}
void QuerySolution::assignNodeIds(QsnIdGenerator& idGenerator, QuerySolutionNode& node) {
void QuerySolution::assignNodeIds(PlanNodeId& lastNodeId, QuerySolutionNode& node) {
for (auto&& child : node.children) {
assignNodeIds(idGenerator, *child);
assignNodeIds(lastNodeId, *child);
}
node._nodeId = idGenerator.generate();
node._nodeId = ++lastNodeId;
}
void QuerySolution::extendWith(std::unique_ptr<QuerySolutionNode> extensionRoot) {
@ -338,8 +338,8 @@ void QuerySolution::setRoot(std::unique_ptr<QuerySolutionNode> root) {
_root = std::move(root);
_enumeratorExplainInfo.hitScanLimit = _root->getScanLimit();
QsnIdGenerator idGenerator;
assignNodeIds(idGenerator, *_root);
PlanNodeId lastNodeId = 0;
assignNodeIds(lastNodeId, *_root);
}
std::vector<NamespaceStringOrUUID> QuerySolution::getAllSecondaryNamespaces(

View File

@ -66,9 +66,7 @@
#include "mongo/db/query/plan_enumerator/plan_enumerator_explain_info.h"
#include "mongo/db/query/record_id_bound.h"
#include "mongo/db/query/timeseries/bucket_spec.h"
#include "mongo/platform/atomic_word.h"
#include "mongo/util/assert_util.h"
#include "mongo/util/id_generator.h"
#include "mongo/util/modules.h"
#include "mongo/util/str.h"
@ -525,12 +523,10 @@ public:
size_t taggedMatchExpressionHash{0};
private:
using QsnIdGenerator = IdGenerator<PlanNodeId>;
QuerySolution(const QuerySolution&) = delete;
QuerySolution& operator=(const QuerySolution&) = delete;
void assignNodeIds(QsnIdGenerator& idGenerator, QuerySolutionNode& node);
void assignNodeIds(PlanNodeId& lastNodeId, QuerySolutionNode& node);
std::unique_ptr<QuerySolutionNode> _root;
PlanNodeId _unextendedRootId{kEmptyPlanNodeId};