diff options
author | Bernard Gorman <bernard.gorman@gmail.com> | 2019-05-22 13:10:17 +0100 |
---|---|---|
committer | Bernard Gorman <bernard.gorman@gmail.com> | 2019-05-24 15:27:25 +0100 |
commit | ec6f2325a99b6ddd13af6903eed12ced95e4bea8 (patch) | |
tree | f225a28dc123f6e1ca0f32b1fee4202cee051db5 /src/mongo/db/query/query_request.cpp | |
parent | 8d5727273585524a38d4a663b61403a263f7cf3d (diff) | |
download | mongo-ec6f2325a99b6ddd13af6903eed12ced95e4bea8.tar.gz |
SERVER-41238 Allow $$NOW and $$CLUSTER_TIME to be used in the find command
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 a8698404ea8..c43317b584b 100644 --- a/src/mongo/db/query/query_request.cpp +++ b/src/mongo/db/query/query_request.cpp @@ -98,6 +98,7 @@ const char kOplogReplayField[] = "oplogReplay"; const char kNoCursorTimeoutField[] = "noCursorTimeout"; const char kAwaitDataField[] = "awaitData"; const char kPartialResultsField[] = "allowPartialResults"; +const char kRuntimeConstantsField[] = "runtimeConstants"; const char kTermField[] = "term"; const char kOptionsField[] = "options"; const char kReadOnceField[] = "readOnce"; @@ -337,6 +338,14 @@ StatusWith<unique_ptr<QueryRequest>> QueryRequest::parseFromFindCommand(unique_p } qr->_allowPartialResults = el.boolean(); + } else if (fieldName == kRuntimeConstantsField) { + Status status = checkFieldType(el, Object); + if (!status.isOK()) { + return status; + } + qr->_runtimeConstants = + RuntimeConstants::parse(IDLParserErrorContext(kRuntimeConstantsField), + cmdObj.getObjectField(kRuntimeConstantsField)); } else if (fieldName == kOptionsField) { // 3.0.x versions of the shell may generate an explain of a find command with an // 'options' field. We accept this only if the 'options' field is empty so that @@ -544,6 +553,12 @@ void QueryRequest::asFindCommandInternal(BSONObjBuilder* cmdBuilder) const { cmdBuilder->append(kPartialResultsField, true); } + if (_runtimeConstants) { + BSONObjBuilder rtcBuilder(cmdBuilder->subobjStart(kRuntimeConstantsField)); + _runtimeConstants->serialize(&rtcBuilder); + rtcBuilder.doneFast(); + } + if (_replicationTerm) { cmdBuilder->append(kTermField, *_replicationTerm); } @@ -1116,6 +1131,11 @@ StatusWith<BSONObj> QueryRequest::asAggregationCommand() const { if (!_unwrappedReadPref.isEmpty()) { aggregationBuilder.append(QueryRequest::kUnwrappedReadPrefField, _unwrappedReadPref); } + if (_runtimeConstants) { + BSONObjBuilder rtcBuilder(aggregationBuilder.subobjStart(kRuntimeConstantsField)); + _runtimeConstants->serialize(&rtcBuilder); + rtcBuilder.doneFast(); + } return StatusWith<BSONObj>(aggregationBuilder.obj()); } } // namespace mongo |