rocksdb-ffi 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 418f08a08ef63ebd020e564c356caffe4b1a0d5b7369671f593c688f3fe1a71a
4
- data.tar.gz: 3eeafe7ffc7fc2ca09e97a21584e3d6a90dabf788373fc9205b99bd1cf724bd8
3
+ metadata.gz: 691b849562ba32f10bb834756ddbc9a7bae89af2b06f51d272fcde575eeb23e4
4
+ data.tar.gz: b8b66067cd541f59d856aa915d7737f515164349e68ac03c694e5b3280fd0e19
5
5
  SHA512:
6
- metadata.gz: 5473bb61e2338c41efedb1af337640d6ca070395c87f933bab5ce3117807594301eebf55cfbbb6a9eb8f12828de267e1ef300ead98797ba10f1a733210334f34
7
- data.tar.gz: 0171a8b32370ff31edff39398e27d1af0a81d98e267cf40494268f08faefd54f010c217c9db7513864e33ffb2fc716aff2eac56b147a3225271aa560b51f38f4
6
+ metadata.gz: 48ebff505cd2f1d3a98fb7371d5b2b5d121d262dff1e4366a79d8e01198d42a85c841a35b746d3782294643b543905839016a655eb7bd565b9fdc9aee346d5f5
7
+ data.tar.gz: 6385d064e46e67afefd3497ab5d4b676edf5dedda9eb1b276e40cf1e00d668833871c15eb5c34d86f91139146b95e53e637865e5ec0f8616cbac403f5ef426cf
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v0.2.0
4
+
5
+ * Add `#each_prefix`
6
+
3
7
  ## v0.1.0
4
8
 
5
9
  * Initial release
data/README.md CHANGED
@@ -36,12 +36,25 @@ rocksdb.each_key do |key|
36
36
  # ...
37
37
  end
38
38
 
39
+ rocksdb.each_prefix("prefix") do |key, value|
40
+ # ...
41
+ end
42
+
43
+ rocksdb.flush
44
+
39
45
  rocksdb.close
40
46
 
41
47
  rocksdb.open("/path/to/other/db")
42
48
  ```
43
49
 
44
- The library is tested against ruby 3.0/3.1/3.2 and rocksdb 7.2. That's it for now!
50
+ The library is tested against:
51
+
52
+ * ruby 2.7 with rocksdb 7.2
53
+ * ruby 3.0 with rocksdb 7.2
54
+ * ruby 3.1 with rocksdb 7.2
55
+ * ruby 3.1 with rocksdb 7.7
56
+ * ruby 3.2 with rocksdb 7.2
57
+ * ruby 3.2 with rocksdb 7.7
45
58
 
46
59
  ## Thread-safety
47
60
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class RocksDB
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/rocksdb.rb CHANGED
@@ -24,6 +24,7 @@ class RocksDB
24
24
  attach_function :rocksdb_create_iterator, [:pointer, :pointer], :pointer
25
25
  attach_function :rocksdb_iter_valid, [:pointer], :uchar
26
26
  attach_function :rocksdb_iter_seek_to_first, [:pointer], :void
27
+ attach_function :rocksdb_iter_seek, [:pointer, :string, :size_t], :void
27
28
  attach_function :rocksdb_iter_next, [:pointer], :void
28
29
  attach_function :rocksdb_iter_key, [:pointer, :pointer], :pointer
29
30
  attach_function :rocksdb_iter_value, [:pointer, :pointer], :pointer
@@ -164,6 +165,19 @@ class RocksDB
164
165
  end
165
166
  end
166
167
 
168
+ def each_prefix(prefix)
169
+ raise(ClosedError, "Database is closed") if @closed
170
+
171
+ return enum_for(__method__, prefix) unless block_given?
172
+
173
+ iterate_prefix(prefix) do |key, iterator|
174
+ value_length = FFI::MemoryPointer.new(:size_t, 1)
175
+ value = read_string(Lib.rocksdb_iter_value(iterator, value_length), value_length)
176
+
177
+ yield(key, value)
178
+ end
179
+ end
180
+
167
181
  private
168
182
 
169
183
  def iterate
@@ -182,6 +196,27 @@ class RocksDB
182
196
  end
183
197
  end
184
198
 
199
+ def iterate_prefix(prefix)
200
+ iterator = Lib.rocksdb_create_iterator(@db, @read_options)
201
+
202
+ begin
203
+ Lib.rocksdb_iter_seek(iterator, prefix, prefix.bytesize)
204
+
205
+ while Lib.rocksdb_iter_valid(iterator) != 0
206
+ key_length = FFI::MemoryPointer.new(:size_t, 1)
207
+ key = read_string(Lib.rocksdb_iter_key(iterator, key_length), key_length)
208
+
209
+ return unless key.start_with?(prefix)
210
+
211
+ yield(key, iterator)
212
+
213
+ Lib.rocksdb_iter_next(iterator)
214
+ end
215
+ ensure
216
+ Lib.rocksdb_iter_destroy(iterator)
217
+ end
218
+ end
219
+
185
220
  def check_error(error)
186
221
  pointer = error.read_pointer
187
222
  return if pointer.null?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rocksdb-ffi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Vetter
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-01 00:00:00.000000000 Z
11
+ date: 2023-03-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi