// getResult(id, objectWrapper): IMMEDIATE void queryGetResult(const Arguments & args) { REQUIRE_ARGS_LENGTH(2); v8::Isolate * isolate = args.GetIsolate(); QueryOperation * op = unwrapPointer<QueryOperation *>(args.Holder()); size_t id = args[0]->Uint32Value(); Handle<Object> wrapper = args[1]->ToObject(); QueryResultHeader * header = op->getResult(id); if(header) { if(header->data) { wrapper->Set(GET_KEY(K_data), LOCAL_BUFFER(node::Buffer::New(isolate, header->data, op->getResultRowSize(header->depth), doNotFreeQueryResultAtGC, 0))); } else { wrapper->Set(GET_KEY(K_data), Null(isolate)); } wrapper->Set(GET_KEY(K_level), v8::Uint32::New(isolate, header->depth)); wrapper->Set(GET_KEY(K_tag), v8::Uint32::New(isolate, header->tag)); args.GetReturnValue().Set(true); } else { args.GetReturnValue().Set(false); } }
// getResult(id, objectWrapper): IMMEDIATE Handle<Value> queryGetResult(const Arguments & args) { REQUIRE_ARGS_LENGTH(2); QueryOperation * op = unwrapPointer<QueryOperation *>(args.Holder()); size_t id = args[0]->Uint32Value(); Handle<Object> wrapper = args[1]->ToObject(); QueryResultHeader * header = op->getResult(id); if(header) { if(header->data) { node::Buffer *buff = node::Buffer::New(header->data, op->getResultRowSize(header->depth), doNotFreeQueryResultAtGC, 0); wrapper->Set(K_data, Persistent<Object>(buff->handle_)); } else { wrapper->Set(K_data, Null()); } wrapper->Set(K_level, Persistent<Value>(v8::Uint32::New(header->depth))); wrapper->Set(K_tag, Persistent<Value>(v8::Uint32::New(header->tag))); return True(); } return False(); }