diff options
Diffstat (limited to 'src/mongo/db/query/query_request.cpp')
-rw-r--r-- | src/mongo/db/query/query_request.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/mongo/db/query/query_request.cpp b/src/mongo/db/query/query_request.cpp index 5072c883430..4fc31cd4965 100644 --- a/src/mongo/db/query/query_request.cpp +++ b/src/mongo/db/query/query_request.cpp @@ -63,6 +63,8 @@ const string QueryRequest::metaRecordId("recordId"); const string QueryRequest::metaSortKey("sortKey"); const string QueryRequest::metaTextScore("textScore"); +const string QueryRequest::kAllowDiskUseField("allowDiskUse"); + const long long QueryRequest::kDefaultBatchSize = 101; namespace { @@ -262,6 +264,17 @@ StatusWith<unique_ptr<QueryRequest>> QueryRequest::parseFromFindCommand(unique_p } qr->_wantMore = !el.boolean(); + } else if (fieldName == kAllowDiskUseField) { + if (!getTestCommandsEnabled()) { + return Status(ErrorCodes::FailedToParse, + "allowDiskUse is not allowed unless test commands are enabled."); + } + Status status = checkFieldType(el, Bool); + if (!status.isOK()) { + return status; + } + + qr->_allowDiskUse = el.boolean(); } else if (fieldName == kCommentField) { Status status = checkFieldType(el, String); if (!status.isOK()) { @@ -495,6 +508,10 @@ void QueryRequest::asFindCommandInternal(BSONObjBuilder* cmdBuilder) const { cmdBuilder->append(kLimitField, *_limit); } + if (_allowDiskUse) { + cmdBuilder->append(kAllowDiskUseField, true); + } + if (_batchSize) { cmdBuilder->append(kBatchSizeField, *_batchSize); } @@ -1132,6 +1149,9 @@ StatusWith<BSONObj> QueryRequest::asAggregationCommand() const { if (!_unwrappedReadPref.isEmpty()) { aggregationBuilder.append(QueryRequest::kUnwrappedReadPrefField, _unwrappedReadPref); } + if (_allowDiskUse) { + aggregationBuilder.append(QueryRequest::kAllowDiskUseField, _allowDiskUse); + } if (_runtimeConstants) { BSONObjBuilder rtcBuilder(aggregationBuilder.subobjStart(kRuntimeConstantsField)); _runtimeConstants->serialize(&rtcBuilder); |