diff --git a/src/database.cc b/src/database.cc index 2f6497af..f2c9e242 100644 --- a/src/database.cc +++ b/src/database.cc @@ -20,13 +20,13 @@ namespace leveldown { static v8::Persistent database_constructor; -Database::Database (NanUtf8String* location) : location(location) { - db = NULL; - currentIteratorId = 0; - pendingCloseWorker = NULL; - blockCache = NULL; - filterPolicy = NULL; -}; +Database::Database (v8::Handle from) + : location(new NanUtf8String(from)) + , db(NULL) + , currentIteratorId(0) + , pendingCloseWorker(NULL) + , blockCache(NULL) + , filterPolicy(NULL) {}; Database::~Database () { if (db != NULL) @@ -34,15 +34,12 @@ Database::~Database () { 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 ( @@ -131,9 +128,7 @@ void Database::CloseDatabase () { NAN_METHOD(LevelDOWN) { NanScope(); - v8::Local location; - if (args.Length() != 0 && args[0]->IsString()) - location = args[0].As(); + v8::Local location = args[0].As(); NanReturnValue(Database::NewInstance(location)); } @@ -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()); @@ -172,12 +165,8 @@ v8::Handle Database::NewInstance (v8::Local &location) { v8::Local constructorHandle = NanNew(database_constructor); - if (location.IsEmpty()) { - instance = constructorHandle->GetFunction()->NewInstance(0, NULL); - } else { - v8::Handle argv[] = { location }; - instance = constructorHandle->GetFunction()->NewInstance(1, argv); - } + v8::Handle argv[] = { location }; + instance = constructorHandle->GetFunction()->NewInstance(1, argv); return NanEscapeScope(instance); } diff --git a/src/database.h b/src/database.h index 2517d093..c6579cb1 100644 --- a/src/database.h +++ b/src/database.h @@ -48,7 +48,7 @@ class Database : public node::ObjectWrap { static void Init (); static v8::Handle NewInstance (v8::Local &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 @@ -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 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; diff --git a/src/database_async.cc b/src/database_async.cc index 5ed674e2..2a97a3d6 100644 --- a/src/database_async.cc +++ b/src/database_async.cc @@ -51,7 +51,7 @@ OpenWorker::~OpenWorker () { } void OpenWorker::Execute () { - SetStatus(database->OpenDatabase(options, **(database->Location()))); + SetStatus(database->OpenDatabase(options)); } /** CLOSE WORKER **/