diff options
Diffstat (limited to 'db/dbeval.cpp')
-rw-r--r-- | db/dbeval.cpp | 154 |
1 files changed, 77 insertions, 77 deletions
diff --git a/db/dbeval.cpp b/db/dbeval.cpp index de05394d10a..9bc78d1b6a9 100644 --- a/db/dbeval.cpp +++ b/db/dbeval.cpp @@ -33,94 +33,94 @@ namespace mongo { -const int edebug=0; + const int edebug=0; -bool dbEval(const char *ns, BSONObj& cmd, BSONObjBuilder& result, string& errmsg) { - BSONElement e = cmd.firstElement(); - assert( e.type() == Code || e.type() == CodeWScope || e.type() == String ); + bool dbEval(const char *ns, BSONObj& cmd, BSONObjBuilder& result, string& errmsg) { + BSONElement e = cmd.firstElement(); + assert( e.type() == Code || e.type() == CodeWScope || e.type() == String ); - const char *code = 0; - switch ( e.type() ) { - case String: - case Code: - code = e.valuestr(); - break; - case CodeWScope: - code = e.codeWScopeCode(); - break; - default: - assert(0); - } - assert( code ); + const char *code = 0; + switch ( e.type() ) { + case String: + case Code: + code = e.valuestr(); + break; + case CodeWScope: + code = e.codeWScopeCode(); + break; + default: + assert(0); + } + assert( code ); - if ( ! JavaJS ) { - errmsg = "db side execution is disabled"; - return false; - } + if ( ! JavaJS ) { + errmsg = "db side execution is disabled"; + return false; + } #if !defined(NOJNI) - jlong f = JavaJS->functionCreate(code); - if ( f == 0 ) { - errmsg = "compile failed"; - return false; - } + jlong f = JavaJS->functionCreate(code); + if ( f == 0 ) { + errmsg = "compile failed"; + return false; + } - Scope s; - if ( e.type() == CodeWScope ) - s.init( e.codeWScopeScopeData() ); - s.setString("$client", database->name.c_str()); - BSONElement args = cmd.findElement("args"); - if ( args.type() == Array ) { - BSONObj eo = args.embeddedObject(); - if ( edebug ) { - cout << "args:" << eo.toString() << endl; - cout << "code:\n" << code << endl; + Scope s; + if ( e.type() == CodeWScope ) + s.init( e.codeWScopeScopeData() ); + s.setString("$client", database->name.c_str()); + BSONElement args = cmd.findElement("args"); + if ( args.type() == Array ) { + BSONObj eo = args.embeddedObject(); + if ( edebug ) { + cout << "args:" << eo.toString() << endl; + cout << "code:\n" << code << endl; + } + s.setObject("args", eo); } - s.setObject("args", eo); - } - int res; - { - Timer t; - res = s.invoke(f); - int m = t.millis(); - if ( m > 100 ) { - stdcout() << "TEMP: dbeval too slow:" << endl; - problem() << "dbeval time: " << dec << m << "ms " << ns << endl; - OCCASIONALLY log() << code << endl; - else if ( m >= 1000 ) log() << code << endl; + int res; + { + Timer t; + res = s.invoke(f); + int m = t.millis(); + if ( m > 100 ) { + stdcout() << "TEMP: dbeval too slow:" << endl; + problem() << "dbeval time: " << dec << m << "ms " << ns << endl; + OCCASIONALLY log() << code << endl; + else if ( m >= 1000 ) log() << code << endl; + } + } + if ( res ) { + result.append("errno", (double) res); + errmsg = "invoke failed: "; + errmsg += s.getString( "error" ); + return false; } - } - if ( res ) { - result.append("errno", (double) res); - errmsg = "invoke failed: "; - errmsg += s.getString( "error" ); - return false; - } - int type = s.type("return"); - if ( type == Object || type == Array ) - result.append("retval", s.getObject("return")); - else if ( type == NumberDouble ) - result.append("retval", s.getNumber("return")); - else if ( type == String ) - result.append("retval", s.getString("return").c_str()); - else if ( type == Bool ) { - result.appendBool("retval", s.getBoolean("return")); - } + int type = s.type("return"); + if ( type == Object || type == Array ) + result.append("retval", s.getObject("return")); + else if ( type == NumberDouble ) + result.append("retval", s.getNumber("return")); + else if ( type == String ) + result.append("retval", s.getString("return").c_str()); + else if ( type == Bool ) { + result.appendBool("retval", s.getBoolean("return")); + } #endif - return true; -} - -class CmdEval : public Command { -public: - virtual bool slaveOk() { - return false; + return true; } - CmdEval() : Command("$eval") { } - bool run(const char *ns, BSONObj& cmdObj, string& errmsg, BSONObjBuilder& result, bool fromRepl) { - return dbEval(ns, cmdObj, result, errmsg); - } -} cmdeval; + + class CmdEval : public Command { + public: + virtual bool slaveOk() { + return false; + } + CmdEval() : Command("$eval") { } + bool run(const char *ns, BSONObj& cmdObj, string& errmsg, BSONObjBuilder& result, bool fromRepl) { + return dbEval(ns, cmdObj, result, errmsg); + } + } cmdeval; } // namespace mongo |