Exemplo n.º 1
0
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));
    }
}
Exemplo n.º 2
0
Nan::NAN_METHOD_RETURN_TYPE TxnWrap::putCommon(Nan::NAN_METHOD_ARGS_TYPE info, void (*fillFunc)(Nan::NAN_METHOD_ARGS_TYPE info, MDB_val&), void (*freeData)(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.");
    }

    int flags = 0;
    MDB_val key, data;

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

    fillFunc(info, data);

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

    if (rc != 0) {
        return Nan::ThrowError(mdb_strerror(rc));
    }

    return;
}
Exemplo n.º 3
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);
}