summaryrefslogtreecommitdiff
path: root/dbgrid/request.cpp
diff options
context:
space:
mode:
authorDwight <dmerriman@gmail.com>2008-10-22 16:56:39 -0400
committerDwight <dmerriman@gmail.com>2008-10-22 16:56:39 -0400
commit13480027d90f8b2da17e099cadaeaa22c04a3be1 (patch)
tree4ce11f8862155764e67b75f3e3275a9a649c6ec0 /dbgrid/request.cpp
parent0aef80f8cc9607db79fbc491d46b054f7504e205 (diff)
downloadmongo-13480027d90f8b2da17e099cadaeaa22c04a3be1.tar.gz
reorganize commands code for dbgrid
Diffstat (limited to 'dbgrid/request.cpp')
-rw-r--r--dbgrid/request.cpp44
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();