55
66#include < rocksdb/db.h>
77
8+ #include " compact_range_options.hpp"
89#include " db.hpp"
910#include " options.hpp"
1011#include " read_options.hpp"
@@ -17,32 +18,33 @@ namespace RocksDB {
1718 ROCKSDB_NAMESPACE ::DB * db;
1819 ROCKSDB_NAMESPACE ::ReadOptions read_options;
1920 ROCKSDB_NAMESPACE ::WriteOptions write_options;
20- // ROCKSDB_NAMESPACE::CompactRangeOptions compact_range_options;
21+ ROCKSDB_NAMESPACE ::CompactRangeOptions compact_range_options;
2122 };
2223
2324 RocksDB::RocksDB (
2425 std::filesystem::path path,
25- const Options& options,
26- const ReadOptions& read_options,
27- const WriteOptions& write_options)
28- // CompactRangeOptions& compact_range_options)
26+ Options& & options,
27+ ReadOptions& & read_options,
28+ WriteOptions&& write_options,
29+ CompactRangeOptions& & compact_range_options)
2930 {
3031 // Expand dots and symbolic links
3132 path = std::filesystem::absolute (path);
3233
3334 std::unique_ptr<ROCKSDB_NAMESPACE ::DB > db = nullptr ;
34- auto status = ROCKSDB_NAMESPACE::DB::Open (*options._impl , path.string (), &db);
35+ auto status = ROCKSDB_NAMESPACE::DB::Open (*options.borrow () , path.string (), &db);
3536 if (status.IsCorruption ()) {
36- ROCKSDB_NAMESPACE::RepairDB (path.string (), *options._impl );
37- status = ROCKSDB_NAMESPACE::DB::Open (*options._impl , path.string (), &db);
37+ ROCKSDB_NAMESPACE::RepairDB (path.string (), *options.borrow () );
38+ status = ROCKSDB_NAMESPACE::DB::Open (*options.borrow () , path.string (), &db);
3839 }
3940 if (!status.ok ()) {
4041 throw RocksDBException (status.ToString ());
4142 }
4243 _impl = new RocksDBImpl {
4344 db.release (),
44- *read_options._impl ,
45- *write_options._impl ,
45+ *read_options.steal (),
46+ *write_options.steal (),
47+ *compact_range_options.steal ()
4648 };
4749 }
4850
@@ -55,11 +57,12 @@ namespace RocksDB {
5557 [create_if_missing, compression_type]() {
5658 Options options;
5759 options.set_create_if_missing (create_if_missing);
58- options._impl -> compression = static_cast < ROCKSDB_NAMESPACE ::CompressionType> (compression_type);
60+ options.set_compression_type (compression_type);
5961 return options;
6062 }(),
6163 ReadOptions (),
62- WriteOptions ())
64+ WriteOptions (),
65+ CompactRangeOptions ())
6366 {
6467 Options options;
6568 ReadOptions read_options;
@@ -166,27 +169,51 @@ namespace RocksDB {
166169 }
167170 }
168171
169- // void RocksDB::compact_range(std::optional<std::string_view> begin, std::optional<std::string_view> end)
170- // {
171- // if (!_impl) {
172- // throw std::runtime_error("RocksDB has been closed");
173- // }
174- // _impl->db->CompactRange(
175- // _impl->compact_range_options,
176- // begin ? *begin : nullptr,
177- // end ? *end : nullptr);
178- // }
172+ void RocksDB::compact_range (std::optional<std::string_view> begin, std::optional<std::string_view> end)
173+ {
174+ if (!_impl) {
175+ throw std::runtime_error (" RocksDB has been closed" );
176+ }
177+ if (begin) {
178+ ROCKSDB_NAMESPACE ::Slice begin_slice = *begin;
179+ if (end) {
180+ ROCKSDB_NAMESPACE ::Slice end_slice = *end;
181+ _impl->db ->CompactRange (
182+ _impl->compact_range_options ,
183+ &begin_slice,
184+ &end_slice);
185+ } else {
186+ _impl->db ->CompactRange (
187+ _impl->compact_range_options ,
188+ &begin_slice,
189+ nullptr );
190+ }
191+ } else {
192+ if (end) {
193+ ROCKSDB_NAMESPACE ::Slice end_slice = *end;
194+ _impl->db ->CompactRange (
195+ _impl->compact_range_options ,
196+ nullptr ,
197+ &end_slice);
198+ } else {
199+ _impl->db ->CompactRange (
200+ _impl->compact_range_options ,
201+ nullptr ,
202+ nullptr );
203+ }
204+ }
205+ }
179206
180- // void RocksDB::compact()
181- // {
182- // if (!_impl) {
183- // throw std::runtime_error("RocksDB has been closed");
184- // }
185- // _impl->db->CompactRange(
186- // _impl->compact_range_options,
187- // nullptr,
188- // nullptr);
189- // }
207+ void RocksDB::compact ()
208+ {
209+ if (!_impl) {
210+ throw std::runtime_error (" RocksDB has been closed" );
211+ }
212+ _impl->db ->CompactRange (
213+ _impl->compact_range_options ,
214+ nullptr ,
215+ nullptr );
216+ }
190217
191218} // namespace RocksDB
192219} // namespace Amulet
0 commit comments