rocksdb-ruby 0.0.4 → 0.0.5

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
  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