rocksdb-ffi 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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