aerospike 2.11.0 → 2.16.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +50 -1
  3. data/README.md +1 -1
  4. data/lib/aerospike.rb +17 -4
  5. data/lib/aerospike/aerospike_exception.rb +7 -1
  6. data/lib/aerospike/atomic/atomic.rb +1 -1
  7. data/lib/aerospike/bin.rb +1 -1
  8. data/lib/aerospike/cdt/bit_operation.rb +376 -0
  9. data/lib/aerospike/cdt/bit_overflow_action.rb +46 -0
  10. data/lib/aerospike/cdt/bit_policy.rb +36 -0
  11. data/lib/aerospike/cdt/bit_resize_flags.rb +44 -0
  12. data/lib/aerospike/cdt/bit_write_flags.rb +51 -0
  13. data/lib/aerospike/cdt/context.rb +101 -0
  14. data/lib/aerospike/cdt/hll_operation.rb +200 -0
  15. data/lib/aerospike/cdt/hll_policy.rb +34 -0
  16. data/lib/aerospike/cdt/hll_write_flags.rb +53 -0
  17. data/lib/aerospike/cdt/list_operation.rb +127 -97
  18. data/lib/aerospike/cdt/list_sort_flags.rb +10 -2
  19. data/lib/aerospike/cdt/map_operation.rb +154 -93
  20. data/lib/aerospike/cdt/map_order.rb +1 -1
  21. data/lib/aerospike/cdt/map_policy.rb +1 -1
  22. data/lib/aerospike/cdt/map_return_type.rb +1 -1
  23. data/lib/aerospike/cdt/map_write_mode.rb +1 -1
  24. data/lib/aerospike/client.rb +33 -17
  25. data/lib/aerospike/cluster.rb +139 -17
  26. data/lib/aerospike/cluster/partition.rb +1 -1
  27. data/lib/aerospike/cluster/partition_parser.rb +169 -0
  28. data/lib/aerospike/cluster/rack_parser.rb +117 -0
  29. data/lib/aerospike/command/admin_command.rb +1 -1
  30. data/lib/aerospike/command/batch_direct_command.rb +2 -1
  31. data/lib/aerospike/command/batch_direct_exists_command.rb +1 -1
  32. data/lib/aerospike/command/batch_direct_node.rb +3 -3
  33. data/lib/aerospike/command/batch_index_command.rb +11 -2
  34. data/lib/aerospike/command/batch_index_node.rb +2 -2
  35. data/lib/aerospike/command/batch_item.rb +1 -1
  36. data/lib/aerospike/command/command.rb +168 -12
  37. data/lib/aerospike/command/delete_command.rb +21 -5
  38. data/lib/aerospike/command/execute_command.rb +1 -1
  39. data/lib/aerospike/command/exists_command.rb +21 -5
  40. data/lib/aerospike/command/field_type.rb +2 -1
  41. data/lib/aerospike/command/multi_command.rb +55 -5
  42. data/lib/aerospike/command/operate_command.rb +6 -1
  43. data/lib/aerospike/command/read_command.rb +63 -20
  44. data/lib/aerospike/command/read_header_command.rb +18 -6
  45. data/lib/aerospike/command/roles.rb +1 -1
  46. data/lib/aerospike/command/single_command.rb +9 -3
  47. data/lib/aerospike/command/touch_command.rb +48 -4
  48. data/lib/aerospike/command/unsupported_particle_type_validator.rb +1 -1
  49. data/lib/aerospike/command/write_command.rb +13 -4
  50. data/lib/aerospike/connection/create.rb +1 -1
  51. data/lib/aerospike/features.rb +6 -1
  52. data/lib/aerospike/geo_json.rb +1 -1
  53. data/lib/aerospike/host.rb +1 -1
  54. data/lib/aerospike/info.rb +1 -1
  55. data/lib/aerospike/key.rb +1 -1
  56. data/lib/aerospike/language.rb +1 -1
  57. data/lib/aerospike/node.rb +21 -7
  58. data/lib/aerospike/node/rebalance.rb +50 -0
  59. data/lib/aerospike/node/refresh/info.rb +4 -1
  60. data/lib/aerospike/node/refresh/partitions.rb +6 -15
  61. data/lib/aerospike/node/refresh/racks.rb +47 -0
  62. data/lib/aerospike/node/refresh/reset.rb +1 -0
  63. data/lib/aerospike/node/verify/rebalance_generation.rb +43 -0
  64. data/lib/aerospike/node_validator.rb +4 -19
  65. data/lib/aerospike/operation.rb +13 -3
  66. data/lib/aerospike/policy/admin_policy.rb +1 -1
  67. data/lib/aerospike/policy/batch_policy.rb +1 -1
  68. data/lib/aerospike/policy/client_policy.rb +16 -1
  69. data/lib/aerospike/policy/commit_level.rb +1 -1
  70. data/lib/aerospike/policy/consistency_level.rb +1 -1
  71. data/lib/aerospike/policy/generation_policy.rb +1 -1
  72. data/lib/aerospike/policy/operate_policy.rb +1 -1
  73. data/lib/aerospike/policy/policy.rb +64 -2
  74. data/lib/aerospike/policy/priority.rb +1 -1
  75. data/lib/aerospike/policy/query_policy.rb +8 -1
  76. data/lib/aerospike/policy/record_bin_multiplicity.rb +1 -1
  77. data/lib/aerospike/policy/record_exists_action.rb +1 -1
  78. data/lib/aerospike/policy/replica.rb +45 -0
  79. data/lib/aerospike/policy/scan_policy.rb +8 -1
  80. data/lib/aerospike/policy/write_policy.rb +1 -1
  81. data/lib/aerospike/query/filter.rb +1 -1
  82. data/lib/aerospike/query/query_command.rb +16 -5
  83. data/lib/aerospike/query/recordset.rb +1 -1
  84. data/lib/aerospike/query/scan_command.rb +1 -1
  85. data/lib/aerospike/query/statement.rb +9 -2
  86. data/lib/aerospike/query/stream_command.rb +1 -1
  87. data/lib/aerospike/record.rb +1 -1
  88. data/lib/aerospike/result_code.rb +26 -7
  89. data/lib/aerospike/socket/base.rb +4 -3
  90. data/lib/aerospike/task/execute_task.rb +1 -1
  91. data/lib/aerospike/task/index_task.rb +1 -1
  92. data/lib/aerospike/task/task.rb +1 -1
  93. data/lib/aerospike/task/udf_register_task.rb +1 -1
  94. data/lib/aerospike/task/udf_remove_task.rb +1 -1
  95. data/lib/aerospike/ttl.rb +1 -1
  96. data/lib/aerospike/udf.rb +1 -1
  97. data/lib/aerospike/user_role.rb +1 -1
  98. data/lib/aerospike/utils/buffer.rb +14 -4
  99. data/lib/aerospike/utils/packer.rb +1 -1
  100. data/lib/aerospike/utils/pool.rb +1 -1
  101. data/lib/aerospike/utils/unpacker.rb +1 -1
  102. data/lib/aerospike/value/particle_type.rb +2 -2
  103. data/lib/aerospike/value/value.rb +165 -33
  104. data/lib/aerospike/version.rb +1 -1
  105. metadata +20 -8
  106. data/lib/aerospike/cluster/partition_tokenizer_new.rb +0 -130
  107. data/lib/aerospike/cluster/partition_tokenizer_old.rb +0 -135
@@ -22,12 +22,20 @@ module Aerospike
22
22
  module ListSortFlags
23
23
 
24
24
  ##
25
- # Default. Preserve duplicate values when sorting list.
26
- DEFAULT = 0
25
+ # Preserve duplicate values when sorting list, and sort in ascending order
26
+ ASCENDING = 0
27
+
28
+ ##
29
+ # Sort the contents of the list in descending order.
30
+ DESCENDING = 1
27
31
 
28
32
  ##
29
33
  # Drop duplicate values when sorting list.
30
34
  DROP_DUPLICATES = 2
35
+
36
+ ##
37
+ # Default behavior
38
+ DEFAULT = ASCENDING
31
39
  end
32
40
  end
33
41
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
- # Copyright 2016-2018 Aerospike, Inc.
2
+ # Copyright 2016-2020 Aerospike, Inc.
3
3
  #
4
4
  # Portions may be licensed to Aerospike, Inc. under one or more contributor
5
5
  # license agreements.
@@ -17,6 +17,47 @@
17
17
  module Aerospike
18
18
  module CDT
19
19
 
20
+ ##
21
+ # Unique key map bin operations. Create map operations used by the client operate command.
22
+ # The default unique key map is unordered.
23
+ #
24
+ # All maps maintain an index and a rank. The index is the item offset from the start of the map,
25
+ # for both unordered and ordered maps. The rank is the sorted index of the value component.
26
+ # Map supports negative indexing for index and rank.
27
+ #
28
+ # Index examples:
29
+ #
30
+ # Index 0: First item in map.
31
+ # Index 4: Fifth item in map.
32
+ # Index -1: Last item in map.
33
+ # Index -3: Third to last item in map.
34
+ # Index 1 Count 2: Second and third items in map.
35
+ # Index -3 Count 3: Last three items in map.
36
+ # Index -5 Count 4: Range between fifth to last item to second to last item inclusive.
37
+ #
38
+ #
39
+ # Rank examples:
40
+ #
41
+ # Rank 0: Item with lowest value rank in map.
42
+ # Rank 4: Fifth lowest ranked item in map.
43
+ # Rank -1: Item with highest ranked value in map.
44
+ # Rank -3: Item with third highest ranked value in map.
45
+ # Rank 1 Count 2: Second and third lowest ranked items in map.
46
+ # Rank -3 Count 3: Top three ranked items in map.
47
+ #
48
+ #
49
+ # Nested CDT operations are supported by optional CTX context arguments. Examples:
50
+ #
51
+ # bin = {key1:{key11:9,key12:4}, key2:{key21:3,key22:5}}
52
+ # Set map value to 11 for map key "key21" inside of map key "key2".
53
+ # MapOperation.put("bin", "key21", 11, ctx: [Context.map_key("key2")])
54
+ # bin result = {key1:{key11:9,key12:4},key2:{key21:11,key22:5}}
55
+ #
56
+ # bin : {key1:{key11:{key111:1},key12:{key121:5}}, key2:{key21:{"key211":7}}}
57
+ # Set map value to 11 in map key "key121" for highest ranked map ("key12") inside of map key "key1".
58
+ # MapOperation.put("bin", "key121", 11, ctx: [Context.map_key("key1"), Context.map_rank(-1)])
59
+ # bin result = {key1:{key11:{key111:1},key12:{key121:11}}, key2:{key21:{"key211":7}}}
60
+
20
61
  class MapOperation < Operation
21
62
 
22
63
  SET_TYPE = 64
@@ -55,13 +96,14 @@ module Aerospike
55
96
  GET_BY_KEY_REL_INDEX_RANGE = 109
56
97
  GET_BY_VALUE_REL_RANK_RANGE = 110
57
98
 
58
- attr_reader :map_op, :arguments, :return_type
99
+ attr_reader :map_op, :arguments, :return_type, :ctx
59
100
 
60
- def initialize(op_type, map_op, bin_name, *arguments, return_type: nil)
101
+ def initialize(op_type, map_op, bin_name, *arguments, ctx: nil, return_type: nil)
61
102
  @op_type = op_type
62
103
  @bin_name = bin_name
63
104
  @bin_value = nil
64
105
  @map_op = map_op
106
+ @ctx = ctx
65
107
  @arguments = arguments
66
108
  @return_type = return_type
67
109
  self
@@ -72,8 +114,8 @@ module Aerospike
72
114
  # Server sets map policy attributes. Server returns null.
73
115
  #
74
116
  # The required map policy attributes can be changed after the map is created.
75
- def self.set_policy(bin_name, policy)
76
- MapOperation.new(Operation::CDT_MODIFY, SET_TYPE, bin_name, policy.order)
117
+ def self.set_policy(bin_name, policy, ctx: nil)
118
+ MapOperation.new(Operation::CDT_MODIFY, SET_TYPE, bin_name, policy.order, ctx: ctx)
77
119
  end
78
120
 
79
121
  ##
@@ -82,18 +124,18 @@ module Aerospike
82
124
  #
83
125
  # The map policy dictates the type of map to create when it does not exist.
84
126
  # The map policy also specifies the flags used when writing items to the map.
85
- def self.put(bin_name, key, value, policy: MapPolicy::DEFAULT)
127
+ def self.put(bin_name, key, value, ctx: nil, policy: MapPolicy::DEFAULT)
86
128
  if policy.flags != MapWriteFlags::DEFAULT
87
- MapOperation.new(Operation::CDT_MODIFY, PUT, bin_name, key, value, policy.order, policy.flags)
129
+ MapOperation.new(Operation::CDT_MODIFY, PUT, bin_name, key, value, policy.order, policy.flags, ctx: ctx)
88
130
  else
89
131
  case policy.write_mode
90
132
  when MapWriteMode::UPDATE_ONLY
91
133
  # Replace doesn't allow map order because it does not create on non-existing key.
92
- MapOperation.new(Operation::CDT_MODIFY, REPLACE, bin_name, key, value)
134
+ MapOperation.new(Operation::CDT_MODIFY, REPLACE, bin_name, key, value, ctx: ctx)
93
135
  when MapWriteMode::CREATE_ONLY
94
- MapOperation.new(Operation::CDT_MODIFY, ADD, bin_name, key, value, policy.order)
136
+ MapOperation.new(Operation::CDT_MODIFY, ADD, bin_name, key, value, policy.order, ctx: ctx)
95
137
  else
96
- MapOperation.new(Operation::CDT_MODIFY, PUT, bin_name, key, value, policy.order)
138
+ MapOperation.new(Operation::CDT_MODIFY, PUT, bin_name, key, value, policy.order, ctx: ctx)
97
139
  end
98
140
  end
99
141
  end
@@ -104,18 +146,18 @@ module Aerospike
104
146
  #
105
147
  # The map policy dictates the type of map to create when it does not exist.
106
148
  # The map policy also specifies the flags used when writing items to the map.
107
- def self.put_items(bin_name, values, policy: MapPolicy::DEFAULT)
149
+ def self.put_items(bin_name, values, ctx: nil, policy: MapPolicy::DEFAULT)
108
150
  if policy.flags != MapWriteFlags::DEFAULT
109
- MapOperation.new(Operation::CDT_MODIFY, PUT_ITEMS, bin_name, values, policy.order, policy.flags)
151
+ MapOperation.new(Operation::CDT_MODIFY, PUT_ITEMS, bin_name, values, policy.order, policy.flags, ctx: ctx)
110
152
  else
111
153
  case policy.write_mode
112
154
  when MapWriteMode::UPDATE_ONLY
113
155
  # Replace doesn't allow map order because it does not create on non-existing key.
114
- MapOperation.new(Operation::CDT_MODIFY, REPLACE_ITEMS, bin_name, values)
156
+ MapOperation.new(Operation::CDT_MODIFY, REPLACE_ITEMS, bin_name, values, ctx: ctx)
115
157
  when MapWriteMode::CREATE_ONLY
116
- MapOperation.new(Operation::CDT_MODIFY, ADD_ITEMS, bin_name, values, policy.order)
158
+ MapOperation.new(Operation::CDT_MODIFY, ADD_ITEMS, bin_name, values, policy.order, ctx: ctx)
117
159
  else
118
- MapOperation.new(Operation::CDT_MODIFY, PUT_ITEMS, bin_name, values, policy.order)
160
+ MapOperation.new(Operation::CDT_MODIFY, PUT_ITEMS, bin_name, values, policy.order, ctx: ctx)
119
161
  end
120
162
  end
121
163
  end
@@ -127,8 +169,8 @@ module Aerospike
127
169
  #
128
170
  # The map policy dictates the type of map to create when it does not exist.
129
171
  # The map policy also specifies the mode used when writing items to the map.
130
- def self.increment(bin_name, key, incr, policy: MapPolicy::DEFAULT)
131
- MapOperation.new(Operation::CDT_MODIFY, INCREMENT, bin_name, key, incr, policy.order)
172
+ 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)
132
174
  end
133
175
 
134
176
  ##
@@ -138,15 +180,15 @@ module Aerospike
138
180
  #
139
181
  # The map policy dictates the type of map to create when it does not exist.
140
182
  # The map policy also specifies the mode used when writing items to the map.
141
- def self.decrement(bin_name, key, decr, policy: MapPolicy::DEFAULT)
142
- MapOperation.new(Operation::CDT_MODIFY, DECREMENT, bin_name, key, decr, policy.order)
183
+ 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)
143
185
  end
144
186
 
145
187
  ##
146
188
  # Create map clear operation.
147
189
  # Server removes all items in map. Server returns null.
148
- def self.clear(bin_name)
149
- MapOperation.new(Operation::CDT_MODIFY, CLEAR, bin_name)
190
+ def self.clear(bin_name, ctx: nil)
191
+ MapOperation.new(Operation::CDT_MODIFY, CLEAR, bin_name, ctx: ctx)
150
192
  end
151
193
 
152
194
  ##
@@ -154,8 +196,8 @@ module Aerospike
154
196
  #
155
197
  # Server removes map item identified by key and returns removed data
156
198
  # specified by return_type.
157
- def self.remove_by_key(bin_name, key, return_type: nil)
158
- MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_KEY, bin_name, key, return_type: return_type)
199
+ def self.remove_by_key(bin_name, key, ctx: nil, return_type: nil)
200
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_KEY, bin_name, key, ctx: ctx, return_type: return_type)
159
201
  end
160
202
 
161
203
  ##
@@ -164,8 +206,8 @@ module Aerospike
164
206
  # Server removes map items identified by keys.
165
207
  #
166
208
  # Server returns removed data specified by return_type.
167
- def self.remove_by_key_list(bin_name, keys, return_type: MapReturnType::NONE)
168
- MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_KEY_LIST, bin_name, keys, return_type: return_type)
209
+ def self.remove_by_key_list(bin_name, keys, ctx: nil, return_type: MapReturnType::NONE)
210
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_KEY_LIST, bin_name, keys, ctx: ctx, return_type: return_type)
169
211
  end
170
212
 
171
213
  ##
@@ -176,11 +218,11 @@ module Aerospike
176
218
  # Server returns removed data specified by return_type.
177
219
  #
178
220
  # Deprecated. Use remove_by_key / remove_by_key_list instead.
179
- def self.remove_keys(bin_name, *keys, return_type: MapReturnType::NONE)
221
+ def self.remove_keys(bin_name, *keys, ctx: nil, return_type: MapReturnType::NONE)
180
222
  if keys.length > 1
181
- remove_by_key_list(bin_name, keys, return_type: return_type)
223
+ remove_by_key_list(bin_name, keys, ctx: ctx, return_type: return_type)
182
224
  else
183
- remove_by_key(bin_name, keys.first, return_type: return_type)
225
+ remove_by_key(bin_name, keys.first, ctx: ctx, return_type: return_type)
184
226
  end
185
227
  end
186
228
 
@@ -192,11 +234,11 @@ module Aerospike
192
234
  # If key_end is null, the range is greater than equal to key_begin.
193
235
  #
194
236
  # Server returns removed data specified by return_type.
195
- def self.remove_by_key_range(bin_name, key_begin, key_end = nil, return_type: MapReturnType::NONE)
237
+ def self.remove_by_key_range(bin_name, key_begin, key_end = nil, ctx: nil, return_type: MapReturnType::NONE)
196
238
  if key_end
197
- MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_KEY_INTERVAL, bin_name, key_begin, key_end, return_type: return_type)
239
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_KEY_INTERVAL, bin_name, key_begin, key_end, ctx: ctx, return_type: return_type)
198
240
  else
199
- MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_KEY_INTERVAL, bin_name, key_begin, return_type: return_type)
241
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_KEY_INTERVAL, bin_name, key_begin, ctx: ctx, return_type: return_type)
200
242
  end
201
243
  end
202
244
  singleton_class.send(:alias_method, :remove_key_range, :remove_by_key_range)
@@ -226,11 +268,11 @@ module Aerospike
226
268
  # * (5, -1) = [{4=2}, {5=15}, {9=10}]
227
269
  # * (3, 2) = [{9=10}]
228
270
  # * (3, -2) = [{0=17}, {4=2}, {5=15}, {9=10}]
229
- def self.remove_by_key_rel_index_range(bin_name, key, index, count = nil, return_type: nil)
271
+ def self.remove_by_key_rel_index_range(bin_name, key, index, count = nil, ctx: nil, return_type: nil)
230
272
  if count
231
- MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_KEY_REL_INDEX_RANGE, bin_name, key, index, count, return_type: return_type)
273
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_KEY_REL_INDEX_RANGE, bin_name, key, index, count, ctx: ctx, return_type: return_type)
232
274
  else
233
- MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_KEY_REL_INDEX_RANGE, bin_name, key, index, return_type: return_type)
275
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_KEY_REL_INDEX_RANGE, bin_name, key, index, ctx: ctx, return_type: return_type)
234
276
  end
235
277
  end
236
278
 
@@ -240,8 +282,8 @@ module Aerospike
240
282
  # Server removes map item identified by value.
241
283
  #
242
284
  # Server returns removed data specified by return_type.
243
- def self.remove_by_value(bin_name, value, return_type: MapReturnType::NONE)
244
- MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE, bin_name, value, return_type: return_type)
285
+ def self.remove_by_value(bin_name, value, ctx: nil, return_type: MapReturnType::NONE)
286
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE, bin_name, value, ctx: ctx, return_type: return_type)
245
287
  end
246
288
 
247
289
  ##
@@ -250,8 +292,8 @@ module Aerospike
250
292
  # Server removes map items identified by value.
251
293
  #
252
294
  # Server returns removed data specified by return_type.
253
- def self.remove_by_value_list(bin_name, values, return_type: MapReturnType::NONE)
254
- MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_LIST, bin_name, values, return_type: return_type)
295
+ def self.remove_by_value_list(bin_name, values, ctx: nil, return_type: MapReturnType::NONE)
296
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_LIST, bin_name, values, ctx: ctx, return_type: return_type)
255
297
  end
256
298
 
257
299
  ##
@@ -262,11 +304,11 @@ module Aerospike
262
304
  # Server returns removed data specified by return_type.
263
305
  #
264
306
  # Deprecated. Use remove_by_value / remove_by_value_list instead.
265
- def self.remove_values(bin_name, *values, return_type: MapReturnType::NONE)
307
+ def self.remove_values(bin_name, *values, ctx: nil, return_type: MapReturnType::NONE)
266
308
  if values.length > 1
267
- remove_by_value_list(bin_name, values, return_type: return_type)
309
+ remove_by_value_list(bin_name, values, ctx: ctx, return_type: return_type)
268
310
  else
269
- remove_by_value(bin_name, values.first, return_type: return_type)
311
+ remove_by_value(bin_name, values.first, ctx: ctx, return_type: return_type)
270
312
  end
271
313
  end
272
314
 
@@ -279,11 +321,11 @@ module Aerospike
279
321
  # equal to value_begin.
280
322
  #
281
323
  # Server returns removed data specified by return_type.
282
- def self.remove_by_value_range(bin_name, value_begin, value_end = nil, return_type: MapReturnType::NONE)
324
+ def self.remove_by_value_range(bin_name, value_begin, value_end = nil, ctx: nil, return_type: MapReturnType::NONE)
283
325
  if value_end
284
- MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_INTERVAL, bin_name, value_begin, value_end, return_type: return_type)
326
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_INTERVAL, bin_name, value_begin, value_end, ctx: ctx, return_type: return_type)
285
327
  else
286
- MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_INTERVAL, bin_name, value_begin, return_type: return_type)
328
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_INTERVAL, bin_name, value_begin, ctx: ctx, return_type: return_type)
287
329
  end
288
330
  end
289
331
  singleton_class.send(:alias_method, :remove_value_range, :remove_by_value_range)
@@ -308,11 +350,11 @@ module Aerospike
308
350
  # * (value, rank) = [removed items]
309
351
  # * (11, 1) = [{0=17}]
310
352
  # * (11, -1) = [{9=10}, {5=15}, {0=17}]
311
- def self.remove_by_value_rel_rank_range(bin_name, value, rank, count = nil, return_type: nil)
353
+ def self.remove_by_value_rel_rank_range(bin_name, value, rank, count = nil, ctx: nil, return_type: nil)
312
354
  if count
313
- MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_REL_RANK_RANGE, bin_name, value, rank, count, return_type: return_type)
355
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_REL_RANK_RANGE, bin_name, value, rank, count, ctx: ctx, return_type: return_type)
314
356
  else
315
- MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_REL_RANK_RANGE, bin_name, value, rank, return_type: return_type)
357
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_REL_RANK_RANGE, bin_name, value, rank, ctx: ctx, return_type: return_type)
316
358
  end
317
359
  end
318
360
 
@@ -322,8 +364,8 @@ module Aerospike
322
364
  # Server removes map item identified by index.
323
365
  #
324
366
  # Server returns removed data specified by return_type.
325
- def self.remove_by_index(bin_name, index, return_type: MapReturnType::NONE)
326
- MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_INDEX, bin_name, index, return_type: return_type)
367
+ def self.remove_by_index(bin_name, index, ctx: nil, return_type: MapReturnType::NONE)
368
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_INDEX, bin_name, index, ctx: ctx, return_type: return_type)
327
369
  end
328
370
  singleton_class.send(:alias_method, :remove_index, :remove_by_index)
329
371
 
@@ -335,11 +377,11 @@ module Aerospike
335
377
  # specified index to the end of map.
336
378
  #
337
379
  # Server returns removed data specified by return_type.
338
- def self.remove_by_index_range(bin_name, index, count = nil, return_type: MapReturnType::NONE)
380
+ def self.remove_by_index_range(bin_name, index, count = nil, ctx: nil, return_type: MapReturnType::NONE)
339
381
  if count
340
- MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_INDEX_RANGE, bin_name, index, count, return_type: return_type)
382
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_INDEX_RANGE, bin_name, index, count, ctx: ctx, return_type: return_type)
341
383
  else
342
- MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_INDEX_RANGE, bin_name, index, return_type: return_type)
384
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_INDEX_RANGE, bin_name, index, ctx: ctx, return_type: return_type)
343
385
  end
344
386
  end
345
387
  singleton_class.send(:alias_method, :remove_index_range, :remove_by_index_range)
@@ -350,8 +392,8 @@ module Aerospike
350
392
  # Server removes map item identified by rank.
351
393
  #
352
394
  # Server returns removed data specified by return_type.
353
- def self.remove_by_rank(bin_name, rank, return_type: MapReturnType::NONE)
354
- MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_RANK, bin_name, rank, return_type: return_type)
395
+ def self.remove_by_rank(bin_name, rank, ctx: nil, return_type: MapReturnType::NONE)
396
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_RANK, bin_name, rank, ctx: ctx, return_type: return_type)
355
397
  end
356
398
 
357
399
  ##
@@ -362,26 +404,26 @@ module Aerospike
362
404
  # to the last ranked.
363
405
  #
364
406
  # Server returns removed data specified by return_type.
365
- def self.remove_by_rank_range(bin_name, rank, count = nil, return_type: MapReturnType::NONE)
407
+ def self.remove_by_rank_range(bin_name, rank, count = nil, ctx: nil, return_type: MapReturnType::NONE)
366
408
  if count
367
- MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_RANK_RANGE, bin_name, rank, count, return_type: return_type)
409
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_RANK_RANGE, bin_name, rank, count, ctx: ctx, return_type: return_type)
368
410
  else
369
- MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_RANK_RANGE, bin_name, rank, return_type: return_type)
411
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_RANK_RANGE, bin_name, rank, ctx: ctx, return_type: return_type)
370
412
  end
371
413
  end
372
414
 
373
415
  ##
374
416
  # Create map size operation.
375
417
  # Server returns size of map.
376
- def self.size(bin_name)
377
- MapOperation.new(Operation::CDT_READ, SIZE, bin_name)
418
+ def self.size(bin_name, ctx: nil)
419
+ MapOperation.new(Operation::CDT_READ, SIZE, bin_name, ctx: ctx)
378
420
  end
379
421
 
380
422
  ##
381
423
  # Create map get by key operation.
382
424
  # Server selects map item identified by key and returns selected data specified by return_type.
383
- def self.get_by_key(bin_name, key, return_type: MapReturnType::NONE)
384
- MapOperation.new(Operation::CDT_READ, GET_BY_KEY, bin_name, key, return_type: return_type)
425
+ def self.get_by_key(bin_name, key, ctx: nil, return_type: MapReturnType::NONE)
426
+ MapOperation.new(Operation::CDT_READ, GET_BY_KEY, bin_name, key, ctx: ctx, return_type: return_type)
385
427
  end
386
428
  singleton_class.send(:alias_method, :get_key, :get_by_key)
387
429
 
@@ -391,8 +433,8 @@ module Aerospike
391
433
  # Server selects map items identified by keys.
392
434
  #
393
435
  # Server returns selected data specified by return_type.
394
- def self.get_by_key_list(bin_name, keys, return_type: MapReturnType::NONE)
395
- MapOperation.new(Operation::CDT_READ, GET_BY_KEY_LIST, bin_name, keys, return_type: return_type)
436
+ def self.get_by_key_list(bin_name, keys, ctx: nil, return_type: MapReturnType::NONE)
437
+ MapOperation.new(Operation::CDT_READ, GET_BY_KEY_LIST, bin_name, keys, ctx: ctx, return_type: return_type)
396
438
  end
397
439
 
398
440
  # Create map get by key range operation.
@@ -403,11 +445,11 @@ module Aerospike
403
445
  # key_begin.
404
446
  #
405
447
  # Server returns selected data specified by return_type.
406
- def self.get_by_key_range(bin_name, key_begin, key_end = nil, return_type: MapReturnType::NONE)
448
+ def self.get_by_key_range(bin_name, key_begin, key_end = nil, ctx: nil, return_type: MapReturnType::NONE)
407
449
  if key_end
408
- MapOperation.new(Operation::CDT_READ, GET_BY_KEY_INTERVAL, bin_name, key_begin, key_end, return_type: return_type)
450
+ MapOperation.new(Operation::CDT_READ, GET_BY_KEY_INTERVAL, bin_name, key_begin, key_end, ctx: ctx, return_type: return_type)
409
451
  else
410
- MapOperation.new(Operation::CDT_READ, GET_BY_KEY_INTERVAL, bin_name, key_begin, return_type: return_type)
452
+ MapOperation.new(Operation::CDT_READ, GET_BY_KEY_INTERVAL, bin_name, key_begin, ctx: ctx, return_type: return_type)
411
453
  end
412
454
  end
413
455
  singleton_class.send(:alias_method, :get_key_range, :get_by_key_range)
@@ -438,11 +480,11 @@ module Aerospike
438
480
  # * (5, -1) = [{4=2}, {5=15}, {9=10}]
439
481
  # * (3, 2) = [{9=10}]
440
482
  # * (3, -2) = [{0=17}, {4=2}, {5=15}, {9=10}]
441
- def self.get_by_key_rel_index_range(bin_name, key, index, count = nil, return_type: nil)
483
+ def self.get_by_key_rel_index_range(bin_name, key, index, count = nil, ctx: nil, return_type: nil)
442
484
  if count
443
- MapOperation.new(Operation::CDT_READ, GET_BY_KEY_REL_INDEX_RANGE, bin_name, key, index, count, return_type: return_type)
485
+ MapOperation.new(Operation::CDT_READ, GET_BY_KEY_REL_INDEX_RANGE, bin_name, key, index, count, ctx: ctx, return_type: return_type)
444
486
  else
445
- MapOperation.new(Operation::CDT_READ, GET_BY_KEY_REL_INDEX_RANGE, bin_name, key, index, return_type: return_type)
487
+ MapOperation.new(Operation::CDT_READ, GET_BY_KEY_REL_INDEX_RANGE, bin_name, key, index, ctx: ctx, return_type: return_type)
446
488
  end
447
489
  end
448
490
 
@@ -451,8 +493,8 @@ module Aerospike
451
493
  # Server selects map items identified by value.
452
494
  #
453
495
  # Server returns selected data specified by return_type.
454
- def self.get_by_value(bin_name, value, return_type: MapReturnType::NONE)
455
- MapOperation.new(Operation::CDT_READ, GET_BY_VALUE, bin_name, value, return_type: return_type)
496
+ def self.get_by_value(bin_name, value, ctx: nil, return_type: MapReturnType::NONE)
497
+ MapOperation.new(Operation::CDT_READ, GET_BY_VALUE, bin_name, value, ctx: ctx, return_type: return_type)
456
498
  end
457
499
  singleton_class.send(:alias_method, :get_value, :get_by_value)
458
500
 
@@ -461,8 +503,8 @@ module Aerospike
461
503
  # Server selects map items identified by value list.
462
504
  #
463
505
  # Server returns selected data specified by return_type.
464
- def self.get_by_value_list(bin_name, values, return_type: MapReturnType::NONE)
465
- MapOperation.new(Operation::CDT_READ, GET_BY_VALUE_LIST, bin_name, values, return_type: return_type)
506
+ def self.get_by_value_list(bin_name, values, ctx: nil, return_type: MapReturnType::NONE)
507
+ MapOperation.new(Operation::CDT_READ, GET_BY_VALUE_LIST, bin_name, values, ctx: ctx, return_type: return_type)
466
508
  end
467
509
 
468
510
  # Create map get by value range operation.
@@ -473,11 +515,11 @@ module Aerospike
473
515
  # equal to value_begin.
474
516
  #
475
517
  # Server returns selected data specified by return_type.
476
- def self.get_by_value_range(bin_name, value_begin, value_end = nil, return_type: MapReturnType::NONE)
518
+ def self.get_by_value_range(bin_name, value_begin, value_end = nil, ctx: nil, return_type: MapReturnType::NONE)
477
519
  if value_end
478
- MapOperation.new(Operation::CDT_READ, GET_BY_VALUE_INTERVAL, bin_name, value_begin, value_end, return_type: return_type)
520
+ MapOperation.new(Operation::CDT_READ, GET_BY_VALUE_INTERVAL, bin_name, value_begin, value_end, ctx: ctx, return_type: return_type)
479
521
  else
480
- MapOperation.new(Operation::CDT_READ, GET_BY_VALUE_INTERVAL, bin_name, value_begin, return_type: return_type)
522
+ MapOperation.new(Operation::CDT_READ, GET_BY_VALUE_INTERVAL, bin_name, value_begin, ctx: ctx, return_type: return_type)
481
523
  end
482
524
  end
483
525
  singleton_class.send(:alias_method, :get_value_range, :get_by_value_range)
@@ -502,11 +544,11 @@ module Aerospike
502
544
  # * (value, rank) = [selected items]
503
545
  # * (11, 1) = [{0=17}]
504
546
  # * (11, -1) = [{9=10}, {5=15}, {0=17}]
505
- def self.get_by_value_rel_rank_range(bin_name, value, rank, count = nil, return_type: nil)
547
+ def self.get_by_value_rel_rank_range(bin_name, value, rank, count = nil, ctx: nil, return_type: nil)
506
548
  if count
507
- MapOperation.new(Operation::CDT_READ, GET_BY_VALUE_REL_RANK_RANGE, bin_name, value, rank, count, return_type: return_type)
549
+ MapOperation.new(Operation::CDT_READ, GET_BY_VALUE_REL_RANK_RANGE, bin_name, value, rank, count, ctx: ctx, return_type: return_type)
508
550
  else
509
- MapOperation.new(Operation::CDT_READ, GET_BY_VALUE_REL_RANK_RANGE, bin_name, value, rank, return_type: return_type)
551
+ MapOperation.new(Operation::CDT_READ, GET_BY_VALUE_REL_RANK_RANGE, bin_name, value, rank, ctx: ctx, return_type: return_type)
510
552
  end
511
553
  end
512
554
 
@@ -516,8 +558,8 @@ module Aerospike
516
558
  # Server selects map item identified by index.
517
559
  #
518
560
  # Server returns selected data specified by return_type.
519
- def self.get_by_index(bin_name, index, return_type: MapReturnType::NONE)
520
- MapOperation.new(Operation::CDT_READ, GET_BY_INDEX, bin_name, index, return_type: return_type)
561
+ def self.get_by_index(bin_name, index, ctx: nil, return_type: MapReturnType::NONE)
562
+ MapOperation.new(Operation::CDT_READ, GET_BY_INDEX, bin_name, index, ctx: ctx, return_type: return_type)
521
563
  end
522
564
  singleton_class.send(:alias_method, :get_index, :get_by_index)
523
565
 
@@ -528,11 +570,11 @@ module Aerospike
528
570
  # specified index to the end of map.
529
571
  #
530
572
  # Server returns selected data specified by return_type.
531
- def self.get_by_index_range(bin_name, index, count = nil, return_type: MapReturnType::NONE)
573
+ def self.get_by_index_range(bin_name, index, count = nil, ctx: nil, return_type: MapReturnType::NONE)
532
574
  if count
533
- MapOperation.new(Operation::CDT_READ, GET_BY_INDEX_RANGE, bin_name, index, count, return_type: return_type)
575
+ MapOperation.new(Operation::CDT_READ, GET_BY_INDEX_RANGE, bin_name, index, count, ctx: ctx, return_type: return_type)
534
576
  else
535
- MapOperation.new(Operation::CDT_READ, GET_BY_INDEX_RANGE, bin_name, index, return_type: return_type)
577
+ MapOperation.new(Operation::CDT_READ, GET_BY_INDEX_RANGE, bin_name, index, ctx: ctx, return_type: return_type)
536
578
  end
537
579
  end
538
580
  singleton_class.send(:alias_method, :get_index_range, :get_by_index_range)
@@ -542,8 +584,8 @@ module Aerospike
542
584
  # Server selects map item identified by rank.
543
585
  #
544
586
  # Server returns selected data specified by return_type.
545
- def self.get_by_rank(bin_name, rank, return_type: MapReturnType::NONE)
546
- MapOperation.new(Operation::CDT_READ, GET_BY_RANK, bin_name, rank, return_type: return_type)
587
+ def self.get_by_rank(bin_name, rank, ctx: nil, return_type: MapReturnType::NONE)
588
+ MapOperation.new(Operation::CDT_READ, GET_BY_RANK, bin_name, rank, ctx: ctx, return_type: return_type)
547
589
  end
548
590
 
549
591
  # Create map get by rank range operation.
@@ -553,11 +595,11 @@ module Aerospike
553
595
  # to the last ranked item.
554
596
  #
555
597
  # Server returns selected data specified by return_type.
556
- def self.get_by_rank_range(bin_name, rank, count = nil, return_type: MapReturnType::NONE)
598
+ def self.get_by_rank_range(bin_name, rank, count = nil, ctx: nil, return_type: MapReturnType::NONE)
557
599
  if count
558
- MapOperation.new(Operation::CDT_READ, GET_BY_RANK_RANGE, bin_name, rank, count, return_type: return_type)
600
+ MapOperation.new(Operation::CDT_READ, GET_BY_RANK_RANGE, bin_name, rank, count, ctx: ctx, return_type: return_type)
559
601
  else
560
- MapOperation.new(Operation::CDT_READ, GET_BY_RANK_RANGE, bin_name, rank, return_type: return_type)
602
+ MapOperation.new(Operation::CDT_READ, GET_BY_RANK_RANGE, bin_name, rank, ctx: ctx, return_type: return_type)
561
603
  end
562
604
  end
563
605
 
@@ -575,12 +617,31 @@ module Aerospike
575
617
 
576
618
  def pack_bin_value
577
619
  bytes = nil
620
+
621
+ args = arguments.dup
622
+ args.unshift(return_type) if return_type
623
+
578
624
  Packer.use do |packer|
579
- packer.write_raw_short(map_op)
580
- args = arguments.dup
581
- args.unshift(return_type) if return_type
625
+ if @ctx != nil && @ctx.length > 0
626
+ packer.write_array_header(3)
627
+ Value.of(0xff).pack(packer)
628
+
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
634
+
635
+ packer.write_array_header(args.length+1)
636
+ Value.of(@map_op).pack(packer)
637
+ else
638
+ packer.write_raw_short(@map_op)
639
+ if args.length > 0
640
+ packer.write_array_header(args.length)
641
+ end
642
+ end
643
+
582
644
  if args.length > 0
583
- packer.write_array_header(args.length)
584
645
  args.each do |value|
585
646
  Value.of(value).pack(packer)
586
647
  end