diff options
author | Martin Neupauer <martin.neupauer@mongodb.com> | 2022-01-14 19:17:03 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-01-14 20:50:30 +0000 |
commit | 5a86a7dfff7743a7ac2dc9484fc854351c253f69 (patch) | |
tree | 101c6c32d2c2e9d2749b3b08727ca76a765a6f01 /src/mongo/db/query/sbe_stage_builder_coll_scan.cpp | |
parent | 94d5eb0aba620a65439f0252377d74dd7683f485 (diff) | |
download | mongo-5a86a7dfff7743a7ac2dc9484fc854351c253f69.tar.gz |
SERVER-61630 support a string form of RecordId
Diffstat (limited to 'src/mongo/db/query/sbe_stage_builder_coll_scan.cpp')
-rw-r--r-- | src/mongo/db/query/sbe_stage_builder_coll_scan.cpp | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/src/mongo/db/query/sbe_stage_builder_coll_scan.cpp b/src/mongo/db/query/sbe_stage_builder_coll_scan.cpp index 1ae5d110a24..d2102cea044 100644 --- a/src/mongo/db/query/sbe_stage_builder_coll_scan.cpp +++ b/src/mongo/db/query/sbe_stage_builder_coll_scan.cpp @@ -268,16 +268,15 @@ std::pair<std::unique_ptr<sbe::PlanStage>, PlanStageSlots> generateOptimizedOplo auto resumeRecordIdSlot = state.env->getSlot("resumeRecordId"_sd); return {resumeRecordIdSlot, makeVariable(resumeRecordIdSlot)}; } else if (csn->resumeAfterRecordId) { - return { - state.slotId(), - makeConstant(sbe::value::TypeTags::RecordId, csn->resumeAfterRecordId->getLong())}; + auto [tag, val] = sbe::value::makeCopyRecordId(*csn->resumeAfterRecordId); + return {state.slotId(), makeConstant(tag, val)}; } else if (csn->minRecord) { auto cursor = collection->getRecordStore()->getCursor(state.opCtx); auto startRec = cursor->seekNear(*csn->minRecord); if (startRec) { LOGV2_DEBUG(205841, 3, "Using direct oplog seek"); - return {state.slotId(), - makeConstant(sbe::value::TypeTags::RecordId, startRec->id.getLong())}; + auto [tag, val] = sbe::value::makeCopyRecordId(startRec->id); + return {state.slotId(), makeConstant(tag, val)}; } } return {}; @@ -550,9 +549,8 @@ std::pair<std::unique_ptr<sbe::PlanStage>, PlanStageSlots> generateGenericCollSc auto [seekRecordIdSlot, seekRecordIdExpression] = [&]() -> std::pair<boost::optional<sbe::value::SlotId>, std::unique_ptr<sbe::EExpression>> { if (csn->resumeAfterRecordId) { - return { - state.slotId(), - makeConstant(sbe::value::TypeTags::RecordId, csn->resumeAfterRecordId->getLong())}; + auto [tag, val] = sbe::value::makeCopyRecordId(*csn->resumeAfterRecordId); + return {state.slotId(), makeConstant(tag, val)}; } else if (isTailableResumeBranch) { auto resumeRecordIdSlot = state.env->getSlot("resumeRecordId"_sd); return {resumeRecordIdSlot, makeVariable(resumeRecordIdSlot)}; |