#ifndef DBWRAPPER_H #define DBWRAPPER_H #include #include #include "rocksdb/db.h" #include "rocksdb/slice.h" #include "rocksdb/options.h" using namespace v8; // Used to encapsulate a particular instance of an opened database. // // This object should not be used directly in C++; it exists solely to provide // a mapping from a JavaScript object to a C++ code that can use the RocksDB // API. class DBWrapper : public node::ObjectWrap { public: static void Init(Handle exports); private: explicit DBWrapper(); ~DBWrapper(); // Helper methods static bool HasFamilyNamed(std::string& name, DBWrapper* db); static bool AddToBatch(rocksdb::WriteBatch& batch, bool del, Handle array); static bool AddToBatch(rocksdb::WriteBatch& batch, bool del, Handle array, DBWrapper* db_wrapper, std::string cf); static Handle CompactRangeDefault(const v8::Arguments& args); static Handle CompactColumnFamily(const Arguments& args); static Handle CompactOptions(const Arguments& args); static Handle CompactAll(const Arguments& args); // C++ mappings of API methods static Persistent constructor; static Handle Open(const Arguments& args); static Handle New(const Arguments& args); static Handle Get(const Arguments& args); static Handle Put(const Arguments& args); static Handle Delete(const Arguments& args); static Handle Dump(const Arguments& args); static Handle WriteBatch(const Arguments& args); static Handle CreateColumnFamily(const Arguments& args); static Handle CompactRange(const Arguments& args); static Handle Close(const Arguments& args); // Internal fields rocksdb::Options options_; rocksdb::Status status_; rocksdb::DB* db_; std::unordered_map columnFamilies_; }; #endif