summaryrefslogtreecommitdiff
path: root/src/mongo/db/dbmessage.cpp
diff options
context:
space:
mode:
authorMathias Stearn <mathias@10gen.com>2017-07-10 14:37:02 -0400
committerMathias Stearn <mathias@10gen.com>2017-07-26 15:13:34 -0400
commit516e0a50a0fb0e9df45cdc5f74cf0308c3706366 (patch)
treea0c4b66760e834b468eef9a088a4a00e9d2fd23a /src/mongo/db/dbmessage.cpp
parente6a7b02b3d14d78017b809a125f6bc3633687393 (diff)
downloadmongo-516e0a50a0fb0e9df45cdc5f74cf0308c3706366.tar.gz
SERVER-28509 Move code to assemble legacy requests out of DBClient
Diffstat (limited to 'src/mongo/db/dbmessage.cpp')
-rw-r--r--src/mongo/db/dbmessage.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/mongo/db/dbmessage.cpp b/src/mongo/db/dbmessage.cpp
index 563e3001e07..4b9a0ccffc7 100644
--- a/src/mongo/db/dbmessage.cpp
+++ b/src/mongo/db/dbmessage.cpp
@@ -139,6 +139,77 @@ T DbMessage::readAndAdvance() {
return t;
}
+namespace {
+template <typename Func>
+Message makeMessage(NetworkOp op, Func&& bodyBuilder) {
+ BufBuilder b;
+ b.skip(sizeof(MSGHEADER::Layout));
+
+ bodyBuilder(b);
+
+ const int size = b.len();
+ auto out = Message(b.release());
+ out.header().setOperation(op);
+ out.header().setLen(size);
+ return out;
+}
+}
+
+Message makeInsertMessage(StringData ns, const BSONObj* objs, size_t count, int flags) {
+ return makeMessage(dbInsert, [&](BufBuilder& b) {
+ int reservedFlags = 0;
+ if (flags & InsertOption_ContinueOnError)
+ reservedFlags |= InsertOption_ContinueOnError;
+
+ b.appendNum(reservedFlags);
+ b.appendStr(ns);
+
+ for (size_t i = 0; i < count; i++) {
+ objs[i].appendSelfToBufBuilder(b);
+ }
+ });
+}
+
+Message makeUpdateMessage(StringData ns, BSONObj query, BSONObj update, int flags) {
+ return makeMessage(dbUpdate, [&](BufBuilder& b) {
+ const int reservedFlags = 0;
+ b.appendNum(reservedFlags);
+ b.appendStr(ns);
+ b.appendNum(flags);
+
+ query.appendSelfToBufBuilder(b);
+ update.appendSelfToBufBuilder(b);
+ });
+}
+
+Message makeRemoveMessage(StringData ns, BSONObj query, int flags) {
+ return makeMessage(dbDelete, [&](BufBuilder& b) {
+ const int reservedFlags = 0;
+ b.appendNum(reservedFlags);
+ b.appendStr(ns);
+ b.appendNum(flags);
+
+ query.appendSelfToBufBuilder(b);
+ });
+}
+
+Message makeKillCursorsMessage(long long cursorId) {
+ return makeMessage(dbKillCursors, [&](BufBuilder& b) {
+ b.appendNum((int)0); // reserved
+ b.appendNum((int)1); // number
+ b.appendNum(cursorId);
+ });
+}
+
+Message makeGetMoreMessage(StringData ns, long long cursorId, int nToReturn, int flags) {
+ return makeMessage(dbGetMore, [&](BufBuilder& b) {
+ b.appendNum(flags);
+ b.appendStr(ns);
+ b.appendNum(nToReturn);
+ b.appendNum(cursorId);
+ });
+}
+
OpQueryReplyBuilder::OpQueryReplyBuilder() : _buffer(32768) {
_buffer.skip(sizeof(QueryResult::Value));
}