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