aerospike 1.0.12 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2108e0a0c9b5702676743d0164661891aeeaad17
4
- data.tar.gz: 00009afe933f69b92438e3f9bf143db6d1e8e9b3
3
+ metadata.gz: 235bd4afc86f8bf263a458a22f7e13a247bdda6c
4
+ data.tar.gz: 35e141ffb29702a9cf1ea046fe731a89e2de9bb5
5
5
  SHA512:
6
- metadata.gz: 31ba8b20828e50ced593cd94dd1134053dc6f6d0bdc0b66c3c100865e8612d3282039a43a847b2962777bca2c5e2a9cac3b1140e654e874c5360a5b3c1e299a2
7
- data.tar.gz: 37b8b4d078d5a011c3a4c0008f94893694c30f38372557611c75a9069e94359f0e909af1404aa4742c8579276f28891156862ab26da42d602ac1a8f5a86c84cd
6
+ metadata.gz: e4e54c1051e29cf790f4df58ee1822c3e20fb8120f3d2aef61c69c0da516a6389d429a99d71ad8d1df8fd05b92f18c245b9e0bd2215610ee4c527dca36ae72ed
7
+ data.tar.gz: be8ec2b6d0247dc6fdec77eba9269561970a6688d0a328cfda38cb7a822c9b9047cdb6ff34a101dfcf60b10de629daf9113cebfa3095bd4b3d2c3cb20e04bfca
@@ -1,3 +1,21 @@
1
+ v2.0.0 / 2016-05-27
2
+ ===================
3
+
4
+ * **Breaking Changes** - Please refer to detailed list of [API changes](docs/api-changes.md#v2.0.0) for further details.
5
+ * Incompatible integer key digests: digests for integer keys computed by v2 and v1 are different; the Aerospike server uses the key digest to retrieve records. This will impact your ability to read records with integer keys that were created by a v1 client version.
6
+ * Backward incompatible changes to the `Aerospike::Client.new` initializer.
7
+ * The `Aerospike::Client.new_many` initializer has been removed; use `Aerospike::Client.new` instead.
8
+ * Drop support for Ruby 1.9.3; requires Ruby 2.0 or later.
9
+
10
+ * **Improvements**
11
+ * Add support for List and Map operations on List/Map Complex Data Types (CDT); requires Aerospike Server version 3.9 or later. [CLIENT-559]
12
+ * Read Aerospike server address from AEROSPIKE_HOSTS env variable if not specified explicity in client constructor.
13
+ * Add 2.3.1 to supported Ruby versions on Travis-CI.
14
+
15
+ * **Fixes**
16
+ * Fix digest creation for integer keys. [PR #34](https://github.com/aerospike/aerospike-client-ruby/pull/34). Thanks to [@murphyslaw](https://github.com/murphyslaw)!
17
+ * Prevent "value must be enumerable" error when client cannot connect to cluster. [#35](https://github.com/aerospike/aerospike-client-ruby/issues/35). Thanks to [@rohanthewiz](https://github.com/rohanthewiz)!
18
+
1
19
  1.0.12 / 2016-02-11
2
20
  ===================
3
21
 
@@ -10,7 +28,8 @@
10
28
  bins; thanks to [fs-wu](https://github.com/fs-wu) for finding the issue and
11
29
  reporting it. [aerospike/aerospike-client-ruby#33]
12
30
 
13
- ## December 4 2015 (1.0.11)
31
+ 1.0.11 / 2015-12-04
32
+ ===================
14
33
 
15
34
  Major feature and bug fix release.
16
35
 
@@ -39,7 +58,8 @@
39
58
 
40
59
  * Scan and Query termination has been fixed.
41
60
 
42
- ## September 22 2015 (1.0.10)
61
+ 1.0.10 / 2015-09-22
62
+ ===================
43
63
 
44
64
  Major fix release.
45
65
 
@@ -51,7 +71,8 @@
51
71
 
52
72
  * Fixes an issue with dead connections that would cause an infinite loop.
53
73
 
54
- ## Augest 11 2015 (1.0.9)
74
+ 1.0.9 / 2015-08-11
75
+ ==================
55
76
 
56
77
  Minor fix release.
57
78
 
@@ -59,7 +80,8 @@
59
80
 
60
81
  * Sends the original key value to the server for all relevant commands, including `operate` and `execute_udf`
61
82
 
62
- ## July 23 2015 (1.0.8)
83
+ 1.0.8 / 2015-07-23
84
+ ==================
63
85
 
64
86
  Minor fix release.
65
87
 
@@ -75,7 +97,8 @@
75
97
 
76
98
  * Fixes an issue with including the `statement.rb` in the manifest. Thanks to [Ángel M](https://github.com/Angelmmiguel)
77
99
 
78
- ## May 15 2015 (1.0.7)
100
+ 1.0.7 / 2015-05-15
101
+ ==================
79
102
 
80
103
  Minor fixes.
81
104
 
@@ -95,7 +118,8 @@
95
118
 
96
119
  * Removed deprecated `SetCapacity()` and `GetCapacity()` methods for LDTs.
97
120
 
98
- ## April 2 2015 (1.0.6)
121
+ 1.0.6 / 2015-04-02
122
+ ==================
99
123
 
100
124
  Minor fixes.
101
125
 
@@ -103,7 +127,8 @@
103
127
 
104
128
  * Fixed running a stream query without parameters to the function.
105
129
 
106
- ## March 25 2015 (1.0.5)
130
+ 1.0.5 / 2015-03-25
131
+ ==================
107
132
 
108
133
  Minor improvements.
109
134
 
@@ -111,7 +136,8 @@
111
136
 
112
137
  * Added `:execute_udf_on_query` method to `Aerospike::Client`
113
138
 
114
- ## March 24 2015 (1.0.4)
139
+ 1.0.4 / 2015-03-24
140
+ ==================
115
141
 
116
142
  Hot fix.
117
143
 
@@ -119,7 +145,8 @@
119
145
 
120
146
  * Close a socket if connection raises an exception to avoid leaking the file descriptor.
121
147
 
122
- ## March 24 2015 (1.0.3)
148
+ 1.0.3 / 2015-03-24
149
+ ==================
123
150
 
124
151
  Minor fixes and improvements.
125
152
 
@@ -132,7 +159,8 @@
132
159
  * Wait for a good connection on `socket.connect_nonblock` to prevent infinite loops on read/write operations.
133
160
 
134
161
 
135
- ## March 14 2015 (1.0.2)
162
+ 1.0.2 / 2015-03-14
163
+ ==================
136
164
 
137
165
  Minor improvements.
138
166
 
@@ -140,7 +168,8 @@
140
168
 
141
169
  * Added `:new_many` method to `Aerospike::Client`
142
170
 
143
- ## Jan 28 2015 (1.0.1)
171
+ 1.0.1 / 2015-01-28
172
+ ==================
144
173
 
145
174
  Hot fix.
146
175
 
@@ -148,7 +177,8 @@
148
177
 
149
178
  * Added `bcrypt` to the gem dependencies.
150
179
 
151
- ## Jan 26 2015 (1.0.0)
180
+ 1.0.0 / 2015-01-26
181
+ ==================
152
182
 
153
183
  Major release. With this release, Ruby client graduates to version 1.
154
184
 
@@ -170,7 +200,8 @@
170
200
 
171
201
  * fixed size returned from `BytesValue.write`
172
202
 
173
- ## Dec 28 2014 (0.1.6)
203
+ 0.1.6 / 2014-12-28
204
+ ==================
174
205
 
175
206
  Minor features added, minor fixes and improvements.
176
207
 
@@ -184,7 +215,8 @@
184
215
  * Fixed setting timeout on connection
185
216
  * Fixed exception handling typo for Connection#write
186
217
 
187
- ## Dec 8 2014 (0.1.5)
218
+ 0.1.5 / 2014-12-08
219
+ ==================
188
220
 
189
221
  Major features added, minor fixes and improvements.
190
222
 
@@ -197,7 +229,8 @@
197
229
 
198
230
  * Fixed getting back results only for specified bin names.
199
231
 
200
- ## Oct 27 2014 (0.1.3)
232
+ 0.1.3 / 2014-10-27
233
+ ==================
201
234
 
202
235
  Minor fix.
203
236
 
@@ -205,7 +238,8 @@
205
238
 
206
239
  * Fixed LDT bin and module name packing.
207
240
 
208
- ## Oct 25 2014 (0.1.2)
241
+ 0.1.2 / 2014-10-25
242
+ ==================
209
243
 
210
244
  Minor fix.
211
245
 
@@ -213,7 +247,8 @@
213
247
 
214
248
  * Fixed String unpacking for single byte strings.
215
249
 
216
- ## Oct 25 2014 (0.1.1)
250
+ 0.1.1 / 2014-10-25
251
+ ==================
217
252
 
218
253
  Minor fixes.
219
254
 
@@ -222,6 +257,7 @@
222
257
  * Fixed String packing header in Hash and Array.
223
258
  * #find on LDTs returns `nil` instad of raising an exception if the item is not found.
224
259
 
225
- ## Oct 14 2014 (0.1.0)
260
+ 0.1.0 / 2014-10-14
261
+ ==================
226
262
 
227
263
  * Initial Release.
data/README.md CHANGED
@@ -1,4 +1,9 @@
1
- # Aerospike Ruby Client
1
+ # Aerospike Ruby Client [![travis][travis-image]][travis-url] [![gem][gem-image]][gem-url]
2
+
3
+ [travis-image]: https://travis-ci.org/aerospike/aerospike-client-ruby.svg?branch=master
4
+ [travis-url]: https://travis-ci.org/aerospike/aerospike-client-ruby
5
+ [gem-image]: https://img.shields.io/gem/v/aerospike.svg
6
+ [gem-url]: https://rubygems.org/gems/aerospike
2
7
 
3
8
  An Aerospike library for Ruby.
4
9
 
@@ -26,7 +31,7 @@ require 'aerospike'
26
31
 
27
32
  include Aerospike
28
33
 
29
- client = Client.new("127.0.0.1", 3000)
34
+ client = Client.new("127.0.0.1")
30
35
 
31
36
  key = Key.new('test', 'test', 'key value')
32
37
  bin_map = {
@@ -11,6 +11,8 @@ require 'aerospike/atomic/atomic'
11
11
 
12
12
  require 'aerospike/client'
13
13
  require 'aerospike/utils/pool'
14
+ require 'aerospike/utils/packer'
15
+ require 'aerospike/utils/unpacker'
14
16
  require 'aerospike/utils/epoc'
15
17
  require 'aerospike/utils/buffer'
16
18
  require 'aerospike/host'
@@ -40,6 +42,12 @@ require 'aerospike/command/admin_command'
40
42
  require 'aerospike/command/unsupported_particle_type_validator'
41
43
  require 'aerospike/key'
42
44
  require 'aerospike/operation'
45
+ require 'aerospike/cdt/list_operation'
46
+ require 'aerospike/cdt/map_operation'
47
+ require 'aerospike/cdt/map_order'
48
+ require 'aerospike/cdt/map_return_type'
49
+ require 'aerospike/cdt/map_write_mode'
50
+ require 'aerospike/cdt/map_policy'
43
51
  require 'aerospike/geo_json'
44
52
 
45
53
  require 'aerospike/policy/client_policy'
@@ -0,0 +1,199 @@
1
+ # encoding: utf-8
2
+ # Copyright 2016 Aerospike, Inc.
3
+ #
4
+ # Portions may be licensed to Aerospike, Inc. under one or more contributor
5
+ # license agreements.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may not
8
+ # use this file except in compliance with the License. You may obtain a copy of
9
+ # the License at http:#www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14
+ # License for the specific language governing permissions and limitations under
15
+ # the License.
16
+
17
+ module Aerospike
18
+ module CDT
19
+
20
+ ##
21
+ # List bin operations. Create list operations used by the Client#operate
22
+ # command. List operations support negative indexing. If the index is
23
+ # negative, the resolved index starts backwards from end of list.
24
+ #
25
+ # Index/Range examples:
26
+ # * Index 0: First item in list.
27
+ # * Index 4: Fifth item in list.
28
+ # * Index -1: Last item in list.
29
+ # * Index -3: Third to last item in list.
30
+ # * Index 1 Count 2: Second and third items in list.
31
+ # * Index -3 Count 3: Last three items in list.
32
+ # * Index -5 Count 4: Range between fifth to last item to second to last
33
+ # item inclusive.
34
+ #
35
+ # If an index is out of bounds, a parameter error will be returned. If a
36
+ # range is partially out of bounds, the valid part of the range will be
37
+ # returned.
38
+
39
+ class ListOperation
40
+
41
+ APPEND = 1
42
+ APPEND_ITEMS = 2
43
+ INSERT = 3
44
+ INSERT_ITEMS = 4
45
+ POP = 5
46
+ POP_RANGE = 6
47
+ REMOVE = 7
48
+ REMOVE_RANGE = 8
49
+ SET = 9
50
+ TRIM = 10
51
+ CLEAR = 11
52
+ SIZE = 16
53
+ GET = 17
54
+ GET_RANGE = 18
55
+
56
+ ##
57
+ # Create list append operation.
58
+ # Server appends value(s) to end of the list bin.
59
+ # Server returns list size.
60
+ def self.append(bin_name, *values)
61
+ if values.length > 1
62
+ create_operation(Operation::CDT_MODIFY, APPEND_ITEMS, bin_name, values)
63
+ else
64
+ create_operation(Operation::CDT_MODIFY, APPEND, bin_name, values.first)
65
+ end
66
+ end
67
+
68
+ ##
69
+ # Create list insert operation.
70
+ # Server inserts value(s) at the specified index of the list bin.
71
+ # Server returns list size.
72
+ def self.insert(bin_name, index, *values)
73
+ if values.length > 1
74
+ create_operation(Operation::CDT_MODIFY, INSERT_ITEMS, bin_name, index, values)
75
+ else
76
+ create_operation(Operation::CDT_MODIFY, INSERT, bin_name, index, values.first)
77
+ end
78
+ end
79
+
80
+ ##
81
+ # Create list pop operation.
82
+ # Server returns item at specified index and removes item from list bin.
83
+ def self.pop(bin_name, index)
84
+ create_operation(Operation::CDT_MODIFY, POP, bin_name, index)
85
+ end
86
+
87
+ ##
88
+ # Create list pop range operation.
89
+ # Server returns "count" items starting at specified index and removes
90
+ # items from list bin. If "count" is not specified, the server returns
91
+ # items starting at the specified index to the end of the list and
92
+ # removes those items from the list bin.
93
+ def self.pop_range(bin_name, index, count=nil)
94
+ if count
95
+ create_operation(Operation::CDT_MODIFY, POP_RANGE, bin_name, index, count)
96
+ else
97
+ create_operation(Operation::CDT_MODIFY, POP_RANGE, bin_name, index)
98
+ end
99
+ end
100
+
101
+ ##
102
+ # Create list remove operation.
103
+ # Server removes item at specified index from list bin.
104
+ # Server returns number of items removed.
105
+ def self.remove(bin_name, index)
106
+ create_operation(Operation::CDT_MODIFY, REMOVE, bin_name, index)
107
+ end
108
+
109
+ ##
110
+ # Create list remove range operation.
111
+ # Server removes "count" items at specified index from list bin. If
112
+ # "count" is not specified, the server removes all items starting at the
113
+ # specified index to the end of the list.
114
+ # Server returns number of items removed.
115
+ def self.remove_range(bin_name, index, count=nil)
116
+ if count
117
+ create_operation(Operation::CDT_MODIFY, REMOVE_RANGE, bin_name, index, count)
118
+ else
119
+ create_operation(Operation::CDT_MODIFY, REMOVE_RANGE, bin_name, index)
120
+ end
121
+ end
122
+
123
+ ##
124
+ # Create list set operation.
125
+ # Server sets item value at specified index in list bin.
126
+ # Server does not return a result by default.
127
+ def self.set(bin_name, index, value)
128
+ create_operation(Operation::CDT_MODIFY, SET, bin_name, index, value)
129
+ end
130
+
131
+ ##
132
+ # Create list trim operation.
133
+ # Server removes items in list bin that do not fall into range specified
134
+ # by index and count. If count is not specified, server will keep all
135
+ # items starting at the specified index to the end of the list.
136
+ # Server returns number of items removed.
137
+ def self.trim(bin_name, index, count=nil)
138
+ if count
139
+ create_operation(Operation::CDT_MODIFY, TRIM, bin_name, index, count)
140
+ else
141
+ create_operation(Operation::CDT_MODIFY, TRIM, bin_name, index)
142
+ end
143
+ end
144
+
145
+ ##
146
+ # Create list clear operation.
147
+ # Server removes all items in the list bin.
148
+ # Server does not return a result by default.
149
+ def self.clear(bin_name)
150
+ create_operation(Operation::CDT_MODIFY, CLEAR, bin_name)
151
+ end
152
+
153
+ ##
154
+ # Create list size operation.
155
+ # Server returns size of list.
156
+ def self.size(bin_name)
157
+ create_operation(Operation::CDT_READ, SIZE, bin_name)
158
+ end
159
+
160
+ ##
161
+ # Create list get operation.
162
+ # Server returns the item at the specified index in the list bin.
163
+ def self.get(bin_name, index)
164
+ create_operation(Operation::CDT_READ, GET, bin_name, index)
165
+ end
166
+
167
+ ##
168
+ # Create list get range operation.
169
+ # Server returns "count" items starting at the specified index in the
170
+ # list bin. If "count" is not specified, the server returns all items
171
+ # starting at the specified index to the end of the list.
172
+ def self.get_range(bin_name, index, count=nil)
173
+ if count
174
+ create_operation(Operation::CDT_READ, GET_RANGE, bin_name, index, count)
175
+ else
176
+ create_operation(Operation::CDT_READ, GET_RANGE, bin_name, index)
177
+ end
178
+ end
179
+
180
+ private
181
+
182
+ def self.create_operation(type, cdt_type, bin, *args)
183
+ bytes = nil
184
+ Packer.use do |packer|
185
+ packer.write_raw_short(cdt_type)
186
+ if args.length > 0
187
+ packer.write_array_header(args.length)
188
+ args.each do |value|
189
+ Value.of(value).pack(packer)
190
+ end
191
+ end
192
+ bytes = packer.bytes
193
+ end
194
+ return Operation.new(type, bin, BytesValue.new(bytes))
195
+ end
196
+
197
+ end
198
+ end
199
+ end
@@ -0,0 +1,352 @@
1
+ # encoding: utf-8
2
+ # Copyright 2016 Aerospike, Inc.
3
+ #
4
+ # Portions may be licensed to Aerospike, Inc. under one or more contributor
5
+ # license agreements.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may not
8
+ # use this file except in compliance with the License. You may obtain a copy of
9
+ # the License at http:#www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14
+ # License for the specific language governing permissions and limitations under
15
+ # the License.
16
+
17
+ module Aerospike
18
+ module CDT
19
+
20
+ class MapOperation < Operation
21
+
22
+ SET_TYPE = 64
23
+ ADD = 65
24
+ ADD_ITEMS = 66
25
+ PUT = 67
26
+ PUT_ITEMS = 68
27
+ REPLACE = 69
28
+ REPLACE_ITEMS = 70
29
+ INCREMENT = 73
30
+ DECREMENT = 74
31
+ CLEAR = 75
32
+ REMOVE_BY_KEY = 76
33
+ REMOVE_BY_INDEX = 77
34
+ REMOVE_BY_RANK = 79
35
+ REMOVE_BY_KEY_LIST = 81
36
+ REMOVE_BY_VALUE = 82
37
+ REMOVE_BY_VALUE_LIST = 83
38
+ REMOVE_BY_KEY_INTERVAL = 84
39
+ REMOVE_BY_INDEX_RANGE = 85
40
+ REMOVE_BY_VALUE_INTERVAL = 86
41
+ REMOVE_BY_RANK_RANGE = 87
42
+ SIZE = 96
43
+ GET_BY_KEY = 97
44
+ GET_BY_INDEX = 98
45
+ GET_BY_RANK = 100
46
+ GET_BY_VALUE = 102
47
+ GET_BY_KEY_INTERVAL = 103
48
+ GET_BY_INDEX_RANGE = 104
49
+ GET_BY_VALUE_INTERVAL = 105
50
+ GET_BY_RANK_RANGE = 106
51
+
52
+ attr_reader :map_op, :arguments, :policy, :return_type
53
+
54
+ def initialize(op_type, map_op, bin_name, *arguments, policy: nil, return_type: nil)
55
+ @op_type = op_type
56
+ @bin_name = bin_name
57
+ @bin_value = nil
58
+ @map_op = map_op
59
+ @arguments = arguments
60
+ @policy = policy
61
+ @return_type = return_type
62
+ self
63
+ end
64
+
65
+ ##
66
+ # Create set map policy operation.
67
+ # Server sets map policy attributes. Server returns null.
68
+ #
69
+ # The required map policy attributes can be changed after the map is created.
70
+ def self.set_policy(bin_name, policy)
71
+ MapOperation.new(Operation::CDT_MODIFY, SET_TYPE, bin_name, policy: policy)
72
+ end
73
+
74
+ ##
75
+ # Create map put operation.
76
+ # Server writes key/value item to map bin and returns map size.
77
+ #
78
+ # The map policy dictates the type of map to create when it does not exist.
79
+ # The map policy also specifies the mode used when writing items to the map.
80
+ def self.put(bin_name, key, value, policy: MapPolicy::DEFAULT)
81
+ cmd =
82
+ case policy.write_mode
83
+ when MapWriteMode::UPDATE then PUT
84
+ when MapWriteMode::UPDATE_ONLY then REPLACE
85
+ when MapWriteMode::CREATE_ONLY then ADD
86
+ else PUT
87
+ end
88
+ MapOperation.new(Operation::CDT_MODIFY, cmd, bin_name, key, value, policy: policy)
89
+ end
90
+
91
+ ##
92
+ # Create map put items operation
93
+ # Server writes each map item to map bin and returns map size.
94
+ #
95
+ # The map policy dictates the type of map to create when it does not exist.
96
+ # The map policy also specifies the mode used when writing items to the map.
97
+ def self.put_items(bin_name, values, policy: MapPolicy::DEFAULT)
98
+ cmd =
99
+ case policy.write_mode
100
+ when MapWriteMode::UPDATE then PUT_ITEMS
101
+ when MapWriteMode::UPDATE_ONLY then REPLACE_ITEMS
102
+ when MapWriteMode::CREATE_ONLY then ADD_ITEMS
103
+ else PUT_ITEMS
104
+ end
105
+ MapOperation.new(Operation::CDT_MODIFY, cmd, bin_name, values, policy: policy)
106
+ end
107
+
108
+ ##
109
+ # Create map increment operation.
110
+ # Server increments values by incr for all items identified by key and returns final result.
111
+ # Valid only for numbers.
112
+ #
113
+ # The map policy dictates the type of map to create when it does not exist.
114
+ # The map policy also specifies the mode used when writing items to the map.
115
+ def self.increment(bin_name, key, incr, policy: MapPolicy::DEFAULT)
116
+ MapOperation.new(Operation::CDT_MODIFY, INCREMENT, bin_name, key, incr, policy: policy)
117
+ end
118
+
119
+ ##
120
+ # Create map decrement operation.
121
+ # Server decrements values by decr for all items identified by key and returns final result.
122
+ # Valid only for numbers.
123
+ #
124
+ # The map policy dictates the type of map to create when it does not exist.
125
+ # The map policy also specifies the mode used when writing items to the map.
126
+ def self.decrement(bin_name, key, decr, policy: MapPolicy::DEFAULT)
127
+ MapOperation.new(Operation::CDT_MODIFY, DECREMENT, bin_name, key, decr, policy: policy)
128
+ end
129
+
130
+ ##
131
+ # Create map clear operation.
132
+ # Server removes all items in map. Server returns null.
133
+ def self.clear(bin_name)
134
+ MapOperation.new(Operation::CDT_MODIFY, CLEAR, bin_name)
135
+ end
136
+
137
+ ##
138
+ # Create map remove operation.
139
+ # Server removes map item identified by key and returns removed data specified by return_type.
140
+ def self.remove_keys(bin_name, *keys, return_type: MapReturnType::NONE)
141
+ if keys.length > 1
142
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_KEY_LIST, bin_name, keys, return_type: return_type)
143
+ else
144
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_KEY, bin_name, keys.first, return_type: return_type)
145
+ end
146
+ end
147
+
148
+ ##
149
+ # Create map remove operation.
150
+ # Server removes map items identified by key range (key_begin inclusive, key_end exclusive).
151
+ # If key_begin is null, the range is less than key_end.
152
+ # If key_end is null, the range is greater than equal to key_begin.
153
+ #
154
+ # Server returns removed data specified by return_type.
155
+ def self.remove_key_range(bin_name, key_begin, key_end = nil, return_type: MapReturnType::NONE)
156
+ if key_end
157
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_KEY_INTERVAL, bin_name, key_begin, key_end, return_type: return_type)
158
+ else
159
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_KEY_INTERVAL, bin_name, key_begin, return_type: return_type)
160
+ end
161
+ end
162
+
163
+ ##
164
+ # Create map remove operation.
165
+ # Server removes map items identified by value and returns removed data specified by return_type.
166
+ def self.remove_values(bin_name, *values, return_type: MapReturnType::NONE)
167
+ if values.length > 1
168
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_LIST, bin_name, values, return_type: return_type)
169
+ else
170
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE, bin_name, values.first, return_type: return_type)
171
+ end
172
+ end
173
+
174
+ ##
175
+ # Create map remove operation.
176
+ # Server removes map items identified by value range (value_begin inclusive, value_end exclusive).
177
+ # If value_begin is null, the range is less than value_end.
178
+ # If value_end is null, the range is greater than equal to value_begin.
179
+ #
180
+ # Server returns removed data specified by return_type.
181
+ def self.remove_value_range(bin_name, value_begin, value_end = nil, return_type: MapReturnType::NONE)
182
+ if value_end
183
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_INTERVAL, bin_name, value_begin, value_end, return_type: return_type)
184
+ else
185
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_VALUE_INTERVAL, bin_name, value_begin, return_type: return_type)
186
+ end
187
+ end
188
+
189
+ ##
190
+ # Create map remove operation.
191
+ # Server removes map item identified by index and returns removed data specified by return_type.
192
+ def self.remove_index(bin_name, index, return_type: MapReturnType::NONE)
193
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_INDEX, bin_name, index, return_type: return_type)
194
+ end
195
+
196
+ ##
197
+ # Create map remove operation.
198
+ # Server removes "count" map items starting at specified index and
199
+ # returns removed data specified by return_type. If "count" is not
200
+ # specified, the server selects map items starting at specified index to
201
+ # the end of map.
202
+ def self.remove_index_range(bin_name, index, count = nil, return_type: MapReturnType::NONE)
203
+ if count
204
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_INDEX_RANGE, bin_name, index, count, return_type: return_type)
205
+ else
206
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_INDEX_RANGE, bin_name, index, return_type: return_type)
207
+ end
208
+ end
209
+
210
+ ##
211
+ # Create map remove operation.
212
+ # Server removes map item identified by rank and returns removed data specified by return_type.
213
+ def self.remove_by_rank(bin_name, rank, return_type: MapReturnType::NONE)
214
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_RANK, bin_name, rank, return_type: return_type)
215
+ end
216
+
217
+ ##
218
+ # Create map remove operation.
219
+ # Server selects "count" map items starting at specified rank and returns
220
+ # selected data specified by return_type. If "count" is not specified,
221
+ # server removes map items starting at specified rank to the last ranked.
222
+ def self.remove_by_rank_range(bin_name, rank, count = nil, return_type: MapReturnType::NONE)
223
+ if count
224
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_RANK_RANGE, bin_name, rank, count, return_type: return_type)
225
+ else
226
+ MapOperation.new(Operation::CDT_MODIFY, REMOVE_BY_RANK_RANGE, bin_name, rank, return_type: return_type)
227
+ end
228
+ end
229
+
230
+ ##
231
+ # Create map size operation.
232
+ # Server returns size of map.
233
+ def self.size(bin_name)
234
+ MapOperation.new(Operation::CDT_READ, SIZE, bin_name)
235
+ end
236
+
237
+ ##
238
+ # Create map get by key operation.
239
+ # Server selects map item identified by key and returns selected data specified by return_type.
240
+ def self.get_key(bin_name, key, return_type: MapReturnType::NONE)
241
+ MapOperation.new(Operation::CDT_READ, GET_BY_KEY, bin_name, key, return_type: return_type)
242
+ end
243
+
244
+ # Create map get by key range operation.
245
+ # Server selects map items identified by key range (key_begin inclusive, key_end exclusive).
246
+ # If key_begin is null, the range is less than key_end.
247
+ # If key_end is null, the range is greater than equal to key_begin.
248
+ # <p>
249
+ # Server returns selected data specified by return_type.
250
+ def self.get_key_range(bin_name, key_begin, key_end = nil, return_type: MapReturnType::NONE)
251
+ if key_end
252
+ MapOperation.new(Operation::CDT_READ, GET_BY_KEY_INTERVAL, bin_name, key_begin, key_end, return_type: return_type)
253
+ else
254
+ MapOperation.new(Operation::CDT_READ, GET_BY_KEY_INTERVAL, bin_name, key_begin, return_type: return_type)
255
+ end
256
+ end
257
+
258
+ # Create map get by value operation.
259
+ # Server selects map items identified by value and returns selected data specified by return_type.
260
+ def self.get_value(bin_name, value, return_type: MapReturnType::NONE)
261
+ MapOperation.new(Operation::CDT_READ, GET_BY_VALUE, bin_name, value, return_type: return_type)
262
+ end
263
+
264
+ # Create map get by value range operation.
265
+ # Server selects map items identified by value range (value_begin inclusive, value_end exclusive)
266
+ # If value_begin is null, the range is less than value_end.
267
+ # If value_end is null, the range is greater than equal to value_begin.
268
+ # <p>
269
+ # Server returns selected data specified by return_type.
270
+ def self.get_value_range(bin_name, value_begin, value_end = nil, return_type: MapReturnType::NONE)
271
+ if value_end
272
+ MapOperation.new(Operation::CDT_READ, GET_BY_VALUE_INTERVAL, bin_name, value_begin, value_end, return_type: return_type)
273
+ else
274
+ MapOperation.new(Operation::CDT_READ, GET_BY_VALUE_INTERVAL, bin_name, value_begin, return_type: return_type)
275
+ end
276
+ end
277
+
278
+ # Create map get by index operation.
279
+ # Server selects map item identified by index and returns selected data specified by return_type.
280
+ def self.get_index(bin_name, index, return_type: MapReturnType::NONE)
281
+ MapOperation.new(Operation::CDT_READ, GET_BY_INDEX, bin_name, index, return_type: return_type)
282
+ end
283
+
284
+ # Create map get by index range operation.
285
+ # Server selects "count" map items starting at specified index and
286
+ # returns selected data specified by return_type. If "count" is not
287
+ # specified, server selects map items starting at specified index to the
288
+ # end of map.
289
+ def self.get_index_range(bin_name, index, count = nil, return_type: MapReturnType::NONE)
290
+ if count
291
+ MapOperation.new(Operation::CDT_READ, GET_BY_INDEX_RANGE, bin_name, index, count, return_type: return_type)
292
+ else
293
+ MapOperation.new(Operation::CDT_READ, GET_BY_INDEX_RANGE, bin_name, index, return_type: return_type)
294
+ end
295
+ end
296
+
297
+ # Create map get by rank operation.
298
+ # Server selects map item identified by rank and returns selected data
299
+ # specified by return_type.
300
+ def self.get_by_rank(bin_name, rank, return_type: MapReturnType::NONE)
301
+ MapOperation.new(Operation::CDT_READ, GET_BY_RANK, bin_name, rank, return_type: return_type)
302
+ end
303
+
304
+ # Create map get by rank range operation.
305
+ # Server selects "count" map items starting at specified rank and returns
306
+ # selected data specified by returnType. If "count" is not specified,
307
+ # server selects map items starting at specified rank to the last ranked
308
+ # item.
309
+ def self.get_by_rank_range(bin_name, rank, count = nil, return_type: MapReturnType::NONE)
310
+ if count
311
+ MapOperation.new(Operation::CDT_READ, GET_BY_RANK_RANGE, bin_name, rank, count, return_type: return_type)
312
+ else
313
+ MapOperation.new(Operation::CDT_READ, GET_BY_RANK_RANGE, bin_name, rank, return_type: return_type)
314
+ end
315
+ end
316
+
317
+ def and_return(return_type)
318
+ @return_type = return_type
319
+ @bin_value = nil
320
+ self
321
+ end
322
+
323
+ def bin_value
324
+ @bin_value ||= pack_bin_value
325
+ end
326
+
327
+ private
328
+
329
+ def pack_bin_value
330
+ bytes = nil
331
+ Packer.use do |packer|
332
+ packer.write_raw_short(map_op)
333
+ args = arguments.dup
334
+ args.unshift(return_type) if return_type
335
+ if policy && policy.write_mode != MapWriteMode::UPDATE_ONLY
336
+ args << policy.value
337
+ end
338
+ if args.length > 0
339
+ packer.write_array_header(args.length)
340
+ args.each do |value|
341
+ Value.of(value).pack(packer)
342
+ end
343
+ end
344
+ bytes = packer.bytes
345
+ end
346
+ BytesValue.new(bytes)
347
+ end
348
+
349
+ end
350
+
351
+ end
352
+ end