-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathPutWorker.cc
30 lines (24 loc) · 1.22 KB
/
PutWorker.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <nan.h>
#include "PutWorker.h"
#include "rocksdb/db.h"
PutWorker::PutWorker(Nan::Callback *callback, rocksdb::DB *db, rocksdb::WriteOptions options, rocksdb::ColumnFamilyHandle *family, v8::Local<v8::Object> &keyObj, v8::Local<v8::Object> &valueObj)
: AsyncWorker(callback), _db(db), _options(options), _family(family), _keyObj(keyObj) {
SaveToPersistent("key", keyObj);
SaveToPersistent("value", valueObj);
_key = node::Buffer::HasInstance(keyObj) ? rocksdb::Slice(node::Buffer::Data(keyObj), node::Buffer::Length(keyObj))
: rocksdb::Slice(std::string(*Nan::Utf8String(keyObj)));
_value = node::Buffer::HasInstance(valueObj) ? rocksdb::Slice(node::Buffer::Data(valueObj), node::Buffer::Length(valueObj))
: rocksdb::Slice(std::string(*Nan::Utf8String(valueObj)));
}
PutWorker::~PutWorker() {}
void PutWorker::Execute () {
_status = _db->Put(_options, _family, _key, _value);
}
void PutWorker::HandleOKCallback () {
Nan::HandleScope scope;
v8::Local<v8::Value> argv[1] = { Nan::Null() };
if (!_status.ok()) {
argv[0] = Nan::New<v8::String>(_status.getState()).ToLocalChecked();
}
callback->Call(1, argv);
}