aerospike 2.16.0 → 2.17.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 71a4730468bf7f38257303515a01945e1221d25f98b35f28d7aa9c0d74e06e3b
4
- data.tar.gz: 1bf1fd2c18697d5e7adda3cc5df5b5fdea7ecd2c7f6c81950c7a4f9dbba06ead
3
+ metadata.gz: 05c5920ff4ef2281b4155d7f62dabb7ab48880a51397c871e9445c479d4bbe95
4
+ data.tar.gz: 6f0284dbf9d2bd3242386991038b2b9ad26ed9a168dc51aa117c19c704b33478
5
5
  SHA512:
6
- metadata.gz: 4aeaddd24ad85bc4178973cfe865410536b8aaa2030486715d1495c380438a7e9b5980a36f953623f9da85b4f6ef497273797baad99e0e1af259faf1a6d64c6a
7
- data.tar.gz: 899f9ff5ddf4be0085dd6783f382278948f9e466778590e939a8f097b91432745001c65b6bf7ed3494056296a1c80ce1bbba5a9a6473b982101a99c839ea1168
6
+ metadata.gz: 9ec901c240d80fea754256209ffa4fc0002e73c2f52b5c170beff06a180f8a02fc5bdad1fd315a02aa3efe988430b0c7aac569df890ae0606f4b9ed4ee533d4f
7
+ data.tar.gz: 66630fb1995c507a93ca9b72ee2fabaab57a7697340893b318bdf4f8063628599fdcf9f0a60343fd717ae5770a9331b0aa80ac6c14ee7c4aa01217acf3d470a4
@@ -2,6 +2,14 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [2.17.0] - 2020-10-15
6
+
7
+ * **New Features**
8
+ * [CLIENT-1246] Adds missing API for Context#list_index_create and Context#map_key_create
9
+
10
+ * **Bug Fixes**
11
+ * Fixed an issue were MsgPack extensions were not recursively cleared from the CDTs during unpacking.
12
+
5
13
  ## [2.16.0] - 2020-10-12
6
14
 
7
15
  * **New Features**
@@ -34,6 +34,12 @@ module Aerospike
34
34
  @value = value
35
35
  end
36
36
 
37
+ ##
38
+ # Create list with given type at index offset, given an order and pad.
39
+ def self.list_index_create(index, order, pad)
40
+ Context.new(0x10 | ListOrder.flag(order, pad), index)
41
+ end
42
+
37
43
  ##
38
44
  # Lookup list by index offset.
39
45
  # If the index is negative, the resolved index starts backwards from end of list.
@@ -90,6 +96,12 @@ module Aerospike
90
96
  Context.new(0x22, key)
91
97
  end
92
98
 
99
+ ##
100
+ # Create map with given type at map key.
101
+ def self.map_key_create(key, order)
102
+ Context.new(0x22 | order[:flag], key)
103
+ end
104
+
93
105
  ##
94
106
  # Lookup map by value.
95
107
  def self.map_value(key)
@@ -84,18 +84,33 @@ module Aerospike
84
84
  REMOVE_BY_RANK_RANGE = 39
85
85
  REMOVE_BY_VALUE_REL_RANK_RANGE = 40
86
86
 
87
- attr_reader :list_op, :arguments, :policy, :return_type, :ctx
87
+ attr_reader :list_op, :arguments, :policy, :return_type, :ctx, :flag
88
88
 
89
- def initialize(op_type, list_op, bin_name, *arguments, return_type: nil, ctx: nil)
89
+ def initialize(op_type, list_op, bin_name, *arguments, return_type: nil, ctx: nil, flag: nil)
90
90
  @op_type = op_type
91
91
  @bin_name = bin_name
92
92
  @bin_value = nil
93
93
  @list_op = list_op
94
94
  @ctx = ctx
95
+ @flag = flag
95
96
  @arguments = arguments
96
97
  @return_type = return_type
97
98
  end
98
99
 
100
+ ##
101
+ # creates list create operation.
102
+ # Server creates list at given context level. The context is allowed to be beyond list
103
+ # boundaries only if pad is set to true. In that case, nil list entries will be inserted to
104
+ # satisfy the context position.
105
+ def self.create(bin_name, order, pad, ctx: nil)
106
+ # If context not defined, the set order for top-level bin list.
107
+ if !ctx || ctx.length == 0
108
+ self.set_order(bin_name, order)
109
+ else
110
+ ListOperation.new(Operation::CDT_MODIFY, SET_TYPE, bin_name, order, ctx: ctx, flag: ListOrder.flag(order, pad))
111
+ end
112
+ end
113
+
99
114
  ##
100
115
  # Create a set list order operation.
101
116
  # Server sets list order.
@@ -504,11 +519,7 @@ module Aerospike
504
519
  packer.write_array_header(3)
505
520
  Value.of(0xff).pack(packer)
506
521
 
507
- packer.write_array_header(@ctx.length*2)
508
- @ctx.each do |ctx|
509
- Value.of(ctx.id).pack(packer)
510
- Value.of(ctx.value).pack(packer)
511
- end
522
+ pack_context(packer)
512
523
 
513
524
  packer.write_array_header(args.length+1)
514
525
  Value.of(@list_op).pack(packer)
@@ -529,6 +540,24 @@ module Aerospike
529
540
  end
530
541
  BytesValue.new(bytes)
531
542
  end
543
+
544
+ def pack_context(packer)
545
+ packer.write_array_header(@ctx.length*2)
546
+ if @flag
547
+ (1...@ctx.length).each do |i|
548
+ Value.of(@ctx[i].id).pack(packer)
549
+ Value.of(@ctx[i].value).pack(packer)
550
+ end
551
+
552
+ Value.of(@ctx[-1].id | @flag).pack(packer)
553
+ Value.of(@ctx[-1].value).pack(packer)
554
+ else
555
+ @ctx.each do |ctx|
556
+ Value.of(ctx.id).pack(packer)
557
+ Value.of(ctx.value).pack(packer)
558
+ end
559
+ end
560
+ end
532
561
  end
533
562
 
534
563
  class InvertibleListOp < ListOperation
@@ -32,6 +32,13 @@ module Aerospike
32
32
  ##
33
33
  # Default order
34
34
  DEFAULT = UNORDERED
35
+
36
+ private
37
+
38
+ def self.flag(attributes, pad)
39
+ (attributes == 1) ? 0xc0 : (pad ? 0x80 : 0x40)
40
+ end
41
+
35
42
  end
36
43
  end
37
44
  end
@@ -96,26 +96,39 @@ module Aerospike
96
96
  GET_BY_KEY_REL_INDEX_RANGE = 109
97
97
  GET_BY_VALUE_REL_RANK_RANGE = 110
98
98
 
99
- attr_reader :map_op, :arguments, :return_type, :ctx
99
+ attr_reader :map_op, :arguments, :return_type, :ctx, :flag
100
100
 
101
- def initialize(op_type, map_op, bin_name, *arguments, ctx: nil, return_type: nil)
101
+ def initialize(op_type, map_op, bin_name, *arguments, ctx: nil, return_type: nil, flag: nil)
102
102
  @op_type = op_type
103
103
  @bin_name = bin_name
104
104
  @bin_value = nil
105
105
  @map_op = map_op
106
106
  @ctx = ctx
107
+ @flag = flag
107
108
  @arguments = arguments
108
109
  @return_type = return_type
109
110
  self
110
111
  end
111
112
 
113
+ ##
114
+ # Creates a map create operation.
115
+ # Server creates map at given context level.
116
+ def self.create(bin_name, order, ctx: nil)
117
+ if !ctx || ctx.length == 0
118
+ # If context not defined, the set order for top-level bin map.
119
+ self.set_policy(MapPolicy.new(order: order, flag: 0), bin_name)
120
+ else
121
+ MapOperation.new(Operation::CDT_MODIFY, SET_TYPE, bin_name, order[:attr], ctx: ctx, flag: order[:flag])
122
+ end
123
+ end
124
+
112
125
  ##
113
126
  # Create set map policy operation.
114
127
  # Server sets map policy attributes. Server returns null.
115
128
  #
116
129
  # The required map policy attributes can be changed after the map is created.
117
130
  def self.set_policy(bin_name, policy, ctx: nil)
118
- MapOperation.new(Operation::CDT_MODIFY, SET_TYPE, bin_name, policy.order, ctx: ctx)
131
+ MapOperation.new(Operation::CDT_MODIFY, SET_TYPE, bin_name, policy.order[:attr], ctx: ctx)
119
132
  end
120
133
 
121
134
  ##
@@ -126,16 +139,16 @@ module Aerospike
126
139
  # The map policy also specifies the flags used when writing items to the map.
127
140
  def self.put(bin_name, key, value, ctx: nil, policy: MapPolicy::DEFAULT)
128
141
  if policy.flags != MapWriteFlags::DEFAULT
129
- MapOperation.new(Operation::CDT_MODIFY, PUT, bin_name, key, value, policy.order, policy.flags, ctx: ctx)
142
+ MapOperation.new(Operation::CDT_MODIFY, PUT, bin_name, key, value, policy.order[:attr], policy.flags, ctx: ctx)
130
143
  else
131
144
  case policy.write_mode
132
145
  when MapWriteMode::UPDATE_ONLY
133
146
  # Replace doesn't allow map order because it does not create on non-existing key.
134
147
  MapOperation.new(Operation::CDT_MODIFY, REPLACE, bin_name, key, value, ctx: ctx)
135
148
  when MapWriteMode::CREATE_ONLY
136
- MapOperation.new(Operation::CDT_MODIFY, ADD, bin_name, key, value, policy.order, ctx: ctx)
149
+ MapOperation.new(Operation::CDT_MODIFY, ADD, bin_name, key, value, policy.order[:attr], ctx: ctx)
137
150
  else
138
- MapOperation.new(Operation::CDT_MODIFY, PUT, bin_name, key, value, policy.order, ctx: ctx)
151
+ MapOperation.new(Operation::CDT_MODIFY, PUT, bin_name, key, value, policy.order[:attr], ctx: ctx)
139
152
  end
140
153
  end
141
154
  end
@@ -148,16 +161,16 @@ module Aerospike
148
161
  # The map policy also specifies the flags used when writing items to the map.
149
162
  def self.put_items(bin_name, values, ctx: nil, policy: MapPolicy::DEFAULT)
150
163
  if policy.flags != MapWriteFlags::DEFAULT
151
- MapOperation.new(Operation::CDT_MODIFY, PUT_ITEMS, bin_name, values, policy.order, policy.flags, ctx: ctx)
164
+ MapOperation.new(Operation::CDT_MODIFY, PUT_ITEMS, bin_name, values, policy.order[:attr], policy.flags, ctx: ctx)
152
165
  else
153
166
  case policy.write_mode
154
167
  when MapWriteMode::UPDATE_ONLY
155
168
  # Replace doesn't allow map order because it does not create on non-existing key.
156
169
  MapOperation.new(Operation::CDT_MODIFY, REPLACE_ITEMS, bin_name, values, ctx: ctx)
157
170
  when MapWriteMode::CREATE_ONLY
158
- MapOperation.new(Operation::CDT_MODIFY, ADD_ITEMS, bin_name, values, policy.order, ctx: ctx)
171
+ MapOperation.new(Operation::CDT_MODIFY, ADD_ITEMS, bin_name, values, policy.order[:attr], ctx: ctx)
159
172
  else
160
- MapOperation.new(Operation::CDT_MODIFY, PUT_ITEMS, bin_name, values, policy.order, ctx: ctx)
173
+ MapOperation.new(Operation::CDT_MODIFY, PUT_ITEMS, bin_name, values, policy.order[:attr], ctx: ctx)
161
174
  end
162
175
  end
163
176
  end
@@ -170,7 +183,7 @@ module Aerospike
170
183
  # The map policy dictates the type of map to create when it does not exist.
171
184
  # The map policy also specifies the mode used when writing items to the map.
172
185
  def self.increment(bin_name, key, incr, ctx: nil, policy: MapPolicy::DEFAULT)
173
- MapOperation.new(Operation::CDT_MODIFY, INCREMENT, bin_name, key, incr, policy.order, ctx: ctx)
186
+ MapOperation.new(Operation::CDT_MODIFY, INCREMENT, bin_name, key, incr, policy.order[:attr], ctx: ctx)
174
187
  end
175
188
 
176
189
  ##
@@ -181,7 +194,7 @@ module Aerospike
181
194
  # The map policy dictates the type of map to create when it does not exist.
182
195
  # The map policy also specifies the mode used when writing items to the map.
183
196
  def self.decrement(bin_name, key, decr, ctx: nil, policy: MapPolicy::DEFAULT)
184
- MapOperation.new(Operation::CDT_MODIFY, DECREMENT, bin_name, key, decr, policy.order, ctx: ctx)
197
+ MapOperation.new(Operation::CDT_MODIFY, DECREMENT, bin_name, key, decr, policy.order[:attr], ctx: ctx)
185
198
  end
186
199
 
187
200
  ##
@@ -626,11 +639,7 @@ module Aerospike
626
639
  packer.write_array_header(3)
627
640
  Value.of(0xff).pack(packer)
628
641
 
629
- packer.write_array_header(@ctx.length*2)
630
- @ctx.each do |ctx|
631
- Value.of(ctx.id).pack(packer)
632
- Value.of(ctx.value).pack(packer)
633
- end
642
+ pack_context(packer)
634
643
 
635
644
  packer.write_array_header(args.length+1)
636
645
  Value.of(@map_op).pack(packer)
@@ -651,6 +660,23 @@ module Aerospike
651
660
  BytesValue.new(bytes)
652
661
  end
653
662
 
663
+ def pack_context(packer)
664
+ packer.write_array_header(@ctx.length*2)
665
+ if @flag
666
+ (1...@ctx.length).each do |i|
667
+ Value.of(@ctx[i].id).pack(packer)
668
+ Value.of(@ctx[i].value).pack(packer)
669
+ end
670
+
671
+ Value.of(@ctx[-1].id | @flag).pack(packer)
672
+ Value.of(@ctx[-1].value).pack(packer)
673
+ else
674
+ @ctx.each do |ctx|
675
+ Value.of(ctx.id).pack(packer)
676
+ Value.of(ctx.value).pack(packer)
677
+ end
678
+ end
679
+ end
654
680
  end
655
681
 
656
682
  end
@@ -20,15 +20,15 @@ module Aerospike
20
20
 
21
21
  ##
22
22
  # Map is not ordered. This is the default.
23
- UNORDERED = 0
23
+ UNORDERED = {attr: 0, flag: 0x40}
24
24
 
25
25
  ##
26
26
  # Order map by key.
27
- KEY_ORDERED = 1
27
+ KEY_ORDERED = {attr: 1, flag: 0x80}
28
28
 
29
29
  ##
30
30
  # Order map by key, then value.
31
- KEY_VALUE_ORDERED = 3
31
+ KEY_VALUE_ORDERED = {attr: 3, flag: 0xc0}
32
32
 
33
33
  ##
34
34
  # Default order
@@ -92,9 +92,9 @@ module Aerospike
92
92
  end
93
93
  value
94
94
  when Array
95
- normalize_strings_in_array(elem)
95
+ unpack_list(elem)
96
96
  when Hash
97
- normalize_strings_in_map(elem)
97
+ unpack_map(elem)
98
98
  else
99
99
  elem
100
100
  end
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module Aerospike
3
- VERSION = "2.16.0"
3
+ VERSION = "2.17.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.16.0
4
+ version: 2.17.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-12 00:00:00.000000000 Z
12
+ date: 2020-10-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: msgpack