diff options
author | Dwight <dmerriman@gmail.com> | 2008-10-22 16:56:39 -0400 |
---|---|---|
committer | Dwight <dmerriman@gmail.com> | 2008-10-22 16:56:39 -0400 |
commit | 13480027d90f8b2da17e099cadaeaa22c04a3be1 (patch) | |
tree | 4ce11f8862155764e67b75f3e3275a9a649c6ec0 /dbgrid/request.cpp | |
parent | 0aef80f8cc9607db79fbc491d46b054f7504e205 (diff) | |
download | mongo-13480027d90f8b2da17e099cadaeaa22c04a3be1.tar.gz |
reorganize commands code for dbgrid
Diffstat (limited to 'dbgrid/request.cpp')
-rw-r--r-- | dbgrid/request.cpp | 44 |
1 files changed, 40 insertions, 4 deletions
diff --git a/dbgrid/request.cpp b/dbgrid/request.cpp index cd8b7dd1c1f..160e897d3db 100644 --- a/dbgrid/request.cpp +++ b/dbgrid/request.cpp @@ -53,13 +53,49 @@ void getMore(Message& m, MessagingPort& p) { dbcon.done(); } -void queryOp(Message& m, MessagingPort& p) { - DbMessage d(m); - const char *ns = d.getns(); +bool runCommandAgainstRegistered(const char *ns, BSONObj& jsobj, BSONObjBuilder& anObjBuilder); - cout << "TEMPns: " << ns << endl; +#include "../db/commands.h" +class IsDbGridCmd : public Command { +public: + IsDbGridCmd() : Command("isdbgrid") { } + bool run(const char *ns, BSONObj& cmdObj, string& errmsg, BSONObjBuilder& result) { + result.append("isdbgrid", 1); + return true; + } +} isdbgridcmd; +void queryOp(Message& m, MessagingPort& p) { + DbMessage d(m); + QueryMessage q(d); + + cout << "TEMPns: " << q.ns << endl; + + if( q.ntoreturn == -1 && strstr(q.ns, ".$cmd") ) { + BSONObjBuilder builder; + if( runCommandAgainstRegistered(q.ns, q.query, builder) ) { + BufBuilder b(32768); + b.skip(sizeof(QueryResult)); + BSONObj x = builder.done(); + b.append((void*) x.objdata(), x.objsize()); + QueryResult *qr = (QueryResult *) b.buf(); + qr->_data[0] = 0; + qr->_data[1] = 0; + qr->_data[2] = 0; + qr->_data[3] = 0; + qr->len = b.len(); + qr->setOperation(opReply); + qr->cursorId = 0; + qr->startingFrom = 0; + qr->nReturned = 1; + b.decouple(); + Message *resp = new Message(); + resp->setData(qr, true); // transport will free + p.reply(m, *resp, m.data->id); + return; + } + } ScopedDbConnection dbcon(tempHost); DBClientConnection &c = dbcon.conn(); |