aerospike 2.15.0 → 2.16.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -261,7 +261,8 @@ module Aerospike
261
261
 
262
262
  operations.each do |operation|
263
263
  case operation.op_type
264
- when Aerospike::Operation::READ
264
+ when Aerospike::Operation::READ, Aerospike::Operation::CDT_READ,
265
+ Aerospike::Operation::HLL_READ, Aerospike::Operation::BIT_READ
265
266
  read_attr |= INFO1_READ
266
267
 
267
268
  # Read all bins if no bin is specified.
@@ -275,14 +276,12 @@ module Aerospike
275
276
  read_attr |= INFO1_READ
276
277
  read_header = true
277
278
 
278
- when Aerospike::Operation::CDT_READ,Aerospike::Operation::HLL_READ
279
- read_attr |= INFO1_READ
280
-
281
279
  else
282
280
  write_attr = INFO2_WRITE
283
281
  end
284
282
 
285
- if [Aerospike::Operation::HLL_MODIFY, Aerospike::Operation::HLL_READ].include?(operation.op_type)
283
+ if [Aerospike::Operation::HLL_MODIFY, Aerospike::Operation::HLL_READ,
284
+ Aerospike::Operation::BIT_MODIFY, Aerospike::Operation::BIT_READ].include?(operation.op_type)
286
285
  record_bin_multiplicity = true
287
286
  end
288
287
 
@@ -42,5 +42,8 @@ module Aerospike
42
42
 
43
43
  # Server supports the "truncate-namespace" command
44
44
  TRUNCATE_NAMESPACE = :"truncate-namespace"
45
+
46
+ # Server supports the "blob-bits" command
47
+ BLOB_BITS = :"blob-bits"
45
48
  end
46
49
  end
@@ -20,7 +20,7 @@ module Aerospike
20
20
 
21
21
  class Operation
22
22
 
23
- attr_reader :op_type, :bin_name, :bin_value
23
+ attr_reader :op_type, :bin_name, :bin_value, :ctx
24
24
 
25
25
  READ = 1
26
26
  READ_HEADER = 1
@@ -31,14 +31,17 @@ module Aerospike
31
31
  APPEND = 9
32
32
  PREPEND = 10
33
33
  TOUCH = 11
34
+ BIT_READ = 12
35
+ BIT_MODIFY = 13
34
36
  DELETE = 14
35
37
  HLL_READ = 15
36
38
  HLL_MODIFY = 16
37
39
 
38
- def initialize(op_type, bin_name=nil, bin_value=NullValue.new)
40
+ def initialize(op_type, bin_name=nil, bin_value=NullValue.new, ctx = nil)
39
41
  @op_type = op_type
40
42
  @bin_name = bin_name
41
43
  @bin_value = Value.of(bin_value)
44
+ @ctx = ctx
42
45
  self
43
46
  end
44
47
 
@@ -23,14 +23,24 @@ module Aerospike
23
23
  # Polymorphic value classes used to efficiently serialize objects into the wire protocol.
24
24
  class Value #:nodoc:
25
25
 
26
- def self.of(value)
26
+ def self.of(value, allow_64bits = false)
27
27
  case value
28
28
  when Integer
29
- if value.bit_length < 64
30
- res = IntegerValue.new(value)
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
31
36
  else
32
- # big nums > 2**63 are not supported
33
- raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::TYPE_NOT_SUPPORTED, "Value type #{value.class} not supported.")
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
34
44
  end
35
45
  when Float
36
46
  res = FloatValue.new(value)
@@ -48,6 +58,8 @@ module Aerospike
48
58
  res = GeoJSONValue.new(value)
49
59
  when nil
50
60
  res = NULL
61
+ when TrueClass, FalseClass
62
+ res = BoolValue.new(value)
51
63
  else
52
64
  # throw an exception for anything that is not supported.
53
65
  raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::TYPE_NOT_SUPPORTED, "Value type #{value.class} not supported.")
@@ -640,4 +652,47 @@ module Aerospike
640
652
  nil
641
653
  end
642
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
643
698
  end # module
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module Aerospike
3
- VERSION = "2.15.0"
3
+ VERSION = "2.16.0"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aerospike
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.15.0
4
+ version: 2.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Khosrow Afroozeh
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-10-05 00:00:00.000000000 Z
12
+ date: 2020-10-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: msgpack
@@ -55,6 +55,12 @@ files:
55
55
  - lib/aerospike/aerospike_exception.rb
56
56
  - lib/aerospike/atomic/atomic.rb
57
57
  - lib/aerospike/bin.rb
58
+ - lib/aerospike/cdt/bit_operation.rb
59
+ - lib/aerospike/cdt/bit_overflow_action.rb
60
+ - lib/aerospike/cdt/bit_policy.rb
61
+ - lib/aerospike/cdt/bit_resize_flags.rb
62
+ - lib/aerospike/cdt/bit_write_flags.rb
63
+ - lib/aerospike/cdt/context.rb
58
64
  - lib/aerospike/cdt/hll_operation.rb
59
65
  - lib/aerospike/cdt/hll_policy.rb
60
66
  - lib/aerospike/cdt/hll_write_flags.rb