diff options
author | Svilen Mihaylov <svilen.mihaylov@mongodb.com> | 2023-01-25 17:32:47 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2023-01-25 18:46:31 +0000 |
commit | fe28233bb6292f97629f36d85c3853698bcf240a (patch) | |
tree | 3af5fa68a0cbea30d64ff7605367d68450b547bf | |
parent | 19d71c2910c2ee4796217c52e03d404451e84668 (diff) | |
download | mongo-fe28233bb6292f97629f36d85c3853698bcf240a.tar.gz |
SERVER-73301 [CQF] Ensure plan stability for generated SBE plans
-rw-r--r-- | src/mongo/db/exec/sbe/abt/abt_lower.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/mongo/db/exec/sbe/abt/abt_lower.cpp b/src/mongo/db/exec/sbe/abt/abt_lower.cpp index bd6b5d0fd3a..17b13b26db1 100644 --- a/src/mongo/db/exec/sbe/abt/abt_lower.cpp +++ b/src/mongo/db/exec/sbe/abt/abt_lower.cpp @@ -720,6 +720,8 @@ std::unique_ptr<sbe::PlanStage> SBENodeLowering::walk(const NestedLoopJoinNode& for (const ProjectionName& projectionName : n.getCorrelatedProjectionNames()) { correlatedSlots.push_back(_slotMap.at(projectionName)); } + // Soring is not essential. Here we sort only for SBE plan stability. + std::sort(correlatedSlots.begin(), correlatedSlots.end()); auto expr = lowerExpression(filter); @@ -979,7 +981,13 @@ void SBENodeLowering::generateSlots(const FieldProjectionMap& fieldProjectionMap rootSlot = _slotIdGenerator.generate(); mapProjToSlot(*projName, rootSlot.value()); } - for (const auto& [fieldName, projectionName] : fieldProjectionMap._fieldProjections) { + + // Soring is not essential. Here we sort only for SBE plan stability. + std::map<FieldNameType, ProjectionName> ordered; + for (const auto& entry : fieldProjectionMap._fieldProjections) { + ordered.insert(entry); + } + for (const auto& [fieldName, projectionName] : ordered) { vars.push_back(_slotIdGenerator.generate()); mapProjToSlot(projectionName, vars.back()); fields.push_back(fieldName.value().toString()); |