aerospike 2.11.0 → 2.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +50 -1
- data/README.md +1 -1
- data/lib/aerospike.rb +17 -4
- data/lib/aerospike/aerospike_exception.rb +7 -1
- data/lib/aerospike/atomic/atomic.rb +1 -1
- data/lib/aerospike/bin.rb +1 -1
- data/lib/aerospike/cdt/bit_operation.rb +376 -0
- data/lib/aerospike/cdt/bit_overflow_action.rb +46 -0
- data/lib/aerospike/cdt/bit_policy.rb +36 -0
- data/lib/aerospike/cdt/bit_resize_flags.rb +44 -0
- data/lib/aerospike/cdt/bit_write_flags.rb +51 -0
- data/lib/aerospike/cdt/context.rb +101 -0
- data/lib/aerospike/cdt/hll_operation.rb +200 -0
- data/lib/aerospike/cdt/hll_policy.rb +34 -0
- data/lib/aerospike/cdt/hll_write_flags.rb +53 -0
- data/lib/aerospike/cdt/list_operation.rb +127 -97
- data/lib/aerospike/cdt/list_sort_flags.rb +10 -2
- data/lib/aerospike/cdt/map_operation.rb +154 -93
- data/lib/aerospike/cdt/map_order.rb +1 -1
- data/lib/aerospike/cdt/map_policy.rb +1 -1
- data/lib/aerospike/cdt/map_return_type.rb +1 -1
- data/lib/aerospike/cdt/map_write_mode.rb +1 -1
- data/lib/aerospike/client.rb +33 -17
- data/lib/aerospike/cluster.rb +139 -17
- data/lib/aerospike/cluster/partition.rb +1 -1
- data/lib/aerospike/cluster/partition_parser.rb +169 -0
- data/lib/aerospike/cluster/rack_parser.rb +117 -0
- data/lib/aerospike/command/admin_command.rb +1 -1
- data/lib/aerospike/command/batch_direct_command.rb +2 -1
- data/lib/aerospike/command/batch_direct_exists_command.rb +1 -1
- data/lib/aerospike/command/batch_direct_node.rb +3 -3
- data/lib/aerospike/command/batch_index_command.rb +11 -2
- data/lib/aerospike/command/batch_index_node.rb +2 -2
- data/lib/aerospike/command/batch_item.rb +1 -1
- data/lib/aerospike/command/command.rb +168 -12
- data/lib/aerospike/command/delete_command.rb +21 -5
- data/lib/aerospike/command/execute_command.rb +1 -1
- data/lib/aerospike/command/exists_command.rb +21 -5
- data/lib/aerospike/command/field_type.rb +2 -1
- data/lib/aerospike/command/multi_command.rb +55 -5
- data/lib/aerospike/command/operate_command.rb +6 -1
- data/lib/aerospike/command/read_command.rb +63 -20
- data/lib/aerospike/command/read_header_command.rb +18 -6
- data/lib/aerospike/command/roles.rb +1 -1
- data/lib/aerospike/command/single_command.rb +9 -3
- data/lib/aerospike/command/touch_command.rb +48 -4
- data/lib/aerospike/command/unsupported_particle_type_validator.rb +1 -1
- data/lib/aerospike/command/write_command.rb +13 -4
- data/lib/aerospike/connection/create.rb +1 -1
- data/lib/aerospike/features.rb +6 -1
- data/lib/aerospike/geo_json.rb +1 -1
- data/lib/aerospike/host.rb +1 -1
- data/lib/aerospike/info.rb +1 -1
- data/lib/aerospike/key.rb +1 -1
- data/lib/aerospike/language.rb +1 -1
- data/lib/aerospike/node.rb +21 -7
- data/lib/aerospike/node/rebalance.rb +50 -0
- data/lib/aerospike/node/refresh/info.rb +4 -1
- data/lib/aerospike/node/refresh/partitions.rb +6 -15
- data/lib/aerospike/node/refresh/racks.rb +47 -0
- data/lib/aerospike/node/refresh/reset.rb +1 -0
- data/lib/aerospike/node/verify/rebalance_generation.rb +43 -0
- data/lib/aerospike/node_validator.rb +4 -19
- data/lib/aerospike/operation.rb +13 -3
- data/lib/aerospike/policy/admin_policy.rb +1 -1
- data/lib/aerospike/policy/batch_policy.rb +1 -1
- data/lib/aerospike/policy/client_policy.rb +16 -1
- data/lib/aerospike/policy/commit_level.rb +1 -1
- data/lib/aerospike/policy/consistency_level.rb +1 -1
- data/lib/aerospike/policy/generation_policy.rb +1 -1
- data/lib/aerospike/policy/operate_policy.rb +1 -1
- data/lib/aerospike/policy/policy.rb +64 -2
- data/lib/aerospike/policy/priority.rb +1 -1
- data/lib/aerospike/policy/query_policy.rb +8 -1
- data/lib/aerospike/policy/record_bin_multiplicity.rb +1 -1
- data/lib/aerospike/policy/record_exists_action.rb +1 -1
- data/lib/aerospike/policy/replica.rb +45 -0
- data/lib/aerospike/policy/scan_policy.rb +8 -1
- data/lib/aerospike/policy/write_policy.rb +1 -1
- data/lib/aerospike/query/filter.rb +1 -1
- data/lib/aerospike/query/query_command.rb +16 -5
- data/lib/aerospike/query/recordset.rb +1 -1
- data/lib/aerospike/query/scan_command.rb +1 -1
- data/lib/aerospike/query/statement.rb +9 -2
- data/lib/aerospike/query/stream_command.rb +1 -1
- data/lib/aerospike/record.rb +1 -1
- data/lib/aerospike/result_code.rb +26 -7
- data/lib/aerospike/socket/base.rb +4 -3
- data/lib/aerospike/task/execute_task.rb +1 -1
- data/lib/aerospike/task/index_task.rb +1 -1
- data/lib/aerospike/task/task.rb +1 -1
- data/lib/aerospike/task/udf_register_task.rb +1 -1
- data/lib/aerospike/task/udf_remove_task.rb +1 -1
- data/lib/aerospike/ttl.rb +1 -1
- data/lib/aerospike/udf.rb +1 -1
- data/lib/aerospike/user_role.rb +1 -1
- data/lib/aerospike/utils/buffer.rb +14 -4
- data/lib/aerospike/utils/packer.rb +1 -1
- data/lib/aerospike/utils/pool.rb +1 -1
- data/lib/aerospike/utils/unpacker.rb +1 -1
- data/lib/aerospike/value/particle_type.rb +2 -2
- data/lib/aerospike/value/value.rb +165 -33
- data/lib/aerospike/version.rb +1 -1
- metadata +20 -8
- data/lib/aerospike/cluster/partition_tokenizer_new.rb +0 -130
- data/lib/aerospike/cluster/partition_tokenizer_old.rb +0 -135
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
# Copyright 2014-
|
2
|
+
# Copyright 2014-2020 Aerospike, Inc.
|
3
3
|
#
|
4
4
|
# Portions may be licensed to Aerospike, Inc. under one or more contributor
|
5
5
|
# license agreements.
|
@@ -43,7 +43,14 @@ module Aerospike
|
|
43
43
|
# aggregation function.
|
44
44
|
@filters = []
|
45
45
|
|
46
|
-
# Predicate expressions
|
46
|
+
# Predicate expressions in postfix notation. If the expression is evaluated to false,
|
47
|
+
# the record will be ommited in the results.
|
48
|
+
#
|
49
|
+
# This method is redundant because PredExp can now be set in the base Policy for
|
50
|
+
# any transaction (including queries).
|
51
|
+
#
|
52
|
+
# NOTE : Policy.predexp takes precedence to this value. This value will be
|
53
|
+
# deprecated in the future.
|
47
54
|
@predexp = nil
|
48
55
|
|
49
56
|
@package_name = nil
|
data/lib/aerospike/record.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
# Copyright 2014-
|
2
|
+
# Copyright 2014-2020 Aerospike, Inc.
|
3
3
|
#
|
4
4
|
# Portions may be licensed to Aerospike, Inc. under one or more contributor
|
5
5
|
# license agreements.
|
@@ -60,6 +60,10 @@ module Aerospike
|
|
60
60
|
# exists.
|
61
61
|
KEY_EXISTS_ERROR = 5
|
62
62
|
|
63
|
+
# Bin already exists on a create-only operation.
|
64
|
+
BIN_EXISTS_ERROR = 6
|
65
|
+
|
66
|
+
|
63
67
|
# Expected cluster ID was not received.
|
64
68
|
CLUSTER_KEY_MISMATCH = 7
|
65
69
|
|
@@ -91,6 +95,9 @@ module Aerospike
|
|
91
95
|
# Unsupported Server Feature (e.g. Scan + UDF)
|
92
96
|
UNSUPPORTED_FEATURE = 16
|
93
97
|
|
98
|
+
# Bin not found on update-only operation.
|
99
|
+
BIN_NOT_FOUND = 17
|
100
|
+
|
94
101
|
# Specified bin name does not exist in record.
|
95
102
|
DEVICE_OVERLOAD = 18
|
96
103
|
|
@@ -116,6 +123,12 @@ module Aerospike
|
|
116
123
|
# Enterprise-only feature not supported by the community edition
|
117
124
|
ENTERPRISE_ONLY = 25
|
118
125
|
|
126
|
+
# The operation cannot be applied to the current bin value on the server.
|
127
|
+
OP_NOT_APPLICABLE = 26
|
128
|
+
|
129
|
+
# The transaction was not performed because the predexp was false.
|
130
|
+
FILTERED_OUT = 27
|
131
|
+
|
119
132
|
# There are no more records left for query.
|
120
133
|
QUERY_END = 50
|
121
134
|
|
@@ -167,9 +180,6 @@ module Aerospike
|
|
167
180
|
# A user defined function returned an error code.
|
168
181
|
UDF_BAD_RESPONSE = 100
|
169
182
|
|
170
|
-
# The requested item in a large collection was not found.
|
171
|
-
LARGE_ITEM_NOT_FOUND = 125
|
172
|
-
|
173
183
|
# Secondary index already exists.
|
174
184
|
INDEX_FOUND = 200
|
175
185
|
|
@@ -241,6 +251,9 @@ module Aerospike
|
|
241
251
|
when KEY_EXISTS_ERROR
|
242
252
|
"Key already exists"
|
243
253
|
|
254
|
+
when BIN_EXISTS_ERROR
|
255
|
+
"Bin already exists on a create-only operation"
|
256
|
+
|
244
257
|
when CLUSTER_KEY_MISMATCH
|
245
258
|
"Cluster key mismatch"
|
246
259
|
|
@@ -271,6 +284,9 @@ module Aerospike
|
|
271
284
|
when UNSUPPORTED_FEATURE
|
272
285
|
"Unsupported Server Feature"
|
273
286
|
|
287
|
+
when BIN_NOT_FOUND
|
288
|
+
"Bin not found on update-only operation"
|
289
|
+
|
274
290
|
when DEVICE_OVERLOAD
|
275
291
|
"Device overload"
|
276
292
|
|
@@ -295,6 +311,12 @@ module Aerospike
|
|
295
311
|
when ENTERPRISE_ONLY
|
296
312
|
"Enterprise-only feature not supported by community edition"
|
297
313
|
|
314
|
+
when OP_NOT_APPLICABLE
|
315
|
+
"The operation cannot be applied to the current bin value on the server."
|
316
|
+
|
317
|
+
when FILTERED_OUT
|
318
|
+
"The transaction was not performed because the predexp was false."
|
319
|
+
|
298
320
|
when QUERY_END
|
299
321
|
"Query end"
|
300
322
|
|
@@ -352,9 +374,6 @@ module Aerospike
|
|
352
374
|
when UDF_BAD_RESPONSE
|
353
375
|
"UDF d error"
|
354
376
|
|
355
|
-
when LARGE_ITEM_NOT_FOUND
|
356
|
-
"Large collection item not found"
|
357
|
-
|
358
377
|
when INDEX_FOUND
|
359
378
|
"Index already exists"
|
360
379
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright 2014-
|
3
|
+
# Copyright 2014-2020 Aerospike, Inc.
|
4
4
|
#
|
5
5
|
# Portions may be licensed to Aerospike, Inc. under one or more contributor
|
6
6
|
# license agreements.
|
@@ -25,13 +25,14 @@ module Aerospike
|
|
25
25
|
@timeout = nil
|
26
26
|
end
|
27
27
|
|
28
|
-
def read(buffer, length)
|
28
|
+
def read(buffer, length, offset = 0)
|
29
29
|
bytes_read = 0
|
30
30
|
until bytes_read >= length
|
31
31
|
result = read_from_socket(length - bytes_read)
|
32
|
-
buffer.write_binary(result, bytes_read)
|
32
|
+
buffer.write_binary(result, offset + bytes_read)
|
33
33
|
bytes_read += result.bytesize
|
34
34
|
end
|
35
|
+
bytes_read
|
35
36
|
end
|
36
37
|
|
37
38
|
def read_from_socket(length)
|
data/lib/aerospike/task/task.rb
CHANGED
data/lib/aerospike/ttl.rb
CHANGED
data/lib/aerospike/udf.rb
CHANGED
data/lib/aerospike/user_role.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
# Copyright 2014-
|
3
|
+
# Copyright 2014-2020 Aerospike, Inc.
|
4
4
|
#
|
5
5
|
# Portions may be licensed to Aerospike, Inc. under one or more contributor
|
6
6
|
# license agreements.
|
@@ -42,9 +42,9 @@ module Aerospike
|
|
42
42
|
DEFAULT_BUFFER_SIZE = 16 * 1024
|
43
43
|
MAX_BUFFER_SIZE = 10 * 1024 * 1024
|
44
44
|
|
45
|
-
def initialize(size=DEFAULT_BUFFER_SIZE)
|
46
|
-
@buf = "%0#{size}d" % 0
|
47
|
-
|
45
|
+
def initialize(size=DEFAULT_BUFFER_SIZE, buf = nil)
|
46
|
+
@buf = (buf ? buf : ("%0#{size}d" % 0))
|
47
|
+
@buf.force_encoding('binary')
|
48
48
|
@slice_end = @buf.bytesize
|
49
49
|
end
|
50
50
|
|
@@ -61,6 +61,10 @@ module Aerospike
|
|
61
61
|
end
|
62
62
|
alias_method :length, :size
|
63
63
|
|
64
|
+
def eat!(n)
|
65
|
+
@buf.replace(@buf[n..-1])
|
66
|
+
end
|
67
|
+
|
64
68
|
def resize(length)
|
65
69
|
if @buf.bytesize < length
|
66
70
|
@buf.concat("%0#{length - @buf.bytesize}d" % 0)
|
@@ -156,6 +160,12 @@ module Aerospike
|
|
156
160
|
@buf[0..@slice_end-1]
|
157
161
|
end
|
158
162
|
|
163
|
+
def reset
|
164
|
+
for i in 0..@buf.size-1
|
165
|
+
@buf[i] = ' '
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
159
169
|
def dump(from=nil, to=nil)
|
160
170
|
from ||= 0
|
161
171
|
to ||= @slice_end - 1
|
data/lib/aerospike/utils/pool.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
# Copyright 2014-
|
2
|
+
# Copyright 2014-2020 Aerospike, Inc.
|
3
3
|
#
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License")
|
5
5
|
# you may not use this file except in compliance with the License.
|
@@ -36,7 +36,7 @@ module Aerospike
|
|
36
36
|
#RTA_DICT = 15
|
37
37
|
#RTA_APPEND_DICT = 16
|
38
38
|
#RTA_APPEND_LIST = 17
|
39
|
-
|
39
|
+
HLL = 18
|
40
40
|
MAP = 19
|
41
41
|
LIST = 20
|
42
42
|
GEOJSON = 23
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
# Copyright 2014-
|
3
|
+
# Copyright 2014-2020 Aerospike, Inc.
|
4
4
|
#
|
5
5
|
# Portions may be licensed to Aerospike, Inc. under one or more contributor
|
6
6
|
# license agreements.
|
@@ -22,18 +22,25 @@ require 'aerospike/aerospike_exception'
|
|
22
22
|
module Aerospike
|
23
23
|
# Polymorphic value classes used to efficiently serialize objects into the wire protocol.
|
24
24
|
class Value #:nodoc:
|
25
|
-
INTEGER_RANGE = Range.new(-2**63, 2**63 - 1).freeze
|
26
25
|
|
27
|
-
def self.of(value)
|
26
|
+
def self.of(value, allow_64bits = false)
|
28
27
|
case value
|
29
|
-
when nil
|
30
|
-
res = NULL
|
31
28
|
when Integer
|
32
|
-
if
|
33
|
-
|
29
|
+
if !allow_64bits
|
30
|
+
if value.bit_length < 64
|
31
|
+
res = IntegerValue.new(value)
|
32
|
+
else
|
33
|
+
# big nums > 2**63 are not supported
|
34
|
+
raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::TYPE_NOT_SUPPORTED, "Value type #{value.class} not supported with more than 64 bits.")
|
35
|
+
end
|
34
36
|
else
|
35
|
-
#
|
36
|
-
|
37
|
+
# used in bitwise operations
|
38
|
+
if value.bit_length <= 64
|
39
|
+
res = IntegerValue.new(value)
|
40
|
+
else
|
41
|
+
# nums with more than 64 bits are not supported
|
42
|
+
raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::TYPE_NOT_SUPPORTED, "Value type #{value.class} not supported with more than 64 bits.")
|
43
|
+
end
|
37
44
|
end
|
38
45
|
when Float
|
39
46
|
res = FloatValue.new(value)
|
@@ -49,6 +56,10 @@ module Aerospike
|
|
49
56
|
res = ListValue.new(value)
|
50
57
|
when GeoJSON
|
51
58
|
res = GeoJSONValue.new(value)
|
59
|
+
when nil
|
60
|
+
res = NULL
|
61
|
+
when TrueClass, FalseClass
|
62
|
+
res = BoolValue.new(value)
|
52
63
|
else
|
53
64
|
# throw an exception for anything that is not supported.
|
54
65
|
raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::TYPE_NOT_SUPPORTED, "Value type #{value.class} not supported.")
|
@@ -57,6 +68,22 @@ module Aerospike
|
|
57
68
|
res
|
58
69
|
end
|
59
70
|
|
71
|
+
def self.validate_hash_key(value)
|
72
|
+
case value
|
73
|
+
when Integer
|
74
|
+
if value.bit_length >= 64
|
75
|
+
raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::TYPE_NOT_SUPPORTED, "Value type #{value.class} not supported as hash key.")
|
76
|
+
end
|
77
|
+
when Float
|
78
|
+
when String
|
79
|
+
when Symbol
|
80
|
+
when nil
|
81
|
+
else
|
82
|
+
# throw an exception for anything that is not supported.
|
83
|
+
raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::TYPE_NOT_SUPPORTED, "Value type #{value.class} not supported as hash key.")
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
60
87
|
end # Value
|
61
88
|
|
62
89
|
# Empty value.
|
@@ -137,7 +164,7 @@ module Aerospike
|
|
137
164
|
end
|
138
165
|
end
|
139
166
|
|
140
|
-
INFINITY = InfinityValue.new.freeze
|
167
|
+
INFINITY = Value::INFINITY = InfinityValue.new.freeze
|
141
168
|
|
142
169
|
# Wildcard value.
|
143
170
|
class WildcardValue < Value #:nodoc:
|
@@ -178,7 +205,7 @@ module Aerospike
|
|
178
205
|
end
|
179
206
|
end
|
180
207
|
|
181
|
-
WILDCARD = WildcardValue.new.freeze
|
208
|
+
WILDCARD = Value::WILDCARD = WildcardValue.new.freeze
|
182
209
|
|
183
210
|
# Byte array value.
|
184
211
|
class BytesValue < Value #:nodoc:
|
@@ -356,21 +383,16 @@ module Aerospike
|
|
356
383
|
class ListValue < Value #:nodoc:
|
357
384
|
|
358
385
|
def initialize(list)
|
359
|
-
@list = list ||
|
360
|
-
Packer.use do |packer|
|
361
|
-
pack(packer)
|
362
|
-
@bytes = packer.bytes
|
363
|
-
end
|
364
|
-
self
|
386
|
+
@list = list || []
|
365
387
|
end
|
366
388
|
|
367
389
|
def estimate_size
|
368
|
-
|
390
|
+
bytes.bytesize
|
369
391
|
end
|
370
392
|
|
371
393
|
def write(buffer, offset)
|
372
|
-
buffer.write_binary(
|
373
|
-
|
394
|
+
buffer.write_binary(bytes, offset)
|
395
|
+
bytes.bytesize
|
374
396
|
end
|
375
397
|
|
376
398
|
def pack(packer)
|
@@ -389,13 +411,26 @@ module Aerospike
|
|
389
411
|
end
|
390
412
|
|
391
413
|
def to_bytes
|
392
|
-
|
414
|
+
bytes
|
393
415
|
end
|
394
416
|
|
395
417
|
def to_s
|
396
418
|
@list.map{|v| v.to_s}.to_s
|
397
419
|
end
|
398
420
|
|
421
|
+
private
|
422
|
+
|
423
|
+
def bytes
|
424
|
+
return @bytes if @bytes
|
425
|
+
|
426
|
+
Packer.use do |packer|
|
427
|
+
pack(packer)
|
428
|
+
@bytes = packer.bytes
|
429
|
+
end
|
430
|
+
|
431
|
+
@bytes
|
432
|
+
end
|
433
|
+
|
399
434
|
end
|
400
435
|
|
401
436
|
# #######################################/
|
@@ -406,28 +441,22 @@ module Aerospike
|
|
406
441
|
|
407
442
|
def initialize(vmap)
|
408
443
|
@vmap = vmap || {}
|
409
|
-
|
410
|
-
Packer.use do |packer|
|
411
|
-
pack(packer)
|
412
|
-
@bytes = packer.bytes
|
413
|
-
end
|
414
|
-
|
415
|
-
self
|
416
444
|
end
|
417
445
|
|
418
446
|
def estimate_size
|
419
|
-
|
447
|
+
bytes.bytesize
|
420
448
|
end
|
421
449
|
|
422
450
|
def write(buffer, offset)
|
423
|
-
buffer.write_binary(
|
424
|
-
|
451
|
+
buffer.write_binary(bytes, offset)
|
452
|
+
bytes.bytesize
|
425
453
|
end
|
426
454
|
|
427
455
|
def pack(packer)
|
428
456
|
packer.write_map_header(@vmap.length)
|
429
|
-
# @vmap.each do |key, val|
|
430
457
|
for key, val in @vmap
|
458
|
+
Value.validate_hash_key(key)
|
459
|
+
|
431
460
|
Value.of(key).pack(packer)
|
432
461
|
Value.of(val).pack(packer)
|
433
462
|
end
|
@@ -442,13 +471,26 @@ module Aerospike
|
|
442
471
|
end
|
443
472
|
|
444
473
|
def to_bytes
|
445
|
-
|
474
|
+
bytes
|
446
475
|
end
|
447
476
|
|
448
477
|
def to_s
|
449
478
|
@vmap.map{|k, v| "#{k.to_s} => #{v.to_s}" }.to_s
|
450
479
|
end
|
451
480
|
|
481
|
+
private
|
482
|
+
|
483
|
+
def bytes
|
484
|
+
return @bytes if @bytes
|
485
|
+
|
486
|
+
Packer.use do |packer|
|
487
|
+
pack(packer)
|
488
|
+
@bytes = packer.bytes
|
489
|
+
end
|
490
|
+
|
491
|
+
@bytes
|
492
|
+
end
|
493
|
+
|
452
494
|
end
|
453
495
|
|
454
496
|
# #######################################/
|
@@ -496,6 +538,49 @@ module Aerospike
|
|
496
538
|
|
497
539
|
end
|
498
540
|
|
541
|
+
# #######################################/
|
542
|
+
|
543
|
+
# HLLValue value. Encapsulates a HyperLogLog value.
|
544
|
+
# Supported by Aerospike server version 4.9 and later.
|
545
|
+
class HLLValue < Value #:nodoc:
|
546
|
+
|
547
|
+
def initialize(value)
|
548
|
+
@bytes = value
|
549
|
+
@bytes.force_encoding('binary')
|
550
|
+
|
551
|
+
self
|
552
|
+
end
|
553
|
+
|
554
|
+
def type
|
555
|
+
Aerospike::ParticleType::HLL
|
556
|
+
end
|
557
|
+
|
558
|
+
def get
|
559
|
+
self
|
560
|
+
end
|
561
|
+
|
562
|
+
def to_s
|
563
|
+
@bytes.to_s
|
564
|
+
end
|
565
|
+
|
566
|
+
def to_bytes
|
567
|
+
@bytes
|
568
|
+
end
|
569
|
+
|
570
|
+
def estimate_size
|
571
|
+
@bytes.bytesize
|
572
|
+
end
|
573
|
+
|
574
|
+
def write(buffer, offset)
|
575
|
+
buffer.write_binary(@bytes, offset)
|
576
|
+
end
|
577
|
+
|
578
|
+
def pack(packer)
|
579
|
+
packer.write(Aerospike::ParticleType::BLOB.chr + @bytes)
|
580
|
+
end
|
581
|
+
|
582
|
+
end
|
583
|
+
|
499
584
|
#######################################
|
500
585
|
|
501
586
|
def self.encoding
|
@@ -542,6 +627,10 @@ module Aerospike
|
|
542
627
|
hdrsz = 1 + 2 + (ncells * 8)
|
543
628
|
Aerospike::GeoJSON.new(buf.read(offset + hdrsz, length - hdrsz))
|
544
629
|
|
630
|
+
when Aerospike::ParticleType::HLL
|
631
|
+
bytes = buf.read(offset,length)
|
632
|
+
Aerospike::HLLValue.new(bytes)
|
633
|
+
|
545
634
|
else
|
546
635
|
nil
|
547
636
|
end
|
@@ -563,4 +652,47 @@ module Aerospike
|
|
563
652
|
nil
|
564
653
|
end
|
565
654
|
end
|
655
|
+
|
656
|
+
private
|
657
|
+
|
658
|
+
#######################################
|
659
|
+
|
660
|
+
# Boolean value.
|
661
|
+
# This is private, and only used internally for bitwise CDTs
|
662
|
+
class BoolValue < Value #:nodoc:
|
663
|
+
|
664
|
+
def initialize(val)
|
665
|
+
@value = val || false
|
666
|
+
self
|
667
|
+
end
|
668
|
+
|
669
|
+
def estimate_size
|
670
|
+
1
|
671
|
+
end
|
672
|
+
|
673
|
+
def write(buffer, offset)
|
674
|
+
raise Exception.new("Unreachable")
|
675
|
+
end
|
676
|
+
|
677
|
+
def pack(packer)
|
678
|
+
packer.write(@value)
|
679
|
+
end
|
680
|
+
|
681
|
+
def type
|
682
|
+
raise Exception.new("Unreachable")
|
683
|
+
end
|
684
|
+
|
685
|
+
def get
|
686
|
+
@value
|
687
|
+
end
|
688
|
+
|
689
|
+
def to_bytes
|
690
|
+
raise Exception.new("Unreachable")
|
691
|
+
end
|
692
|
+
|
693
|
+
def to_s
|
694
|
+
@value.to_s
|
695
|
+
end
|
696
|
+
|
697
|
+
end # BoolValue
|
566
698
|
end # module
|