diff options
Diffstat (limited to 'src/mongo/db/query/sbe_stage_builder.cpp')
-rw-r--r-- | src/mongo/db/query/sbe_stage_builder.cpp | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/src/mongo/db/query/sbe_stage_builder.cpp b/src/mongo/db/query/sbe_stage_builder.cpp index 6b99a116b3d..dbbb9093759 100644 --- a/src/mongo/db/query/sbe_stage_builder.cpp +++ b/src/mongo/db/query/sbe_stage_builder.cpp @@ -454,11 +454,10 @@ std::pair<std::unique_ptr<sbe::PlanStage>, PlanStageSlots> SlotBasedStageBuilder for (auto&& field : vsn->indexKeyPattern) { if (reqs.getIndexKeyBitset()->test(indexKeyPos)) { indexKeySlots.push_back(_slotIdGenerator.generate()); - projections.emplace( - indexKeySlots.back(), - makeFunction("getField"sv, - sbe::makeE<sbe::EVariable>(resultSlot), - makeConstant(std::string_view{field.fieldName()}))); + projections.emplace(indexKeySlots.back(), + makeFunction("getField"_sd, + sbe::makeE<sbe::EVariable>(resultSlot), + makeConstant(field.fieldName()))); } ++indexKeyPos; } @@ -515,10 +514,7 @@ std::pair<std::unique_ptr<sbe::PlanStage>, PlanStageSlots> SlotBasedStageBuilder size_t i = 0; for (auto&& elem : ixn->index.keyPattern) { - auto fieldName = elem.fieldNameStringData(); - - mkObjArgs.emplace_back(sbe::makeE<sbe::EConstant>( - std::string_view{fieldName.rawData(), fieldName.size()})); + mkObjArgs.emplace_back(sbe::makeE<sbe::EConstant>(elem.fieldNameStringData())); mkObjArgs.emplace_back(sbe::makeE<sbe::EVariable>((*outputs.getIndexKeySlots())[i++])); } @@ -718,20 +714,19 @@ std::pair<std::unique_ptr<sbe::PlanStage>, PlanStageSlots> SlotBasedStageBuilder // Generate projection to get the value of the sort key. Ideally, this should be // tracked by a 'reference tracker' at higher level. auto fieldName = part.fieldPath->getFieldName(0); - auto fieldNameSV = std::string_view{fieldName.rawData(), fieldName.size()}; - auto getSortFieldExpr = makeFunction("getField"sv, + auto getSortFieldExpr = makeFunction("getField"_sd, sbe::makeE<sbe::EVariable>(outputs.get(kResult)), - sbe::makeE<sbe::EConstant>(fieldNameSV)); + sbe::makeE<sbe::EConstant>(fieldName)); if (auto collatorSlot = _data.env->getSlotIfExists("collator"_sd); collatorSlot) { - getSortFieldExpr = makeFunction("collComparisonKey"sv, + getSortFieldExpr = makeFunction("collComparisonKey"_sd, std::move(getSortFieldExpr), sbe::makeE<sbe::EVariable>(*collatorSlot)); } // According to MQL semantics, missing values are treated as nulls during sorting. - getSortFieldExpr = makeFunction("fillEmpty"sv, + getSortFieldExpr = makeFunction("fillEmpty"_sd, std::move(getSortFieldExpr), makeConstant(sbe::value::TypeTags::Null, 0)); @@ -1367,7 +1362,7 @@ SlotBasedStageBuilder::makeUnionForTailableCollScan(const QuerySolutionNode* roo auto&& [anchorBranchSlots, anchorBranch] = makeUnionBranch(false); anchorBranch = sbe::makeS<sbe::FilterStage<true>>( std::move(anchorBranch), - makeNot(makeFunction("exists"sv, sbe::makeE<sbe::EVariable>(resumeRecordIdSlot))), + makeNot(makeFunction("exists"_sd, sbe::makeE<sbe::EVariable>(resumeRecordIdSlot))), root->nodeId()); // Build a resume branch of the union and add a constant filter on op of it, so that it would @@ -1375,7 +1370,7 @@ SlotBasedStageBuilder::makeUnionForTailableCollScan(const QuerySolutionNode* roo auto&& [resumeBranchSlots, resumeBranch] = makeUnionBranch(true); resumeBranch = sbe::makeS<sbe::FilterStage<true>>( sbe::makeS<sbe::LimitSkipStage>(std::move(resumeBranch), boost::none, 1, root->nodeId()), - sbe::makeE<sbe::EFunction>("exists"sv, + sbe::makeE<sbe::EFunction>("exists"_sd, sbe::makeEs(sbe::makeE<sbe::EVariable>(resumeRecordIdSlot))), root->nodeId()); |