Skip to content

Commit

Permalink
simplify location logic, let Database take care of allocation
Browse files Browse the repository at this point in the history
  • Loading branch information
ralphtheninja committed May 12, 2015
1 parent 5d5a7e9 commit fcdc461
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 30 deletions.
35 changes: 12 additions & 23 deletions src/database.cc
Original file line number Diff line number Diff line change
Expand Up @@ -20,29 +20,26 @@ namespace leveldown {

static v8::Persistent<v8::FunctionTemplate> database_constructor;

Database::Database (NanUtf8String* location) : location(location) {
db = NULL;
currentIteratorId = 0;
pendingCloseWorker = NULL;
blockCache = NULL;
filterPolicy = NULL;
};
Database::Database (v8::Handle<v8::Value> from)
: location(new NanUtf8String(from))
, db(NULL)
, currentIteratorId(0)
, pendingCloseWorker(NULL)
, blockCache(NULL)
, filterPolicy(NULL) {};

Database::~Database () {
if (db != NULL)
delete db;
delete location;
};

NanUtf8String* Database::Location() { return location; }

/* Calls from worker threads, NO V8 HERE *****************************/

leveldb::Status Database::OpenDatabase (
leveldb::Options* options
, std::string location
) {
return leveldb::DB::Open(*options, location, &db);
return leveldb::DB::Open(*options, **location, &db);
}

leveldb::Status Database::PutToDatabase (
Expand Down Expand Up @@ -131,9 +128,7 @@ void Database::CloseDatabase () {
NAN_METHOD(LevelDOWN) {
NanScope();

v8::Local<v8::String> location;
if (args.Length() != 0 && args[0]->IsString())
location = args[0].As<v8::String>();
v8::Local<v8::String> location = args[0].As<v8::String>();
NanReturnValue(Database::NewInstance(location));
}

Expand All @@ -156,9 +151,7 @@ void Database::Init () {
NAN_METHOD(Database::New) {
NanScope();

NanUtf8String* location = new NanUtf8String(args[0]);

Database* obj = new Database(location);
Database* obj = new Database(args[0]);
obj->Wrap(args.This());

NanReturnValue(args.This());
Expand All @@ -172,12 +165,8 @@ v8::Handle<v8::Value> Database::NewInstance (v8::Local<v8::String> &location) {
v8::Local<v8::FunctionTemplate> constructorHandle =
NanNew<v8::FunctionTemplate>(database_constructor);

if (location.IsEmpty()) {
instance = constructorHandle->GetFunction()->NewInstance(0, NULL);
} else {
v8::Handle<v8::Value> argv[] = { location };
instance = constructorHandle->GetFunction()->NewInstance(1, argv);
}
v8::Handle<v8::Value> argv[] = { location };
instance = constructorHandle->GetFunction()->NewInstance(1, argv);

return NanEscapeScope(instance);
}
Expand Down
11 changes: 5 additions & 6 deletions src/database.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ class Database : public node::ObjectWrap {
static void Init ();
static v8::Handle<v8::Value> NewInstance (v8::Local<v8::String> &location);

leveldb::Status OpenDatabase (leveldb::Options* options, std::string location);
leveldb::Status OpenDatabase (leveldb::Options* options);
leveldb::Status PutToDatabase (
leveldb::WriteOptions* options
, leveldb::Slice key
Expand All @@ -73,19 +73,18 @@ class Database : public node::ObjectWrap {
const leveldb::Snapshot* NewSnapshot ();
void ReleaseSnapshot (const leveldb::Snapshot* snapshot);
void CloseDatabase ();
NanUtf8String* Location();
void ReleaseIterator (uint32_t id);

Database (NanUtf8String* location);
Database (v8::Handle<v8::Value> from);
~Database ();

private:
leveldb::DB* db;
const leveldb::FilterPolicy* filterPolicy;
leveldb::Cache* blockCache;
NanUtf8String* location;
leveldb::DB* db;
uint32_t currentIteratorId;
void(*pendingCloseWorker);
leveldb::Cache* blockCache;
const leveldb::FilterPolicy* filterPolicy;

std::map< uint32_t, leveldown::Iterator * > iterators;

Expand Down
2 changes: 1 addition & 1 deletion src/database_async.cc
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ OpenWorker::~OpenWorker () {
}

void OpenWorker::Execute () {
SetStatus(database->OpenDatabase(options, **(database->Location())));
SetStatus(database->OpenDatabase(options));
}

/** CLOSE WORKER **/
Expand Down

0 comments on commit fcdc461

Please sign in to comment.