示例#1
0
文件: txn.cpp 项目: a1arias/node-lmdb
Nan::NAN_METHOD_RETURN_TYPE TxnWrap::getCommon(Nan::NAN_METHOD_ARGS_TYPE info, Handle<Value> (*successFunc)(MDB_val&)) {
    Nan::HandleScope scope;

    TxnWrap *tw = Nan::ObjectWrap::Unwrap<TxnWrap>(info.This());
    DbiWrap *dw = Nan::ObjectWrap::Unwrap<DbiWrap>(info[0]->ToObject());

    if (!tw->txn) {
        return Nan::ThrowError("The transaction is already closed.");
    }

    MDB_val key, data;
    void (*freeKey)(MDB_val&) = argToKey(info[1], key, dw->keyIsUint32);
    if (!freeKey) {
        return;
    }

    int rc = mdb_get(tw->txn, dw->dbi, &key, &data);
    freeKey(key);

    if (rc == MDB_NOTFOUND) {
        return info.GetReturnValue().Set(Nan::Null());
    }
    else if (rc != 0) {
        return Nan::ThrowError(mdb_strerror(rc));
    }
    else {
      return info.GetReturnValue().Set(successFunc(data));
    }
}
示例#2
0
Nan::NAN_METHOD_RETURN_TYPE Token::OpenSession(Nan::NAN_METHOD_ARGS_TYPE info)
{
	Token* obj = ObjectWrap::Unwrap<Token>(info.This());

	std::shared_ptr<IKeyVEILSession> sessionPtr = obj->handle()->openSession();

	v8::Local<v8::Function> cons = Nan::New(Session::constructor());
	v8::Local<v8::Object> sessObj = Nan::NewInstance(cons).ToLocalChecked();
	Session* sess = ObjectWrap::Unwrap<Session>(sessObj);
	sess->handle(sessionPtr);
	info.GetReturnValue().Set(sessObj);
}