summaryrefslogtreecommitdiff
path: root/src/mongo/db/query/query_request.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/query/query_request.cpp')
-rw-r--r--src/mongo/db/query/query_request.cpp20
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);