tarantool16 0.0.7 → 0.0.8
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/README.md +2 -0
- data/lib/tarantool16/connection/common.rb +8 -0
- data/lib/tarantool16/consts.rb +2 -0
- data/lib/tarantool16/db.rb +24 -1
- data/lib/tarantool16/dumb_db.rb +6 -0
- data/lib/tarantool16/schema.rb +1 -1
- data/lib/tarantool16/version.rb +1 -1
- data/test/config.lua +8 -0
- data/test/test_dumb.rb +7 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63c6f3dd4aa811b1cb867865472ca56c2ebafb90
|
4
|
+
data.tar.gz: 009fceed5451625228f289889a4b000d6595e6ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 52ec4a7a31e37024fc0aac40f23812d6fa0a153526fd4eb5ca017c5d8bc4ea084a590e9ed0c1c6f043a85ff7485de956657ede835f81e89cc54cbc6907b04fc8
|
7
|
+
data.tar.gz: 2a82a91c5288ced4bdbe9f0e878464cc07aff7704314f398025b21785ee7a40291e5088c88144eac1f29b0a55a8864ee5900ff7a2bfe36c620c95d8a395b65fa
|
data/README.md
CHANGED
@@ -71,6 +71,8 @@ tar.update(:_space, {name: 'test'}, {format: [:=, [{name: :id, type: :num}, {nam
|
|
71
71
|
|
72
72
|
## Changelog
|
73
73
|
|
74
|
+
0.0.8 - Fix schema read from new tarantool versions
|
75
|
+
Implement UPSERT
|
74
76
|
0.0.7 - Implement EVAL, fix REPLACE
|
75
77
|
0.0.6 - DumbConnection supports timeouts
|
76
78
|
|
@@ -194,6 +194,14 @@ module Tarantool16
|
|
194
194
|
send_request(REQUEST_TYPE_UPDATE, req, cb)
|
195
195
|
end
|
196
196
|
|
197
|
+
def _upsert(space_no, index_no, tuple_key, ops, cb)
|
198
|
+
req = {IPROTO_SPACE_ID => space_no,
|
199
|
+
IPROTO_INDEX_ID => index_no,
|
200
|
+
IPROTO_TUPLE => tuple_key,
|
201
|
+
IPROTO_DEF_DUPLE => ops}
|
202
|
+
send_request(REQUEST_TYPE_UPSERT, req, cb)
|
203
|
+
end
|
204
|
+
|
197
205
|
def _call(name, args, cb)
|
198
206
|
req = {IPROTO_FUNCTION_NAME => name,
|
199
207
|
IPROTO_TUPLE => args}
|
data/lib/tarantool16/consts.rb
CHANGED
@@ -11,6 +11,7 @@ module Tarantool16
|
|
11
11
|
IPROTO_FUNCTION_NAME = 0x22
|
12
12
|
IPROTO_USER_NAME = 0x23
|
13
13
|
IPROTO_EXPR = 0x27
|
14
|
+
IPROTO_DEF_DUPLE = 0x28
|
14
15
|
IPROTO_DATA = 0x30
|
15
16
|
IPROTO_ERROR = 0x31
|
16
17
|
|
@@ -26,6 +27,7 @@ module Tarantool16
|
|
26
27
|
REQUEST_TYPE_CALL = 6
|
27
28
|
REQUEST_TYPE_AUTHENTICATE = 7
|
28
29
|
REQUEST_TYPE_EVAL = 8
|
30
|
+
REQUEST_TYPE_UPSERT = 9
|
29
31
|
REQUEST_TYPE_ERROR = 1 << 15
|
30
32
|
|
31
33
|
|
data/lib/tarantool16/db.rb
CHANGED
@@ -114,7 +114,14 @@ module Tarantool16
|
|
114
114
|
|
115
115
|
def _fill_indices(spaces, rows)
|
116
116
|
rows.
|
117
|
-
map{|row|
|
117
|
+
map{|row|
|
118
|
+
if row[4].is_a? Hash
|
119
|
+
# new format
|
120
|
+
[row[0], [row[2], row[1], row[3], row[5].map(&:first)]]
|
121
|
+
else
|
122
|
+
[row[0], [row[2], row[1], row[3], 6.step(row.size-1, 2).map{|i| row[i]}]]
|
123
|
+
end
|
124
|
+
}.
|
118
125
|
group_by{|sid, _| sid}.
|
119
126
|
each do |sid, inds|
|
120
127
|
sp = spaces[sid]
|
@@ -193,6 +200,22 @@ module Tarantool16
|
|
193
200
|
end
|
194
201
|
end
|
195
202
|
|
203
|
+
def _upsert(sno, ino, tuple_key, ops, need_hash, cb)
|
204
|
+
ino = 0 if ino.nil?
|
205
|
+
ops_good = ops.is_a?(Array) && ops.all?{|a| ops[1].is_a?(Integer)}
|
206
|
+
if sno.is_a?(Integer) && ino.is_a?(Integer) && tuple_key.is_a?(Array) && ops_good
|
207
|
+
return conn._upsert(sno, ino, tuple_key, ops, cb)
|
208
|
+
end
|
209
|
+
_with_space(sno, cb) do |sp|
|
210
|
+
_tuple = tuple_key.is_a?(Hash) ? sp.map_tuple(tuple_key) : tuple_key
|
211
|
+
sp.get_ino(ino, nil, ITERATOR_EQ, cb) do |_ino, _key|
|
212
|
+
_ops = ops_good ? ops : sp.map_ops(ops)
|
213
|
+
_cb = need_hash ? sp.wrap_cb(cb) : cb
|
214
|
+
conn._upsert(sp.sid, _ino, tuple_key, _ops, _cb)
|
215
|
+
end
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
196
219
|
def _call(name, args, cb)
|
197
220
|
conn._call(name, args, cb)
|
198
221
|
end
|
data/lib/tarantool16/dumb_db.rb
CHANGED
@@ -59,6 +59,12 @@ module Tarantool16
|
|
59
59
|
_update(sno, ino, key, ops, need_hash, RETURN_OR_RAISE)
|
60
60
|
end
|
61
61
|
|
62
|
+
def upsert(sno, tuple_key, ops, opts = {})
|
63
|
+
ino = opts[:index] || 0
|
64
|
+
need_hash = opts.fetch(:hash, Hash === tuple_key)
|
65
|
+
_upsert(sno, ino, tuple_key, ops, need_hash, RETURN_OR_RAISE)
|
66
|
+
end
|
67
|
+
|
62
68
|
def call(name, args)
|
63
69
|
_call(name, args, RETURN_OR_RAISE)
|
64
70
|
end
|
data/lib/tarantool16/schema.rb
CHANGED
data/lib/tarantool16/version.rb
CHANGED
data/test/config.lua
CHANGED
@@ -11,12 +11,20 @@ if not box.space.test then
|
|
11
11
|
local irtree = s1:create_index('point', {type = 'rtree', unique=false, parts = {3, 'ARRAY'}, if_not_exists = true})
|
12
12
|
local ipname = s1:create_index('id_name', {type = 'tree', parts = {1, 'NUM', 2, 'STR'}})
|
13
13
|
end
|
14
|
+
if not box.space.test1 then
|
15
|
+
local s2 = box.schema.space.create('test1', {id = 514, if_not_exists = true})
|
16
|
+
local ip = s2:create_index('primary', {type = 'hash', parts = {1, 'NUM'}, if_not_exists = true})
|
17
|
+
end
|
14
18
|
|
15
19
|
function reseed()
|
16
20
|
local s1 = box.space.test
|
17
21
|
s1:truncate()
|
18
22
|
s1:insert{1, "hello", {1, 2}, 100}
|
19
23
|
s1:insert{2, "world", {3, 4}, 200}
|
24
|
+
local s2 = box.space.test1
|
25
|
+
s2:truncate()
|
26
|
+
s2:insert{1, "hello", {1, 2}, 100}
|
27
|
+
s2:insert{2, "world", {3, 4}, 200}
|
20
28
|
end
|
21
29
|
|
22
30
|
pcall(function()
|
data/test/test_dumb.rb
CHANGED
@@ -59,6 +59,13 @@ describe 'DumbConnection' do
|
|
59
59
|
db.update(:test, "world", {1 => [':', 6, 0, '!']}, index: 1).must_equal [rwith(r2,1,"world!")]
|
60
60
|
end
|
61
61
|
|
62
|
+
it "should upsert" do
|
63
|
+
db.upsert(:test1, [1, 'hallo', [7,5], 999], [[:+, 3, 1]])
|
64
|
+
db.select(:test1, 1).must_equal [rwith(r1,3,101)]
|
65
|
+
db.upsert(:test1, r3, [[:+, 3, 1]])
|
66
|
+
db.select(:test1, 3).must_equal [r3]
|
67
|
+
end
|
68
|
+
|
62
69
|
it "should delete" do
|
63
70
|
db.delete(:test, 1).must_equal [r1]
|
64
71
|
db.delete(:test, "world", index: 1).must_equal [r2]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tarantool16
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sokolov Yura aka funny_falcon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|