couchbase 3.5.2-x86_64-darwin
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 +7 -0
- data/LICENSE.txt +202 -0
- data/README.md +154 -0
- data/ext/extconf.rb +0 -0
- data/lib/active_support/cache/couchbase_store.rb +342 -0
- data/lib/couchbase/3.1/libcouchbase.bundle +0 -0
- data/lib/couchbase/3.2/libcouchbase.bundle +0 -0
- data/lib/couchbase/3.3/libcouchbase.bundle +0 -0
- data/lib/couchbase/analytics_options.rb +109 -0
- data/lib/couchbase/authenticator.rb +66 -0
- data/lib/couchbase/binary_collection.rb +130 -0
- data/lib/couchbase/binary_collection_options.rb +26 -0
- data/lib/couchbase/bucket.rb +146 -0
- data/lib/couchbase/cluster.rb +462 -0
- data/lib/couchbase/cluster_registry.rb +49 -0
- data/lib/couchbase/collection.rb +707 -0
- data/lib/couchbase/collection_options.rb +401 -0
- data/lib/couchbase/config_profiles.rb +57 -0
- data/lib/couchbase/configuration.rb +58 -0
- data/lib/couchbase/datastructures/couchbase_list.rb +160 -0
- data/lib/couchbase/datastructures/couchbase_map.rb +194 -0
- data/lib/couchbase/datastructures/couchbase_queue.rb +134 -0
- data/lib/couchbase/datastructures/couchbase_set.rb +128 -0
- data/lib/couchbase/datastructures.rb +26 -0
- data/lib/couchbase/diagnostics.rb +183 -0
- data/lib/couchbase/errors.rb +414 -0
- data/lib/couchbase/json_transcoder.rb +41 -0
- data/lib/couchbase/key_value_scan.rb +119 -0
- data/lib/couchbase/libcouchbase.rb +6 -0
- data/lib/couchbase/logger.rb +87 -0
- data/lib/couchbase/management/analytics_index_manager.rb +1129 -0
- data/lib/couchbase/management/bucket_manager.rb +445 -0
- data/lib/couchbase/management/collection_manager.rb +472 -0
- data/lib/couchbase/management/collection_query_index_manager.rb +224 -0
- data/lib/couchbase/management/query_index_manager.rb +619 -0
- data/lib/couchbase/management/scope_search_index_manager.rb +200 -0
- data/lib/couchbase/management/search_index_manager.rb +426 -0
- data/lib/couchbase/management/user_manager.rb +470 -0
- data/lib/couchbase/management/view_index_manager.rb +239 -0
- data/lib/couchbase/management.rb +31 -0
- data/lib/couchbase/mutation_state.rb +65 -0
- data/lib/couchbase/options.rb +2846 -0
- data/lib/couchbase/protostellar/binary_collection.rb +55 -0
- data/lib/couchbase/protostellar/bucket.rb +55 -0
- data/lib/couchbase/protostellar/client.rb +99 -0
- data/lib/couchbase/protostellar/cluster.rb +171 -0
- data/lib/couchbase/protostellar/collection.rb +152 -0
- data/lib/couchbase/protostellar/connect_options.rb +63 -0
- data/lib/couchbase/protostellar/error_handling.rb +203 -0
- data/lib/couchbase/protostellar/generated/admin/bucket/v1/bucket_pb.rb +61 -0
- data/lib/couchbase/protostellar/generated/admin/bucket/v1/bucket_services_pb.rb +35 -0
- data/lib/couchbase/protostellar/generated/admin/collection/v1/collection_pb.rb +57 -0
- data/lib/couchbase/protostellar/generated/admin/collection/v1/collection_services_pb.rb +36 -0
- data/lib/couchbase/protostellar/generated/admin/query/v1/query_pb.rb +61 -0
- data/lib/couchbase/protostellar/generated/admin/query/v1/query_services_pb.rb +37 -0
- data/lib/couchbase/protostellar/generated/admin/search/v1/search_pb.rb +72 -0
- data/lib/couchbase/protostellar/generated/admin/search/v1/search_services_pb.rb +44 -0
- data/lib/couchbase/protostellar/generated/analytics/v1/analytics_pb.rb +52 -0
- data/lib/couchbase/protostellar/generated/analytics/v1/analytics_services_pb.rb +30 -0
- data/lib/couchbase/protostellar/generated/internal/hooks/v1/hooks_pb.rb +70 -0
- data/lib/couchbase/protostellar/generated/internal/hooks/v1/hooks_services_pb.rb +36 -0
- data/lib/couchbase/protostellar/generated/kv/v1/kv_pb.rb +97 -0
- data/lib/couchbase/protostellar/generated/kv/v1/kv_services_pb.rb +46 -0
- data/lib/couchbase/protostellar/generated/query/v1/query_pb.rb +57 -0
- data/lib/couchbase/protostellar/generated/query/v1/query_services_pb.rb +30 -0
- data/lib/couchbase/protostellar/generated/routing/v1/routing_pb.rb +52 -0
- data/lib/couchbase/protostellar/generated/routing/v1/routing_services_pb.rb +30 -0
- data/lib/couchbase/protostellar/generated/search/v1/search_pb.rb +99 -0
- data/lib/couchbase/protostellar/generated/search/v1/search_services_pb.rb +30 -0
- data/lib/couchbase/protostellar/generated/transactions/v1/transactions_pb.rb +57 -0
- data/lib/couchbase/protostellar/generated/transactions/v1/transactions_services_pb.rb +36 -0
- data/lib/couchbase/protostellar/generated/view/v1/view_pb.rb +51 -0
- data/lib/couchbase/protostellar/generated/view/v1/view_services_pb.rb +30 -0
- data/lib/couchbase/protostellar/generated.rb +9 -0
- data/lib/couchbase/protostellar/management/bucket_manager.rb +67 -0
- data/lib/couchbase/protostellar/management/collection_manager.rb +94 -0
- data/lib/couchbase/protostellar/management/collection_query_index_manager.rb +124 -0
- data/lib/couchbase/protostellar/management/query_index_manager.rb +112 -0
- data/lib/couchbase/protostellar/management.rb +24 -0
- data/lib/couchbase/protostellar/request.rb +78 -0
- data/lib/couchbase/protostellar/request_behaviour.rb +42 -0
- data/lib/couchbase/protostellar/request_generator/admin/bucket.rb +124 -0
- data/lib/couchbase/protostellar/request_generator/admin/collection.rb +94 -0
- data/lib/couchbase/protostellar/request_generator/admin/query.rb +130 -0
- data/lib/couchbase/protostellar/request_generator/admin.rb +24 -0
- data/lib/couchbase/protostellar/request_generator/kv.rb +474 -0
- data/lib/couchbase/protostellar/request_generator/query.rb +133 -0
- data/lib/couchbase/protostellar/request_generator/search.rb +387 -0
- data/lib/couchbase/protostellar/request_generator.rb +26 -0
- data/lib/couchbase/protostellar/response_converter/admin/bucket.rb +55 -0
- data/lib/couchbase/protostellar/response_converter/admin/collection.rb +42 -0
- data/lib/couchbase/protostellar/response_converter/admin/query.rb +59 -0
- data/lib/couchbase/protostellar/response_converter/admin.rb +24 -0
- data/lib/couchbase/protostellar/response_converter/kv.rb +151 -0
- data/lib/couchbase/protostellar/response_converter/query.rb +84 -0
- data/lib/couchbase/protostellar/response_converter/search.rb +136 -0
- data/lib/couchbase/protostellar/response_converter.rb +26 -0
- data/lib/couchbase/protostellar/retry/action.rb +38 -0
- data/lib/couchbase/protostellar/retry/orchestrator.rb +60 -0
- data/lib/couchbase/protostellar/retry/reason.rb +67 -0
- data/lib/couchbase/protostellar/retry/strategies/best_effort.rb +49 -0
- data/lib/couchbase/protostellar/retry/strategies.rb +26 -0
- data/lib/couchbase/protostellar/retry.rb +28 -0
- data/lib/couchbase/protostellar/scope.rb +57 -0
- data/lib/couchbase/protostellar/timeout_defaults.rb +30 -0
- data/lib/couchbase/protostellar/timeouts.rb +83 -0
- data/lib/couchbase/protostellar.rb +29 -0
- data/lib/couchbase/query_options.rb +122 -0
- data/lib/couchbase/railtie.rb +47 -0
- data/lib/couchbase/raw_binary_transcoder.rb +39 -0
- data/lib/couchbase/raw_json_transcoder.rb +40 -0
- data/lib/couchbase/raw_string_transcoder.rb +42 -0
- data/lib/couchbase/scope.rb +258 -0
- data/lib/couchbase/search_options.rb +1650 -0
- data/lib/couchbase/subdoc.rb +293 -0
- data/lib/couchbase/transcoder_flags.rb +64 -0
- data/lib/couchbase/utils/generic_logger_adapter.rb +40 -0
- data/lib/couchbase/utils/stdlib_logger_adapter.rb +67 -0
- data/lib/couchbase/utils/time.rb +71 -0
- data/lib/couchbase/utils.rb +23 -0
- data/lib/couchbase/version.rb +25 -0
- data/lib/couchbase/view_options.rb +67 -0
- data/lib/couchbase.rb +30 -0
- data/lib/rails/generators/couchbase/config/config_generator.rb +29 -0
- metadata +190 -0
@@ -0,0 +1,2846 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2020-2021 Couchbase, Inc.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# 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,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require "couchbase/utils/time"
|
18
|
+
require "couchbase/config_profiles"
|
19
|
+
require "couchbase/json_transcoder"
|
20
|
+
|
21
|
+
module Couchbase
|
22
|
+
# Definition of the Option classes for data APIs
|
23
|
+
module Options # rubocop:disable Metrics/ModuleLength
|
24
|
+
# Base class for most of the options
|
25
|
+
class Base
|
26
|
+
attr_accessor :timeout # @return [Integer, #in_milliseconds, nil]
|
27
|
+
attr_accessor :retry_strategy # @return [Proc, nil]
|
28
|
+
attr_accessor :client_context # @return [Hash, nil]
|
29
|
+
attr_accessor :parent_span # @return [Span, nil]
|
30
|
+
|
31
|
+
# @param [Integer, #in_milliseconds, nil] timeout the time in milliseconds allowed for the operation to complete
|
32
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
33
|
+
# @param [Hash, nil] client_context the client context data, if set
|
34
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
35
|
+
#
|
36
|
+
# @yieldparam [Base]
|
37
|
+
def initialize(timeout: nil,
|
38
|
+
retry_strategy: nil,
|
39
|
+
client_context: nil,
|
40
|
+
parent_span: nil)
|
41
|
+
@timeout = timeout
|
42
|
+
@retry_strategy = retry_strategy
|
43
|
+
@client_context = client_context
|
44
|
+
@parent_span = parent_span
|
45
|
+
yield self if block_given?
|
46
|
+
end
|
47
|
+
|
48
|
+
# @api private
|
49
|
+
def to_backend
|
50
|
+
{
|
51
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
52
|
+
}
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Options for {Collection#get}
|
57
|
+
class Get < Base
|
58
|
+
attr_accessor :with_expiry # @return [Boolean]
|
59
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #decode(String, Integer)]
|
60
|
+
|
61
|
+
# Creates an instance of options for {Collection#get}
|
62
|
+
#
|
63
|
+
# @param [Array<String>] projections a list of paths that should be loaded if present.
|
64
|
+
# @param [Boolean] with_expiry if +true+ the expiration will be also fetched with {Collection#get}
|
65
|
+
# @param [JsonTranscoder, #decode(String, Integer)] transcoder used for decoding
|
66
|
+
#
|
67
|
+
# @param [Integer, #in_milliseconds, nil] timeout the time in milliseconds allowed for the operation to complete
|
68
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
69
|
+
# @param [Hash, nil] client_context the client context data, if set
|
70
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
71
|
+
#
|
72
|
+
# @yieldparam [Get] self
|
73
|
+
def initialize(projections: [],
|
74
|
+
with_expiry: false,
|
75
|
+
transcoder: JsonTranscoder.new,
|
76
|
+
timeout: nil,
|
77
|
+
retry_strategy: nil,
|
78
|
+
client_context: nil,
|
79
|
+
parent_span: nil)
|
80
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
81
|
+
@projections = projections
|
82
|
+
@with_expiry = with_expiry
|
83
|
+
@transcoder = transcoder
|
84
|
+
@preserve_array_indexes = false
|
85
|
+
yield self if block_given?
|
86
|
+
end
|
87
|
+
|
88
|
+
# Allows to specify a custom list paths to fetch from the document instead of the whole.
|
89
|
+
#
|
90
|
+
# Note that a maximum of 16 individual paths can be projected at a time due to a server limitation. If you need
|
91
|
+
# more than that, think about fetching less-generic paths or the full document straight away.
|
92
|
+
#
|
93
|
+
# @param [String, Array<String>] paths a path that should be loaded if present.
|
94
|
+
def project(*paths)
|
95
|
+
@projections ||= []
|
96
|
+
@projections |= paths.flatten # union with current projections
|
97
|
+
end
|
98
|
+
|
99
|
+
# @api private
|
100
|
+
# @return [Boolean] whether to use sparse arrays (default +false+)
|
101
|
+
attr_accessor :preserve_array_indexes
|
102
|
+
|
103
|
+
# @api private
|
104
|
+
# @return [Array<String>] list of paths to project
|
105
|
+
attr_accessor :projections
|
106
|
+
|
107
|
+
# @api private
|
108
|
+
# @return [Boolean]
|
109
|
+
def need_projected_get?
|
110
|
+
@with_expiry || !@projections&.empty?
|
111
|
+
end
|
112
|
+
|
113
|
+
# @api private
|
114
|
+
def to_backend
|
115
|
+
options = {
|
116
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
117
|
+
}
|
118
|
+
options.update(with_expiry: true) if @with_expiry
|
119
|
+
unless @projections&.empty?
|
120
|
+
options.update({
|
121
|
+
projections: @projections,
|
122
|
+
preserve_array_indexes: @preserve_array_indexes,
|
123
|
+
})
|
124
|
+
end
|
125
|
+
options
|
126
|
+
end
|
127
|
+
|
128
|
+
# @api private
|
129
|
+
DEFAULT = Get.new.freeze
|
130
|
+
end
|
131
|
+
|
132
|
+
# Options for {Collection#get_multi}
|
133
|
+
class GetMulti < Base
|
134
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #decode(String, Integer)]
|
135
|
+
|
136
|
+
# Creates an instance of options for {Collection#get_multi}
|
137
|
+
#
|
138
|
+
# @param [JsonTranscoder, #decode(String, Integer)] transcoder used for decoding
|
139
|
+
#
|
140
|
+
# @param [Integer, #in_milliseconds, nil] timeout the time in milliseconds allowed for the operation to complete
|
141
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
142
|
+
# @param [Hash, nil] client_context the client context data, if set
|
143
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
144
|
+
#
|
145
|
+
# @yieldparam [GetMulti] self
|
146
|
+
def initialize(transcoder: JsonTranscoder.new,
|
147
|
+
timeout: nil,
|
148
|
+
retry_strategy: nil,
|
149
|
+
client_context: nil,
|
150
|
+
parent_span: nil)
|
151
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
152
|
+
@transcoder = transcoder
|
153
|
+
yield self if block_given?
|
154
|
+
end
|
155
|
+
|
156
|
+
# @api private
|
157
|
+
def to_backend
|
158
|
+
{
|
159
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
160
|
+
}
|
161
|
+
end
|
162
|
+
|
163
|
+
# @api private
|
164
|
+
DEFAULT = GetMulti.new.freeze
|
165
|
+
end
|
166
|
+
|
167
|
+
# Options for {Collection#get_and_lock}
|
168
|
+
class GetAndLock < Base
|
169
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #decode(String, Integer)]
|
170
|
+
|
171
|
+
# Creates an instance of options for {Collection#get_and_lock}
|
172
|
+
#
|
173
|
+
# @param [JsonTranscoder, #decode(String, Integer)] transcoder used for decoding
|
174
|
+
#
|
175
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
176
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
177
|
+
# @param [Hash, nil] client_context the client context data, if set
|
178
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
179
|
+
#
|
180
|
+
# @yieldparam [GetAndLock] self
|
181
|
+
def initialize(transcoder: JsonTranscoder.new,
|
182
|
+
timeout: nil,
|
183
|
+
retry_strategy: nil,
|
184
|
+
client_context: nil,
|
185
|
+
parent_span: nil)
|
186
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
187
|
+
@transcoder = transcoder
|
188
|
+
yield self if block_given?
|
189
|
+
end
|
190
|
+
|
191
|
+
# @api private
|
192
|
+
def to_backend
|
193
|
+
{
|
194
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
195
|
+
}
|
196
|
+
end
|
197
|
+
|
198
|
+
# @api private
|
199
|
+
DEFAULT = GetAndLock.new.freeze
|
200
|
+
end
|
201
|
+
|
202
|
+
# Options for {Collection#get_and_touch}
|
203
|
+
class GetAndTouch < Base
|
204
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #decode(String, Integer)]
|
205
|
+
|
206
|
+
# Creates an instance of options for {Collection#get_and_touch}
|
207
|
+
#
|
208
|
+
# @param [JsonTranscoder, #decode(String, Integer)] transcoder used for decoding
|
209
|
+
#
|
210
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
211
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
212
|
+
# @param [Hash, nil] client_context the client context data, if set
|
213
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
214
|
+
#
|
215
|
+
# @yieldparam [GetAndTouch] self
|
216
|
+
def initialize(transcoder: JsonTranscoder.new,
|
217
|
+
timeout: nil,
|
218
|
+
retry_strategy: nil,
|
219
|
+
client_context: nil,
|
220
|
+
parent_span: nil)
|
221
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
222
|
+
@transcoder = transcoder
|
223
|
+
yield self if block_given?
|
224
|
+
end
|
225
|
+
|
226
|
+
# @api private
|
227
|
+
def to_backend
|
228
|
+
{
|
229
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
230
|
+
}
|
231
|
+
end
|
232
|
+
|
233
|
+
# @api private
|
234
|
+
DEFAULT = GetAndTouch.new.freeze
|
235
|
+
end
|
236
|
+
|
237
|
+
# Options for {Collection#get_all_replicas}
|
238
|
+
class GetAllReplicas < Base
|
239
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #decode(String, Integer)]
|
240
|
+
|
241
|
+
# Creates an instance of options for {Collection#get_all_replicas}
|
242
|
+
#
|
243
|
+
# @param [JsonTranscoder, #decode(String, Integer)] transcoder used for decoding
|
244
|
+
#
|
245
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
246
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
247
|
+
# @param [Hash, nil] client_context the client context data, if set
|
248
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
249
|
+
#
|
250
|
+
# @yieldparam [GetAllReplicas] self
|
251
|
+
def initialize(transcoder: JsonTranscoder.new,
|
252
|
+
timeout: nil,
|
253
|
+
retry_strategy: nil,
|
254
|
+
client_context: nil,
|
255
|
+
parent_span: nil)
|
256
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
257
|
+
@transcoder = transcoder
|
258
|
+
yield self if block_given?
|
259
|
+
end
|
260
|
+
|
261
|
+
# @api private
|
262
|
+
def to_backend
|
263
|
+
{
|
264
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
265
|
+
}
|
266
|
+
end
|
267
|
+
|
268
|
+
# @api private
|
269
|
+
DEFAULT = GetAllReplicas.new.freeze
|
270
|
+
end
|
271
|
+
|
272
|
+
# Options for {Collection#get_any_replica}
|
273
|
+
class GetAnyReplica < Base
|
274
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #decode(String, Integer)]
|
275
|
+
|
276
|
+
# Creates an instance of options for {Collection#get_any_replica}
|
277
|
+
#
|
278
|
+
# @param [JsonTranscoder, #decode(String, Integer)] transcoder used for decoding
|
279
|
+
#
|
280
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
281
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
282
|
+
# @param [Hash, nil] client_context the client context data, if set
|
283
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
284
|
+
#
|
285
|
+
# @yieldparam [GetAnyReplica] self
|
286
|
+
def initialize(transcoder: JsonTranscoder.new,
|
287
|
+
timeout: nil,
|
288
|
+
retry_strategy: nil,
|
289
|
+
client_context: nil,
|
290
|
+
parent_span: nil)
|
291
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
292
|
+
@transcoder = transcoder
|
293
|
+
yield self if block_given?
|
294
|
+
end
|
295
|
+
|
296
|
+
# @api private
|
297
|
+
def to_backend
|
298
|
+
{
|
299
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
300
|
+
}
|
301
|
+
end
|
302
|
+
|
303
|
+
# @api private
|
304
|
+
DEFAULT = GetAnyReplica.new.freeze
|
305
|
+
end
|
306
|
+
|
307
|
+
# Options for {Collection#exists}
|
308
|
+
class Exists < Base
|
309
|
+
# Creates an instance of options for {Collection#exists}
|
310
|
+
#
|
311
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
312
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
313
|
+
# @param [Hash, nil] client_context the client context data, if set
|
314
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
315
|
+
#
|
316
|
+
# @yieldparam [Exists self
|
317
|
+
def initialize(timeout: nil,
|
318
|
+
retry_strategy: nil,
|
319
|
+
client_context: nil,
|
320
|
+
parent_span: nil)
|
321
|
+
super
|
322
|
+
yield self if block_given?
|
323
|
+
end
|
324
|
+
|
325
|
+
# @api private
|
326
|
+
def to_backend
|
327
|
+
{
|
328
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
329
|
+
}
|
330
|
+
end
|
331
|
+
|
332
|
+
# @api private
|
333
|
+
DEFAULT = Exists.new.freeze
|
334
|
+
end
|
335
|
+
|
336
|
+
# Options for {Collection#touch}
|
337
|
+
class Touch < Base
|
338
|
+
# Creates an instance of options for {Collection#touch}
|
339
|
+
#
|
340
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
341
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
342
|
+
# @param [Hash, nil] client_context the client context data, if set
|
343
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
344
|
+
#
|
345
|
+
# @yieldparam [TouchOptions] self
|
346
|
+
def initialize(timeout: nil,
|
347
|
+
retry_strategy: nil,
|
348
|
+
client_context: nil,
|
349
|
+
parent_span: nil)
|
350
|
+
super
|
351
|
+
yield self if block_given?
|
352
|
+
end
|
353
|
+
|
354
|
+
# @api private
|
355
|
+
def to_backend
|
356
|
+
{
|
357
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
358
|
+
}
|
359
|
+
end
|
360
|
+
|
361
|
+
# @api private
|
362
|
+
DEFAULT = Touch.new.freeze
|
363
|
+
end
|
364
|
+
|
365
|
+
# Options for {Collection#unlock}
|
366
|
+
class Unlock < Base
|
367
|
+
# Creates an instance of options for {Collection#unlock}
|
368
|
+
#
|
369
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
370
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
371
|
+
# @param [Hash, nil] client_context the client context data, if set
|
372
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
373
|
+
#
|
374
|
+
# @yieldparam [Unlock] self
|
375
|
+
def initialize(timeout: nil,
|
376
|
+
retry_strategy: nil,
|
377
|
+
client_context: nil,
|
378
|
+
parent_span: nil)
|
379
|
+
super
|
380
|
+
yield self if block_given?
|
381
|
+
end
|
382
|
+
|
383
|
+
# @api private
|
384
|
+
def to_backend
|
385
|
+
{
|
386
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
387
|
+
}
|
388
|
+
end
|
389
|
+
|
390
|
+
# @api private
|
391
|
+
DEFAULT = Unlock.new.freeze
|
392
|
+
end
|
393
|
+
|
394
|
+
# Options for {Collection#remove}
|
395
|
+
class Remove < Base
|
396
|
+
attr_accessor :cas # @return [Integer, nil]
|
397
|
+
attr_accessor :durability_level # @return [Symbol]
|
398
|
+
|
399
|
+
# Creates an instance of options for {Collection#remove}
|
400
|
+
#
|
401
|
+
# @param [Integer, nil] cas CAS value for optimistic locking
|
402
|
+
# @param [Symbol] durability_level level of durability
|
403
|
+
# +:none+::
|
404
|
+
# no enhanced durability required for the mutation
|
405
|
+
# +:majority+::
|
406
|
+
# the mutation must be replicated to a majority of the Data Service nodes
|
407
|
+
# (that is, held in the memory allocated to the bucket)
|
408
|
+
# +:majority_and_persist_to_active+::
|
409
|
+
# The mutation must be replicated to a majority of the Data Service nodes.
|
410
|
+
# Additionally, it must be persisted (that is, written and synchronised to disk) on the
|
411
|
+
# node hosting the active partition (vBucket) for the data.
|
412
|
+
# +:persist_to_majority+::
|
413
|
+
# The mutation must be persisted to a majority of the Data Service nodes.
|
414
|
+
# Accordingly, it will be written to disk on those nodes.
|
415
|
+
# @param [Symbol] replicate_to number of nodes to replicate
|
416
|
+
# +:none+:: do not apply any replication requirements.
|
417
|
+
# +:one+:: wait for replication to at least one node.
|
418
|
+
# +:two+:: wait for replication to at least two nodes.
|
419
|
+
# +:three+:: wait for replication to at least three nodes.
|
420
|
+
# @param [Symbol] persist_to number of nodes to persist
|
421
|
+
# +:none+:: do not apply any persistence requirements.
|
422
|
+
# +:active+:: wait for persistence to active node
|
423
|
+
# +:one+:: wait for persistence to at least one node.
|
424
|
+
# +:two+:: wait for persistence to at least two nodes.
|
425
|
+
# +:three+:: wait for persistence to at least three nodes.
|
426
|
+
# +:four+:: wait for persistence to four nodes (active and replicas).
|
427
|
+
#
|
428
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
429
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
430
|
+
# @param [Hash, nil] client_context the client context data, if set
|
431
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
432
|
+
#
|
433
|
+
# @yieldparam [Remove]
|
434
|
+
def initialize(cas: nil,
|
435
|
+
durability_level: :none,
|
436
|
+
replicate_to: :none,
|
437
|
+
persist_to: :none,
|
438
|
+
timeout: nil,
|
439
|
+
retry_strategy: nil,
|
440
|
+
client_context: nil,
|
441
|
+
parent_span: nil)
|
442
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
443
|
+
@cas = cas
|
444
|
+
if durability_level != :none && (replicate_to != :none || persist_to != :none)
|
445
|
+
raise ArgumentError, "durability_level conflicts with replicate_to and persist_to options"
|
446
|
+
end
|
447
|
+
|
448
|
+
@persist_to = persist_to
|
449
|
+
@replicate_to = replicate_to
|
450
|
+
@durability_level = durability_level
|
451
|
+
yield self if block_given?
|
452
|
+
end
|
453
|
+
|
454
|
+
# @api private
|
455
|
+
def to_backend
|
456
|
+
{
|
457
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
458
|
+
durability_level: @durability_level,
|
459
|
+
persist_to: @persist_to,
|
460
|
+
replicate_to: @replicate_to,
|
461
|
+
cas: @cas,
|
462
|
+
}
|
463
|
+
end
|
464
|
+
|
465
|
+
# @api private
|
466
|
+
DEFAULT = Remove.new.freeze
|
467
|
+
end
|
468
|
+
|
469
|
+
# Options for {Collection#remove_multi}
|
470
|
+
class RemoveMulti < Base
|
471
|
+
attr_accessor :durability_level # @return [Symbol]
|
472
|
+
|
473
|
+
# Creates an instance of options for {Collection#remove}
|
474
|
+
#
|
475
|
+
# @param [Symbol] durability_level level of durability
|
476
|
+
# +:none+::
|
477
|
+
# no enhanced durability required for the mutation
|
478
|
+
# +:majority+::
|
479
|
+
# the mutation must be replicated to a majority of the Data Service nodes
|
480
|
+
# (that is, held in the memory allocated to the bucket)
|
481
|
+
# +:majority_and_persist_to_active+::
|
482
|
+
# The mutation must be replicated to a majority of the Data Service nodes.
|
483
|
+
# Additionally, it must be persisted (that is, written and synchronised to disk) on the
|
484
|
+
# node hosting the active partition (vBucket) for the data.
|
485
|
+
# +:persist_to_majority+::
|
486
|
+
# The mutation must be persisted to a majority of the Data Service nodes.
|
487
|
+
# Accordingly, it will be written to disk on those nodes.
|
488
|
+
# @param [Symbol] replicate_to number of nodes to replicate
|
489
|
+
# +:none+:: do not apply any replication requirements.
|
490
|
+
# +:one+:: wait for replication to at least one node.
|
491
|
+
# +:two+:: wait for replication to at least two nodes.
|
492
|
+
# +:three+:: wait for replication to at least three nodes.
|
493
|
+
# @param [Symbol] persist_to number of nodes to persist
|
494
|
+
# +:none+:: do not apply any persistence requirements.
|
495
|
+
# +:active+:: wait for persistence to active node
|
496
|
+
# +:one+:: wait for persistence to at least one node.
|
497
|
+
# +:two+:: wait for persistence to at least two nodes.
|
498
|
+
# +:three+:: wait for persistence to at least three nodes.
|
499
|
+
# +:four+:: wait for persistence to four nodes (active and replicas).
|
500
|
+
#
|
501
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
502
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
503
|
+
# @param [Hash, nil] client_context the client context data, if set
|
504
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
505
|
+
#
|
506
|
+
# @yieldparam [Remove]
|
507
|
+
def initialize(durability_level: :none,
|
508
|
+
replicate_to: :none,
|
509
|
+
persist_to: :none,
|
510
|
+
timeout: nil,
|
511
|
+
retry_strategy: nil,
|
512
|
+
client_context: nil,
|
513
|
+
parent_span: nil)
|
514
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
515
|
+
if durability_level != :none && (replicate_to != :none || persist_to != :none)
|
516
|
+
raise ArgumentError, "durability_level conflicts with replicate_to and persist_to options"
|
517
|
+
end
|
518
|
+
|
519
|
+
@persist_to = persist_to
|
520
|
+
@replicate_to = replicate_to
|
521
|
+
@durability_level = durability_level
|
522
|
+
yield self if block_given?
|
523
|
+
end
|
524
|
+
|
525
|
+
# @api private
|
526
|
+
def to_backend
|
527
|
+
{
|
528
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
529
|
+
durability_level: @durability_level,
|
530
|
+
persist_to: @persist_to,
|
531
|
+
replicate_to: @replicate_to,
|
532
|
+
}
|
533
|
+
end
|
534
|
+
|
535
|
+
# @api private
|
536
|
+
DEFAULT = RemoveMulti.new.freeze
|
537
|
+
end
|
538
|
+
|
539
|
+
# Options for {Collection#insert}
|
540
|
+
class Insert < Base
|
541
|
+
attr_accessor :expiry # @return [Integer, #in_seconds, nil]
|
542
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #encode(Object)]
|
543
|
+
attr_accessor :durability_level # @return [Symbol]
|
544
|
+
|
545
|
+
# Creates an instance of options for {Collection#insert}
|
546
|
+
#
|
547
|
+
# @param [Integer, #in_seconds, Time, nil] expiry expiration time to associate with the document
|
548
|
+
# @param [JsonTranscoder, #encode(Object)] transcoder used for encoding
|
549
|
+
# @param [Symbol] durability_level level of durability
|
550
|
+
# +:none+::
|
551
|
+
# no enhanced durability required for the mutation
|
552
|
+
# +:majority+::
|
553
|
+
# the mutation must be replicated to a majority of the Data Service nodes
|
554
|
+
# (that is, held in the memory allocated to the bucket)
|
555
|
+
# +:majority_and_persist_to_active+::
|
556
|
+
# The mutation must be replicated to a majority of the Data Service nodes.
|
557
|
+
# Additionally, it must be persisted (that is, written and synchronised to disk) on the
|
558
|
+
# node hosting the active partition (vBucket) for the data.
|
559
|
+
# +:persist_to_majority+::
|
560
|
+
# The mutation must be persisted to a majority of the Data Service nodes.
|
561
|
+
# Accordingly, it will be written to disk on those nodes.
|
562
|
+
# @param [Symbol] replicate_to number of nodes to replicate
|
563
|
+
# +:none+:: do not apply any replication requirements.
|
564
|
+
# +:one+:: wait for replication to at least one node.
|
565
|
+
# +:two+:: wait for replication to at least two nodes.
|
566
|
+
# +:three+:: wait for replication to at least three nodes.
|
567
|
+
# @param [Symbol] persist_to number of nodes to persist
|
568
|
+
# +:none+:: do not apply any persistence requirements.
|
569
|
+
# +:active+:: wait for persistence to active node
|
570
|
+
# +:one+:: wait for persistence to at least one node.
|
571
|
+
# +:two+:: wait for persistence to at least two nodes.
|
572
|
+
# +:three+:: wait for persistence to at least three nodes.
|
573
|
+
# +:four+:: wait for persistence to four nodes (active and replicas).
|
574
|
+
#
|
575
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
576
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
577
|
+
# @param [Hash, nil] client_context the client context data, if set
|
578
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
579
|
+
#
|
580
|
+
# @yieldparam [Insert]
|
581
|
+
def initialize(expiry: nil,
|
582
|
+
transcoder: JsonTranscoder.new,
|
583
|
+
durability_level: :none,
|
584
|
+
replicate_to: :none,
|
585
|
+
persist_to: :none,
|
586
|
+
timeout: nil,
|
587
|
+
retry_strategy: nil,
|
588
|
+
client_context: nil,
|
589
|
+
parent_span: nil)
|
590
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
591
|
+
@expiry = expiry
|
592
|
+
@transcoder = transcoder
|
593
|
+
if durability_level != :none && (replicate_to != :none || persist_to != :none)
|
594
|
+
raise ArgumentError, "durability_level conflicts with replicate_to and persist_to options"
|
595
|
+
end
|
596
|
+
|
597
|
+
@persist_to = persist_to
|
598
|
+
@replicate_to = replicate_to
|
599
|
+
@durability_level = durability_level
|
600
|
+
yield self if block_given?
|
601
|
+
end
|
602
|
+
|
603
|
+
# @api private
|
604
|
+
def to_backend
|
605
|
+
{
|
606
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
607
|
+
expiry: Utils::Time.extract_expiry_time(@expiry),
|
608
|
+
durability_level: @durability_level,
|
609
|
+
persist_to: @persist_to,
|
610
|
+
replicate_to: @replicate_to,
|
611
|
+
}
|
612
|
+
end
|
613
|
+
|
614
|
+
# @api private
|
615
|
+
DEFAULT = Insert.new.freeze
|
616
|
+
end
|
617
|
+
|
618
|
+
# Options for {Collection#upsert}
|
619
|
+
class Upsert < Base
|
620
|
+
attr_accessor :expiry # @return [Integer, #in_seconds, nil]
|
621
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #encode(Object)]
|
622
|
+
attr_accessor :durability_level # @return [Symbol]
|
623
|
+
attr_accessor :preserve_expiry # @return [Boolean]
|
624
|
+
|
625
|
+
# Creates an instance of options for {Collection#upsert}
|
626
|
+
#
|
627
|
+
# @param [Integer, #in_seconds, Time, nil] expiry expiration time to associate with the document
|
628
|
+
# @param [Boolean] preserve_expiry if true and the document exists, the server will preserve current expiration
|
629
|
+
# for the document, otherwise will use {expiry} from the operation.
|
630
|
+
# @param [JsonTranscoder, #encode(Object)] transcoder used for encoding
|
631
|
+
# @param [Symbol] durability_level level of durability
|
632
|
+
# +:none+::
|
633
|
+
# no enhanced durability required for the mutation
|
634
|
+
# +:majority+::
|
635
|
+
# the mutation must be replicated to a majority of the Data Service nodes
|
636
|
+
# (that is, held in the memory allocated to the bucket)
|
637
|
+
# +:majority_and_persist_to_active+::
|
638
|
+
# The mutation must be replicated to a majority of the Data Service nodes.
|
639
|
+
# Additionally, it must be persisted (that is, written and synchronised to disk) on the
|
640
|
+
# node hosting the active partition (vBucket) for the data.
|
641
|
+
# +:persist_to_majority+::
|
642
|
+
# The mutation must be persisted to a majority of the Data Service nodes.
|
643
|
+
# Accordingly, it will be written to disk on those nodes.
|
644
|
+
# @param [Symbol] replicate_to number of nodes to replicate
|
645
|
+
# +:none+:: do not apply any replication requirements.
|
646
|
+
# +:one+:: wait for replication to at least one node.
|
647
|
+
# +:two+:: wait for replication to at least two nodes.
|
648
|
+
# +:three+:: wait for replication to at least three nodes.
|
649
|
+
# @param [Symbol] persist_to number of nodes to persist
|
650
|
+
# +:none+:: do not apply any persistence requirements.
|
651
|
+
# +:active+:: wait for persistence to active node
|
652
|
+
# +:one+:: wait for persistence to at least one node.
|
653
|
+
# +:two+:: wait for persistence to at least two nodes.
|
654
|
+
# +:three+:: wait for persistence to at least three nodes.
|
655
|
+
# +:four+:: wait for persistence to four nodes (active and replicas).
|
656
|
+
#
|
657
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
658
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
659
|
+
# @param [Hash, nil] client_context the client context data, if set
|
660
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
661
|
+
#
|
662
|
+
# @yieldparam [Upsert]
|
663
|
+
def initialize(expiry: nil,
|
664
|
+
preserve_expiry: false,
|
665
|
+
transcoder: JsonTranscoder.new,
|
666
|
+
durability_level: :none,
|
667
|
+
replicate_to: :none,
|
668
|
+
persist_to: :none,
|
669
|
+
timeout: nil,
|
670
|
+
retry_strategy: nil,
|
671
|
+
client_context: nil,
|
672
|
+
parent_span: nil)
|
673
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
674
|
+
@expiry = expiry
|
675
|
+
@preserve_expiry = preserve_expiry
|
676
|
+
@transcoder = transcoder
|
677
|
+
if durability_level != :none && (replicate_to != :none || persist_to != :none)
|
678
|
+
raise ArgumentError, "durability_level conflicts with replicate_to and persist_to options"
|
679
|
+
end
|
680
|
+
|
681
|
+
@persist_to = persist_to
|
682
|
+
@replicate_to = replicate_to
|
683
|
+
@durability_level = durability_level
|
684
|
+
yield self if block_given?
|
685
|
+
end
|
686
|
+
|
687
|
+
def to_backend
|
688
|
+
{
|
689
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
690
|
+
expiry: Utils::Time.extract_expiry_time(@expiry),
|
691
|
+
preserve_expiry: @preserve_expiry,
|
692
|
+
durability_level: @durability_level,
|
693
|
+
persist_to: @persist_to,
|
694
|
+
replicate_to: @replicate_to,
|
695
|
+
}
|
696
|
+
end
|
697
|
+
|
698
|
+
# @api private
|
699
|
+
DEFAULT = Upsert.new.freeze
|
700
|
+
end
|
701
|
+
|
702
|
+
# Options for {Collection#upsert_multi}
|
703
|
+
class UpsertMulti < Base
|
704
|
+
attr_accessor :expiry # @return [Integer, #in_seconds, nil]
|
705
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #encode(Object)]
|
706
|
+
attr_accessor :durability_level # @return [Symbol]
|
707
|
+
attr_accessor :preserve_expiry # @return [Boolean]
|
708
|
+
|
709
|
+
# Creates an instance of options for {Collection#upsert}
|
710
|
+
#
|
711
|
+
# @param [Integer, #in_seconds, Time, nil] expiry expiration time to associate with the document
|
712
|
+
# @param [Boolean] preserve_expiry if true and the document exists, the server will preserve current expiration
|
713
|
+
# for the document, otherwise will use {expiry} from the operation.
|
714
|
+
# @param [JsonTranscoder, #encode(Object)] transcoder used for encoding
|
715
|
+
# @param [Symbol] durability_level level of durability
|
716
|
+
# +:none+::
|
717
|
+
# no enhanced durability required for the mutation
|
718
|
+
# +:majority+::
|
719
|
+
# the mutation must be replicated to a majority of the Data Service nodes
|
720
|
+
# (that is, held in the memory allocated to the bucket)
|
721
|
+
# +:majority_and_persist_to_active+::
|
722
|
+
# The mutation must be replicated to a majority of the Data Service nodes.
|
723
|
+
# Additionally, it must be persisted (that is, written and synchronised to disk) on the
|
724
|
+
# node hosting the active partition (vBucket) for the data.
|
725
|
+
# +:persist_to_majority+::
|
726
|
+
# The mutation must be persisted to a majority of the Data Service nodes.
|
727
|
+
# Accordingly, it will be written to disk on those nodes.
|
728
|
+
# @param [Symbol] replicate_to number of nodes to replicate
|
729
|
+
# +:none+:: do not apply any replication requirements.
|
730
|
+
# +:one+:: wait for replication to at least one node.
|
731
|
+
# +:two+:: wait for replication to at least two nodes.
|
732
|
+
# +:three+:: wait for replication to at least three nodes.
|
733
|
+
# @param [Symbol] persist_to number of nodes to persist
|
734
|
+
# +:none+:: do not apply any persistence requirements.
|
735
|
+
# +:active+:: wait for persistence to active node
|
736
|
+
# +:one+:: wait for persistence to at least one node.
|
737
|
+
# +:two+:: wait for persistence to at least two nodes.
|
738
|
+
# +:three+:: wait for persistence to at least three nodes.
|
739
|
+
# +:four+:: wait for persistence to four nodes (active and replicas).
|
740
|
+
#
|
741
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
742
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
743
|
+
# @param [Hash, nil] client_context the client context data, if set
|
744
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
745
|
+
#
|
746
|
+
# @yieldparam [Upsert]
|
747
|
+
def initialize(expiry: nil,
|
748
|
+
preserve_expiry: false,
|
749
|
+
transcoder: JsonTranscoder.new,
|
750
|
+
durability_level: :none,
|
751
|
+
replicate_to: :none,
|
752
|
+
persist_to: :none,
|
753
|
+
timeout: nil,
|
754
|
+
retry_strategy: nil,
|
755
|
+
client_context: nil,
|
756
|
+
parent_span: nil)
|
757
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
758
|
+
@expiry = expiry
|
759
|
+
@preserve_expiry = preserve_expiry
|
760
|
+
@transcoder = transcoder
|
761
|
+
if durability_level != :none && (replicate_to != :none || persist_to != :none)
|
762
|
+
raise ArgumentError, "durability_level conflicts with replicate_to and persist_to options"
|
763
|
+
end
|
764
|
+
|
765
|
+
@persist_to = persist_to
|
766
|
+
@replicate_to = replicate_to
|
767
|
+
@durability_level = durability_level
|
768
|
+
yield self if block_given?
|
769
|
+
end
|
770
|
+
|
771
|
+
def to_backend
|
772
|
+
{
|
773
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
774
|
+
expiry: Utils::Time.extract_expiry_time(@expiry),
|
775
|
+
preserve_expiry: @preserve_expiry,
|
776
|
+
durability_level: @durability_level,
|
777
|
+
persist_to: @persist_to,
|
778
|
+
replicate_to: @replicate_to,
|
779
|
+
}
|
780
|
+
end
|
781
|
+
|
782
|
+
# @api private
|
783
|
+
DEFAULT = UpsertMulti.new.freeze
|
784
|
+
end
|
785
|
+
|
786
|
+
# Options for {Collection#replace}
|
787
|
+
class Replace < Base
|
788
|
+
attr_accessor :expiry # @return [Integer, #in_seconds, nil]
|
789
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #encode(Object)]
|
790
|
+
attr_accessor :cas # @return [Integer, nil]
|
791
|
+
attr_accessor :durability_level # @return [Symbol]
|
792
|
+
attr_accessor :preserve_expiry # @return [Boolean]
|
793
|
+
|
794
|
+
# Creates an instance of options for {Collection#replace}
|
795
|
+
#
|
796
|
+
# @param [Integer, #in_seconds, nil] expiry expiration time to associate with the document
|
797
|
+
# @param [Boolean] preserve_expiry if true and the document exists, the server will preserve current expiration
|
798
|
+
# for the document, otherwise will use {expiry} from the operation.
|
799
|
+
# @param [JsonTranscoder, #encode(Object)] transcoder used for encoding
|
800
|
+
# @param [Integer, nil] cas a CAS value that will be taken into account on the server side for optimistic concurrency
|
801
|
+
# @param [Symbol] durability_level level of durability
|
802
|
+
# +:none+::
|
803
|
+
# no enhanced durability required for the mutation
|
804
|
+
# +:majority+::
|
805
|
+
# the mutation must be replicated to a majority of the Data Service nodes
|
806
|
+
# (that is, held in the memory allocated to the bucket)
|
807
|
+
# +:majority_and_persist_to_active+::
|
808
|
+
# The mutation must be replicated to a majority of the Data Service nodes.
|
809
|
+
# Additionally, it must be persisted (that is, written and synchronised to disk) on the
|
810
|
+
# node hosting the active partition (vBucket) for the data.
|
811
|
+
# +:persist_to_majority+::
|
812
|
+
# The mutation must be persisted to a majority of the Data Service nodes.
|
813
|
+
# Accordingly, it will be written to disk on those nodes.
|
814
|
+
# @param [Symbol] replicate_to number of nodes to replicate
|
815
|
+
# +:none+:: do not apply any replication requirements.
|
816
|
+
# +:one+:: wait for replication to at least one node.
|
817
|
+
# +:two+:: wait for replication to at least two nodes.
|
818
|
+
# +:three+:: wait for replication to at least three nodes.
|
819
|
+
# @param [Symbol] persist_to number of nodes to persist
|
820
|
+
# +:none+:: do not apply any persistence requirements.
|
821
|
+
# +:active+:: wait for persistence to active node
|
822
|
+
# +:one+:: wait for persistence to at least one node.
|
823
|
+
# +:two+:: wait for persistence to at least two nodes.
|
824
|
+
# +:three+:: wait for persistence to at least three nodes.
|
825
|
+
# +:four+:: wait for persistence to four nodes (active and replicas).
|
826
|
+
#
|
827
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
828
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
829
|
+
# @param [Hash, nil] client_context the client context data, if set
|
830
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
831
|
+
#
|
832
|
+
# @yieldparam [Replace]
|
833
|
+
def initialize(expiry: nil,
|
834
|
+
preserve_expiry: false,
|
835
|
+
transcoder: JsonTranscoder.new,
|
836
|
+
cas: nil,
|
837
|
+
durability_level: :none,
|
838
|
+
replicate_to: :none,
|
839
|
+
persist_to: :none,
|
840
|
+
timeout: nil,
|
841
|
+
retry_strategy: nil,
|
842
|
+
client_context: nil,
|
843
|
+
parent_span: nil)
|
844
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
845
|
+
@expiry = expiry
|
846
|
+
@preserve_expiry = preserve_expiry
|
847
|
+
@transcoder = transcoder
|
848
|
+
@cas = cas
|
849
|
+
if durability_level != :none && (replicate_to != :none || persist_to != :none)
|
850
|
+
raise ArgumentError, "durability_level conflicts with replicate_to and persist_to options"
|
851
|
+
end
|
852
|
+
|
853
|
+
@persist_to = persist_to
|
854
|
+
@replicate_to = replicate_to
|
855
|
+
@durability_level = durability_level
|
856
|
+
yield self if block_given?
|
857
|
+
end
|
858
|
+
|
859
|
+
def to_backend
|
860
|
+
{
|
861
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
862
|
+
expiry: Utils::Time.extract_expiry_time(@expiry),
|
863
|
+
preserve_expiry: @preserve_expiry,
|
864
|
+
durability_level: @durability_level,
|
865
|
+
persist_to: @persist_to,
|
866
|
+
replicate_to: @replicate_to,
|
867
|
+
cas: @cas,
|
868
|
+
}
|
869
|
+
end
|
870
|
+
|
871
|
+
# @api private
|
872
|
+
DEFAULT = Replace.new.freeze
|
873
|
+
end
|
874
|
+
|
875
|
+
# Options for {Collection#mutate_in}
|
876
|
+
class MutateIn < Base
|
877
|
+
attr_accessor :expiry # @return [Integer, #in_seconds, nil]
|
878
|
+
attr_accessor :store_semantics # @return [Symbol]
|
879
|
+
attr_accessor :cas # @return [Integer, nil]
|
880
|
+
attr_accessor :durability_level # @return [Symbol]
|
881
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #encode(Object)]
|
882
|
+
attr_accessor :preserve_expiry # @return [Boolean]
|
883
|
+
|
884
|
+
# Creates an instance of options for {Collection#mutate_in}
|
885
|
+
#
|
886
|
+
# @param [Integer, #in_seconds, Time, nil] expiry expiration time to associate with the document
|
887
|
+
# @param [Boolean] preserve_expiry if true and the document exists, the server will preserve current expiration
|
888
|
+
# for the document, otherwise will use {expiry} from the operation.
|
889
|
+
# @param [Symbol] store_semantics describes how the outer document store semantics on subdoc should act
|
890
|
+
# +:replace+:: replace the document, fail if it does not exist. This is the default
|
891
|
+
# +:upsert+:: replace the document or create if it does not exist
|
892
|
+
# +:insert+:: create the document, fail if it exists
|
893
|
+
# @param [Integer, nil] cas a CAS value that will be taken into account on the server side for optimistic concurrency
|
894
|
+
# @param [Boolean] access_deleted for internal use only: allows access to deleted documents that are in "tombstone" form
|
895
|
+
# @param [Boolean] create_as_deleted for internal use only: allows creating documents in "tombstone" form
|
896
|
+
# @param [Symbol] durability_level level of durability
|
897
|
+
# +:none+::
|
898
|
+
# no enhanced durability required for the mutation
|
899
|
+
# +:majority+::
|
900
|
+
# the mutation must be replicated to a majority of the Data Service nodes
|
901
|
+
# (that is, held in the memory allocated to the bucket)
|
902
|
+
# +:majority_and_persist_to_active+::
|
903
|
+
# The mutation must be replicated to a majority of the Data Service nodes.
|
904
|
+
# Additionally, it must be persisted (that is, written and synchronised to disk) on the
|
905
|
+
# node hosting the active partition (vBucket) for the data.
|
906
|
+
# +:persist_to_majority+::
|
907
|
+
# The mutation must be persisted to a majority of the Data Service nodes.
|
908
|
+
# Accordingly, it will be written to disk on those nodes.
|
909
|
+
# @param [Symbol] replicate_to number of nodes to replicate
|
910
|
+
# +:none+:: do not apply any replication requirements.
|
911
|
+
# +:one+:: wait for replication to at least one node.
|
912
|
+
# +:two+:: wait for replication to at least two nodes.
|
913
|
+
# +:three+:: wait for replication to at least three nodes.
|
914
|
+
# @param [Symbol] persist_to number of nodes to persist
|
915
|
+
# +:none+:: do not apply any persistence requirements.
|
916
|
+
# +:active+:: wait for persistence to active node
|
917
|
+
# +:one+:: wait for persistence to at least one node.
|
918
|
+
# +:two+:: wait for persistence to at least two nodes.
|
919
|
+
# +:three+:: wait for persistence to at least three nodes.
|
920
|
+
# +:four+:: wait for persistence to four nodes (active and replicas).
|
921
|
+
# @param [JsonTranscoder, #encode(Object)] transcoder used for encoding
|
922
|
+
#
|
923
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
924
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
925
|
+
# @param [Hash, nil] client_context the client context data, if set
|
926
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
927
|
+
#
|
928
|
+
# @yieldparam [MutateIn]
|
929
|
+
def initialize(expiry: nil,
|
930
|
+
preserve_expiry: false,
|
931
|
+
store_semantics: :replace,
|
932
|
+
cas: nil,
|
933
|
+
access_deleted: false,
|
934
|
+
create_as_deleted: false,
|
935
|
+
durability_level: :none,
|
936
|
+
replicate_to: :none,
|
937
|
+
persist_to: :none,
|
938
|
+
transcoder: JsonTranscoder.new,
|
939
|
+
timeout: nil,
|
940
|
+
retry_strategy: nil,
|
941
|
+
client_context: nil,
|
942
|
+
parent_span: nil)
|
943
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
944
|
+
@expiry = expiry
|
945
|
+
@preserve_expiry = preserve_expiry
|
946
|
+
@store_semantics = store_semantics
|
947
|
+
@cas = cas
|
948
|
+
@access_deleted = access_deleted
|
949
|
+
@create_as_deleted = create_as_deleted
|
950
|
+
if durability_level != :none && (replicate_to != :none || persist_to != :none)
|
951
|
+
raise ArgumentError, "durability_level conflicts with replicate_to and persist_to options"
|
952
|
+
end
|
953
|
+
|
954
|
+
@persist_to = persist_to
|
955
|
+
@replicate_to = replicate_to
|
956
|
+
@durability_level = durability_level
|
957
|
+
@transcoder = transcoder
|
958
|
+
yield self if block_given?
|
959
|
+
end
|
960
|
+
|
961
|
+
# @api private
|
962
|
+
def to_backend
|
963
|
+
{
|
964
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
965
|
+
expiry: Utils::Time.extract_expiry_time(@expiry),
|
966
|
+
preserve_expiry: @preserve_expiry,
|
967
|
+
durability_level: @durability_level,
|
968
|
+
persist_to: @persist_to,
|
969
|
+
replicate_to: @replicate_to,
|
970
|
+
cas: @cas,
|
971
|
+
store_semantics: @store_semantics,
|
972
|
+
access_deleted: @access_deleted,
|
973
|
+
create_as_deleted: @create_as_deleted,
|
974
|
+
}
|
975
|
+
end
|
976
|
+
|
977
|
+
# @api private
|
978
|
+
# @return [Boolean]
|
979
|
+
attr_accessor :access_deleted
|
980
|
+
|
981
|
+
# @api private
|
982
|
+
# @return [Boolean]
|
983
|
+
attr_accessor :create_as_deleted
|
984
|
+
|
985
|
+
# @api private
|
986
|
+
DEFAULT = MutateIn.new.freeze
|
987
|
+
end
|
988
|
+
|
989
|
+
# Options for {Collection#lookup_in}
|
990
|
+
class LookupIn < Base
|
991
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #decode(String)]
|
992
|
+
|
993
|
+
# Creates an instance of options for {Collection#lookup_in}
|
994
|
+
#
|
995
|
+
# @param [Boolean] access_deleted for internal use only: allows access to deleted documents that are in "tombstone" form
|
996
|
+
# @param [JsonTranscoder, #decode(String)] transcoder used for encoding
|
997
|
+
#
|
998
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
999
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
1000
|
+
# @param [Hash, nil] client_context the client context data, if set
|
1001
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
1002
|
+
#
|
1003
|
+
# @yieldparam [LookupIn] self
|
1004
|
+
def initialize(access_deleted: false,
|
1005
|
+
transcoder: JsonTranscoder.new,
|
1006
|
+
timeout: nil,
|
1007
|
+
retry_strategy: nil,
|
1008
|
+
client_context: nil,
|
1009
|
+
parent_span: nil)
|
1010
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
1011
|
+
@access_deleted = access_deleted
|
1012
|
+
@transcoder = transcoder
|
1013
|
+
yield self if block_given?
|
1014
|
+
end
|
1015
|
+
|
1016
|
+
# @api private
|
1017
|
+
def to_backend
|
1018
|
+
{
|
1019
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
1020
|
+
access_deleted: @access_deleted,
|
1021
|
+
}
|
1022
|
+
end
|
1023
|
+
|
1024
|
+
# @api private
|
1025
|
+
# @return [Boolean]
|
1026
|
+
attr_accessor :access_deleted
|
1027
|
+
|
1028
|
+
# @api private
|
1029
|
+
DEFAULT = LookupIn.new.freeze
|
1030
|
+
end
|
1031
|
+
|
1032
|
+
# Options for {Collection#lookup_in_any_replica}
|
1033
|
+
class LookupInAnyReplica < Base
|
1034
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #decode(String)]
|
1035
|
+
|
1036
|
+
# Creates an instance of options for {Collection#lookup_in_any_replica}
|
1037
|
+
#
|
1038
|
+
# @param [JsonTranscoder, #decode(String)] transcoder used for encoding
|
1039
|
+
#
|
1040
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
1041
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
1042
|
+
# @param [Hash, nil] client_context the client context data, if set
|
1043
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
1044
|
+
#
|
1045
|
+
# @yieldparam [LookupIn] self
|
1046
|
+
def initialize(transcoder: JsonTranscoder.new,
|
1047
|
+
timeout: nil,
|
1048
|
+
retry_strategy: nil,
|
1049
|
+
client_context: nil,
|
1050
|
+
parent_span: nil)
|
1051
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
1052
|
+
@transcoder = transcoder
|
1053
|
+
yield self if block_given?
|
1054
|
+
end
|
1055
|
+
|
1056
|
+
# @api private
|
1057
|
+
def to_backend
|
1058
|
+
{
|
1059
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
1060
|
+
}
|
1061
|
+
end
|
1062
|
+
|
1063
|
+
# @api private
|
1064
|
+
# @return [Boolean]
|
1065
|
+
attr_accessor :access_deleted
|
1066
|
+
|
1067
|
+
# @api private
|
1068
|
+
DEFAULT = LookupInAnyReplica.new.freeze
|
1069
|
+
end
|
1070
|
+
|
1071
|
+
# Options for {Collection#lookup_in_all_replicas}
|
1072
|
+
class LookupInAllReplicas < Base
|
1073
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #decode(String)]
|
1074
|
+
|
1075
|
+
# Creates an instance of options for {Collection#lookup_in_all_replicas}
|
1076
|
+
#
|
1077
|
+
# @param [JsonTranscoder, #decode(String)] transcoder used for encoding
|
1078
|
+
#
|
1079
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
1080
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
1081
|
+
# @param [Hash, nil] client_context the client context data, if set
|
1082
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
1083
|
+
#
|
1084
|
+
# @yieldparam [LookupInAllReplicas] self
|
1085
|
+
def initialize(transcoder: JsonTranscoder.new,
|
1086
|
+
timeout: nil,
|
1087
|
+
retry_strategy: nil,
|
1088
|
+
client_context: nil,
|
1089
|
+
parent_span: nil)
|
1090
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
1091
|
+
@transcoder = transcoder
|
1092
|
+
yield self if block_given?
|
1093
|
+
end
|
1094
|
+
|
1095
|
+
# @api private
|
1096
|
+
def to_backend
|
1097
|
+
{
|
1098
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
1099
|
+
}
|
1100
|
+
end
|
1101
|
+
|
1102
|
+
# @api private
|
1103
|
+
DEFAULT = LookupInAllReplicas.new.freeze
|
1104
|
+
end
|
1105
|
+
|
1106
|
+
# Options for {Collection#scan}
|
1107
|
+
class Scan < Base
|
1108
|
+
attr_accessor :ids_only # @return [Boolean]
|
1109
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #decode(String)]
|
1110
|
+
attr_accessor :mutation_state # @return [MutationState, nil]
|
1111
|
+
attr_accessor :batch_byte_limit # @return [Integer, nil]
|
1112
|
+
attr_accessor :batch_item_limit # @return [Integer, nil]
|
1113
|
+
attr_accessor :concurrency # @return [Integer, nil]
|
1114
|
+
|
1115
|
+
# Creates an instance of options for {Collection#scan}
|
1116
|
+
#
|
1117
|
+
# @param [Boolean] ids_only if set to true, the content of the documents is not included in the results
|
1118
|
+
# @param [JsonTranscoder, #decode(String)] transcoder used for decoding
|
1119
|
+
# @param [MutationState, nil] mutation_state sets the mutation tokens this scan should be consistent with
|
1120
|
+
# @param [Integer, nil] batch_byte_limit allows to limit the maximum amount of bytes that are sent from the server
|
1121
|
+
# to the client on each partition batch, defaults to 15,000
|
1122
|
+
# @param [Integer, nil] batch_item_limit allows to limit the maximum amount of items that are sent from the server
|
1123
|
+
# to the client on each partition batch, defaults to 50
|
1124
|
+
# @param [Integer, nil] concurrency specifies the maximum number of partitions that can be scanned concurrently,
|
1125
|
+
# defaults to 1
|
1126
|
+
#
|
1127
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
1128
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
1129
|
+
# @param [Hash, nil] client_context the client context data, if set
|
1130
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
1131
|
+
#
|
1132
|
+
# @yieldparam [LookupIn] self
|
1133
|
+
def initialize(ids_only: false,
|
1134
|
+
transcoder: JsonTranscoder.new,
|
1135
|
+
mutation_state: nil,
|
1136
|
+
batch_byte_limit: nil,
|
1137
|
+
batch_item_limit: nil,
|
1138
|
+
concurrency: nil,
|
1139
|
+
timeout: nil,
|
1140
|
+
retry_strategy: nil,
|
1141
|
+
client_context: nil,
|
1142
|
+
parent_span: nil)
|
1143
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
1144
|
+
@ids_only = ids_only
|
1145
|
+
@transcoder = transcoder
|
1146
|
+
@mutation_state = mutation_state
|
1147
|
+
@batch_byte_limit = batch_byte_limit
|
1148
|
+
@batch_item_limit = batch_item_limit
|
1149
|
+
@concurrency = concurrency
|
1150
|
+
yield self if block_given?
|
1151
|
+
end
|
1152
|
+
|
1153
|
+
# Sets the mutation tokens this query should be consistent with
|
1154
|
+
#
|
1155
|
+
# @note overrides consistency level set by {#scan_consistency=}
|
1156
|
+
#
|
1157
|
+
# @param [MutationState] mutation_state the mutation state containing the mutation tokens
|
1158
|
+
def consistent_with(mutation_state)
|
1159
|
+
@mutation_state = mutation_state
|
1160
|
+
end
|
1161
|
+
|
1162
|
+
# @api private
|
1163
|
+
def to_backend
|
1164
|
+
{
|
1165
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
1166
|
+
ids_only: @ids_only,
|
1167
|
+
mutation_state: @mutation_state.to_a,
|
1168
|
+
batch_byte_limit: @batch_byte_limit,
|
1169
|
+
batch_item_limit: @batch_item_limit,
|
1170
|
+
concurrency: @concurrency,
|
1171
|
+
}
|
1172
|
+
end
|
1173
|
+
|
1174
|
+
DEFAULT = Scan.new.freeze
|
1175
|
+
end
|
1176
|
+
|
1177
|
+
# Options for {BinaryCollection#append}
|
1178
|
+
class Append < Base
|
1179
|
+
attr_accessor :cas # @return [Integer]
|
1180
|
+
attr_accessor :durability_level # @return [Symbol]
|
1181
|
+
attr_accessor :replicate_to # @return [Symbol]
|
1182
|
+
attr_accessor :persist_to # @return [Symbol]
|
1183
|
+
|
1184
|
+
# Creates an instance of options for {BinaryCollection#append}
|
1185
|
+
#
|
1186
|
+
# @param [Integer] cas The default CAS used (0 means no CAS in this context)
|
1187
|
+
# @param [Symbol] durability_level level of durability
|
1188
|
+
# +:none+::
|
1189
|
+
# no enhanced durability required for the mutation
|
1190
|
+
# +:majority+::
|
1191
|
+
# the mutation must be replicated to a majority of the Data Service nodes
|
1192
|
+
# (that is, held in the memory allocated to the bucket)
|
1193
|
+
# +:majority_and_persist_to_active+::
|
1194
|
+
# The mutation must be replicated to a majority of the Data Service nodes.
|
1195
|
+
# Additionally, it must be persisted (that is, written and synchronised to disk) on the
|
1196
|
+
# node hosting the active partition (vBucket) for the data.
|
1197
|
+
# +:persist_to_majority+::
|
1198
|
+
# The mutation must be persisted to a majority of the Data Service nodes.
|
1199
|
+
# Accordingly, it will be written to disk on those nodes.
|
1200
|
+
# @param [Symbol] replicate_to number of nodes to replicate
|
1201
|
+
# +:none+:: do not apply any replication requirements.
|
1202
|
+
# +:one+:: wait for replication to at least one node.
|
1203
|
+
# +:two+:: wait for replication to at least two nodes.
|
1204
|
+
# +:three+:: wait for replication to at least three nodes.
|
1205
|
+
# @param [Symbol] persist_to number of nodes to persist
|
1206
|
+
# +:none+:: do not apply any persistence requirements.
|
1207
|
+
# +:active+:: wait for persistence to active node
|
1208
|
+
# +:one+:: wait for persistence to at least one node.
|
1209
|
+
# +:two+:: wait for persistence to at least two nodes.
|
1210
|
+
# +:three+:: wait for persistence to at least three nodes.
|
1211
|
+
# +:four+:: wait for persistence to four nodes (active and replicas).
|
1212
|
+
#
|
1213
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
1214
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
1215
|
+
# @param [Hash, nil] client_context the client context data, if set
|
1216
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
1217
|
+
#
|
1218
|
+
# @yieldparam [Append] self
|
1219
|
+
def initialize(cas: nil,
|
1220
|
+
durability_level: :none,
|
1221
|
+
replicate_to: :none,
|
1222
|
+
persist_to: :none,
|
1223
|
+
timeout: nil,
|
1224
|
+
retry_strategy: nil,
|
1225
|
+
client_context: nil,
|
1226
|
+
parent_span: nil)
|
1227
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
1228
|
+
@cas = cas
|
1229
|
+
|
1230
|
+
if durability_level != :none && (replicate_to != :none || persist_to != :none)
|
1231
|
+
raise ArgumentError, "durability_level conflicts with replicate_to and persist_to options"
|
1232
|
+
end
|
1233
|
+
|
1234
|
+
@durability_level = durability_level
|
1235
|
+
@replicate_to = replicate_to
|
1236
|
+
@persist_to = persist_to
|
1237
|
+
yield self if block_given?
|
1238
|
+
end
|
1239
|
+
|
1240
|
+
# @api private
|
1241
|
+
def to_backend
|
1242
|
+
{
|
1243
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
1244
|
+
cas: @cas,
|
1245
|
+
durability_level: @durability_level,
|
1246
|
+
persist_to: @persist_to,
|
1247
|
+
replicate_to: @replicate_to,
|
1248
|
+
}
|
1249
|
+
end
|
1250
|
+
|
1251
|
+
# @api private
|
1252
|
+
DEFAULT = Append.new.freeze
|
1253
|
+
end
|
1254
|
+
|
1255
|
+
# Options for {BinaryCollection#prepend}
|
1256
|
+
class Prepend < Base
|
1257
|
+
attr_accessor :cas # @return [Integer]
|
1258
|
+
attr_accessor :durability_level # @return [Symbol]
|
1259
|
+
attr_accessor :replicate_to # @return [Symbol]
|
1260
|
+
attr_accessor :persist_to # @return [Symbol]
|
1261
|
+
|
1262
|
+
# Creates an instance of options for {BinaryCollection#prepend}
|
1263
|
+
#
|
1264
|
+
# @param [Integer] cas The default CAS used (0 means no CAS in this context)
|
1265
|
+
# @param [Symbol] durability_level level of durability
|
1266
|
+
# +:none+::
|
1267
|
+
# no enhanced durability required for the mutation
|
1268
|
+
# +:majority+::
|
1269
|
+
# the mutation must be replicated to a majority of the Data Service nodes
|
1270
|
+
# (that is, held in the memory allocated to the bucket)
|
1271
|
+
# +:majority_and_persist_to_active+::
|
1272
|
+
# The mutation must be replicated to a majority of the Data Service nodes.
|
1273
|
+
# Additionally, it must be persisted (that is, written and synchronised to disk) on the
|
1274
|
+
# node hosting the active partition (vBucket) for the data.
|
1275
|
+
# +:persist_to_majority+::
|
1276
|
+
# The mutation must be persisted to a majority of the Data Service nodes.
|
1277
|
+
# Accordingly, it will be written to disk on those nodes.
|
1278
|
+
# @param [Symbol] replicate_to number of nodes to replicate
|
1279
|
+
# +:none+:: do not apply any replication requirements.
|
1280
|
+
# +:one+:: wait for replication to at least one node.
|
1281
|
+
# +:two+:: wait for replication to at least two nodes.
|
1282
|
+
# +:three+:: wait for replication to at least three nodes.
|
1283
|
+
# @param [Symbol] persist_to number of nodes to persist
|
1284
|
+
# +:none+:: do not apply any persistence requirements.
|
1285
|
+
# +:active+:: wait for persistence to active node
|
1286
|
+
# +:one+:: wait for persistence to at least one node.
|
1287
|
+
# +:two+:: wait for persistence to at least two nodes.
|
1288
|
+
# +:three+:: wait for persistence to at least three nodes.
|
1289
|
+
# +:four+:: wait for persistence to four nodes (active and replicas).
|
1290
|
+
#
|
1291
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
1292
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
1293
|
+
# @param [Hash, nil] client_context the client context data, if set
|
1294
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
1295
|
+
#
|
1296
|
+
# @yieldparam [Prepend] self
|
1297
|
+
def initialize(cas: nil,
|
1298
|
+
durability_level: :none,
|
1299
|
+
replicate_to: :none,
|
1300
|
+
persist_to: :none,
|
1301
|
+
timeout: nil,
|
1302
|
+
retry_strategy: nil,
|
1303
|
+
client_context: nil,
|
1304
|
+
parent_span: nil)
|
1305
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
1306
|
+
@cas = cas
|
1307
|
+
|
1308
|
+
if durability_level != :none && (replicate_to != :none || persist_to != :none)
|
1309
|
+
raise ArgumentError, "durability_level conflicts with replicate_to and persist_to options"
|
1310
|
+
end
|
1311
|
+
|
1312
|
+
@durability_level = durability_level
|
1313
|
+
@replicate_to = replicate_to
|
1314
|
+
@persist_to = persist_to
|
1315
|
+
yield self if block_given?
|
1316
|
+
end
|
1317
|
+
|
1318
|
+
# @api private
|
1319
|
+
def to_backend
|
1320
|
+
{
|
1321
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
1322
|
+
cas: @cas,
|
1323
|
+
durability_level: @durability_level,
|
1324
|
+
persist_to: @persist_to,
|
1325
|
+
replicate_to: @replicate_to,
|
1326
|
+
}
|
1327
|
+
end
|
1328
|
+
|
1329
|
+
# @api private
|
1330
|
+
DEFAULT = Prepend.new.freeze
|
1331
|
+
end
|
1332
|
+
|
1333
|
+
# Options for {BinaryCollection#increment}
|
1334
|
+
class Increment < Base
|
1335
|
+
attr_reader :delta # @return [Integer]
|
1336
|
+
attr_accessor :initial # @return [Integer]
|
1337
|
+
attr_accessor :expiry # @return [Integer, #in_seconds]
|
1338
|
+
attr_accessor :durability_level # @return [Symbol]
|
1339
|
+
|
1340
|
+
# Creates an instance of options for {BinaryCollection#increment}
|
1341
|
+
#
|
1342
|
+
# @param [Integer] delta the delta for the operation
|
1343
|
+
# @param [Integer] initial if present, holds the initial value
|
1344
|
+
# @param [Integer, #in_seconds, Time, nil] expiry if set, holds the expiration for the operation
|
1345
|
+
# @param [Symbol] durability_level level of durability
|
1346
|
+
# +:none+::
|
1347
|
+
# no enhanced durability required for the mutation
|
1348
|
+
# +:majority+::
|
1349
|
+
# the mutation must be replicated to a majority of the Data Service nodes
|
1350
|
+
# (that is, held in the memory allocated to the bucket)
|
1351
|
+
# +:majority_and_persist_to_active+::
|
1352
|
+
# The mutation must be replicated to a majority of the Data Service nodes.
|
1353
|
+
# Additionally, it must be persisted (that is, written and synchronised to disk) on the
|
1354
|
+
# node hosting the active partition (vBucket) for the data.
|
1355
|
+
# +:persist_to_majority+::
|
1356
|
+
# The mutation must be persisted to a majority of the Data Service nodes.
|
1357
|
+
# Accordingly, it will be written to disk on those nodes.
|
1358
|
+
# @param [Symbol] replicate_to number of nodes to replicate
|
1359
|
+
# +:none+:: do not apply any replication requirements.
|
1360
|
+
# +:one+:: wait for replication to at least one node.
|
1361
|
+
# +:two+:: wait for replication to at least two nodes.
|
1362
|
+
# +:three+:: wait for replication to at least three nodes.
|
1363
|
+
# @param [Symbol] persist_to number of nodes to persist
|
1364
|
+
# +:none+:: do not apply any persistence requirements.
|
1365
|
+
# +:active+:: wait for persistence to active node
|
1366
|
+
# +:one+:: wait for persistence to at least one node.
|
1367
|
+
# +:two+:: wait for persistence to at least two nodes.
|
1368
|
+
# +:three+:: wait for persistence to at least three nodes.
|
1369
|
+
# +:four+:: wait for persistence to four nodes (active and replicas).
|
1370
|
+
#
|
1371
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
1372
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
1373
|
+
# @param [Hash, nil] client_context the client context data, if set
|
1374
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
1375
|
+
#
|
1376
|
+
# @yieldparam [Increment] self
|
1377
|
+
def initialize(delta: 1,
|
1378
|
+
initial: nil,
|
1379
|
+
expiry: nil,
|
1380
|
+
durability_level: :none,
|
1381
|
+
replicate_to: :none,
|
1382
|
+
persist_to: :none,
|
1383
|
+
timeout: nil,
|
1384
|
+
retry_strategy: nil,
|
1385
|
+
client_context: nil,
|
1386
|
+
parent_span: nil)
|
1387
|
+
raise ArgumentError, "the delta cannot be less than 0" if delta.negative?
|
1388
|
+
|
1389
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
1390
|
+
@delta = delta
|
1391
|
+
@initial = initial
|
1392
|
+
@expiry = expiry
|
1393
|
+
if durability_level != :none && (replicate_to != :none || persist_to != :none)
|
1394
|
+
raise ArgumentError, "durability_level conflicts with replicate_to and persist_to options"
|
1395
|
+
end
|
1396
|
+
|
1397
|
+
@persist_to = persist_to
|
1398
|
+
@replicate_to = replicate_to
|
1399
|
+
@durability_level = durability_level
|
1400
|
+
yield self if block_given?
|
1401
|
+
end
|
1402
|
+
|
1403
|
+
# @param [Integer] value delta for the operation
|
1404
|
+
def delta=(value)
|
1405
|
+
raise ArgumentError, "the delta cannot be less than 0" if delta.negative?
|
1406
|
+
|
1407
|
+
@delta = value
|
1408
|
+
end
|
1409
|
+
|
1410
|
+
# @api private
|
1411
|
+
def to_backend
|
1412
|
+
{
|
1413
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
1414
|
+
delta: @delta,
|
1415
|
+
initial_value: @initial,
|
1416
|
+
expiry: Utils::Time.extract_expiry_time(@expiry),
|
1417
|
+
durability_level: @durability_level,
|
1418
|
+
persist_to: @persist_to,
|
1419
|
+
replicate_to: @replicate_to,
|
1420
|
+
}
|
1421
|
+
end
|
1422
|
+
|
1423
|
+
# @api private
|
1424
|
+
DEFAULT = Increment.new.freeze
|
1425
|
+
end
|
1426
|
+
|
1427
|
+
# Options for {BinaryCollection#decrement}
|
1428
|
+
class Decrement < Base
|
1429
|
+
attr_reader :delta # @return [Integer]
|
1430
|
+
attr_accessor :initial # @return [Integer]
|
1431
|
+
attr_accessor :expiry # @return [Integer, #in_seconds]
|
1432
|
+
attr_accessor :durability_level # @return [Symbol]
|
1433
|
+
|
1434
|
+
# Creates an instance of options for {BinaryCollection#decrement}
|
1435
|
+
#
|
1436
|
+
# @param [Integer] delta the delta for the operation
|
1437
|
+
# @param [Integer] initial if present, holds the initial value
|
1438
|
+
# @param [Integer, #in_seconds, Time, nil] expiry if set, holds the expiration for the operation
|
1439
|
+
# @param [Symbol] durability_level level of durability
|
1440
|
+
# +:none+::
|
1441
|
+
# no enhanced durability required for the mutation
|
1442
|
+
# +:majority+::
|
1443
|
+
# the mutation must be replicated to a majority of the Data Service nodes
|
1444
|
+
# (that is, held in the memory allocated to the bucket)
|
1445
|
+
# +:majority_and_persist_to_active+::
|
1446
|
+
# The mutation must be replicated to a majority of the Data Service nodes.
|
1447
|
+
# Additionally, it must be persisted (that is, written and synchronised to disk) on the
|
1448
|
+
# node hosting the active partition (vBucket) for the data.
|
1449
|
+
# +:persist_to_majority+::
|
1450
|
+
# The mutation must be persisted to a majority of the Data Service nodes.
|
1451
|
+
# Accordingly, it will be written to disk on those nodes.
|
1452
|
+
# @param [Symbol] replicate_to number of nodes to replicate
|
1453
|
+
# +:none+:: do not apply any replication requirements.
|
1454
|
+
# +:one+:: wait for replication to at least one node.
|
1455
|
+
# +:two+:: wait for replication to at least two nodes.
|
1456
|
+
# +:three+:: wait for replication to at least three nodes.
|
1457
|
+
# @param [Symbol] persist_to number of nodes to persist
|
1458
|
+
# +:none+:: do not apply any persistence requirements.
|
1459
|
+
# +:active+:: wait for persistence to active node
|
1460
|
+
# +:one+:: wait for persistence to at least one node.
|
1461
|
+
# +:two+:: wait for persistence to at least two nodes.
|
1462
|
+
# +:three+:: wait for persistence to at least three nodes.
|
1463
|
+
# +:four+:: wait for persistence to four nodes (active and replicas).
|
1464
|
+
#
|
1465
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
1466
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
1467
|
+
# @param [Hash, nil] client_context the client context data, if set
|
1468
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
1469
|
+
#
|
1470
|
+
# @yieldparam [Decrement] self
|
1471
|
+
def initialize(delta: 1,
|
1472
|
+
initial: nil,
|
1473
|
+
expiry: nil,
|
1474
|
+
durability_level: :none,
|
1475
|
+
replicate_to: :none,
|
1476
|
+
persist_to: :none,
|
1477
|
+
timeout: nil,
|
1478
|
+
retry_strategy: nil,
|
1479
|
+
client_context: nil,
|
1480
|
+
parent_span: nil)
|
1481
|
+
raise ArgumentError, "the delta cannot be less than 0" if delta.negative?
|
1482
|
+
|
1483
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
1484
|
+
@delta = delta
|
1485
|
+
@initial = initial
|
1486
|
+
@expiry = expiry
|
1487
|
+
if durability_level != :none && (replicate_to != :none || persist_to != :none)
|
1488
|
+
raise ArgumentError, "durability_level conflicts with replicate_to and persist_to options"
|
1489
|
+
end
|
1490
|
+
|
1491
|
+
@persist_to = persist_to
|
1492
|
+
@replicate_to = replicate_to
|
1493
|
+
@durability_level = durability_level
|
1494
|
+
yield self if block_given?
|
1495
|
+
end
|
1496
|
+
|
1497
|
+
# @param [Integer] value delta for the operation
|
1498
|
+
def delta=(value)
|
1499
|
+
raise ArgumentError, "the delta cannot be less than 0" if delta.negative?
|
1500
|
+
|
1501
|
+
@delta = value
|
1502
|
+
end
|
1503
|
+
|
1504
|
+
# @api private
|
1505
|
+
def to_backend
|
1506
|
+
{
|
1507
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
1508
|
+
delta: @delta,
|
1509
|
+
initial_value: @initial,
|
1510
|
+
expiry: Utils::Time.extract_expiry_time(@expiry),
|
1511
|
+
durability_level: @durability_level,
|
1512
|
+
persist_to: @persist_to,
|
1513
|
+
replicate_to: @replicate_to,
|
1514
|
+
}
|
1515
|
+
end
|
1516
|
+
|
1517
|
+
# @api private
|
1518
|
+
DEFAULT = Decrement.new.freeze
|
1519
|
+
end
|
1520
|
+
|
1521
|
+
# Options for {Datastructures::CouchbaseList#initialize}
|
1522
|
+
class CouchbaseList
|
1523
|
+
attr_accessor :get_options # @return [Get]
|
1524
|
+
attr_accessor :remove_options # @return [Remove]
|
1525
|
+
attr_accessor :lookup_in_options # @return [LookupIn]
|
1526
|
+
attr_accessor :mutate_in_options # @return [MutateIn]
|
1527
|
+
|
1528
|
+
# Creates an instance of options for {CouchbaseList#initialize}
|
1529
|
+
#
|
1530
|
+
# @param [Get] get_options
|
1531
|
+
# @param [Remove] remove_options
|
1532
|
+
# @param [LookupIn] lookup_in_options
|
1533
|
+
# @param [MutateIn] mutate_in_options
|
1534
|
+
#
|
1535
|
+
# @yieldparam [CouchbaseList]
|
1536
|
+
def initialize(get_options: Get.new,
|
1537
|
+
remove_options: Remove.new,
|
1538
|
+
lookup_in_options: LookupIn.new,
|
1539
|
+
mutate_in_options: MutateIn.new(store_semantics: :upsert))
|
1540
|
+
@get_options = get_options
|
1541
|
+
@remove_options = remove_options
|
1542
|
+
@lookup_in_options = lookup_in_options
|
1543
|
+
@mutate_in_options = mutate_in_options
|
1544
|
+
yield self if block_given?
|
1545
|
+
end
|
1546
|
+
end
|
1547
|
+
|
1548
|
+
# Options for {Datastructures::CouchbaseMap#initialize}
|
1549
|
+
class CouchbaseMap
|
1550
|
+
attr_accessor :get_options # @return [Get]
|
1551
|
+
attr_accessor :remove_options # @return [Remove]
|
1552
|
+
attr_accessor :lookup_in_options # @return [LookupIn]
|
1553
|
+
attr_accessor :mutate_in_options # @return [MutateIn]
|
1554
|
+
|
1555
|
+
# Creates an instance of options for {CouchbaseMap#initialize}
|
1556
|
+
#
|
1557
|
+
# @param [Get] get_options
|
1558
|
+
# @param [Remove] remove_options
|
1559
|
+
# @param [LookupIn] lookup_in_options
|
1560
|
+
# @param [MutateIn] mutate_in_options
|
1561
|
+
#
|
1562
|
+
# @yieldparam [CouchbaseMap]
|
1563
|
+
def initialize(get_options: Get.new,
|
1564
|
+
remove_options: Remove.new,
|
1565
|
+
lookup_in_options: LookupIn.new,
|
1566
|
+
mutate_in_options: MutateIn.new(store_semantics: :upsert))
|
1567
|
+
@get_options = get_options
|
1568
|
+
@remove_options = remove_options
|
1569
|
+
@lookup_in_options = lookup_in_options
|
1570
|
+
@mutate_in_options = mutate_in_options
|
1571
|
+
yield self if block_given?
|
1572
|
+
end
|
1573
|
+
end
|
1574
|
+
|
1575
|
+
# Options for {Datastructures::CouchbaseQueue#initialize}
|
1576
|
+
class CouchbaseQueue
|
1577
|
+
attr_accessor :get_options # @return [Get]
|
1578
|
+
attr_accessor :remove_options # @return [Remove]
|
1579
|
+
attr_accessor :lookup_in_options # @return [LookupIn]
|
1580
|
+
attr_accessor :mutate_in_options # @return [MutateIn]
|
1581
|
+
|
1582
|
+
# Creates an instance of options for {CouchbaseQueue#initialize}
|
1583
|
+
#
|
1584
|
+
# @param [Get] get_options
|
1585
|
+
# @param [Remove] remove_options
|
1586
|
+
# @param [LookupIn] lookup_in_options
|
1587
|
+
# @param [MutateIn] mutate_in_options
|
1588
|
+
#
|
1589
|
+
# @yieldparam [CouchbaseQueue]
|
1590
|
+
def initialize(get_options: Get.new,
|
1591
|
+
remove_options: Remove.new,
|
1592
|
+
lookup_in_options: LookupIn.new,
|
1593
|
+
mutate_in_options: MutateIn.new(store_semantics: :upsert))
|
1594
|
+
@get_options = get_options
|
1595
|
+
@remove_options = remove_options
|
1596
|
+
@lookup_in_options = lookup_in_options
|
1597
|
+
@mutate_in_options = mutate_in_options
|
1598
|
+
yield self if block_given?
|
1599
|
+
end
|
1600
|
+
end
|
1601
|
+
|
1602
|
+
# Options for {Datastructures::CouchbaseSet#initialize}
|
1603
|
+
class CouchbaseSet
|
1604
|
+
attr_accessor :get_options # @return [Get]
|
1605
|
+
attr_accessor :remove_options # @return [Remove]
|
1606
|
+
attr_accessor :lookup_in_options # @return [LookupIn]
|
1607
|
+
attr_accessor :mutate_in_options # @return [MutateIn]
|
1608
|
+
|
1609
|
+
# Creates an instance of options for {CouchbaseSet#initialize}
|
1610
|
+
#
|
1611
|
+
# @param [Get] get_options
|
1612
|
+
# @param [Remove] remove_options
|
1613
|
+
# @param [LookupIn] lookup_in_options
|
1614
|
+
# @param [MutateIn] mutate_in_options
|
1615
|
+
#
|
1616
|
+
# @yieldparam [CouchbaseSet]
|
1617
|
+
def initialize(get_options: Get.new,
|
1618
|
+
remove_options: Remove.new,
|
1619
|
+
lookup_in_options: LookupIn.new,
|
1620
|
+
mutate_in_options: MutateIn.new(store_semantics: :upsert))
|
1621
|
+
@get_options = get_options
|
1622
|
+
@remove_options = remove_options
|
1623
|
+
@lookup_in_options = lookup_in_options
|
1624
|
+
@mutate_in_options = mutate_in_options
|
1625
|
+
yield self if block_given?
|
1626
|
+
end
|
1627
|
+
end
|
1628
|
+
|
1629
|
+
# Options for {Couchbase::Cluster.connect}
|
1630
|
+
#
|
1631
|
+
# @example Pass authenticator object to Options
|
1632
|
+
# Cluster.connect("couchbase://localhost",
|
1633
|
+
# Options::Cluster(authenticator: PasswordAuthenticator.new("Administrator", "password")))
|
1634
|
+
#
|
1635
|
+
# @example Shorter version, more useful for interactive sessions
|
1636
|
+
# Cluster.connect("couchbase://localhost", "Administrator", "password")
|
1637
|
+
#
|
1638
|
+
# @example Authentication with TLS client certificate (note +couchbases://+ schema)
|
1639
|
+
# Cluster.connect("couchbases://localhost?trust_certificate=/tmp/ca.pem",
|
1640
|
+
# Options::Cluster(authenticator: CertificateAuthenticator.new("/tmp/certificate.pem", "/tmp/private.key")))
|
1641
|
+
#
|
1642
|
+
# @see https://docs.couchbase.com/server/current/manage/manage-security/configure-client-certificates.html
|
1643
|
+
#
|
1644
|
+
# @see .Cluster
|
1645
|
+
#
|
1646
|
+
class Cluster
|
1647
|
+
attr_accessor :authenticator # @return [PasswordAuthenticator, CertificateAuthenticator]
|
1648
|
+
|
1649
|
+
attr_accessor :enable_metrics # @return [Boolean]
|
1650
|
+
attr_accessor :metrics_emit_interval # @return [nil, Integer, #in_milliseconds]
|
1651
|
+
attr_accessor :enable_tracing # @return [Boolean]
|
1652
|
+
attr_accessor :orphaned_emit_interval # @return [nil, Integer, #in_milliseconds]
|
1653
|
+
attr_accessor :orphaned_sample_size # @return [nil, Integer]
|
1654
|
+
attr_accessor :threshold_emit_interval # @return [nil, Integer, #in_milliseconds]
|
1655
|
+
attr_accessor :threshold_sample_size # @return [nil, Integer]
|
1656
|
+
attr_accessor :key_value_threshold # @return [nil, Integer, #in_milliseconds]
|
1657
|
+
attr_accessor :query_threshold # @return [nil, Integer, #in_milliseconds]
|
1658
|
+
attr_accessor :view_threshold # @return [nil, Integer, #in_milliseconds]
|
1659
|
+
attr_accessor :search_threshold # @return [nil, Integer, #in_milliseconds]
|
1660
|
+
attr_accessor :analytics_threshold # @return [nil, Integer, #in_milliseconds]
|
1661
|
+
attr_accessor :management_threshold # @return [nil, Integer, #in_milliseconds]
|
1662
|
+
|
1663
|
+
attr_accessor :bootstrap_timeout # @return [nil, Integer, #in_milliseconds]
|
1664
|
+
attr_accessor :resolve_timeout # @return [nil, Integer, #in_milliseconds]
|
1665
|
+
attr_accessor :connect_timeout # @return [nil, Integer, #in_milliseconds]
|
1666
|
+
attr_accessor :key_value_timeout # @return [nil, Integer, #in_milliseconds]
|
1667
|
+
attr_accessor :view_timeout # @return [nil, Integer, #in_milliseconds]
|
1668
|
+
attr_accessor :query_timeout # @return [nil, Integer, #in_milliseconds]
|
1669
|
+
attr_accessor :analytics_timeout # @return [nil, Integer, #in_milliseconds]
|
1670
|
+
attr_accessor :search_timeout # @return [nil, Integer, #in_milliseconds]
|
1671
|
+
attr_accessor :management_timeout # @return [nil, Integer, #in_milliseconds]
|
1672
|
+
attr_accessor :dns_srv_timeout # @return [nil, Integer, #in_milliseconds]
|
1673
|
+
attr_accessor :tcp_keep_alive_interval # @return [nil, Integer, #in_milliseconds]
|
1674
|
+
attr_accessor :config_poll_interval # @return [nil, Integer, #in_milliseconds]
|
1675
|
+
attr_accessor :config_poll_floor # @return [nil, Integer, #in_milliseconds]
|
1676
|
+
attr_accessor :config_idle_redial_timeout # @return [nil, Integer, #in_milliseconds]
|
1677
|
+
attr_accessor :idle_http_connection_timeout # @return [nil, Integer, #in_milliseconds]
|
1678
|
+
|
1679
|
+
# Creates an instance of options for {Couchbase::Cluster.connect}
|
1680
|
+
#
|
1681
|
+
# @param [PasswordAuthenticator, CertificateAuthenticator] authenticator
|
1682
|
+
# @param [nil, Integer, #in_milliseconds] key_value_timeout default timeout for Key/Value operations, e.g. {Collection#get}
|
1683
|
+
# @param [nil, Integer, #in_milliseconds] view_timeout default timeout for View query
|
1684
|
+
# @param [nil, Integer, #in_milliseconds] query_timeout default timeout for N1QL query
|
1685
|
+
# @param [nil, Integer, #in_milliseconds] analytics_timeout default timeout for Analytics query
|
1686
|
+
# @param [nil, Integer, #in_milliseconds] search_timeout default timeout for Search query
|
1687
|
+
# @param [nil, Integer, #in_milliseconds] management_timeout default timeout for management operations
|
1688
|
+
#
|
1689
|
+
# @see .Cluster
|
1690
|
+
#
|
1691
|
+
# @yieldparam [Cluster] self
|
1692
|
+
def initialize(authenticator: nil,
|
1693
|
+
enable_metrics: nil,
|
1694
|
+
metrics_emit_interval: nil,
|
1695
|
+
enable_tracing: nil,
|
1696
|
+
orphaned_emit_interval: nil,
|
1697
|
+
orphaned_sample_size: nil,
|
1698
|
+
threshold_emit_interval: nil,
|
1699
|
+
threshold_sample_size: nil,
|
1700
|
+
key_value_threshold: nil,
|
1701
|
+
query_threshold: nil,
|
1702
|
+
view_threshold: nil,
|
1703
|
+
search_threshold: nil,
|
1704
|
+
analytics_threshold: nil,
|
1705
|
+
management_threshold: nil,
|
1706
|
+
bootstrap_timeout: nil,
|
1707
|
+
resolve_timeout: nil,
|
1708
|
+
connect_timeout: nil,
|
1709
|
+
key_value_timeout: nil,
|
1710
|
+
view_timeout: nil,
|
1711
|
+
query_timeout: nil,
|
1712
|
+
analytics_timeout: nil,
|
1713
|
+
search_timeout: nil,
|
1714
|
+
management_timeout: nil,
|
1715
|
+
dns_srv_timeout: nil,
|
1716
|
+
tcp_keep_alive_interval: nil,
|
1717
|
+
config_poll_interval: nil,
|
1718
|
+
config_poll_floor: nil,
|
1719
|
+
config_idle_redial_timeout: nil,
|
1720
|
+
idle_http_connection_timeout: nil)
|
1721
|
+
@authenticator = authenticator
|
1722
|
+
@enable_metrics = enable_metrics
|
1723
|
+
@metrics_emit_interval = metrics_emit_interval
|
1724
|
+
@enable_tracing = enable_tracing
|
1725
|
+
@orphaned_emit_interval = orphaned_emit_interval
|
1726
|
+
@orphaned_sample_size = orphaned_sample_size
|
1727
|
+
@threshold_emit_interval = threshold_emit_interval
|
1728
|
+
@threshold_sample_size = threshold_sample_size
|
1729
|
+
@key_value_threshold = key_value_threshold
|
1730
|
+
@query_threshold = query_threshold
|
1731
|
+
@view_threshold = view_threshold
|
1732
|
+
@search_threshold = search_threshold
|
1733
|
+
@analytics_threshold = analytics_threshold
|
1734
|
+
@management_threshold = management_threshold
|
1735
|
+
@bootstrap_timeout = bootstrap_timeout
|
1736
|
+
@resolve_timeout = resolve_timeout
|
1737
|
+
@connect_timeout = connect_timeout
|
1738
|
+
@key_value_timeout = key_value_timeout
|
1739
|
+
@view_timeout = view_timeout
|
1740
|
+
@query_timeout = query_timeout
|
1741
|
+
@analytics_timeout = analytics_timeout
|
1742
|
+
@search_timeout = search_timeout
|
1743
|
+
@management_timeout = management_timeout
|
1744
|
+
@dns_srv_timeout = dns_srv_timeout
|
1745
|
+
@tcp_keep_alive_interval = tcp_keep_alive_interval
|
1746
|
+
@config_poll_interval = config_poll_interval
|
1747
|
+
@config_poll_floor = config_poll_floor
|
1748
|
+
@config_idle_redial_timeout = config_idle_redial_timeout
|
1749
|
+
@idle_http_connection_timeout = idle_http_connection_timeout
|
1750
|
+
yield self if block_given?
|
1751
|
+
end
|
1752
|
+
|
1753
|
+
# @param [String] username
|
1754
|
+
# @param [String] password
|
1755
|
+
def authenticate(username, password)
|
1756
|
+
@authenticator = PasswordAuthenticator.new(username, password)
|
1757
|
+
end
|
1758
|
+
|
1759
|
+
# @param [String] profile_name The name of the configuration profile to apply (e.g. "wan_development")
|
1760
|
+
def apply_profile(profile_name)
|
1761
|
+
ConfigProfiles::KNOWN_PROFILES.apply(profile_name, self)
|
1762
|
+
end
|
1763
|
+
|
1764
|
+
# @api private
|
1765
|
+
def to_backend
|
1766
|
+
{
|
1767
|
+
enable_metrics: @enable_metrics,
|
1768
|
+
metrics_emit_interval: Utils::Time.extract_duration(@metrics_emit_interval),
|
1769
|
+
enable_tracing: @enable_tracing,
|
1770
|
+
orphaned_emit_interval: Utils::Time.extract_duration(@orphaned_emit_interval),
|
1771
|
+
orphaned_sample_size: @orphaned_sample_size,
|
1772
|
+
threshold_emit_interval: Utils::Time.extract_duration(@threshold_emit_interval),
|
1773
|
+
threshold_sample_size: @threshold_sample_size,
|
1774
|
+
key_value_threshold: Utils::Time.extract_duration(@key_value_threshold),
|
1775
|
+
query_threshold: Utils::Time.extract_duration(@query_threshold),
|
1776
|
+
view_threshold: Utils::Time.extract_duration(@view_threshold),
|
1777
|
+
search_threshold: Utils::Time.extract_duration(@search_threshold),
|
1778
|
+
analytics_threshold: Utils::Time.extract_duration(@analytics_threshold),
|
1779
|
+
management_threshold: Utils::Time.extract_duration(@management_threshold),
|
1780
|
+
bootstrap_timeout: Utils::Time.extract_duration(@bootstrap_timeout),
|
1781
|
+
resolve_timeout: Utils::Time.extract_duration(@resolve_timeout),
|
1782
|
+
connect_timeout: Utils::Time.extract_duration(@connect_timeout),
|
1783
|
+
key_value_timeout: Utils::Time.extract_duration(@key_value_timeout),
|
1784
|
+
view_timeout: Utils::Time.extract_duration(@view_timeout),
|
1785
|
+
query_timeout: Utils::Time.extract_duration(@query_timeout),
|
1786
|
+
analytics_timeout: Utils::Time.extract_duration(@analytics_timeout),
|
1787
|
+
search_timeout: Utils::Time.extract_duration(@search_timeout),
|
1788
|
+
management_timeout: Utils::Time.extract_duration(@management_timeout),
|
1789
|
+
dns_srv_timeout: Utils::Time.extract_duration(@dns_srv_timeout),
|
1790
|
+
tcp_keep_alive_interval: Utils::Time.extract_duration(@tcp_keep_alive_interval),
|
1791
|
+
config_poll_interval: Utils::Time.extract_duration(@config_poll_interval),
|
1792
|
+
config_poll_floor: Utils::Time.extract_duration(@config_poll_floor),
|
1793
|
+
config_idle_redial_timeout: Utils::Time.extract_duration(@config_idle_redial_timeout),
|
1794
|
+
idle_http_connection_timeout: Utils::Time.extract_duration(@idle_http_connection_timeout),
|
1795
|
+
}
|
1796
|
+
end
|
1797
|
+
end
|
1798
|
+
|
1799
|
+
# Options for {Couchbase::Cluster#diagnostics}
|
1800
|
+
class Diagnostics
|
1801
|
+
attr_accessor :report_id # @return [String]
|
1802
|
+
|
1803
|
+
# Creates an instance of options for {Couchbase::Cluster#diagnostics}
|
1804
|
+
#
|
1805
|
+
# @param [String] report_id Holds custom report ID.
|
1806
|
+
#
|
1807
|
+
# @yieldparam [Diagnostics] self
|
1808
|
+
def initialize(report_id: nil)
|
1809
|
+
@report_id = report_id
|
1810
|
+
yield self if block_given?
|
1811
|
+
end
|
1812
|
+
|
1813
|
+
# @api private
|
1814
|
+
DEFAULT = Diagnostics.new.freeze
|
1815
|
+
end
|
1816
|
+
|
1817
|
+
# Options for {Couchbase::Bucket#ping}
|
1818
|
+
class Ping
|
1819
|
+
attr_accessor :report_id # @return [String]
|
1820
|
+
attr_accessor :service_types # @return [Array<Symbol>]
|
1821
|
+
attr_accessor :timeout # @return [Integer, #in_milliseconds]
|
1822
|
+
|
1823
|
+
# Creates an instance of options for {Couchbase::Bucket#ping}
|
1824
|
+
#
|
1825
|
+
# @param [String] report_id Holds custom report id.
|
1826
|
+
# @@param [Array<Symbol>] service_types The service types to limit this diagnostics request
|
1827
|
+
# @param [Integer, #in_milliseconds] timeout
|
1828
|
+
#
|
1829
|
+
# @yieldparam [Ping] self
|
1830
|
+
def initialize(report_id: nil,
|
1831
|
+
service_types: [:kv, :query, :analytics, :search, :views, :management],
|
1832
|
+
timeout: nil)
|
1833
|
+
@report_id = report_id
|
1834
|
+
@service_types = service_types
|
1835
|
+
@timeout = timeout
|
1836
|
+
yield self if block_given?
|
1837
|
+
end
|
1838
|
+
|
1839
|
+
# @api private
|
1840
|
+
def to_backend
|
1841
|
+
{
|
1842
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
1843
|
+
service_types: @service_types,
|
1844
|
+
report_id: @report_id,
|
1845
|
+
}
|
1846
|
+
end
|
1847
|
+
|
1848
|
+
# @api private
|
1849
|
+
DEFAULT = Ping.new.freeze
|
1850
|
+
end
|
1851
|
+
|
1852
|
+
# Options for {Couchbase::Cluster#analytics_query}
|
1853
|
+
class Analytics < Base
|
1854
|
+
attr_accessor :client_context_id # @return [String]
|
1855
|
+
attr_accessor :scan_consistency # @return [Symbol]
|
1856
|
+
attr_accessor :readonly # @return [Boolean]
|
1857
|
+
attr_accessor :priority # @return [Boolean]
|
1858
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #decode(String)]
|
1859
|
+
attr_accessor :scope_qualifier # @return [String]
|
1860
|
+
|
1861
|
+
# Creates new instance of options for {Couchbase::Cluster#analytics_query}
|
1862
|
+
#
|
1863
|
+
# @param [String] client_context_id provides a custom client context ID for this query
|
1864
|
+
# @param [Symbol] scan_consistency specifies level of consistency for the query
|
1865
|
+
# +:not_bounded+::
|
1866
|
+
# The index will return whatever state it has to the analytics query engine at the time of query.
|
1867
|
+
#
|
1868
|
+
# This is the default (for single-statement requests). No timestamp vector is used in the index scan.
|
1869
|
+
# This is also the fastest mode, because we avoid the cost of obtaining the vector, and we also avoid
|
1870
|
+
# any wait for the index
|
1871
|
+
# +:request_plus+::
|
1872
|
+
# The index will wait until all mutations have been processed at the time of request before being processed
|
1873
|
+
# in the analytics query engine.
|
1874
|
+
#
|
1875
|
+
# This implements strong consistency per request. Before processing the request, a current vector is obtained.
|
1876
|
+
# The vector is used as a lower bound for the statements in the request.
|
1877
|
+
# @param [Boolean] readonly allows explicitly marking a query as being readonly and not mutating any documents on
|
1878
|
+
# the server side.
|
1879
|
+
# @param [Boolean] priority allows to give certain requests higher priority than others
|
1880
|
+
# @param [JsonTranscoder] transcoder to decode rows
|
1881
|
+
# @param [Array<#to_json>, nil] positional_parameters parameters to be used as substitution for numbered macros
|
1882
|
+
# like +$1+, +$2+ in query string
|
1883
|
+
# @param [Hash<String => #to_json>, nil] named_parameters parameters to be used as substitution for named macros
|
1884
|
+
# like +$name+ in query string
|
1885
|
+
# @param [String, nil] scope_qualifier Associate scope qualifier (also known as +query_context+) with the query.
|
1886
|
+
# The qualifier must be in form +{bucket_name}.{scope_name}+ or +default:{bucket_name}.{scope_name}+.
|
1887
|
+
#
|
1888
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
1889
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
1890
|
+
# @param [Hash, nil] client_context the client context data, if set
|
1891
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
1892
|
+
#
|
1893
|
+
# @note Either +positional_parameters+ or +named_parameters+ may be specified.
|
1894
|
+
#
|
1895
|
+
# @yieldparam [Analytics] self
|
1896
|
+
def initialize(client_context_id: nil,
|
1897
|
+
scan_consistency: nil,
|
1898
|
+
readonly: false,
|
1899
|
+
priority: nil,
|
1900
|
+
transcoder: JsonTranscoder.new,
|
1901
|
+
positional_parameters: nil,
|
1902
|
+
named_parameters: nil,
|
1903
|
+
scope_qualifier: nil,
|
1904
|
+
timeout: nil,
|
1905
|
+
retry_strategy: nil,
|
1906
|
+
client_context: nil,
|
1907
|
+
parent_span: nil)
|
1908
|
+
raise ArgumentError, "Cannot pass positional and named parameters at the same time" if positional_parameters && named_parameters
|
1909
|
+
|
1910
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
1911
|
+
@client_context_id = client_context_id
|
1912
|
+
@scan_consistency = scan_consistency
|
1913
|
+
@readonly = readonly
|
1914
|
+
@priority = priority
|
1915
|
+
@transcoder = transcoder
|
1916
|
+
@positional_parameters = positional_parameters
|
1917
|
+
@named_parameters = named_parameters
|
1918
|
+
@scope_qualifier = scope_qualifier
|
1919
|
+
@raw_parameters = {}
|
1920
|
+
yield self if block_given?
|
1921
|
+
end
|
1922
|
+
|
1923
|
+
# Sets positional parameters for the query
|
1924
|
+
#
|
1925
|
+
# @param [Array] positional the list of parameters that have to be substituted in the statement
|
1926
|
+
def positional_parameters(positional)
|
1927
|
+
@positional_parameters = positional
|
1928
|
+
@named_parameters = nil
|
1929
|
+
end
|
1930
|
+
|
1931
|
+
# Sets named parameters for the query
|
1932
|
+
#
|
1933
|
+
# @param [Hash] named the key/value map of the parameters to substitute in the statement
|
1934
|
+
def named_parameters(named)
|
1935
|
+
@named_parameters = named
|
1936
|
+
@positional_parameters = nil
|
1937
|
+
end
|
1938
|
+
|
1939
|
+
# Allows providing custom JSON key/value pairs for advanced usage
|
1940
|
+
#
|
1941
|
+
# @param [String] key the parameter name (key of the JSON property)
|
1942
|
+
# @param [Object] value the parameter value (value of the JSON property)
|
1943
|
+
def raw(key, value)
|
1944
|
+
@raw_parameters[key] = JSON.generate(value)
|
1945
|
+
end
|
1946
|
+
|
1947
|
+
# @api private
|
1948
|
+
def to_backend(scope_name: nil, bucket_name: nil)
|
1949
|
+
{
|
1950
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
1951
|
+
client_context_id: @client_context_id,
|
1952
|
+
scan_consistency: @scan_consistency,
|
1953
|
+
readonly: @readonly,
|
1954
|
+
priority: @priority,
|
1955
|
+
positional_parameters: export_positional_parameters,
|
1956
|
+
named_parameters: export_named_parameters,
|
1957
|
+
raw_parameters: @raw_parameters,
|
1958
|
+
scope_qualifier: @scope_qualifier,
|
1959
|
+
scope_name: scope_name,
|
1960
|
+
bucket_name: bucket_name,
|
1961
|
+
}
|
1962
|
+
end
|
1963
|
+
|
1964
|
+
# @api private
|
1965
|
+
DEFAULT = Analytics.new.freeze
|
1966
|
+
|
1967
|
+
private
|
1968
|
+
|
1969
|
+
# @api private
|
1970
|
+
# @return [Array<String>, nil]
|
1971
|
+
def export_positional_parameters
|
1972
|
+
@positional_parameters&.map { |p| JSON.dump(p) }
|
1973
|
+
end
|
1974
|
+
|
1975
|
+
# @api private
|
1976
|
+
# @return [Hash<String => String>, nil]
|
1977
|
+
def export_named_parameters
|
1978
|
+
@named_parameters&.each_with_object({}) { |(n, v), o| o[n.to_s] = JSON.dump(v) }
|
1979
|
+
end
|
1980
|
+
|
1981
|
+
# @api private
|
1982
|
+
# @return [Hash<String => #to_json>]
|
1983
|
+
attr_reader :raw_parameters
|
1984
|
+
end
|
1985
|
+
|
1986
|
+
# Options for {Couchbase::Cluster#query}
|
1987
|
+
class Query < Base
|
1988
|
+
attr_accessor :adhoc # @return [Boolean]
|
1989
|
+
attr_accessor :client_context_id # @return [String]
|
1990
|
+
attr_accessor :max_parallelism # @return [Integer]
|
1991
|
+
attr_accessor :readonly # @return [Boolean]
|
1992
|
+
attr_accessor :scan_wait # @return [Integer, #in_milliseconds]
|
1993
|
+
attr_accessor :scan_cap # @return [Integer]
|
1994
|
+
attr_accessor :pipeline_batch # @return [Integer]
|
1995
|
+
attr_accessor :pipeline_cap # @return [Integer]
|
1996
|
+
attr_accessor :metrics # @return [Boolean]
|
1997
|
+
attr_accessor :profile # @return [Symbol]
|
1998
|
+
attr_accessor :flex_index # @return [Boolean]
|
1999
|
+
attr_accessor :preserve_expiry # @return [Boolean]
|
2000
|
+
attr_accessor :use_replica # @return [Boolean, nil]
|
2001
|
+
attr_accessor :scope_qualifier # @return [String]
|
2002
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #decode(String)]
|
2003
|
+
|
2004
|
+
# Creates new instance of options for {Couchbase::Cluster#query}
|
2005
|
+
#
|
2006
|
+
# @param [Boolean] adhoc allows turning this request into a prepared statement query
|
2007
|
+
# @param [String, nil] client_context_id provides a custom client context ID for this query
|
2008
|
+
# @param [Integer, nil] max_parallelism allows overriding the default maximum parallelism for the query execution
|
2009
|
+
# on the server side.
|
2010
|
+
# @param [Boolean, nil] readonly allows explicitly marking a query as being readonly and not mutating any
|
2011
|
+
# documents on the server side.
|
2012
|
+
# @param [Integer, #in_milliseconds, nil] scan_wait The maximum duration (in milliseconds) the query engine
|
2013
|
+
# is willing to wait before failing. Allows customizing how long (in milliseconds) the query engine is willing
|
2014
|
+
# to wait until the index catches up to whatever scan consistency is asked for in this query. Note that if
|
2015
|
+
# +:not_bounded+ consistency level is used, this method doesn't do anything at all. If no value is provided to
|
2016
|
+
# this method, the server default is used.
|
2017
|
+
# @param [Integer, nil] scan_cap customize the maximum buffered channel size between the indexer and the query
|
2018
|
+
# service
|
2019
|
+
# @param [Integer, nil] pipeline_cap customize the number of items execution operators can batch for fetch
|
2020
|
+
# from the Key Value layer on the server.
|
2021
|
+
# @param [Integer, nil] pipeline_batch customize the maximum number of items each execution operator can buffer
|
2022
|
+
# between various operators on the server.
|
2023
|
+
# @param [Boolean, nil] metrics enables per-request metrics in the trailing section of the query
|
2024
|
+
# @param [Symbol] profile customize server profile level for this query
|
2025
|
+
# +:off+::
|
2026
|
+
# No profiling information is added to the query response
|
2027
|
+
# +:phases+::
|
2028
|
+
# The query response includes a profile section with stats and details about various phases of the query plan
|
2029
|
+
# and execution. Three phase times will be included in the +system:active_requests+ and
|
2030
|
+
# +system:completed_requests+ monitoring keyspaces.
|
2031
|
+
# +:timings+::
|
2032
|
+
# Besides the phase times, the profile section of the query response document will include a full query plan
|
2033
|
+
# with timing and information about the number of processed documents at each phase. This information will be
|
2034
|
+
# included in the system:active_requests and system:completed_requests keyspaces.
|
2035
|
+
# @param [Symbol, nil] scan_consistency Sets the mutation tokens this query should be consistent with. Overrides
|
2036
|
+
# +mutation_state+.
|
2037
|
+
# +:not_bounded+::
|
2038
|
+
# The indexer will return whatever state it has to the query engine at the time of query. This is the default
|
2039
|
+
# (for single-statement requests).
|
2040
|
+
# +:request_plus+::
|
2041
|
+
# The indexer will wait until all mutations have been processed at the time of request before returning to
|
2042
|
+
# the query engine.
|
2043
|
+
# @param [Boolean, nil] flex_index Tells the query engine to use a flex index (utilizing the search service)
|
2044
|
+
# @param [Boolean, nil] preserve_expiry Tells the query engine to preserve expiration values set on any documents
|
2045
|
+
# modified by this query.
|
2046
|
+
# @param [Boolean, nil] use_replica Specifies that the query engine should use replica nodes for KV fetches if
|
2047
|
+
# the active node is down. If not provided, the server default will be used
|
2048
|
+
# @param [String, nil] scope_qualifier Associate scope qualifier (also known as +query_context+) with the query.
|
2049
|
+
# The qualifier must be in form +{bucket_name}.{scope_name}+ or +default:{bucket_name}.{scope_name}+.
|
2050
|
+
# @param [JsonTranscoder] transcoder to decode rows
|
2051
|
+
# @param [Array<#to_json>, nil] positional_parameters parameters to be used as substitution for numbered macros
|
2052
|
+
# like +$1+, +$2+ in query string
|
2053
|
+
# @param [Hash<String => #to_json>, nil] named_parameters parameters to be used as substitution for named macros
|
2054
|
+
# like +$name+ in query string.
|
2055
|
+
#
|
2056
|
+
# @param [MutationState, nil] mutation_state Sets the mutation tokens this query should be consistent with.
|
2057
|
+
# Overrides +scan_consistency+.
|
2058
|
+
#
|
2059
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
2060
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
2061
|
+
# @param [Hash, nil] client_context the client context data, if set
|
2062
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
2063
|
+
#
|
2064
|
+
# @note Either +positional_parameters+ or +named_parameters+ may be specified.
|
2065
|
+
#
|
2066
|
+
# @yieldparam [Query] self
|
2067
|
+
def initialize(adhoc: true,
|
2068
|
+
client_context_id: nil,
|
2069
|
+
max_parallelism: nil,
|
2070
|
+
readonly: false,
|
2071
|
+
scan_wait: nil,
|
2072
|
+
scan_cap: nil,
|
2073
|
+
pipeline_cap: nil,
|
2074
|
+
pipeline_batch: nil,
|
2075
|
+
metrics: nil,
|
2076
|
+
profile: :off,
|
2077
|
+
flex_index: nil,
|
2078
|
+
preserve_expiry: nil,
|
2079
|
+
use_replica: nil,
|
2080
|
+
scope_qualifier: nil,
|
2081
|
+
scan_consistency: :not_bounded,
|
2082
|
+
mutation_state: nil,
|
2083
|
+
transcoder: JsonTranscoder.new,
|
2084
|
+
positional_parameters: nil,
|
2085
|
+
named_parameters: nil,
|
2086
|
+
timeout: nil,
|
2087
|
+
retry_strategy: nil,
|
2088
|
+
client_context: nil,
|
2089
|
+
parent_span: nil)
|
2090
|
+
raise ArgumentError, "Cannot pass positional and named parameters at the same time" if positional_parameters && named_parameters
|
2091
|
+
|
2092
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
2093
|
+
@adhoc = adhoc
|
2094
|
+
@client_context_id = client_context_id
|
2095
|
+
@max_parallelism = max_parallelism
|
2096
|
+
@readonly = readonly
|
2097
|
+
@scan_wait = scan_wait
|
2098
|
+
@scan_cap = scan_cap
|
2099
|
+
@pipeline_cap = pipeline_cap
|
2100
|
+
@pipeline_batch = pipeline_batch
|
2101
|
+
@metrics = metrics
|
2102
|
+
@profile = profile
|
2103
|
+
@flex_index = flex_index
|
2104
|
+
@preserve_expiry = preserve_expiry
|
2105
|
+
@use_replica = use_replica
|
2106
|
+
@scope_qualifier = scope_qualifier
|
2107
|
+
@scan_consistency = scan_consistency
|
2108
|
+
@mutation_state = mutation_state
|
2109
|
+
@transcoder = transcoder
|
2110
|
+
@positional_parameters = positional_parameters
|
2111
|
+
@named_parameters = named_parameters
|
2112
|
+
@raw_parameters = {}
|
2113
|
+
yield self if block_given?
|
2114
|
+
end
|
2115
|
+
|
2116
|
+
# Allows providing custom JSON key/value pairs for advanced usage
|
2117
|
+
#
|
2118
|
+
# @param [String] key the parameter name (key of the JSON property)
|
2119
|
+
# @param [Object] value the parameter value (value of the JSON property)
|
2120
|
+
def raw(key, value)
|
2121
|
+
@raw_parameters[key] = JSON.generate(value)
|
2122
|
+
end
|
2123
|
+
|
2124
|
+
# Customizes the consistency guarantees for this query
|
2125
|
+
#
|
2126
|
+
# @note overrides consistency level set by {#consistent_with}
|
2127
|
+
#
|
2128
|
+
# [+:not_bounded+] The indexer will return whatever state it has to the query engine at the time of query. This is the default (for
|
2129
|
+
# single-statement requests).
|
2130
|
+
#
|
2131
|
+
# [+:request_plus+] The indexer will wait until all mutations have been processed at the time of request before returning to the query
|
2132
|
+
# engine.
|
2133
|
+
#
|
2134
|
+
# @param [:not_bounded, :request_plus] level the index scan consistency to be used for this query
|
2135
|
+
def scan_consistency=(level)
|
2136
|
+
@mutation_state = nil if @mutation_state
|
2137
|
+
@scan_consistency = level
|
2138
|
+
end
|
2139
|
+
|
2140
|
+
# Sets the mutation tokens this query should be consistent with
|
2141
|
+
#
|
2142
|
+
# @note overrides consistency level set by {#scan_consistency=}
|
2143
|
+
#
|
2144
|
+
# @param [MutationState] mutation_state the mutation state containing the mutation tokens
|
2145
|
+
def consistent_with(mutation_state)
|
2146
|
+
@scan_consistency = nil if @scan_consistency
|
2147
|
+
@mutation_state = mutation_state
|
2148
|
+
end
|
2149
|
+
|
2150
|
+
# Sets positional parameters for the query
|
2151
|
+
#
|
2152
|
+
# @param [Array] positional the list of parameters that have to be substituted in the statement
|
2153
|
+
def positional_parameters(positional)
|
2154
|
+
@positional_parameters = positional
|
2155
|
+
@named_parameters = nil
|
2156
|
+
end
|
2157
|
+
|
2158
|
+
# @api private
|
2159
|
+
# @return [Array<String>, nil]
|
2160
|
+
def export_positional_parameters
|
2161
|
+
@positional_parameters&.map { |p| JSON.dump(p) }
|
2162
|
+
end
|
2163
|
+
|
2164
|
+
# Sets named parameters for the query
|
2165
|
+
#
|
2166
|
+
# @param [Hash] named the key/value map of the parameters to substitute in the statement
|
2167
|
+
def named_parameters(named)
|
2168
|
+
@named_parameters = named
|
2169
|
+
@positional_parameters = nil
|
2170
|
+
end
|
2171
|
+
|
2172
|
+
# @api private
|
2173
|
+
# @return [Hash<String => String>, nil]
|
2174
|
+
def export_named_parameters
|
2175
|
+
@named_parameters&.each_with_object({}) { |(n, v), o| o[n.to_s] = JSON.dump(v) }
|
2176
|
+
end
|
2177
|
+
|
2178
|
+
# @api private
|
2179
|
+
# @return [MutationState]
|
2180
|
+
attr_reader :mutation_state
|
2181
|
+
|
2182
|
+
# @api private
|
2183
|
+
# @return [Hash<String => #to_json>]
|
2184
|
+
attr_reader :raw_parameters
|
2185
|
+
|
2186
|
+
# @api private
|
2187
|
+
def to_backend(scope_name: nil, bucket_name: nil)
|
2188
|
+
if scope_name && bucket_name
|
2189
|
+
default_query_context = format("default:`%<bucket>s`.`%<scope>s`", bucket: bucket_name, scope: scope_name)
|
2190
|
+
end
|
2191
|
+
{
|
2192
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
2193
|
+
adhoc: @adhoc,
|
2194
|
+
client_context_id: @client_context_id,
|
2195
|
+
max_parallelism: @max_parallelism,
|
2196
|
+
readonly: @readonly,
|
2197
|
+
flex_index: @flex_index,
|
2198
|
+
preserve_expiry: @preserve_expiry,
|
2199
|
+
use_replica: @use_replica,
|
2200
|
+
scan_wait: Utils::Time.extract_duration(@scan_wait),
|
2201
|
+
scan_cap: @scan_cap,
|
2202
|
+
pipeline_batch: @pipeline_batch,
|
2203
|
+
pipeline_cap: @pipeline_cap,
|
2204
|
+
metrics: @metrics,
|
2205
|
+
profile: @profile,
|
2206
|
+
positional_parameters: export_positional_parameters,
|
2207
|
+
named_parameters: export_named_parameters,
|
2208
|
+
raw_parameters: @raw_parameters,
|
2209
|
+
scan_consistency: @scan_consistency,
|
2210
|
+
mutation_state: @mutation_state&.to_a,
|
2211
|
+
query_context: @scope_qualifier || default_query_context,
|
2212
|
+
}
|
2213
|
+
end
|
2214
|
+
|
2215
|
+
# @api private
|
2216
|
+
DEFAULT = Query.new.freeze
|
2217
|
+
end
|
2218
|
+
|
2219
|
+
# Options for {Couchbase::Cluster#search_query} and {Couchbase::Cluster#search}
|
2220
|
+
class Search < Base
|
2221
|
+
attr_accessor :limit # @return [Integer]
|
2222
|
+
attr_accessor :skip # @return [Integer]
|
2223
|
+
attr_accessor :explain # @return [Boolean]
|
2224
|
+
attr_accessor :highlight_style # @return [Symbol]
|
2225
|
+
attr_accessor :highlight_fields # @return [Array<String>]
|
2226
|
+
attr_accessor :fields # @return [Array<String>]
|
2227
|
+
attr_accessor :disable_scoring # @return [Boolean]
|
2228
|
+
attr_accessor :include_locations # @return [Boolean]
|
2229
|
+
attr_accessor :collections # @return [Array<String>, nil]
|
2230
|
+
attr_accessor :sort # @return [Array<String, Cluster::SearchSort>]
|
2231
|
+
attr_accessor :facets # @return [Hash<String => Cluster::SearchFacet>]
|
2232
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #decode(String)]
|
2233
|
+
|
2234
|
+
# @param [Integer] limit limits the number of matches returned from the complete result set.
|
2235
|
+
# @param [Integer] skip indicates how many matches are skipped on the result set before starting to return the
|
2236
|
+
# matches
|
2237
|
+
# @param [Boolean] explain triggers inclusion of additional search result score explanations.
|
2238
|
+
# @param [:html, :ansi, nil] highlight_style the style of highlighting in the result excerpts (if not specified,
|
2239
|
+
# the server default will be used)
|
2240
|
+
# @param [Array<String>] highlight_fields list of the fields to highlight
|
2241
|
+
# @param [Array<String>] fields list of field values which should be retrieved for result documents, provided they
|
2242
|
+
# were stored while indexing
|
2243
|
+
# @param [MutationState] mutation_state the mutation tokens this query should be consistent with
|
2244
|
+
# @param [Boolean] disable_scoring If set to true, the server will not perform any scoring on the hits
|
2245
|
+
# @param [Boolean] include_locations UNCOMMITTED: If set to true, will include the vector of search_location in rows
|
2246
|
+
# @param [Array<String>, nil] collections list of collections by which to filter the results
|
2247
|
+
# @param [Array<String, Cluster::SearchSort>] sort Ordering rules to apply to the results. The list might contain
|
2248
|
+
# either strings or special objects, that derive from {Cluster::SearchSort}. In case of String, the value
|
2249
|
+
# represents the name of the field with optional +-+ in front of the name, which will turn on descending mode
|
2250
|
+
# for this field. One field is special is +"_score"+ which will sort results by their score. When nothing
|
2251
|
+
# specified, the Server will order results by their score descending, which is equivalent of +"-_score"+.
|
2252
|
+
# @param [Hash<String => Cluster::SearchFacet>] facets facets allow to aggregate information collected on a
|
2253
|
+
# particular result set
|
2254
|
+
# @param [JsonTranscoder, #decode(String)] transcoder to use for the results
|
2255
|
+
#
|
2256
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
2257
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
2258
|
+
# @param [Hash, nil] client_context the client context data, if set
|
2259
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
2260
|
+
#
|
2261
|
+
# @yieldparam [Search] self
|
2262
|
+
def initialize(limit: nil,
|
2263
|
+
skip: nil,
|
2264
|
+
explain: false,
|
2265
|
+
highlight_style: nil,
|
2266
|
+
highlight_fields: nil,
|
2267
|
+
fields: nil,
|
2268
|
+
mutation_state: nil,
|
2269
|
+
disable_scoring: false,
|
2270
|
+
include_locations: false,
|
2271
|
+
collections: nil,
|
2272
|
+
sort: nil,
|
2273
|
+
facets: nil,
|
2274
|
+
transcoder: JsonTranscoder.new,
|
2275
|
+
timeout: nil,
|
2276
|
+
retry_strategy: nil,
|
2277
|
+
client_context: nil,
|
2278
|
+
parent_span: nil)
|
2279
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
2280
|
+
@limit = limit
|
2281
|
+
@skip = skip
|
2282
|
+
@explain = explain
|
2283
|
+
@highlight_style = highlight_style
|
2284
|
+
@highlight_fields = highlight_fields
|
2285
|
+
@fields = fields
|
2286
|
+
@disable_scoring = disable_scoring
|
2287
|
+
@include_locations = include_locations
|
2288
|
+
@collections = collections
|
2289
|
+
@sort = sort
|
2290
|
+
@facets = facets
|
2291
|
+
@transcoder = transcoder
|
2292
|
+
@scan_consistency = :not_bounded
|
2293
|
+
@mutation_state = mutation_state
|
2294
|
+
yield self if block_given?
|
2295
|
+
end
|
2296
|
+
|
2297
|
+
# Sets the mutation tokens this query should be consistent with
|
2298
|
+
#
|
2299
|
+
# @note overrides consistency level set by {#scan_consistency=}
|
2300
|
+
#
|
2301
|
+
# @param [MutationState] mutation_state the mutation state containing the mutation tokens
|
2302
|
+
#
|
2303
|
+
# @return [void]
|
2304
|
+
def consistent_with(mutation_state)
|
2305
|
+
@scan_consistency = nil if @scan_consistency
|
2306
|
+
@mutation_state = mutation_state
|
2307
|
+
end
|
2308
|
+
|
2309
|
+
# Customizes the consistency guarantees for this query
|
2310
|
+
#
|
2311
|
+
# @note overrides consistency level set by {#consistent_with}
|
2312
|
+
#
|
2313
|
+
# @param [:not_bounded] level the scan consistency to be used for this query
|
2314
|
+
# +:not_bounded+:: The engine will return whatever state it has at the time of query
|
2315
|
+
#
|
2316
|
+
# @return [void]
|
2317
|
+
def scan_consistency=(level)
|
2318
|
+
@mutation_state = nil if @mutation_state
|
2319
|
+
@scan_consistency = level
|
2320
|
+
end
|
2321
|
+
|
2322
|
+
# @api private
|
2323
|
+
# @return [MutationState]
|
2324
|
+
attr_reader :mutation_state
|
2325
|
+
|
2326
|
+
# @api private
|
2327
|
+
# @return [Symbol]
|
2328
|
+
attr_reader :scan_consistency
|
2329
|
+
|
2330
|
+
# @api private
|
2331
|
+
def to_backend(show_request: nil)
|
2332
|
+
{
|
2333
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
2334
|
+
limit: @limit,
|
2335
|
+
skip: @skip,
|
2336
|
+
explain: @explain,
|
2337
|
+
disable_scoring: @disable_scoring,
|
2338
|
+
include_locations: @include_locations,
|
2339
|
+
collections: @collections,
|
2340
|
+
highlight_style: @highlight_style,
|
2341
|
+
highlight_fields: @highlight_fields,
|
2342
|
+
fields: @fields,
|
2343
|
+
sort: @sort&.map { |v| JSON.generate(v) },
|
2344
|
+
facets: @facets&.map { |(k, v)| [k, JSON.generate(v)] },
|
2345
|
+
scan_consistency: @scan_consistency,
|
2346
|
+
mutation_state: @mutation_state&.to_a,
|
2347
|
+
show_request: show_request,
|
2348
|
+
}
|
2349
|
+
end
|
2350
|
+
|
2351
|
+
# @api private
|
2352
|
+
DEFAULT = Search.new.freeze
|
2353
|
+
end
|
2354
|
+
|
2355
|
+
class VectorSearch
|
2356
|
+
# @return [:and, :or, nil]
|
2357
|
+
attr_accessor :vector_query_combination
|
2358
|
+
|
2359
|
+
# @param [:and, :or, nil] vector_query_combination
|
2360
|
+
#
|
2361
|
+
# @yieldparam [VectorSearchOptions] self
|
2362
|
+
def initialize(vector_query_combination: nil)
|
2363
|
+
@vector_query_combination = vector_query_combination
|
2364
|
+
|
2365
|
+
yield self if block_given?
|
2366
|
+
end
|
2367
|
+
|
2368
|
+
def to_backend
|
2369
|
+
{
|
2370
|
+
vector_query_combination: @vector_query_combination,
|
2371
|
+
}
|
2372
|
+
end
|
2373
|
+
|
2374
|
+
DEFAULT = VectorSearch.new.freeze
|
2375
|
+
end
|
2376
|
+
|
2377
|
+
# Options for {Couchbase::Cluster#view_query}
|
2378
|
+
class View < Base
|
2379
|
+
attr_accessor :scan_consistency # @return [Symbol]
|
2380
|
+
attr_accessor :namespace # @return [Symbol]
|
2381
|
+
attr_accessor :skip # @return [Integer]
|
2382
|
+
attr_accessor :limit # @return [Integer]
|
2383
|
+
attr_accessor :start_key # @return [#to_json, nil]
|
2384
|
+
attr_accessor :end_key # @return [#to_json, nil]
|
2385
|
+
attr_accessor :start_key_doc_id # @return [String, nil]
|
2386
|
+
attr_accessor :end_key_doc_id # @return [String, nil]
|
2387
|
+
attr_accessor :inclusive_end # @return [Boolean, nil]
|
2388
|
+
attr_accessor :group # @return [Boolean, nil]
|
2389
|
+
attr_accessor :group_level # @return [Integer, nil]
|
2390
|
+
attr_accessor :key # @return [#to_json, nil]
|
2391
|
+
attr_accessor :keys # @return [Array<#to_json>, nil]
|
2392
|
+
attr_accessor :order # @return [Symbol, nil]
|
2393
|
+
attr_accessor :reduce # @return [Boolean, nil]
|
2394
|
+
attr_accessor :on_error # @return [Symbol, nil]
|
2395
|
+
attr_accessor :debug # @return [Boolean, nil]
|
2396
|
+
|
2397
|
+
# @param [:not_bounded, :request_plus, :update_after] scan_consistency Specifies the level of consistency for the query
|
2398
|
+
# @param [:production, :development] namespace
|
2399
|
+
# @param [Integer, nil] skip Specifies the number of results to skip from the start of the result set
|
2400
|
+
# @param [Integer, nil] limit Specifies the maximum number of results to return
|
2401
|
+
# @param [#to_json, nil] start_key Specifies the key, to which the engine has to skip before result generation
|
2402
|
+
# @param [#to_json, nil] end_key Specifies the key, at which the result generation has to be stopped
|
2403
|
+
# @param [String, nil] start_key_doc_id Specifies the document id in case {#start_key} gives multiple results within the index
|
2404
|
+
# @param [String, nil] end_key_doc_id Specifies the document id in case {#end_key} gives multiple results within the index
|
2405
|
+
# @param [Boolean, nil] inclusive_end Specifies whether the {#end_key}/#{#end_key_doc_id} values should be inclusive
|
2406
|
+
# @param [Boolean, nil] group Specifies whether to enable grouping of the results
|
2407
|
+
# @param [Integer, nil] group_level Specifies the depth within the key to group the results
|
2408
|
+
# @param [#to_json, nil] key Specifies the key to fetch from the index
|
2409
|
+
# @param [Array<#to_json>, nil] keys Specifies set of the keys to fetch from the index
|
2410
|
+
# @param [:ascending, :descending, nil] order Specifies the order of the results that should be returned
|
2411
|
+
# @param [Boolean, nil] reduce Specifies whether to enable the reduction function associated with this particular
|
2412
|
+
# view index
|
2413
|
+
# @param [:stop, :continue, nil] on_error Specifies the behaviour of the view engine should an error occur during
|
2414
|
+
# the gathering of view index results which would result in only partial results being available
|
2415
|
+
# @param [Boolean, nil] debug allows to return debug information as part of the view response
|
2416
|
+
#
|
2417
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
2418
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
2419
|
+
# @param [Hash, nil] client_context the client context data, if set
|
2420
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
2421
|
+
#
|
2422
|
+
# @yieldparam [View] self
|
2423
|
+
def initialize(scan_consistency: :not_bounded,
|
2424
|
+
namespace: :production,
|
2425
|
+
skip: nil,
|
2426
|
+
limit: nil,
|
2427
|
+
start_key: nil,
|
2428
|
+
end_key: nil,
|
2429
|
+
start_key_doc_id: nil,
|
2430
|
+
end_key_doc_id: nil,
|
2431
|
+
inclusive_end: nil,
|
2432
|
+
group: nil,
|
2433
|
+
group_level: nil,
|
2434
|
+
key: nil,
|
2435
|
+
keys: nil,
|
2436
|
+
order: nil,
|
2437
|
+
reduce: nil,
|
2438
|
+
on_error: nil,
|
2439
|
+
debug: false,
|
2440
|
+
timeout: nil,
|
2441
|
+
retry_strategy: nil,
|
2442
|
+
client_context: nil,
|
2443
|
+
parent_span: nil)
|
2444
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
2445
|
+
|
2446
|
+
@scan_consistency = scan_consistency
|
2447
|
+
@namespace = namespace
|
2448
|
+
@skip = skip
|
2449
|
+
@limit = limit
|
2450
|
+
@start_key = start_key
|
2451
|
+
@end_key = end_key
|
2452
|
+
@start_key_doc_id = start_key_doc_id
|
2453
|
+
@end_key_doc_id = end_key_doc_id
|
2454
|
+
@inclusive_end = inclusive_end
|
2455
|
+
@group = group
|
2456
|
+
@group_level = group_level
|
2457
|
+
@key = key
|
2458
|
+
@keys = keys
|
2459
|
+
@order = order
|
2460
|
+
@reduce = reduce
|
2461
|
+
@on_error = on_error
|
2462
|
+
@debug = debug
|
2463
|
+
yield self if block_given?
|
2464
|
+
end
|
2465
|
+
|
2466
|
+
# Allows providing custom JSON key/value pairs for advanced usage
|
2467
|
+
#
|
2468
|
+
# @param [String] key the parameter name (key of the JSON property)
|
2469
|
+
# @param [Object] value the parameter value (value of the JSON property)
|
2470
|
+
def raw(key, value)
|
2471
|
+
@raw_parameters[key] = JSON.generate(value)
|
2472
|
+
end
|
2473
|
+
|
2474
|
+
# @api private
|
2475
|
+
def to_backend
|
2476
|
+
{
|
2477
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
2478
|
+
scan_consistency: @scan_consistency,
|
2479
|
+
skip: @skip,
|
2480
|
+
limit: @limit,
|
2481
|
+
start_key: (JSON.generate(@start_key) unless @start_key.nil?),
|
2482
|
+
end_key: (JSON.generate(@end_key) unless @end_key.nil?),
|
2483
|
+
start_key_doc_id: @start_key_doc_id,
|
2484
|
+
end_key_doc_id: @end_key_doc_id,
|
2485
|
+
inclusive_end: @inclusive_end,
|
2486
|
+
group: @group,
|
2487
|
+
group_level: @group_level,
|
2488
|
+
key: (JSON.generate(@key) unless @key.nil?),
|
2489
|
+
keys: @keys&.map { |key| JSON.generate(key) },
|
2490
|
+
order: @order,
|
2491
|
+
reduce: @reduce,
|
2492
|
+
on_error: @on_error,
|
2493
|
+
debug: @debug,
|
2494
|
+
}
|
2495
|
+
end
|
2496
|
+
|
2497
|
+
# @api private
|
2498
|
+
DEFAULT = View.new.freeze
|
2499
|
+
end
|
2500
|
+
|
2501
|
+
# @api private
|
2502
|
+
# TODO: deprecate in 3.1
|
2503
|
+
CommonOptions = ::Couchbase::Options::Base
|
2504
|
+
|
2505
|
+
# rubocop:disable Naming/MethodName constructor shortcuts
|
2506
|
+
module_function
|
2507
|
+
|
2508
|
+
# Construct {Get} options for {Collection#get}
|
2509
|
+
#
|
2510
|
+
# @example Get partial document using projections
|
2511
|
+
# res = collection.get("customer123", Options::Get(projections: ["name", "addresses.billing"]))
|
2512
|
+
# res.content
|
2513
|
+
#
|
2514
|
+
# # {"addresses"=>
|
2515
|
+
# # {"billing"=>
|
2516
|
+
# # {"country"=>"United Kingdom",
|
2517
|
+
# # "line1"=>"123 Any Street",
|
2518
|
+
# # "line2"=>"Anytown"}},
|
2519
|
+
# # "name"=>"Douglas Reynholm"}
|
2520
|
+
#
|
2521
|
+
# @return [Get]
|
2522
|
+
def Get(**args)
|
2523
|
+
Get.new(**args)
|
2524
|
+
end
|
2525
|
+
|
2526
|
+
# Construct {GetMulti} options for {Collection#get_multi}
|
2527
|
+
#
|
2528
|
+
# @example Fetch "foo" and "bar" in a batch
|
2529
|
+
# res = collection.get(["foo", "bar"], Options::GetMulti(timeout: 3_000))
|
2530
|
+
# res[0].content #=> content of "foo"
|
2531
|
+
# res[1].content #=> content of "bar"
|
2532
|
+
#
|
2533
|
+
# @return [GetMulti]
|
2534
|
+
def GetMulti(**args)
|
2535
|
+
GetMulti.new(**args)
|
2536
|
+
end
|
2537
|
+
|
2538
|
+
# Construct {GetAndLock} options for {Collection#get_and_lock}
|
2539
|
+
#
|
2540
|
+
# @example Retrieve document and lock for 10 seconds
|
2541
|
+
# collection.get_and_lock("customer123", 10, Options::GetAndLock(timeout: 3_000))
|
2542
|
+
#
|
2543
|
+
# @return [GetAndLock]
|
2544
|
+
def GetAndLock(**args)
|
2545
|
+
GetAndLock.new(**args)
|
2546
|
+
end
|
2547
|
+
|
2548
|
+
# Construct {GetAndTouch} options for {Collection#get_and_touch}
|
2549
|
+
#
|
2550
|
+
# @example Retrieve document and prolong its expiration for 10 seconds
|
2551
|
+
# collection.get_and_touch("customer123", 10, Options::GetAndTouch(timeout: 3_000))
|
2552
|
+
#
|
2553
|
+
# @return [GetAndTouch]
|
2554
|
+
def GetAndTouch(**args)
|
2555
|
+
GetAndTouch.new(**args)
|
2556
|
+
end
|
2557
|
+
|
2558
|
+
# Construct {GetAllReplicas} options for {Collection#get_any_replica}
|
2559
|
+
#
|
2560
|
+
# @return [GetAllReplicas]
|
2561
|
+
def GetAllReplicas(**args)
|
2562
|
+
GetAllReplicas.new(**args)
|
2563
|
+
end
|
2564
|
+
|
2565
|
+
# Construct {GetAnyReplica} options for {Collection#get_all_replicas}
|
2566
|
+
#
|
2567
|
+
# @return [GetAnyReplica]
|
2568
|
+
def GetAnyReplica(**args)
|
2569
|
+
GetAnyReplica.new(**args)
|
2570
|
+
end
|
2571
|
+
|
2572
|
+
# Construct {Exists} options for {Collection#exists}
|
2573
|
+
#
|
2574
|
+
# @example Check if the document exists without fetching its contents
|
2575
|
+
# res = collection.exists("customer123", Options::Exists(timeout: 3_000))
|
2576
|
+
# res.exists? #=> true
|
2577
|
+
#
|
2578
|
+
# @return [Exists]
|
2579
|
+
def Exists(**args)
|
2580
|
+
Exists.new(**args)
|
2581
|
+
end
|
2582
|
+
|
2583
|
+
# Construct {Touch} options for {Collection#touch}
|
2584
|
+
#
|
2585
|
+
# @example Reset expiration timer for document to 30 seconds (and use custom operation timeout)
|
2586
|
+
# res = collection.touch("customer123", 30, Options::Touch(timeout: 3_000))
|
2587
|
+
#
|
2588
|
+
# @return [Touch]
|
2589
|
+
def Touch(**args)
|
2590
|
+
Touch.new(**args)
|
2591
|
+
end
|
2592
|
+
|
2593
|
+
# Construct {Unlock} options for {Collection#touch}
|
2594
|
+
#
|
2595
|
+
# @example Lock (pessimistically) and unlock document
|
2596
|
+
# res = collection.get_and_lock("customer123", 10, Options::Unlock(timeout: 3_000))
|
2597
|
+
# collection.unlock("customer123", res.cas)
|
2598
|
+
#
|
2599
|
+
# @return [Unlock]
|
2600
|
+
def Unlock(**args)
|
2601
|
+
Unlock.new(**args)
|
2602
|
+
end
|
2603
|
+
|
2604
|
+
# Construct {Remove} options for {Collection#remove}
|
2605
|
+
#
|
2606
|
+
# @example Remove the document in collection, but apply optimistic lock
|
2607
|
+
# res = collection.upsert("mydoc", {"foo" => 42})
|
2608
|
+
# res.cas #=> 7751414725654
|
2609
|
+
#
|
2610
|
+
# begin
|
2611
|
+
# res = collection.remove("customer123", Options::Remove(cas: 3735928559))
|
2612
|
+
# rescue Error::CasMismatch
|
2613
|
+
# puts "Failed to remove the document, it might be changed by other application"
|
2614
|
+
# end
|
2615
|
+
#
|
2616
|
+
# @return [Remove]
|
2617
|
+
def Remove(**args)
|
2618
|
+
Remove.new(**args)
|
2619
|
+
end
|
2620
|
+
|
2621
|
+
# Construct {RemoveMulti} options for {Collection#remove_multi}
|
2622
|
+
#
|
2623
|
+
# @example Remove two documents in collection. For "mydoc" apply optimistic lock
|
2624
|
+
# res = collection.upsert("mydoc", {"foo" => 42})
|
2625
|
+
# res.cas #=> 7751414725654
|
2626
|
+
#
|
2627
|
+
# res = collection.remove_multi(["foo", ["mydoc", res.cas]], Options::RemoveMulti(timeout: 3_000))
|
2628
|
+
# if res[1].error.is_a?(Error::CasMismatch)
|
2629
|
+
# puts "Failed to remove the document, it might be changed by other application"
|
2630
|
+
# end
|
2631
|
+
#
|
2632
|
+
# @return [RemoveMulti]
|
2633
|
+
def RemoveMulti(**args)
|
2634
|
+
RemoveMulti.new(**args)
|
2635
|
+
end
|
2636
|
+
|
2637
|
+
# Construct {Insert} options for {Collection#insert}
|
2638
|
+
#
|
2639
|
+
# @example Insert new document in collection
|
2640
|
+
# res = collection.insert("mydoc", {"foo" => 42}, Options::Insert(expiry: 20))
|
2641
|
+
# res.cas #=> 242287264414742
|
2642
|
+
#
|
2643
|
+
# @return [Insert]
|
2644
|
+
def Insert(**args)
|
2645
|
+
Insert.new(**args)
|
2646
|
+
end
|
2647
|
+
|
2648
|
+
# Construct {Upsert} options for {Collection#upsert}
|
2649
|
+
#
|
2650
|
+
# @example Upsert new document in collection
|
2651
|
+
# res = collection.upsert("mydoc", {"foo" => 42}, Options::Upsert(expiry: 20))
|
2652
|
+
# res.cas #=> 242287264414742
|
2653
|
+
#
|
2654
|
+
# @return [Upsert]
|
2655
|
+
def Upsert(**args)
|
2656
|
+
Upsert.new(**args)
|
2657
|
+
end
|
2658
|
+
|
2659
|
+
# Construct {UpsertMulti} options for {Collection#upsert_multi}
|
2660
|
+
#
|
2661
|
+
# @example Upsert two documents with IDs "foo" and "bar" into a collection with expiration 20 seconds.
|
2662
|
+
# res = collection.upsert_multi([
|
2663
|
+
# "foo", {"foo" => 42},
|
2664
|
+
# "bar", {"bar" => "some value"}
|
2665
|
+
# ], Options::UpsertMulti(expiry: 20))
|
2666
|
+
# res[0].cas #=> 7751414725654
|
2667
|
+
# res[1].cas #=> 7751418925851
|
2668
|
+
#
|
2669
|
+
# @return [UpsertMulti]
|
2670
|
+
def UpsertMulti(**args)
|
2671
|
+
UpsertMulti.new(**args)
|
2672
|
+
end
|
2673
|
+
|
2674
|
+
# Construct {Replace} options for {Collection#replace}
|
2675
|
+
#
|
2676
|
+
# @example Replace new document in collection with optimistic locking
|
2677
|
+
# res = collection.get("mydoc")
|
2678
|
+
# res = collection.replace("mydoc", {"foo" => 42}, Options::Replace(cas: res.cas))
|
2679
|
+
# res.cas #=> 242287264414742
|
2680
|
+
#
|
2681
|
+
# @return [Replace]
|
2682
|
+
def Replace(**args)
|
2683
|
+
Replace.new(**args)
|
2684
|
+
end
|
2685
|
+
|
2686
|
+
# Construct {MutateIn} options for {Collection#mutate_in}
|
2687
|
+
#
|
2688
|
+
# @example Append number into subarray of the document
|
2689
|
+
# mutation_specs = [
|
2690
|
+
# MutateInSpec::array_append("purchases.complete", [42])
|
2691
|
+
# ]
|
2692
|
+
# collection.mutate_in("customer123", mutation_specs, Options::MutateIn(expiry: 10))
|
2693
|
+
#
|
2694
|
+
# @return [MutateIn]
|
2695
|
+
def MutateIn(**args)
|
2696
|
+
MutateIn.new(**args)
|
2697
|
+
end
|
2698
|
+
|
2699
|
+
# Construct {LookupIn} options for {Collection#lookup_in}
|
2700
|
+
#
|
2701
|
+
# @example Get list of IDs of completed purchases
|
2702
|
+
# lookup_specs = [
|
2703
|
+
# LookupInSpec::get("purchases.complete")
|
2704
|
+
# ]
|
2705
|
+
# collection.lookup_in("customer123", lookup_specs, Options::LookupIn(timeout: 3_000))
|
2706
|
+
#
|
2707
|
+
# @return [LookupIn]
|
2708
|
+
def LookupIn(**args)
|
2709
|
+
LookupIn.new(**args)
|
2710
|
+
end
|
2711
|
+
|
2712
|
+
# Construct {Append} options for {BinaryCollection#append}
|
2713
|
+
#
|
2714
|
+
# @example Append "bar" to the content of the existing document
|
2715
|
+
# collection.upsert("mydoc", "foo")
|
2716
|
+
# collection.binary.append("mydoc", "bar", Options::Append(timeout: 3_000))
|
2717
|
+
# collection.get("mydoc", Options::Get(transcoder: nil)).content #=> "foobar"
|
2718
|
+
#
|
2719
|
+
# @return [Append]
|
2720
|
+
def Append(**args)
|
2721
|
+
Append.new(**args)
|
2722
|
+
end
|
2723
|
+
|
2724
|
+
# Construct {Prepend} options for {BinaryCollection#prepend}
|
2725
|
+
#
|
2726
|
+
# @example Prepend "bar" to the content of the existing document
|
2727
|
+
# collection.upsert("mydoc", "foo")
|
2728
|
+
# collection.binary.prepend("mydoc", "bar", Options::Prepend(timeout: 3_000))
|
2729
|
+
# collection.get("mydoc", Options::Get(transcoder: nil)).content #=> "barfoo"
|
2730
|
+
#
|
2731
|
+
# @return [Prepend]
|
2732
|
+
def Prepend(**args)
|
2733
|
+
Prepend.new(**args)
|
2734
|
+
end
|
2735
|
+
|
2736
|
+
# Construct {Diagnostics} options for {Cluster#diagnostics}
|
2737
|
+
#
|
2738
|
+
# @return [Diagnostics]
|
2739
|
+
def Diagnostics(**args)
|
2740
|
+
Diagnostics.new(**args)
|
2741
|
+
end
|
2742
|
+
|
2743
|
+
# Construct {Ping} options for {Bucket#ping}
|
2744
|
+
#
|
2745
|
+
# @return [Ping]
|
2746
|
+
def Ping(**args)
|
2747
|
+
Ping.new(**args)
|
2748
|
+
end
|
2749
|
+
|
2750
|
+
# Construct {Cluster} options for {Cluster.connect}
|
2751
|
+
#
|
2752
|
+
# It forwards all its arguments to {Cluster#initialize}
|
2753
|
+
#
|
2754
|
+
# @return [Cluster]
|
2755
|
+
def Cluster(**args)
|
2756
|
+
Cluster.new(**args)
|
2757
|
+
end
|
2758
|
+
|
2759
|
+
# Construct {Increment} options for {BinaryCollection#increment}
|
2760
|
+
#
|
2761
|
+
# @example Increment value by 10, and initialize to 0 if it does not exist
|
2762
|
+
# res = collection.binary.increment("raw_counter", Options::Increment(delta: 10, initial: 0))
|
2763
|
+
# res.content #=> 0
|
2764
|
+
# res = collection.binary.increment("raw_counter", Options::Increment(delta: 10, initial: 0))
|
2765
|
+
# res.content #=> 10
|
2766
|
+
#
|
2767
|
+
# @return [Increment]
|
2768
|
+
def Increment(**args)
|
2769
|
+
Increment.new(**args)
|
2770
|
+
end
|
2771
|
+
|
2772
|
+
# Construct {Decrement} options for {BinaryCollection#decrement}
|
2773
|
+
#
|
2774
|
+
# @example Decrement value by 2, and initialize to 100 if it does not exist
|
2775
|
+
# res = collection.binary.decrement("raw_counter", Options::Decrement(delta: 2, initial: 100))
|
2776
|
+
# res.value #=> 100
|
2777
|
+
# res = collection.binary.decrement("raw_counter", Options::Decrement(delta: 2, initial: 100))
|
2778
|
+
# res.value #=> 98
|
2779
|
+
#
|
2780
|
+
# @return [Decrement]
|
2781
|
+
def Decrement(**args)
|
2782
|
+
Decrement.new(**args)
|
2783
|
+
end
|
2784
|
+
|
2785
|
+
# Construct {Analytics} options for {Cluster#analytics_query}
|
2786
|
+
#
|
2787
|
+
# @example Select name of the given user
|
2788
|
+
# cluster.analytics_query("SELECT u.name AS uname FROM GleambookUsers u WHERE u.id = $user_id ",
|
2789
|
+
# Options::Analytics(named_parameters: {user_id: 2}))
|
2790
|
+
#
|
2791
|
+
# @return [Analytics]
|
2792
|
+
def Analytics(**args)
|
2793
|
+
Analytics.new(**args)
|
2794
|
+
end
|
2795
|
+
|
2796
|
+
# Construct {Query} options for {Cluster#query}
|
2797
|
+
#
|
2798
|
+
# @example Select first ten hotels from travel sample dataset
|
2799
|
+
# cluster.query("SELECT * FROM `travel-sample` WHERE type = $type LIMIT 10",
|
2800
|
+
# Options::Query(named_parameters: {type: "hotel"}, metrics: true))
|
2801
|
+
#
|
2802
|
+
# @return [Query]
|
2803
|
+
def Query(**args)
|
2804
|
+
Query.new(**args)
|
2805
|
+
end
|
2806
|
+
|
2807
|
+
# Construct {Search} options for {Cluster#search_query}
|
2808
|
+
#
|
2809
|
+
# @example Return first 10 results of "hop beer" query and request highlighting
|
2810
|
+
# cluster.search_query("beer_index", Cluster::SearchQuery.match_phrase("hop beer"),
|
2811
|
+
# Options::Search(
|
2812
|
+
# limit: 10,
|
2813
|
+
# fields: %w[name],
|
2814
|
+
# highlight_style: :html,
|
2815
|
+
# highlight_fields: %w[name description]
|
2816
|
+
# ))
|
2817
|
+
#
|
2818
|
+
# @return [Search]
|
2819
|
+
def Search(**args)
|
2820
|
+
Search.new(**args)
|
2821
|
+
end
|
2822
|
+
|
2823
|
+
# Construct {View} options for {Bucket#view_query}
|
2824
|
+
#
|
2825
|
+
# @example Make sure the view engine catch up with all mutations and return keys starting from +["random_brewery:"]+
|
2826
|
+
# bucket.view_query("beer", "brewery_beers",
|
2827
|
+
# Options::View(
|
2828
|
+
# start_key: ["random_brewery:"],
|
2829
|
+
# scan_consistency: :request_plus
|
2830
|
+
# ))
|
2831
|
+
#
|
2832
|
+
# @return [View]
|
2833
|
+
def View(**args)
|
2834
|
+
View.new(**args)
|
2835
|
+
end
|
2836
|
+
|
2837
|
+
# Construct {Scan} options for {Collection#scan}
|
2838
|
+
#
|
2839
|
+
# @return [Scan]
|
2840
|
+
def Scan(**args)
|
2841
|
+
Scan.new(**args)
|
2842
|
+
end
|
2843
|
+
|
2844
|
+
# rubocop:enable Naming/MethodName
|
2845
|
+
end
|
2846
|
+
end
|