本文整理汇总了C++中BSONElement::codeWScopeScopeDataUnsafe方法的典型用法代码示例。如果您正苦于以下问题:C++ BSONElement::codeWScopeScopeDataUnsafe方法的具体用法?C++ BSONElement::codeWScopeScopeDataUnsafe怎么用?C++ BSONElement::codeWScopeScopeDataUnsafe使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BSONElement
的用法示例。
在下文中一共展示了BSONElement::codeWScopeScopeDataUnsafe方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: expressionParserWhereCallbackReal
StatusWithMatchExpression expressionParserWhereCallbackReal(const BSONElement& where) {
if ( !haveClient() )
return StatusWithMatchExpression( ErrorCodes::BadValue, "no current client needed for $where" );
Client::Context* context = cc().getContext();
if ( !context )
return StatusWithMatchExpression( ErrorCodes::BadValue, "no context in $where parsing" );
const char* ns = context->ns();
if ( !ns )
return StatusWithMatchExpression( ErrorCodes::BadValue, "no ns in $where parsing" );
if ( !globalScriptEngine )
return StatusWithMatchExpression( ErrorCodes::BadValue, "no globalScriptEngine in $where parsing" );
auto_ptr<WhereMatchExpression> exp( new WhereMatchExpression() );
if ( where.type() == String || where.type() == Code ) {
Status s = exp->init( ns, where.valuestr(), BSONObj() );
if ( !s.isOK() )
return StatusWithMatchExpression( s );
return StatusWithMatchExpression( exp.release() );
}
if ( where.type() == CodeWScope ) {
Status s = exp->init( ns,
where.codeWScopeCode(),
BSONObj( where.codeWScopeScopeDataUnsafe() ) );
if ( !s.isOK() )
return StatusWithMatchExpression( s );
return StatusWithMatchExpression( exp.release() );
}
return StatusWithMatchExpression( ErrorCodes::BadValue, "$where got bad type" );
}
示例2: parseRequest
Status GroupCommand::parseRequest(const string& dbname,
const BSONObj& cmdObj,
GroupRequest* request) const {
request->ns = parseNs(dbname, cmdObj);
const BSONObj& p = cmdObj.firstElement().embeddedObjectUserCheck();
if (p["cond"].type() == Object) {
request->query = p["cond"].embeddedObject().getOwned();
}
else if (p["condition"].type() == Object) {
request->query = p["condition"].embeddedObject().getOwned();
}
else if (p["query"].type() == Object) {
request->query = p["query"].embeddedObject().getOwned();
}
else if (p["q"].type() == Object) {
request->query = p["q"].embeddedObject().getOwned();
}
if (p["key"].type() == Object) {
request->keyPattern = p["key"].embeddedObjectUserCheck().getOwned();
if (!p["$keyf"].eoo()) {
return Status(ErrorCodes::BadValue, "can't have key and $keyf");
}
}
else if (!p["$keyf"].eoo()) {
request->keyFunctionCode = p["$keyf"]._asCode();
}
else {
// No key specified. Use the entire object as the key.
}
BSONElement reduce = p["$reduce"];
if (reduce.eoo()) {
return Status(ErrorCodes::BadValue, "$reduce has to be set");
}
request->reduceCode = reduce._asCode();
if (reduce.type() == CodeWScope) {
request->reduceScope = reduce.codeWScopeScopeDataUnsafe();
}
if (p["initial"].type() != Object) {
return Status(ErrorCodes::BadValue, "initial has to be an object");
}
request->initial = p["initial"].embeddedObject().getOwned();
if (!p["finalize"].eoo()) {
request->finalize = p["finalize"]._asCode();
}
return Status::OK();
}
示例3: csvString
// Gets the string representation of a BSON object that can be correctly written to a CSV file
string csvString (const BSONElement& object) {
const char* binData; // Only used with BinData type
switch (object.type()) {
case MinKey:
return "$MinKey";
case MaxKey:
return "$MaxKey";
case NumberInt:
case NumberDouble:
case NumberLong:
case Bool:
return object.toString(false);
case String:
case Symbol:
return csvEscape(object.toString(false), true);
case Object:
return csvEscape(object.jsonString(Strict, false));
case Array:
return csvEscape(object.jsonString(Strict, false));
case BinData:
int len;
binData = object.binDataClean(len);
return toHex(binData, len);
case jstOID:
return "ObjectID(" + object.OID().toString() + ")"; // OIDs are always 24 bytes
case Date:
return timeToISOString(object.Date() / 1000);
case Timestamp:
return csvEscape(object.jsonString(Strict, false));
case RegEx:
return csvEscape("/" + string(object.regex()) + "/" + string(object.regexFlags()));
case Code:
return csvEscape(object.toString(false));
case CodeWScope:
if (string(object.codeWScopeScopeDataUnsafe()) == "") {
return csvEscape(object.toString(false));
} else {
return csvEscape(object.jsonString(Strict, false));
}
case EOO:
case Undefined:
case DBRef:
case jstNULL:
cerr << "Invalid BSON object type for CSV output: " << object.type() << endl;
return "";
}
// Can never get here
verify(false);
return "";
}
示例4: parseWhere
StatusWithMatchExpression WhereCallbackReal::parseWhere(const BSONElement& where) const {
if (!globalScriptEngine)
return StatusWithMatchExpression(ErrorCodes::BadValue,
"no globalScriptEngine in $where parsing");
auto_ptr<WhereMatchExpression> exp(new WhereMatchExpression(_txn));
if (where.type() == String || where.type() == Code) {
Status s = exp->init(_dbName, where.valuestr(), BSONObj());
if (!s.isOK())
return StatusWithMatchExpression(s);
return StatusWithMatchExpression(exp.release());
}
if (where.type() == CodeWScope) {
Status s =
exp->init(_dbName, where.codeWScopeCode(), BSONObj(where.codeWScopeScopeDataUnsafe()));
if (!s.isOK())
return StatusWithMatchExpression(s);
return StatusWithMatchExpression(exp.release());
}
return StatusWithMatchExpression(ErrorCodes::BadValue, "$where got bad type");
}
示例5: dbEval
bool dbEval(const string& dbName, BSONObj& cmd, BSONObjBuilder& result, string& errmsg) {
BSONElement e = cmd.firstElement();
uassert( 10046 , "eval needs Code" , 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:
verify(0);
}
verify( code );
if ( ! globalScriptEngine ) {
errmsg = "db side execution is disabled";
return false;
}
auto_ptr<Scope> s = globalScriptEngine->getPooledScope( dbName, "dbeval" );
ScriptingFunction f = s->createFunction(code);
if ( f == 0 ) {
errmsg = (string)"compile failed: " + s->getError();
return false;
}
if ( e.type() == CodeWScope )
s->init( e.codeWScopeScopeDataUnsafe() );
s->localConnect( dbName.c_str() );
BSONObj args;
{
BSONElement argsElement = cmd.getField("args");
if ( argsElement.type() == Array ) {
args = argsElement.embeddedObject();
if ( edebug ) {
out() << "args:" << args.toString() << endl;
out() << "code:\n" << code << endl;
}
}
}
int res;
{
Timer t;
res = s->invoke(f, &args, 0, cmdLine.quota ? 10 * 60 * 1000 : 0 );
int m = t.millis();
if ( m > cmdLine.slowMS ) {
out() << "dbeval slow, time: " << dec << m << "ms " << dbName << endl;
if ( m >= 1000 ) log() << code << endl;
else OCCASIONALLY log() << code << endl;
}
}
if (res || s->isLastRetNativeCode()) {
result.append("errno", (double) res);
errmsg = "invoke failed: ";
if (s->isLastRetNativeCode())
errmsg += "cannot return native function";
else
errmsg += s->getError();
return false;
}
s->append( result , "retval" , "__returnValue" );
return true;
}
示例6: run
bool run(const string& dbname, BSONObj& jsobj, int, string& errmsg, BSONObjBuilder& result, bool fromRepl ) {
if ( !globalScriptEngine ) {
errmsg = "server-side JavaScript execution is disabled";
return false;
}
/* db.$cmd.findOne( { group : <p> } ) */
const BSONObj& p = jsobj.firstElement().embeddedObjectUserCheck();
BSONObj q;
if ( p["cond"].type() == Object )
q = p["cond"].embeddedObject();
else if ( p["condition"].type() == Object )
q = p["condition"].embeddedObject();
else
q = getQuery( p );
if ( p["ns"].type() != String ) {
errmsg = "ns has to be set";
return false;
}
string ns = dbname + "." + p["ns"].String();
BSONObj key;
string keyf;
if ( p["key"].type() == Object ) {
key = p["key"].embeddedObjectUserCheck();
if ( ! p["$keyf"].eoo() ) {
errmsg = "can't have key and $keyf";
return false;
}
}
else if ( p["$keyf"].type() ) {
keyf = p["$keyf"]._asCode();
}
else {
// no key specified, will use entire object as key
}
BSONElement reduce = p["$reduce"];
if ( reduce.eoo() ) {
errmsg = "$reduce has to be set";
return false;
}
BSONElement initial = p["initial"];
if ( initial.type() != Object ) {
errmsg = "initial has to be an object";
return false;
}
string finalize;
if (p["finalize"].type())
finalize = p["finalize"]._asCode();
return group( dbname , ns , q ,
key , keyf , reduce._asCode() , reduce.type() != CodeWScope ? 0 : reduce.codeWScopeScopeDataUnsafe() ,
initial.embeddedObject() , finalize ,
errmsg , result );
}