Class: RocksDB
- Inherits:
-
Object
show all
- Defined in:
- lib/rocksdb.rb,
lib/rocksdb/version.rb
Defined Under Namespace
Modules: Lib
Classes: ClosedError, ClosedState, Error
Constant Summary
collapse
- ENCODING =
"UTF-8"
- VERSION =
"0.2.1"
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(path) ⇒ RocksDB
Returns a new instance of RocksDB.
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/rocksdb.rb', line 57
def initialize(path)
@create_options = FFI::AutoPointer.new(Lib.rocksdb_options_create, Lib.method(:rocksdb_options_destroy))
Lib.rocksdb_options_set_create_if_missing(@create_options, 1)
@read_options = FFI::AutoPointer.new(Lib.rocksdb_readoptions_create, Lib.method(:rocksdb_readoptions_destroy))
@write_options = FFI::AutoPointer.new(Lib.rocksdb_writeoptions_create, Lib.method(:rocksdb_writeoptions_destroy))
@flush_options = FFI::AutoPointer.new(Lib.rocksdb_flushoptions_create, Lib.method(:rocksdb_flushoptions_destroy))
@closed_state = ClosedState.new(true)
@closed = true
open(path)
end
|
Class Method Details
.open(path) ⇒ Object
76
77
78
|
# File 'lib/rocksdb.rb', line 76
def self.open(path)
new(path)
end
|
Instance Method Details
#close ⇒ Object
132
133
134
135
136
137
138
139
|
# File 'lib/rocksdb.rb', line 132
def close
return if @closed
Lib.rocksdb_close(@db)
@closed_state.value = true
@closed = true
end
|
#delete(key) ⇒ Object
124
125
126
127
128
129
130
|
# File 'lib/rocksdb.rb', line 124
def delete(key)
raise(ClosedError, "Database is closed") if @closed
error = FFI::MemoryPointer.new(:pointer, 1)
Lib.rocksdb_delete(@db, @write_options, key, key.bytesize, error)
check_error(error)
end
|
#each ⇒ Object
Also known as:
each_pair
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
# File 'lib/rocksdb.rb', line 141
def each
raise(ClosedError, "Database is closed") if @closed
return enum_for(__method__) unless block_given?
iterate do |iterator|
key_length = FFI::MemoryPointer.new(:size_t, 1)
key = read_string(Lib.rocksdb_iter_key(iterator, key_length), key_length)
value_length = FFI::MemoryPointer.new(:size_t, 1)
value = read_string(Lib.rocksdb_iter_value(iterator, value_length), value_length)
yield(key, value)
end
end
|
#each_key ⇒ Object
159
160
161
162
163
164
165
166
167
168
169
170
|
# File 'lib/rocksdb.rb', line 159
def each_key
raise(ClosedError, "Database is closed") if @closed
return enum_for(__method__) unless block_given?
iterate do |iterator|
key_length = FFI::MemoryPointer.new(:size_t, 1)
key = read_string(Lib.rocksdb_iter_key(iterator, key_length), key_length)
yield(key)
end
end
|
#each_prefix(prefix) ⇒ Object
172
173
174
175
176
177
178
179
180
181
182
183
|
# File 'lib/rocksdb.rb', line 172
def each_prefix(prefix)
raise(ClosedError, "Database is closed") if @closed
return enum_for(__method__, prefix) unless block_given?
iterate_prefix(prefix) do |key, iterator|
value_length = FFI::MemoryPointer.new(:size_t, 1)
value = read_string(Lib.rocksdb_iter_value(iterator, value_length), value_length)
yield(key, value)
end
end
|
#flush ⇒ Object
91
92
93
94
95
96
97
|
# File 'lib/rocksdb.rb', line 91
def flush
raise(ClosedError, "Database is closed") if @closed
error = FFI::MemoryPointer.new(:pointer, 1)
Lib.rocksdb_flush(@db, @flush_options, error)
check_error(error)
end
|
#get(key) ⇒ Object
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
# File 'lib/rocksdb.rb', line 107
def get(key)
raise(ClosedError, "Database is closed") if @closed
length = FFI::MemoryPointer.new(:size_t, 1)
error = FFI::MemoryPointer.new(:pointer, 1)
res = Lib.rocksdb_get(@db, @read_options, key, key.bytesize, length, error)
check_error(error)
return if res.null?
value = read_string(res, length)
Lib.rocksdb_free(res)
value
end
|
#open(path) ⇒ Object
80
81
82
83
84
85
86
87
88
89
|
# File 'lib/rocksdb.rb', line 80
def open(path)
close
error = FFI::MemoryPointer.new(:pointer, 1)
@db = FFI::AutoPointer.new(Lib.rocksdb_open(@create_options, path, error), Lib.auto_close(@closed_state))
check_error(error)
@closed_state.value = false
@closed = false
end
|
#put(key, value) ⇒ Object
99
100
101
102
103
104
105
|
# File 'lib/rocksdb.rb', line 99
def put(key, value)
raise(ClosedError, "Database is closed") if @closed
error = FFI::MemoryPointer.new(:pointer, 1)
Lib.rocksdb_put(@db, @write_options, key, key.bytesize, value, value.bytesize, error)
check_error(error)
end
|