fdb 6.0.14 → 6.0.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/fdbimpl.rb +1 -1
  3. data/lib/fdbtuple.rb +44 -9
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bc889788b138145161a6362d527f18e1fa591cb1
4
- data.tar.gz: 0293fa211a5a67b666f0114c0c0f684122163d92
3
+ metadata.gz: 1623c8895eed2ba5d05d65e2710ee7675f33bfeb
4
+ data.tar.gz: 022a06865f41c18e61dad70f34965b834b00cd78
5
5
  SHA512:
6
- metadata.gz: 7000c2698f6d488c0383fccf9a544e6481e1dd11ad91f010af735e173a7ee41be7769a1617689261f1fed79746f284dbca8df1e0e76599f6a2f8edea7de5fea7
7
- data.tar.gz: 8201385cb3381d6cb1e5db427376c4bd6fbf81884dbc8f4d5a049699f70108bf5c0e1ec483f6d00f881ad5a13cc6303e37e7f4950e0344c35191413c457440e9
6
+ metadata.gz: 27e4e4aa6b5e1c131f0fda38665a721c9a05e6f5e6e4307307bbed0198dc8b1e517d1721a3041287df255e636e1872e240371261f7e76437167ef75f752a6487
7
+ data.tar.gz: 6afd15e371296a0f5342572f7eba6a86c6d676f4c723f535860b4b89fd2dd8efbb235563f41ff971dc954b7ce767b5831a72e0e953067afecf2e44760ae12f70
data/lib/fdbimpl.rb CHANGED
@@ -170,7 +170,7 @@ module FDB
170
170
  Proc.new do || @setfunc.call(v[0], nil) end
171
171
  when String then
172
172
  Proc.new do |opt=nil| @setfunc.call(v[0], (opt.nil? ? opt : opt.encode('UTF-8')) ) end
173
- when Fixnum then
173
+ when Integer then
174
174
  Proc.new do |opt| @setfunc.call(v[0], [opt].pack("q<")) end
175
175
  else
176
176
  raise ArgumentError, "Don't know how to set options of type #{v[2].class}"
data/lib/fdbtuple.rb CHANGED
@@ -35,8 +35,8 @@ module FDB
35
35
  @@STRING_CODE = 0x02
36
36
  @@NESTED_CODE = 0x05
37
37
  @@INT_ZERO_CODE = 0x14
38
- @@POS_INT_END = 0x1c
39
- @@NEG_INT_START = 0x0c
38
+ @@POS_INT_END = 0x1d
39
+ @@NEG_INT_START = 0x0b
40
40
  @@FLOAT_CODE = 0x20
41
41
  @@DOUBLE_CODE = 0x21
42
42
  @@FALSE_CODE = 0x26
@@ -117,12 +117,28 @@ module FDB
117
117
  elsif code == @@STRING_CODE
118
118
  epos = find_terminator(v, pos+1)
119
119
  [v.slice(pos+1, epos-pos-1).gsub("\x00\xFF", "\x00").force_encoding("UTF-8"), epos+1]
120
- elsif code >= @@INT_ZERO_CODE && code <= @@POS_INT_END
120
+ elsif code >= @@INT_ZERO_CODE && code < @@POS_INT_END
121
121
  n = code - @@INT_ZERO_CODE
122
122
  [("\x00" * (8-n) + v.slice(pos+1, n)).unpack("Q>")[0], pos+n+1]
123
- elsif code >= @@NEG_INT_START and code < @@INT_ZERO_CODE
123
+ elsif code > @@NEG_INT_START and code < @@INT_ZERO_CODE
124
124
  n = @@INT_ZERO_CODE - code
125
125
  [("\x00" * (8-n) + v.slice(pos+1, n)).unpack("Q>")[0]-@@size_limits[n], pos+n+1]
126
+ elsif code == @@POS_INT_END
127
+ length = v.getbyte(pos+1)
128
+ val = 0
129
+ length.times do |i|
130
+ val = val << 8
131
+ val += v.getbyte(pos+2+i)
132
+ end
133
+ [val, pos+length+2]
134
+ elsif code == @@NEG_INT_START
135
+ length = v.getbyte(pos+1) ^ 0xff
136
+ val = 0
137
+ length.times do |i|
138
+ val = val << 8
139
+ val += v.getbyte(pos+2+i)
140
+ end
141
+ [val - (1 << (length*8)) + 1, pos+length+2]
126
142
  elsif code == @@FALSE_CODE
127
143
  [false, pos+1]
128
144
  elsif code == @@TRUE_CODE
@@ -182,15 +198,34 @@ module FDB
182
198
  raise ArgumentError, "unsupported encoding #{v.encoding.name}"
183
199
  end
184
200
  elsif v.kind_of? Integer
185
- raise RangeError, "value outside inclusive range -2**64+1 to 2**64-1" if v < -2**64+1 || v > 2**64-1
201
+ raise RangeError, "Integer magnitude is too large (more than 255 bytes)" if v < -2**2040+1 || v > 2**2040-1
186
202
  if v == 0
187
203
  @@INT_ZERO_CODE.chr
188
204
  elsif v > 0
189
- n = bisect_left( @@size_limits, v )
190
- (20+n).chr + [v].pack("Q>").slice(8-n, n)
205
+ if v > @@size_limits[-1]
206
+ length = (v.bit_length + 7) / 8
207
+ result = @@POS_INT_END.chr + length.chr
208
+ length.times do |i|
209
+ result << ((v >> (8 * (length-i-1))) & 0xff)
210
+ end
211
+ result
212
+ else
213
+ n = bisect_left( @@size_limits, v )
214
+ (@@INT_ZERO_CODE+n).chr + [v].pack("Q>").slice(8-n, n)
215
+ end
191
216
  else
192
- n = bisect_left( @@size_limits, -v )
193
- (20-n).chr + [@@size_limits[n]+v].pack("Q>").slice(8-n, n)
217
+ if -v > @@size_limits[-1]
218
+ length = ((-v).bit_length + 7) / 8
219
+ v += (1 << (length * 8)) - 1
220
+ result = @@NEG_INT_START.chr + (length ^ 0xff).chr
221
+ length.times do |i|
222
+ result << ((v >> (8 * (length-i-1))) & 0xff)
223
+ end
224
+ result
225
+ else
226
+ n = bisect_left( @@size_limits, -v )
227
+ (@@INT_ZERO_CODE-n).chr + [@@size_limits[n]+v].pack("Q>").slice(8-n, n)
228
+ end
194
229
  end
195
230
  elsif v.kind_of? TrueClass
196
231
  @@TRUE_CODE.chr
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fdb
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.14
4
+ version: 6.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - FoundationDB
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-24 00:00:00.000000000 Z
11
+ date: 2018-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi