rocksdb-ruby 0.0.4 → 0.0.5

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
  SHA1:
3
- metadata.gz: 1657e705f6b3410500f057e41a4dfaf6d7f3ae96
4
- data.tar.gz: 3f9242836586a4c07914a9fc1db78e5ddff7bb75
3
+ metadata.gz: 9d4a29a50778a83f758f3ce02bf456fad90700d6
4
+ data.tar.gz: c38fef9d063b4efc8a3bc198c99bcfc94b5ec165
5
5
  SHA512:
6
- metadata.gz: f20b30b358b03df0f9894d9df49a1e9d32ab716716d66121be803323531b7600a92908fef68ade67832b60cb4f956f2ee8d54faa9dac488420330548bc23e6c3
7
- data.tar.gz: bbb78be94b274135da4626275a1c9053bbc25b989859363bb9ceba329749c395aa0a358fefa3eae83fde6ebf808ae6eca624b111a385bb0498b79d2cf2ae8aaf
6
+ metadata.gz: e34957be12c20bde777b651a3fbc78745a115ffc7e6b11cdf6a8589dd4646aefb9518e618b8e143428cdaf7092b0a2c8cc3e1cabed2ab2dd5193d11c1dd74380
7
+ data.tar.gz: 31881bfefa0ee01bf24f640f7c280cce52b2a4246e65fff61d179fc1438b62588a9619395ece4d4cbc1ef5df2521ef64aebaaac47a7d609285dc7c579c054993
data/README.md CHANGED
@@ -26,6 +26,7 @@ Or install it yourself as:
26
26
 
27
27
  require "RocksDB"
28
28
 
29
+ # Reads And Writes
29
30
  key = "test"
30
31
  value = "1"
31
32
  rocksdb = RocksDB::DB.new "/tmp/file"
@@ -33,11 +34,24 @@ Or install it yourself as:
33
34
  new_value = rocksdb.get(key)
34
35
  rocksdb.delete(key)
35
36
 
37
+ #Atomic Updates
36
38
  batch = RocksDB::Batch.new
37
39
  batch.delete("test:batch1")
38
40
  batch.put("test:batch2", "b")
39
41
  rocksdb.write(batch)
40
42
 
43
+ #Iteration
44
+ iterator = rocksdb.new_iterator
45
+
46
+ iterator.seek_to_first
47
+ while(iterator.valid)
48
+ iterator.value
49
+ iterator.key
50
+ iterator.next
51
+ end
52
+ iterator.close
53
+
54
+
41
55
  rocksdb.close
42
56
 
43
57
 
@@ -1,4 +1,7 @@
1
+ #include "rocksdb_rb.h"
1
2
  #include "rocksdb_db_rb.h"
3
+ #include "ruby/encoding.h"
4
+ #include <iostream>
2
5
 
3
6
  extern "C" {
4
7
  #include <ruby.h>
@@ -32,7 +35,6 @@ extern "C" {
32
35
  Check_Type(v_value, T_STRING);
33
36
 
34
37
  rocksdb_pointer* db_pointer;
35
- rocksdb::DB* db;
36
38
  Data_Get_Struct(self, rocksdb_pointer, db_pointer);
37
39
 
38
40
  std::string key = std::string((char*)RSTRING_PTR(v_key));
@@ -45,7 +47,6 @@ extern "C" {
45
47
 
46
48
  VALUE rocksdb_db_write(VALUE self, VALUE v_write){
47
49
  rocksdb_pointer* db_pointer;
48
- rocksdb::DB* db;
49
50
  Data_Get_Struct(self, rocksdb_pointer, db_pointer);
50
51
 
51
52
  rocksdb::WriteBatch *batch;
@@ -59,14 +60,13 @@ extern "C" {
59
60
  Check_Type(v_key, T_STRING);
60
61
 
61
62
  rocksdb_pointer* db_pointer;
62
- rocksdb::DB* db;
63
63
  Data_Get_Struct(self, rocksdb_pointer, db_pointer);
64
64
 
65
65
  std::string key = std::string((char*)RSTRING_PTR(v_key));
66
66
  std::string value;
67
67
  db_pointer->db->Get(rocksdb::ReadOptions(), key, &value);
68
-
69
- return rb_str_new(value.data(), value.size());
68
+
69
+ return rb_enc_str_new(value.data(), value.size(), rb_utf8_encoding());
70
70
  }
71
71
 
72
72
 
@@ -74,7 +74,6 @@ extern "C" {
74
74
  Check_Type(v_array, T_ARRAY);
75
75
 
76
76
  rocksdb_pointer* db_pointer;
77
- rocksdb::DB* db;
78
77
  Data_Get_Struct(self, rocksdb_pointer, db_pointer);
79
78
 
80
79
  long i;
@@ -100,7 +99,6 @@ extern "C" {
100
99
  Check_Type(v_key, T_STRING);
101
100
 
102
101
  rocksdb_pointer* db_pointer;
103
- rocksdb::DB* db;
104
102
  Data_Get_Struct(self, rocksdb_pointer, db_pointer);
105
103
 
106
104
  std::string key = std::string((char*)RSTRING_PTR(v_key));
@@ -111,10 +109,38 @@ extern "C" {
111
109
 
112
110
  VALUE rocksdb_db_close(VALUE self){
113
111
  rocksdb_pointer* db_pointer;
114
- rocksdb::DB* db;
115
112
  Data_Get_Struct(self, rocksdb_pointer, db_pointer);
116
113
 
117
114
  delete db_pointer->db;
118
115
  return Qnil;
119
116
  }
117
+
118
+ VALUE rocksdb_db_new_iterator(VALUE self){
119
+ rocksdb_pointer* db_pointer;
120
+ rocksdb_iterator_pointer* rocksdb_it;
121
+
122
+ VALUE klass;
123
+ Data_Get_Struct(self, rocksdb_pointer, db_pointer);
124
+
125
+ rocksdb::Iterator* it = db_pointer->db->NewIterator(rocksdb::ReadOptions());
126
+
127
+ klass = rb_class_new_instance(0, NULL, cRocksdb_iterator);
128
+
129
+ Data_Get_Struct(klass, rocksdb_iterator_pointer , rocksdb_it);
130
+ rocksdb_it->it = it;
131
+ return klass;
132
+ }
133
+
134
+ VALUE rocksdb_db_debug(VALUE self){
135
+
136
+ rocksdb_pointer* db_pointer;
137
+ Data_Get_Struct(self, rocksdb_pointer, db_pointer);
138
+ rocksdb::Iterator* it = db_pointer->db->NewIterator(rocksdb::ReadOptions());
139
+
140
+ for (it->SeekToFirst(); it->Valid(); it->Next()) {
141
+ std::cout << it->key().ToString() << ": " << it->value().ToString() << std::endl;
142
+ }
143
+ delete it;
144
+ return Qnil;
145
+ }
120
146
  }
@@ -3,10 +3,6 @@
3
3
 
4
4
  extern "C" {
5
5
  #include <ruby.h>
6
- struct rocksdb_pointer{
7
- rocksdb::DB* db;
8
- };
9
-
10
6
  VALUE rocksdb_db_init(int argc, VALUE* argv, VALUE self);
11
7
  VALUE db_alloc(VALUE klass);
12
8
  VALUE rocksdb_db_put(VALUE self, VALUE v_key, VALUE v_value);
@@ -15,5 +11,7 @@ extern "C" {
15
11
  VALUE rocksdb_db_multi_get(VALUE self, VALUE v_array);
16
12
  VALUE rocksdb_db_delete(VALUE self, VALUE v_key);
17
13
  VALUE rocksdb_db_close(VALUE self);
14
+ VALUE rocksdb_db_debug(VALUE self);
15
+ VALUE rocksdb_db_new_iterator(VALUE self);
18
16
 
19
17
  }
@@ -0,0 +1,63 @@
1
+ #include "rocksdb_rb.h"
2
+ #include "rocksdb_batch_rb.h"
3
+ #include "ruby/encoding.h"
4
+ #include <iostream>
5
+
6
+ extern "C" {
7
+ #include <ruby.h>
8
+
9
+ VALUE rocksdb_iterator_seek_to_first(VALUE klass){
10
+ rocksdb_iterator_pointer* rocksdb_it;
11
+ Data_Get_Struct(klass, rocksdb_iterator_pointer , rocksdb_it);
12
+ rocksdb_it->it->SeekToFirst();
13
+
14
+ return Qnil;
15
+ }
16
+ VALUE rocksdb_iterator_alloc(VALUE klass){
17
+ rocksdb_iterator_pointer* it = ALLOC(rocksdb_iterator_pointer);
18
+ return Data_Wrap_Struct(klass, 0, -1, it);
19
+ }
20
+
21
+ VALUE rocksdb_iterator_valid(VALUE klass){
22
+ rocksdb_iterator_pointer* rocksdb_it;
23
+ Data_Get_Struct(klass, rocksdb_iterator_pointer , rocksdb_it);
24
+ return rocksdb_it->it->Valid() ? Qtrue : Qfalse;
25
+ }
26
+
27
+ VALUE rocksdb_iterator_key(VALUE klass){
28
+ rocksdb_iterator_pointer* rocksdb_it;
29
+ std::string value;
30
+
31
+ Data_Get_Struct(klass, rocksdb_iterator_pointer , rocksdb_it);
32
+ value = rocksdb_it->it->key().ToString();
33
+
34
+ return rb_enc_str_new(value.data(), value.size(), rb_utf8_encoding());
35
+ }
36
+
37
+ VALUE rocksdb_iterator_value(VALUE klass){
38
+ rocksdb_iterator_pointer* rocksdb_it;
39
+ std::string value;
40
+
41
+ Data_Get_Struct(klass, rocksdb_iterator_pointer , rocksdb_it);
42
+ value = rocksdb_it->it->value().ToString();
43
+
44
+ return rb_enc_str_new(value.data(), value.size(), rb_utf8_encoding());
45
+
46
+ }
47
+
48
+ VALUE rocksdb_iterator_next(VALUE klass){
49
+ rocksdb_iterator_pointer* rocksdb_it;
50
+ Data_Get_Struct(klass, rocksdb_iterator_pointer , rocksdb_it);
51
+ rocksdb_it->it->Next();
52
+
53
+ return Qnil;
54
+ }
55
+
56
+ VALUE rocksdb_iterator_close(VALUE klass){
57
+ rocksdb_iterator_pointer* rocksdb_it;
58
+ Data_Get_Struct(klass, rocksdb_iterator_pointer , rocksdb_it);
59
+ delete rocksdb_it->it;
60
+
61
+ return Qnil;
62
+ }
63
+ }
@@ -0,0 +1,19 @@
1
+ #include "rocksdb/db.h"
2
+ #include "rocksdb/write_batch.h"
3
+
4
+ extern "C" {
5
+
6
+ #include <ruby.h>
7
+
8
+ typedef VALUE (*METHOD)(...);
9
+
10
+ VALUE rocksdb_iterator_seek_to_first(VALUE klass);
11
+ VALUE rocksdb_iterator_alloc(VALUE klass);
12
+ VALUE rocksdb_iterator_valid(VALUE klass);
13
+ VALUE rocksdb_iterator_key(VALUE klass);
14
+ VALUE rocksdb_iterator_value(VALUE klass);
15
+ VALUE rocksdb_iterator_next(VALUE klass);
16
+ VALUE rocksdb_iterator_close(VALUE klass);
17
+
18
+ }
19
+
@@ -1,13 +1,20 @@
1
1
  #include "rocksdb_rb.h"
2
2
  #include "rocksdb_db_rb.h"
3
3
  #include "rocksdb_batch_rb.h"
4
+ #include "rocksdb_status_rb.h"
5
+ #include "rocksdb_iterator_rb.h"
4
6
 
5
7
  extern "C" {
8
+ VALUE cRocksdb_iterator;
9
+
6
10
  void Init_RocksDB(){
7
-
11
+
8
12
  VALUE cRocksdb;
9
13
  VALUE cRocksdb_db;
10
14
  VALUE cRocksdb_write_batch;
15
+ VALUE cRocksdb_read_options;
16
+ VALUE cRocksdb_write_options;
17
+ VALUE cRocksdb_status;
11
18
 
12
19
  cRocksdb = rb_define_class("RocksDB", rb_cObject);
13
20
  cRocksdb_db = rb_define_class_under(cRocksdb, "DB", rb_cObject);
@@ -20,11 +27,27 @@ extern "C" {
20
27
  rb_define_method(cRocksdb_db, "multi_get", (METHOD)rocksdb_db_multi_get, 1);
21
28
  rb_define_method(cRocksdb_db, "delete", (METHOD)rocksdb_db_delete, 1);
22
29
  rb_define_method(cRocksdb_db, "close", (METHOD)rocksdb_db_close, 0);
30
+ rb_define_method(cRocksdb_db, "debug", (METHOD)rocksdb_db_debug, 0);
31
+ rb_define_method(cRocksdb_db, "new_iterator", (METHOD)rocksdb_db_new_iterator, 0);
23
32
 
24
33
  cRocksdb_write_batch = rb_define_class_under(cRocksdb, "Batch", rb_cObject);
25
34
  rb_define_alloc_func(cRocksdb_write_batch, batch_alloc);
26
35
  rb_define_private_method(cRocksdb_write_batch, "initialize", (METHOD)rocksdb_write_batch_init, 0);
27
36
  rb_define_method(cRocksdb_write_batch, "put", (METHOD)rocksdb_write_batch_put, 2);
28
37
  rb_define_method(cRocksdb_write_batch, "delete", (METHOD)rocksdb_write_batch_delete, 1);
38
+
39
+ cRocksdb_iterator = rb_define_class_under(cRocksdb, "Iterator", rb_cObject);
40
+ rb_define_alloc_func(cRocksdb_iterator, rocksdb_iterator_alloc);
41
+ rb_define_method(cRocksdb_iterator, "seek_to_first", (METHOD)rocksdb_iterator_seek_to_first, 0);
42
+ rb_define_method(cRocksdb_iterator, "valid", (METHOD)rocksdb_iterator_valid, 0);
43
+ rb_define_method(cRocksdb_iterator, "key", (METHOD)rocksdb_iterator_key, 0);
44
+ rb_define_method(cRocksdb_iterator, "value", (METHOD)rocksdb_iterator_value, 0);
45
+ rb_define_method(cRocksdb_iterator, "next", (METHOD)rocksdb_iterator_next, 0);
46
+ rb_define_method(cRocksdb_iterator, "close", (METHOD)rocksdb_iterator_close, 0);
47
+
48
+ cRocksdb_status = rb_define_class_under(cRocksdb, "Status", rb_cObject);
49
+ cRocksdb_read_options = rb_define_class_under(cRocksdb, "ReadOptions", rb_cObject);
50
+ cRocksdb_write_options = rb_define_class_under(cRocksdb, "WriteOptions", rb_cObject);
51
+
29
52
  }
30
53
  }
@@ -1,10 +1,24 @@
1
1
  #include "rocksdb/db.h"
2
2
  #include "rocksdb/write_batch.h"
3
3
 
4
+ #ifndef RUBY_ROCKSDB_H
5
+ #define RUBY_ROCKSDB_H 1
6
+
7
+
4
8
  extern "C" {
5
9
 
6
10
  #include <ruby.h>
11
+ extern VALUE cRocksdb_iterator;
7
12
 
8
13
  typedef VALUE (*METHOD)(...);
9
14
 
15
+ struct rocksdb_pointer{
16
+ rocksdb::DB* db;
17
+ };
18
+
19
+ struct rocksdb_iterator_pointer{
20
+ rocksdb::Iterator* it;
21
+ };
22
+
10
23
  }
24
+ #endif
@@ -0,0 +1,3 @@
1
+ extern "C" {
2
+ #include <ruby.h>
3
+ }
@@ -0,0 +1,3 @@
1
+ extern "C" {
2
+ #include <ruby.h>
3
+ }
@@ -1,5 +1,5 @@
1
1
  module Rocksdb
2
2
  module Ruby
3
- VERSION = "0.0.4"
3
+ VERSION = "0.0.5"
4
4
  end
5
5
  end
data/spec/db_spec.rb CHANGED
@@ -1,27 +1,28 @@
1
+ # -*- coding: utf-8 -*-
1
2
  require 'spec_helper'
2
3
  require "RocksDB"
3
4
 
4
5
  describe RocksDB do
5
6
  before do
6
- @rocksdb = RocksDB::DB.new "/tmp/file"
7
+ @rocksdb = RocksDB::DB.new "/tmp/file3"
7
8
  end
8
9
 
9
10
  it 'should get data' do
10
11
  @rocksdb.put("test:read", "1")
11
- @rocksdb.get("test:read").should eq "1"
12
+ expect(@rocksdb.get("test:read")).to eq "1"
12
13
  end
13
14
 
14
15
  it 'should put data' do
15
- @rocksdb.put("test:put", "2").should be_true
16
- @rocksdb.get("test:put").should eq "2"
16
+ expect(@rocksdb.put("test:put", "2")).to be_true
17
+ expect(@rocksdb.get("test:put")).to eq "2"
17
18
  end
18
19
 
19
20
  it 'should delete data' do
20
21
  @rocksdb.put("test:delete", "3")
21
- @rocksdb.get("test:delete").should eq "3"
22
+ expect(@rocksdb.get("test:delete")).to eq "3"
22
23
 
23
- @rocksdb.delete("test:delete").should be_true
24
- @rocksdb.get("test:delete").should be_empty
24
+ expect(@rocksdb.delete("test:delete")).to be_true
25
+ expect(@rocksdb.get("test:delete")).to be_empty
25
26
  end
26
27
 
27
28
  it 'should get multi data' do
@@ -29,23 +30,23 @@ describe RocksDB do
29
30
  @rocksdb.put("test:multi2", "b")
30
31
  @rocksdb.put("test:multi3", "c")
31
32
 
32
- @rocksdb.multi_get(["test:multi1", "test:multi2", "test:multi3"]).should eq ["a", "b", "c"]
33
+ expect(@rocksdb.multi_get(["test:multi1", "test:multi2", "test:multi3"])).to eq ["a", "b", "c"]
33
34
  end
34
35
 
35
36
  it 'should put data atomic update' do
36
37
  @rocksdb.put("test:batch1", "a")
37
38
  @rocksdb.delete("test:batch2")
38
39
 
39
- @rocksdb.get("test:batch1").should eq "a"
40
- @rocksdb.get("test:batch").should eq ""
40
+ expect(@rocksdb.get("test:batch1")).to eq "a"
41
+ expect(@rocksdb.get("test:batch")).to eq ""
41
42
 
42
43
  batch = RocksDB::Batch.new
43
44
  batch.delete("test:batch1")
44
45
  batch.put("test:batch2", "b")
45
46
  @rocksdb.write(batch)
46
47
 
47
- @rocksdb.get("test:batch1").should eq ""
48
- @rocksdb.get("test:batch2").should eq "b"
48
+ expect(@rocksdb.get("test:batch1")).to eq ""
49
+ expect(@rocksdb.get("test:batch2")).to eq "b"
49
50
  end
50
51
 
51
52
  it 'should use multiple db' do
@@ -54,17 +55,31 @@ describe RocksDB do
54
55
  @rocksdb.put("test:multi_db", "1")
55
56
  @rocksdb2.put("test:multi_db", "2")
56
57
 
57
- @rocksdb.get("test:multi_db").should eq "1"
58
- @rocksdb2.get("test:multi_db").should eq "2"
58
+ expect(@rocksdb.get("test:multi_db")).to eq "1"
59
+ expect(@rocksdb2.get("test:multi_db")).to eq "2"
59
60
  end
60
61
 
62
+ it 'should use japanese charactor' do
63
+ @rocksdb.put("test:japanese", "あいうえお")
61
64
 
62
- after do
63
- @rocksdb.close
65
+ expect(@rocksdb.get("test:japanese")).to eq "あいうえお"
64
66
  end
65
67
 
66
- #rocksdb::WriteOptions write_options;
67
- #write_options.sync = true;
68
+ it 'should use iterator' do
69
+ iterator = @rocksdb.new_iterator
70
+
71
+ iterator.seek_to_first
72
+
73
+ while(iterator.valid)
74
+ expect(iterator.value).not_to be_empty
75
+ expect(iterator.key).not_to be_empty
76
+ iterator.next
77
+ end
78
+ iterator.close
79
+ end
68
80
 
81
+ after do
82
+ @rocksdb.close
83
+ end
69
84
  end
70
85
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rocksdb-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Isamu Arimoto
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-28 00:00:00.000000000 Z
11
+ date: 2013-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -65,18 +65,22 @@ files:
65
65
  - LICENSE.txt
66
66
  - README.md
67
67
  - Rakefile
68
+ - ext/rocksdb/extconf.rb
68
69
  - ext/rocksdb/rocksdb_batch_rb.cc
69
70
  - ext/rocksdb/rocksdb_batch_rb.h
70
71
  - ext/rocksdb/rocksdb_db_rb.cc
71
72
  - ext/rocksdb/rocksdb_db_rb.h
73
+ - ext/rocksdb/rocksdb_iterator_rb.cc
74
+ - ext/rocksdb/rocksdb_iterator_rb.h
72
75
  - ext/rocksdb/rocksdb_rb.cc
73
76
  - ext/rocksdb/rocksdb_rb.h
77
+ - ext/rocksdb/rocksdb_status_rb.cc
78
+ - ext/rocksdb/rocksdb_status_rb.h
74
79
  - lib/rocksdb/ruby.rb
75
80
  - lib/rocksdb/ruby/version.rb
76
81
  - rocksdb-ruby.gemspec
77
82
  - spec/db_spec.rb
78
83
  - spec/spec_helper.rb
79
- - ext/rocksdb/extconf.rb
80
84
  homepage: https://github.com/isamu/rocksdb-ruby
81
85
  licenses:
82
86
  - mit