1 module rocksdb.options; 2 3 import std.conv : to; 4 import std.string : fromStringz; 5 import core.stdc.stdlib : cfree = free; 6 7 import rocksdb.comparator, 8 rocksdb.snapshot : Snapshot, rocksdb_snapshot_t; 9 10 extern (C) { 11 struct rocksdb_options_t {}; 12 struct rocksdb_writeoptions_t {}; 13 struct rocksdb_readoptions_t {}; 14 15 rocksdb_options_t* rocksdb_options_create(); 16 void rocksdb_options_destroy(rocksdb_options_t*); 17 void rocksdb_options_increase_parallelism(rocksdb_options_t*, int total_threads); 18 void rocksdb_options_set_create_if_missing(rocksdb_options_t*, ubyte); 19 void rocksdb_options_set_error_if_exists(rocksdb_options_t*, ubyte); 20 void rocksdb_options_set_compression(rocksdb_options_t*, int); 21 void rocksdb_options_set_comparator(rocksdb_options_t*, rocksdb_comparator_t*); 22 void rocksdb_options_enable_statistics(rocksdb_options_t*); 23 char* rocksdb_options_statistics_get_string(rocksdb_options_t*); 24 25 rocksdb_writeoptions_t* rocksdb_writeoptions_create(); 26 void rocksdb_writeoptions_destroy(rocksdb_writeoptions_t*); 27 void rocksdb_writeoptions_set_sync(rocksdb_writeoptions_t*, ubyte); 28 void rocksdb_writeoptions_disable_WAL(rocksdb_writeoptions_t*, int); 29 30 rocksdb_readoptions_t* rocksdb_readoptions_create(); 31 void rocksdb_readoptions_destroy(rocksdb_readoptions_t*); 32 void rocksdb_readoptions_set_verify_checksums(rocksdb_readoptions_t*, ubyte); 33 void rocksdb_readoptions_set_fill_cache(rocksdb_readoptions_t*, ubyte); 34 void rocksdb_readoptions_set_snapshot(rocksdb_readoptions_t*, const rocksdb_snapshot_t*); 35 // void rocksdb_readoptions_set_iterate_upper_bound(rocksdb_readoptions_t*, const char*, size_t); 36 void rocksdb_readoptions_set_read_tier(rocksdb_readoptions_t*, int); 37 void rocksdb_readoptions_set_tailing(rocksdb_readoptions_t*, ubyte); 38 void rocksdb_readoptions_set_readahead_size(rocksdb_readoptions_t*, size_t); 39 } 40 41 enum CompressionType : ubyte { 42 NONE = 0x0, 43 SNAPPY = 0x1, 44 ZLIB = 0x2, 45 BZIP2 = 0x3, 46 LZ4 = 0x4, 47 LZ4HC = 0x5, 48 XPRESS = 0x6, 49 ZSTD = 0x7, 50 } 51 52 enum ReadTier : int { 53 READ_ALL = 0x0, 54 BLOCK_CACHE = 0x1, 55 PERSISTED = 0x2, 56 } 57 58 class WriteOptions { 59 rocksdb_writeoptions_t* opts; 60 61 this() { 62 this.opts = rocksdb_writeoptions_create(); 63 } 64 65 ~this() { 66 rocksdb_writeoptions_destroy(this.opts); 67 } 68 69 @property void sync(bool v) { 70 rocksdb_writeoptions_set_sync(this.opts, cast(ubyte)v); 71 } 72 73 @property void disableWAL(bool v) { 74 rocksdb_writeoptions_disable_WAL(this.opts, cast(int)v); 75 } 76 } 77 78 class ReadOptions { 79 rocksdb_readoptions_t* opts; 80 81 this() { 82 this.opts = rocksdb_readoptions_create(); 83 } 84 85 ~this() { 86 rocksdb_readoptions_destroy(this.opts); 87 } 88 89 @property void verifyChecksums(bool v) { 90 rocksdb_readoptions_set_verify_checksums(this.opts, cast(ubyte)v); 91 } 92 93 @property void fillCache(bool v) { 94 rocksdb_readoptions_set_fill_cache(this.opts, cast(ubyte)v); 95 } 96 97 @property void readTier(ReadTier tier) { 98 rocksdb_readoptions_set_read_tier(this.opts, tier); 99 } 100 101 @property void tailing(bool v) { 102 rocksdb_readoptions_set_tailing(this.opts, cast(ubyte)v); 103 } 104 105 @property void readAheadSize(size_t size) { 106 rocksdb_readoptions_set_readahead_size(this.opts, size); 107 } 108 109 @property void snapshot(Snapshot snap) { 110 rocksdb_readoptions_set_snapshot(this.opts, snap.snap); 111 } 112 } 113 114 class DBOptions { 115 rocksdb_options_t* opts; 116 117 this() { 118 this.opts = rocksdb_options_create(); 119 } 120 121 ~this() { 122 rocksdb_options_destroy(this.opts); 123 } 124 125 @property void paralleism(int totalThreads) { 126 rocksdb_options_increase_parallelism(this.opts, totalThreads); 127 } 128 129 @property void createIfMissing(bool value) { 130 rocksdb_options_set_create_if_missing(this.opts, cast(ubyte)value); 131 } 132 133 @property void errorIfExists(bool value) { 134 rocksdb_options_set_error_if_exists(this.opts, cast(ubyte)value); 135 } 136 137 @property void compression(CompressionType type) { 138 rocksdb_options_set_compression(this.opts, cast(int)type); 139 } 140 141 @property void comparator(Comparator cmp) { 142 rocksdb_options_set_comparator(this.opts, cmp.cmp); 143 } 144 145 void enableStatistics() { 146 rocksdb_options_enable_statistics(this.opts); 147 } 148 149 string getStatisticsString() { 150 char* cresult = rocksdb_options_statistics_get_string(this.opts); 151 string result = fromStringz(cresult).to!string; 152 cfree(cresult); 153 return result; 154 } 155 }