summaryrefslogtreecommitdiff
path: root/db/dbeval.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'db/dbeval.cpp')
-rw-r--r--db/dbeval.cpp154
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