#include "port/port_stdcxx.h" #include "db/db_impl.h" #include #include #include #include #include #include #include "leveldb/db.h" #include "leveldb/env.h" #include "leveldb/options.h" #include "leveldb/slice.h" #include "leveldb/status.h" #include # ifndef test_DB_H # define test_DB_H namespace testdb { using namespace leveldb; enum IndexStatus{ Creating, Deleting, Exist, NotExist }; class testDB { private: leveldb::DB *kvDB_; // leveldb::DB *metaDB_; // leveldb::DB *indexDB_; std::string dbname_; const Options *options_; Env *env_; public: friend class Request; friend class testsReq; friend class iCreateReq; friend class iDeleteReq; friend class DeleteReq; friend class BatchReq; //用的时候必须testDB *db = new testDB()再open,不能像之前一样DB *db // testDB() : indexDB_(nullptr), kvDB_(nullptr), metaDB_(nullptr) {}; testDB() : kvDB_(nullptr) { } ~testDB(); /*lab1的要求,作为db派生类要实现的虚函数*/ Status Put(const WriteOptions &options, const Slice &key, const Slice &value) ; Status PutFields(const WriteOptions &, const Slice &key, const FieldArray &tests) ; Status Delete(const WriteOptions &options, const Slice &key) ; Status Write(const WriteOptions &options, WriteBatch *updates) ; Status Get(const ReadOptions &options, const Slice &key, std::string *value) ; Status GetFields(const ReadOptions &options, const Slice &key, FieldArray *tests) ; std::vector FindKeysByField(Field &test) ; Iterator * NewIterator(const ReadOptions &options) ; const Snapshot * GetSnapshot() ; void ReleaseSnapshot(const Snapshot *snapshot) ; bool GetProperty(const Slice &property, std::string *value) ; void GetApproximateSizes(const Range *range, int n, uint64_t *sizes) ; void CompactRange(const Slice *begin, const Slice *end) ; static Status OpentestDB(Options& options,const std::string& name,testDB** dbptr); }; Status DestroyDB(const std::string& name, const Options& options); } // end of namespace # endif