rocksdb-ruby 0.0.3 → 0.0.4
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 +4 -4
- data/ext/rocksdb/rocksdb_batch_rb.cc +38 -0
- data/ext/rocksdb/rocksdb_batch_rb.h +14 -0
- data/ext/rocksdb/rocksdb_db_rb.cc +120 -0
- data/ext/rocksdb/rocksdb_db_rb.h +19 -0
- data/ext/rocksdb/rocksdb_rb.cc +4 -139
- data/ext/rocksdb/rocksdb_rb.h +10 -0
- data/lib/rocksdb/ruby/version.rb +1 -1
- data/spec/db_spec.rb +14 -0
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1657e705f6b3410500f057e41a4dfaf6d7f3ae96
|
4
|
+
data.tar.gz: 3f9242836586a4c07914a9fc1db78e5ddff7bb75
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f20b30b358b03df0f9894d9df49a1e9d32ab716716d66121be803323531b7600a92908fef68ade67832b60cb4f956f2ee8d54faa9dac488420330548bc23e6c3
|
7
|
+
data.tar.gz: bbb78be94b274135da4626275a1c9053bbc25b989859363bb9ceba329749c395aa0a358fefa3eae83fde6ebf808ae6eca624b111a385bb0498b79d2cf2ae8aaf
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#include "rocksdb_batch_rb.h"
|
2
|
+
|
3
|
+
extern "C" {
|
4
|
+
#include <ruby.h>
|
5
|
+
|
6
|
+
VALUE batch_alloc(VALUE klass){
|
7
|
+
rocksdb::WriteBatch *batch = ALLOC(rocksdb::WriteBatch);
|
8
|
+
batch = new rocksdb::WriteBatch;
|
9
|
+
return Data_Wrap_Struct(klass, 0, -1, batch);
|
10
|
+
}
|
11
|
+
|
12
|
+
VALUE rocksdb_write_batch_init(){
|
13
|
+
return Qtrue;
|
14
|
+
}
|
15
|
+
VALUE rocksdb_write_batch_put(VALUE self, VALUE v_key, VALUE v_value){
|
16
|
+
Check_Type(v_key, T_STRING);
|
17
|
+
Check_Type(v_value, T_STRING);
|
18
|
+
|
19
|
+
rocksdb::WriteBatch *batch;
|
20
|
+
std::string key = std::string((char*)RSTRING_PTR(v_key));
|
21
|
+
std::string value = std::string((char*)RSTRING_PTR(v_value));
|
22
|
+
|
23
|
+
Data_Get_Struct(self, rocksdb::WriteBatch, batch);
|
24
|
+
batch->Put(key, value);
|
25
|
+
return Qnil;
|
26
|
+
}
|
27
|
+
VALUE rocksdb_write_batch_delete(VALUE self, VALUE v_key){
|
28
|
+
Check_Type(v_key, T_STRING);
|
29
|
+
|
30
|
+
rocksdb::WriteBatch *batch;
|
31
|
+
std::string key = std::string((char*)RSTRING_PTR(v_key));
|
32
|
+
|
33
|
+
Data_Get_Struct(self, rocksdb::WriteBatch, batch);
|
34
|
+
batch->Delete(key);
|
35
|
+
|
36
|
+
return Qnil;
|
37
|
+
}
|
38
|
+
}
|
@@ -0,0 +1,14 @@
|
|
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_write_batch_init();
|
11
|
+
VALUE batch_alloc(VALUE klass);
|
12
|
+
VALUE rocksdb_write_batch_put(VALUE self, VALUE v_key, VALUE v_value);
|
13
|
+
VALUE rocksdb_write_batch_delete(VALUE self, VALUE v_key);
|
14
|
+
}
|
@@ -0,0 +1,120 @@
|
|
1
|
+
#include "rocksdb_db_rb.h"
|
2
|
+
|
3
|
+
extern "C" {
|
4
|
+
#include <ruby.h>
|
5
|
+
|
6
|
+
VALUE rocksdb_db_init(int argc, VALUE* argv, VALUE self) {
|
7
|
+
VALUE v_db_file_name;
|
8
|
+
rocksdb_pointer* db_pointer;
|
9
|
+
rocksdb::DB* db;
|
10
|
+
|
11
|
+
Data_Get_Struct(self, rocksdb_pointer, db_pointer);
|
12
|
+
rb_scan_args(argc, argv, "01", &v_db_file_name);
|
13
|
+
Check_Type(v_db_file_name, T_STRING);
|
14
|
+
std::string db_file_name = std::string((char*)RSTRING_PTR(v_db_file_name));
|
15
|
+
|
16
|
+
rocksdb::Options options;
|
17
|
+
options.create_if_missing = true;
|
18
|
+
rocksdb::Status status = rocksdb::DB::Open(options, db_file_name, &db);
|
19
|
+
|
20
|
+
db_pointer->db = db;
|
21
|
+
|
22
|
+
return status.ok() ? Qtrue : Qfalse;
|
23
|
+
}
|
24
|
+
|
25
|
+
VALUE db_alloc(VALUE klass){
|
26
|
+
rocksdb_pointer* db_pointer = ALLOC(rocksdb_pointer);
|
27
|
+
return Data_Wrap_Struct(klass, 0, -1, db_pointer);
|
28
|
+
}
|
29
|
+
|
30
|
+
VALUE rocksdb_db_put(VALUE self, VALUE v_key, VALUE v_value) {
|
31
|
+
Check_Type(v_key, T_STRING);
|
32
|
+
Check_Type(v_value, T_STRING);
|
33
|
+
|
34
|
+
rocksdb_pointer* db_pointer;
|
35
|
+
rocksdb::DB* db;
|
36
|
+
Data_Get_Struct(self, rocksdb_pointer, db_pointer);
|
37
|
+
|
38
|
+
std::string key = std::string((char*)RSTRING_PTR(v_key));
|
39
|
+
std::string value = std::string((char*)RSTRING_PTR(v_value));
|
40
|
+
|
41
|
+
rocksdb::Status status = db_pointer->db->Put(rocksdb::WriteOptions(), key, value);
|
42
|
+
|
43
|
+
return status.ok() ? Qtrue : Qfalse;
|
44
|
+
}
|
45
|
+
|
46
|
+
VALUE rocksdb_db_write(VALUE self, VALUE v_write){
|
47
|
+
rocksdb_pointer* db_pointer;
|
48
|
+
rocksdb::DB* db;
|
49
|
+
Data_Get_Struct(self, rocksdb_pointer, db_pointer);
|
50
|
+
|
51
|
+
rocksdb::WriteBatch *batch;
|
52
|
+
Data_Get_Struct(v_write, rocksdb::WriteBatch, batch);
|
53
|
+
|
54
|
+
rocksdb::Status status = db_pointer->db->Write(rocksdb::WriteOptions(), batch);
|
55
|
+
return status.ok() ? Qtrue : Qfalse;
|
56
|
+
}
|
57
|
+
|
58
|
+
VALUE rocksdb_db_get(VALUE self, VALUE v_key){
|
59
|
+
Check_Type(v_key, T_STRING);
|
60
|
+
|
61
|
+
rocksdb_pointer* db_pointer;
|
62
|
+
rocksdb::DB* db;
|
63
|
+
Data_Get_Struct(self, rocksdb_pointer, db_pointer);
|
64
|
+
|
65
|
+
std::string key = std::string((char*)RSTRING_PTR(v_key));
|
66
|
+
std::string value;
|
67
|
+
db_pointer->db->Get(rocksdb::ReadOptions(), key, &value);
|
68
|
+
|
69
|
+
return rb_str_new(value.data(), value.size());
|
70
|
+
}
|
71
|
+
|
72
|
+
|
73
|
+
VALUE rocksdb_db_multi_get(VALUE self, VALUE v_array){
|
74
|
+
Check_Type(v_array, T_ARRAY);
|
75
|
+
|
76
|
+
rocksdb_pointer* db_pointer;
|
77
|
+
rocksdb::DB* db;
|
78
|
+
Data_Get_Struct(self, rocksdb_pointer, db_pointer);
|
79
|
+
|
80
|
+
long i;
|
81
|
+
VALUE *tmp = RARRAY_PTR(v_array);
|
82
|
+
long length = RARRAY_LEN(v_array);
|
83
|
+
std::vector<std::string> values(length);
|
84
|
+
std::vector<rocksdb::Slice> keys(length);
|
85
|
+
std::vector<rocksdb::Status> status;
|
86
|
+
|
87
|
+
for(i=0; i < length; i++){
|
88
|
+
keys[i] = rocksdb::Slice((char*)RSTRING_PTR(*tmp));
|
89
|
+
tmp++;
|
90
|
+
}
|
91
|
+
|
92
|
+
status = db_pointer->db->MultiGet(rocksdb::ReadOptions(),keys,&values);
|
93
|
+
for(i=0; i < length; i++){
|
94
|
+
RARRAY_PTR(v_array)[i] = rb_str_new(values[i].data(), values[i].size());
|
95
|
+
}
|
96
|
+
return v_array;
|
97
|
+
}
|
98
|
+
|
99
|
+
VALUE rocksdb_db_delete(VALUE self, VALUE v_key){
|
100
|
+
Check_Type(v_key, T_STRING);
|
101
|
+
|
102
|
+
rocksdb_pointer* db_pointer;
|
103
|
+
rocksdb::DB* db;
|
104
|
+
Data_Get_Struct(self, rocksdb_pointer, db_pointer);
|
105
|
+
|
106
|
+
std::string key = std::string((char*)RSTRING_PTR(v_key));
|
107
|
+
rocksdb::Status status = db_pointer->db->Delete(rocksdb::WriteOptions(), key);
|
108
|
+
|
109
|
+
return status.ok() ? Qtrue : Qfalse;
|
110
|
+
}
|
111
|
+
|
112
|
+
VALUE rocksdb_db_close(VALUE self){
|
113
|
+
rocksdb_pointer* db_pointer;
|
114
|
+
rocksdb::DB* db;
|
115
|
+
Data_Get_Struct(self, rocksdb_pointer, db_pointer);
|
116
|
+
|
117
|
+
delete db_pointer->db;
|
118
|
+
return Qnil;
|
119
|
+
}
|
120
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#include "rocksdb/db.h"
|
2
|
+
#include "rocksdb/write_batch.h"
|
3
|
+
|
4
|
+
extern "C" {
|
5
|
+
#include <ruby.h>
|
6
|
+
struct rocksdb_pointer{
|
7
|
+
rocksdb::DB* db;
|
8
|
+
};
|
9
|
+
|
10
|
+
VALUE rocksdb_db_init(int argc, VALUE* argv, VALUE self);
|
11
|
+
VALUE db_alloc(VALUE klass);
|
12
|
+
VALUE rocksdb_db_put(VALUE self, VALUE v_key, VALUE v_value);
|
13
|
+
VALUE rocksdb_db_write(VALUE self, VALUE v_write);
|
14
|
+
VALUE rocksdb_db_get(VALUE self, VALUE v_key);
|
15
|
+
VALUE rocksdb_db_multi_get(VALUE self, VALUE v_array);
|
16
|
+
VALUE rocksdb_db_delete(VALUE self, VALUE v_key);
|
17
|
+
VALUE rocksdb_db_close(VALUE self);
|
18
|
+
|
19
|
+
}
|
data/ext/rocksdb/rocksdb_rb.cc
CHANGED
@@ -1,29 +1,8 @@
|
|
1
|
-
#include "
|
2
|
-
#include "
|
3
|
-
#include
|
1
|
+
#include "rocksdb_rb.h"
|
2
|
+
#include "rocksdb_db_rb.h"
|
3
|
+
#include "rocksdb_batch_rb.h"
|
4
4
|
|
5
5
|
extern "C" {
|
6
|
-
|
7
|
-
#include <stdio.h>
|
8
|
-
#include <ruby.h>
|
9
|
-
|
10
|
-
typedef VALUE (*METHOD)(...);
|
11
|
-
|
12
|
-
VALUE rocksdb_db_init(int argc, VALUE* argv, VALUE self);
|
13
|
-
VALUE rocksdb_db_put(VALUE self, VALUE v_key, VALUE v_value);
|
14
|
-
VALUE rocksdb_db_write(VALUE self, VALUE v_write);
|
15
|
-
VALUE rocksdb_db_get(VALUE self, VALUE v_key);
|
16
|
-
VALUE rocksdb_db_multi_get(VALUE self, VALUE v_array);
|
17
|
-
VALUE rocksdb_db_delete(VALUE self, VALUE v_key);
|
18
|
-
VALUE rocksdb_db_close();
|
19
|
-
|
20
|
-
VALUE rocksdb_write_batch_init();
|
21
|
-
VALUE batch_alloc(VALUE klass);
|
22
|
-
VALUE rocksdb_write_batch_put(VALUE self, VALUE v_key, VALUE v_value);
|
23
|
-
VALUE rocksdb_write_batch_delete(VALUE self, VALUE v_key);
|
24
|
-
|
25
|
-
rocksdb::DB* db;
|
26
|
-
|
27
6
|
void Init_RocksDB(){
|
28
7
|
|
29
8
|
VALUE cRocksdb;
|
@@ -32,6 +11,7 @@ extern "C" {
|
|
32
11
|
|
33
12
|
cRocksdb = rb_define_class("RocksDB", rb_cObject);
|
34
13
|
cRocksdb_db = rb_define_class_under(cRocksdb, "DB", rb_cObject);
|
14
|
+
rb_define_alloc_func(cRocksdb_db, db_alloc);
|
35
15
|
|
36
16
|
rb_define_private_method(cRocksdb_db, "initialize", (METHOD)rocksdb_db_init, -1);
|
37
17
|
rb_define_method(cRocksdb_db, "put", (METHOD)rocksdb_db_put, 2);
|
@@ -47,119 +27,4 @@ extern "C" {
|
|
47
27
|
rb_define_method(cRocksdb_write_batch, "put", (METHOD)rocksdb_write_batch_put, 2);
|
48
28
|
rb_define_method(cRocksdb_write_batch, "delete", (METHOD)rocksdb_write_batch_delete, 1);
|
49
29
|
}
|
50
|
-
|
51
|
-
VALUE rocksdb_db_init(int argc, VALUE* argv, VALUE self) {
|
52
|
-
VALUE v_db_file_name;
|
53
|
-
|
54
|
-
rb_scan_args(argc, argv, "01", &v_db_file_name);
|
55
|
-
Check_Type(v_db_file_name, T_STRING);
|
56
|
-
std::string db_file_name = std::string((char*)RSTRING_PTR(v_db_file_name));
|
57
|
-
|
58
|
-
rocksdb::Options options;
|
59
|
-
options.create_if_missing = true;
|
60
|
-
rocksdb::Status status = rocksdb::DB::Open(options, db_file_name, &db);
|
61
|
-
|
62
|
-
return status.ok() ? Qtrue : Qfalse;
|
63
|
-
}
|
64
|
-
|
65
|
-
VALUE rocksdb_db_put(VALUE self, VALUE v_key, VALUE v_value) {
|
66
|
-
Check_Type(v_key, T_STRING);
|
67
|
-
Check_Type(v_value, T_STRING);
|
68
|
-
|
69
|
-
std::string key = std::string((char*)RSTRING_PTR(v_key));
|
70
|
-
std::string value = std::string((char*)RSTRING_PTR(v_value));
|
71
|
-
|
72
|
-
rocksdb::Status status = db->Put(rocksdb::WriteOptions(), key, value);
|
73
|
-
|
74
|
-
return status.ok() ? Qtrue : Qfalse;
|
75
|
-
}
|
76
|
-
|
77
|
-
VALUE rocksdb_db_write(VALUE self, VALUE v_write){
|
78
|
-
rocksdb::WriteBatch *batch;
|
79
|
-
Data_Get_Struct(v_write, rocksdb::WriteBatch, batch);
|
80
|
-
|
81
|
-
rocksdb::Status status = db->Write(rocksdb::WriteOptions(), batch);
|
82
|
-
return status.ok() ? Qtrue : Qfalse;
|
83
|
-
}
|
84
|
-
|
85
|
-
VALUE rocksdb_db_get(VALUE self, VALUE v_key){
|
86
|
-
Check_Type(v_key, T_STRING);
|
87
|
-
|
88
|
-
std::string key = std::string((char*)RSTRING_PTR(v_key));
|
89
|
-
std::string value;
|
90
|
-
db->Get(rocksdb::ReadOptions(), key, &value);
|
91
|
-
|
92
|
-
return rb_str_new(value.data(), value.size());
|
93
|
-
}
|
94
|
-
|
95
|
-
|
96
|
-
VALUE rocksdb_db_multi_get(VALUE self, VALUE v_array){
|
97
|
-
Check_Type(v_array, T_ARRAY);
|
98
|
-
|
99
|
-
long i;
|
100
|
-
VALUE *tmp = RARRAY_PTR(v_array);
|
101
|
-
long length = RARRAY_LEN(v_array);
|
102
|
-
std::vector<std::string> values(length);
|
103
|
-
std::vector<rocksdb::Slice> keys(length);
|
104
|
-
std::vector<rocksdb::Status> status;
|
105
|
-
|
106
|
-
for(i=0; i < length; i++){
|
107
|
-
keys[i] = rocksdb::Slice((char*)RSTRING_PTR(*tmp));
|
108
|
-
tmp++;
|
109
|
-
}
|
110
|
-
|
111
|
-
status = db->MultiGet(rocksdb::ReadOptions(),keys,&values);
|
112
|
-
for(i=0; i < length; i++){
|
113
|
-
RARRAY_PTR(v_array)[i] = rb_str_new(values[i].data(), values[i].size());
|
114
|
-
}
|
115
|
-
return v_array;
|
116
|
-
}
|
117
|
-
|
118
|
-
VALUE rocksdb_db_delete(VALUE self, VALUE v_key){
|
119
|
-
Check_Type(v_key, T_STRING);
|
120
|
-
|
121
|
-
std::string key = std::string((char*)RSTRING_PTR(v_key));
|
122
|
-
rocksdb::Status status = db->Delete(rocksdb::WriteOptions(), key);
|
123
|
-
|
124
|
-
return status.ok() ? Qtrue : Qfalse;
|
125
|
-
}
|
126
|
-
|
127
|
-
VALUE rocksdb_db_close(){
|
128
|
-
delete db;
|
129
|
-
return Qnil;
|
130
|
-
}
|
131
|
-
|
132
|
-
VALUE batch_alloc(VALUE klass){
|
133
|
-
rocksdb::WriteBatch *batch = ALLOC(rocksdb::WriteBatch);
|
134
|
-
batch = new rocksdb::WriteBatch;
|
135
|
-
return Data_Wrap_Struct(klass, 0, -1, batch);
|
136
|
-
}
|
137
|
-
|
138
|
-
VALUE rocksdb_write_batch_init(){
|
139
|
-
return Qtrue;
|
140
|
-
}
|
141
|
-
VALUE rocksdb_write_batch_put(VALUE self, VALUE v_key, VALUE v_value){
|
142
|
-
Check_Type(v_key, T_STRING);
|
143
|
-
Check_Type(v_value, T_STRING);
|
144
|
-
|
145
|
-
rocksdb::WriteBatch *batch;
|
146
|
-
std::string key = std::string((char*)RSTRING_PTR(v_key));
|
147
|
-
std::string value = std::string((char*)RSTRING_PTR(v_value));
|
148
|
-
|
149
|
-
Data_Get_Struct(self, rocksdb::WriteBatch, batch);
|
150
|
-
batch->Put(key, value);
|
151
|
-
return Qnil;
|
152
|
-
}
|
153
|
-
VALUE rocksdb_write_batch_delete(VALUE self, VALUE v_key){
|
154
|
-
Check_Type(v_key, T_STRING);
|
155
|
-
|
156
|
-
rocksdb::WriteBatch *batch;
|
157
|
-
std::string key = std::string((char*)RSTRING_PTR(v_key));
|
158
|
-
|
159
|
-
Data_Get_Struct(self, rocksdb::WriteBatch, batch);
|
160
|
-
batch->Delete(key);
|
161
|
-
|
162
|
-
return Qnil;
|
163
|
-
}
|
164
|
-
|
165
30
|
}
|
data/lib/rocksdb/ruby/version.rb
CHANGED
data/spec/db_spec.rb
CHANGED
@@ -48,9 +48,23 @@ describe RocksDB do
|
|
48
48
|
@rocksdb.get("test:batch2").should eq "b"
|
49
49
|
end
|
50
50
|
|
51
|
+
it 'should use multiple db' do
|
52
|
+
@rocksdb2 = RocksDB::DB.new "/tmp/file2"
|
53
|
+
|
54
|
+
@rocksdb.put("test:multi_db", "1")
|
55
|
+
@rocksdb2.put("test:multi_db", "2")
|
56
|
+
|
57
|
+
@rocksdb.get("test:multi_db").should eq "1"
|
58
|
+
@rocksdb2.get("test:multi_db").should eq "2"
|
59
|
+
end
|
60
|
+
|
61
|
+
|
51
62
|
after do
|
52
63
|
@rocksdb.close
|
53
64
|
end
|
54
65
|
|
66
|
+
#rocksdb::WriteOptions write_options;
|
67
|
+
#write_options.sync = true;
|
68
|
+
|
55
69
|
end
|
56
70
|
|
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
|
+
version: 0.0.4
|
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-
|
11
|
+
date: 2013-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -65,13 +65,18 @@ files:
|
|
65
65
|
- LICENSE.txt
|
66
66
|
- README.md
|
67
67
|
- Rakefile
|
68
|
-
- ext/rocksdb/
|
68
|
+
- ext/rocksdb/rocksdb_batch_rb.cc
|
69
|
+
- ext/rocksdb/rocksdb_batch_rb.h
|
70
|
+
- ext/rocksdb/rocksdb_db_rb.cc
|
71
|
+
- ext/rocksdb/rocksdb_db_rb.h
|
69
72
|
- ext/rocksdb/rocksdb_rb.cc
|
73
|
+
- ext/rocksdb/rocksdb_rb.h
|
70
74
|
- lib/rocksdb/ruby.rb
|
71
75
|
- lib/rocksdb/ruby/version.rb
|
72
76
|
- rocksdb-ruby.gemspec
|
73
77
|
- spec/db_spec.rb
|
74
78
|
- spec/spec_helper.rb
|
79
|
+
- ext/rocksdb/extconf.rb
|
75
80
|
homepage: https://github.com/isamu/rocksdb-ruby
|
76
81
|
licenses:
|
77
82
|
- mit
|