couchbase 3.4.3 → 3.4.5
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 +4 -4
- data/README.md +2 -2
- data/ext/couchbase/CMakeLists.txt +22 -1
- data/ext/couchbase/core/bucket.cxx +183 -152
- data/ext/couchbase/core/bucket.hxx +17 -4
- data/ext/couchbase/core/cluster.hxx +41 -13
- data/ext/couchbase/core/cluster_options.hxx +3 -0
- data/ext/couchbase/core/crud_component.cxx +51 -22
- data/ext/couchbase/core/error_context/key_value.cxx +2 -1
- data/ext/couchbase/core/error_context/key_value.hxx +10 -12
- data/ext/couchbase/core/impl/build_deferred_query_indexes.cxx +115 -50
- data/ext/couchbase/core/impl/cluster.cxx +6 -0
- data/ext/couchbase/core/impl/create_bucket.cxx +158 -0
- data/ext/couchbase/core/impl/create_collection.cxx +83 -0
- data/ext/couchbase/core/impl/create_query_index.cxx +172 -59
- data/ext/couchbase/core/impl/create_scope.cxx +69 -0
- data/ext/couchbase/core/impl/dns_srv_tracker.cxx +2 -1
- data/ext/couchbase/core/impl/drop_bucket.cxx +66 -0
- data/ext/couchbase/core/impl/drop_collection.cxx +76 -0
- data/ext/couchbase/core/impl/drop_query_index.cxx +138 -59
- data/ext/couchbase/core/impl/drop_scope.cxx +68 -0
- data/ext/couchbase/core/impl/flush_bucket.cxx +66 -0
- data/ext/couchbase/core/impl/get_all_buckets.cxx +178 -0
- data/ext/couchbase/core/impl/get_all_query_indexes.cxx +67 -37
- data/ext/couchbase/core/impl/get_all_scopes.cxx +94 -0
- data/ext/couchbase/core/impl/get_bucket.cxx +168 -0
- data/ext/couchbase/core/impl/internal_manager_error_context.cxx +113 -0
- data/ext/couchbase/core/impl/internal_manager_error_context.hxx +60 -0
- data/ext/couchbase/core/impl/key_value_error_category.cxx +2 -4
- data/ext/couchbase/core/impl/key_value_error_context.cxx +98 -0
- data/ext/couchbase/core/impl/lookup_in.cxx +1 -0
- data/ext/couchbase/core/impl/lookup_in_all_replicas.cxx +178 -0
- data/ext/couchbase/core/impl/lookup_in_all_replicas.hxx +80 -0
- data/ext/couchbase/core/impl/lookup_in_any_replica.cxx +169 -0
- data/ext/couchbase/core/impl/lookup_in_any_replica.hxx +75 -0
- data/ext/couchbase/core/impl/lookup_in_replica.cxx +104 -0
- data/ext/couchbase/core/impl/lookup_in_replica.hxx +67 -0
- data/ext/couchbase/core/impl/manager_error_context.cxx +100 -0
- data/ext/couchbase/core/impl/query.cxx +1 -0
- data/ext/couchbase/core/impl/query_error_context.cxx +75 -0
- data/ext/couchbase/core/impl/update_bucket.cxx +133 -0
- data/ext/couchbase/core/impl/update_collection.cxx +83 -0
- data/ext/couchbase/core/impl/watch_query_indexes.cxx +53 -29
- data/ext/couchbase/core/io/dns_client.cxx +111 -40
- data/ext/couchbase/core/io/dns_config.cxx +5 -4
- data/ext/couchbase/core/io/http_session.hxx +24 -1
- data/ext/couchbase/core/io/mcbp_command.hxx +9 -2
- data/ext/couchbase/core/io/mcbp_session.cxx +80 -43
- data/ext/couchbase/core/io/mcbp_session.hxx +4 -3
- data/ext/couchbase/core/logger/custom_rotating_file_sink.cxx +1 -1
- data/ext/couchbase/core/logger/logger.cxx +80 -20
- data/ext/couchbase/core/logger/logger.hxx +31 -0
- data/ext/couchbase/core/management/bucket_settings.hxx +8 -5
- data/ext/couchbase/core/management/bucket_settings_json.hxx +12 -2
- data/ext/couchbase/core/meta/features.hxx +42 -0
- data/ext/couchbase/core/operations/document_lookup_in.cxx +8 -1
- data/ext/couchbase/core/operations/document_lookup_in_all_replicas.hxx +192 -0
- data/ext/couchbase/core/operations/document_lookup_in_any_replica.hxx +188 -0
- data/ext/couchbase/core/operations/document_query.cxx +11 -0
- data/ext/couchbase/core/operations/document_query.hxx +1 -0
- data/ext/couchbase/core/operations/management/CMakeLists.txt +1 -0
- data/ext/couchbase/core/operations/management/bucket_create.cxx +30 -9
- data/ext/couchbase/core/operations/management/bucket_update.cxx +27 -6
- data/ext/couchbase/core/operations/management/collection_create.cxx +5 -1
- data/ext/couchbase/core/operations/management/collection_create.hxx +1 -0
- data/ext/couchbase/core/operations/management/collection_update.cxx +87 -0
- data/ext/couchbase/core/operations/management/collection_update.hxx +54 -0
- data/ext/couchbase/core/operations/management/collections.hxx +1 -0
- data/ext/couchbase/core/operations.hxx +2 -0
- data/ext/couchbase/core/origin.cxx +270 -0
- data/ext/couchbase/core/origin.hxx +2 -0
- data/ext/couchbase/core/protocol/client_response.hxx +1 -0
- data/ext/couchbase/core/protocol/cmd_hello.hxx +1 -0
- data/ext/couchbase/core/protocol/cmd_lookup_in_replica.cxx +107 -0
- data/ext/couchbase/core/protocol/cmd_lookup_in_replica.hxx +137 -0
- data/ext/couchbase/core/protocol/hello_feature.hxx +6 -0
- data/ext/couchbase/core/protocol/hello_feature_fmt.hxx +3 -0
- data/ext/couchbase/core/protocol/status.cxx +2 -2
- data/ext/couchbase/core/range_scan_options.cxx +3 -27
- data/ext/couchbase/core/range_scan_options.hxx +13 -17
- data/ext/couchbase/core/range_scan_orchestrator.cxx +388 -170
- data/ext/couchbase/core/range_scan_orchestrator.hxx +13 -2
- data/ext/couchbase/core/range_scan_orchestrator_options.hxx +5 -3
- data/ext/couchbase/core/scan_options.hxx +0 -19
- data/ext/couchbase/core/scan_result.cxx +19 -5
- data/ext/couchbase/core/scan_result.hxx +5 -2
- data/ext/couchbase/core/timeout_defaults.hxx +3 -4
- data/ext/couchbase/core/topology/capabilities.hxx +4 -0
- data/ext/couchbase/core/topology/capabilities_fmt.hxx +11 -0
- data/ext/couchbase/core/topology/collections_manifest.hxx +2 -0
- data/ext/couchbase/core/topology/collections_manifest_fmt.hxx +1 -1
- data/ext/couchbase/core/topology/collections_manifest_json.hxx +3 -0
- data/ext/couchbase/core/topology/configuration.hxx +20 -0
- data/ext/couchbase/core/topology/configuration_json.hxx +8 -1
- data/ext/couchbase/core/utils/connection_string.cxx +62 -47
- data/ext/couchbase/core/utils/connection_string.hxx +1 -0
- data/ext/couchbase/couchbase/analytics_error_context.hxx +1 -1
- data/ext/couchbase/couchbase/behavior_options.hxx +19 -2
- data/ext/couchbase/couchbase/bucket.hxx +14 -0
- data/ext/couchbase/couchbase/bucket_manager.hxx +135 -0
- data/ext/couchbase/couchbase/build_query_index_options.hxx +0 -30
- data/ext/couchbase/couchbase/cluster.hxx +14 -0
- data/ext/couchbase/couchbase/collection.hxx +111 -0
- data/ext/couchbase/couchbase/collection_manager.hxx +160 -0
- data/ext/couchbase/couchbase/collection_query_index_manager.hxx +7 -48
- data/ext/couchbase/couchbase/create_bucket_options.hxx +41 -0
- data/ext/couchbase/couchbase/create_collection_options.hxx +44 -0
- data/ext/couchbase/couchbase/create_primary_query_index_options.hxx +0 -29
- data/ext/couchbase/couchbase/create_query_index_options.hxx +0 -33
- data/ext/couchbase/couchbase/create_scope_options.hxx +41 -0
- data/ext/couchbase/couchbase/drop_bucket_options.hxx +41 -0
- data/ext/couchbase/couchbase/drop_collection_options.hxx +41 -0
- data/ext/couchbase/couchbase/drop_primary_query_index_options.hxx +0 -30
- data/ext/couchbase/couchbase/drop_query_index_options.hxx +0 -31
- data/ext/couchbase/couchbase/drop_scope_options.hxx +41 -0
- data/ext/couchbase/couchbase/error_codes.hxx +1 -2
- data/ext/couchbase/couchbase/error_context.hxx +10 -2
- data/ext/couchbase/couchbase/flush_bucket_options.hxx +41 -0
- data/ext/couchbase/{core/topology/error_map_fmt.hxx → couchbase/fmt/key_value_error_map_attribute.hxx} +21 -21
- data/ext/couchbase/couchbase/get_all_buckets_options.hxx +44 -0
- data/ext/couchbase/couchbase/get_all_query_indexes_options.hxx +0 -30
- data/ext/couchbase/couchbase/get_all_scopes_options.hxx +44 -0
- data/ext/couchbase/couchbase/get_and_lock_options.hxx +2 -2
- data/ext/couchbase/couchbase/get_and_touch_options.hxx +2 -2
- data/ext/couchbase/couchbase/get_bucket_options.hxx +43 -0
- data/ext/couchbase/couchbase/get_options.hxx +2 -2
- data/ext/couchbase/couchbase/insert_options.hxx +3 -3
- data/ext/couchbase/couchbase/key_value_error_context.hxx +7 -2
- data/ext/couchbase/couchbase/lookup_in_all_replicas_options.hxx +109 -0
- data/ext/couchbase/couchbase/lookup_in_any_replica_options.hxx +101 -0
- data/ext/couchbase/couchbase/lookup_in_options.hxx +2 -2
- data/ext/couchbase/couchbase/lookup_in_replica_result.hxx +74 -0
- data/ext/couchbase/couchbase/lookup_in_result.hxx +26 -0
- data/ext/couchbase/couchbase/management/bucket_settings.hxx +119 -0
- data/ext/couchbase/couchbase/management/collection_spec.hxx +29 -0
- data/ext/couchbase/couchbase/management/scope_spec.hxx +29 -0
- data/ext/couchbase/couchbase/manager_error_context.hxx +29 -53
- data/ext/couchbase/couchbase/mutate_in_options.hxx +2 -2
- data/ext/couchbase/couchbase/query_error_context.hxx +3 -1
- data/ext/couchbase/couchbase/query_index_manager.hxx +16 -83
- data/ext/couchbase/couchbase/query_options.hxx +18 -0
- data/ext/couchbase/couchbase/remove_options.hxx +2 -2
- data/ext/couchbase/couchbase/replace_options.hxx +3 -3
- data/ext/couchbase/couchbase/security_options.hxx +15 -0
- data/ext/couchbase/couchbase/subdocument_error_context.hxx +4 -2
- data/ext/couchbase/couchbase/touch_options.hxx +2 -2
- data/ext/couchbase/couchbase/unlock_options.hxx +2 -2
- data/ext/couchbase/couchbase/update_bucket_options.hxx +41 -0
- data/ext/couchbase/couchbase/update_collection_options.hxx +44 -0
- data/ext/couchbase/couchbase/upsert_options.hxx +3 -3
- data/ext/couchbase/couchbase/watch_query_indexes_options.hxx +0 -31
- data/ext/couchbase/test/CMakeLists.txt +1 -0
- data/ext/couchbase/test/test_integration_collections.cxx +6 -0
- data/ext/couchbase/test/test_integration_crud.cxx +5 -0
- data/ext/couchbase/test/test_integration_examples.cxx +137 -1
- data/ext/couchbase/test/test_integration_management.cxx +1009 -309
- data/ext/couchbase/test/test_integration_query.cxx +19 -7
- data/ext/couchbase/test/test_integration_range_scan.cxx +351 -112
- data/ext/couchbase/test/test_integration_search.cxx +10 -1
- data/ext/couchbase/test/test_integration_subdoc.cxx +721 -7
- data/ext/couchbase/test/test_transaction_public_async_api.cxx +13 -12
- data/ext/couchbase/test/test_transaction_public_blocking_api.cxx +27 -21
- data/ext/couchbase/test/test_unit_connection_string.cxx +29 -0
- data/ext/couchbase/test/test_unit_query.cxx +75 -0
- data/ext/couchbase.cxx +735 -60
- data/ext/revisions.rb +3 -3
- data/lib/couchbase/cluster.rb +1 -1
- data/lib/couchbase/collection.rb +108 -0
- data/lib/couchbase/collection_options.rb +100 -1
- data/lib/couchbase/errors.rb +5 -0
- data/lib/couchbase/key_value_scan.rb +125 -0
- data/lib/couchbase/management/bucket_manager.rb +22 -15
- data/lib/couchbase/management/collection_manager.rb +158 -9
- data/lib/couchbase/options.rb +151 -0
- data/lib/couchbase/scope.rb +1 -1
- data/lib/couchbase/utils/time.rb +14 -1
- data/lib/couchbase/version.rb +1 -1
- metadata +59 -8
- data/ext/couchbase/core/impl/collection_query_index_manager.cxx +0 -93
|
@@ -38,6 +38,8 @@ module Couchbase
|
|
|
38
38
|
super
|
|
39
39
|
yield self if block_given?
|
|
40
40
|
end
|
|
41
|
+
|
|
42
|
+
DEFAULT = GetAllScopes.new.freeze
|
|
41
43
|
end
|
|
42
44
|
|
|
43
45
|
# Options for {CollectionManager#create_scope}
|
|
@@ -57,6 +59,8 @@ module Couchbase
|
|
|
57
59
|
super
|
|
58
60
|
yield self if block_given?
|
|
59
61
|
end
|
|
62
|
+
|
|
63
|
+
DEFAULT = CreateScope.new.freeze
|
|
60
64
|
end
|
|
61
65
|
|
|
62
66
|
# Options for {CollectionManager#drop_scope}
|
|
@@ -76,6 +80,8 @@ module Couchbase
|
|
|
76
80
|
super
|
|
77
81
|
yield self if block_given?
|
|
78
82
|
end
|
|
83
|
+
|
|
84
|
+
DEFAULT = DropScope.new.freeze
|
|
79
85
|
end
|
|
80
86
|
|
|
81
87
|
# Options for {CollectionManager#create_collection}
|
|
@@ -95,6 +101,29 @@ module Couchbase
|
|
|
95
101
|
super
|
|
96
102
|
yield self if block_given?
|
|
97
103
|
end
|
|
104
|
+
|
|
105
|
+
DEFAULT = CreateCollection.new.freeze
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Options for {CollectionManager#update_collection}
|
|
109
|
+
class UpdateCollection < ::Couchbase::Options::Base
|
|
110
|
+
# Creates an instance of options for {CollectionManager#update_collection}
|
|
111
|
+
#
|
|
112
|
+
# @param [Integer, #in_milliseconds, nil] timeout the time in milliseconds allowed for the operation to complete
|
|
113
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
|
114
|
+
# @param [Hash, nil] client_context the client context data, if set
|
|
115
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
|
116
|
+
#
|
|
117
|
+
# @yieldparam [UpdateCollection] self
|
|
118
|
+
def initialize(timeout: nil,
|
|
119
|
+
retry_strategy: nil,
|
|
120
|
+
client_context: nil,
|
|
121
|
+
parent_span: nil)
|
|
122
|
+
super
|
|
123
|
+
yield self if block_given?
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
DEFAULT = UpdateCollection.new.freeze
|
|
98
127
|
end
|
|
99
128
|
|
|
100
129
|
# Options for {CollectionManager#drop_collection}
|
|
@@ -114,6 +143,8 @@ module Couchbase
|
|
|
114
143
|
super
|
|
115
144
|
yield self if block_given?
|
|
116
145
|
end
|
|
146
|
+
|
|
147
|
+
DEFAULT = DropCollection.new.freeze
|
|
117
148
|
end
|
|
118
149
|
|
|
119
150
|
# rubocop:disable Naming/MethodName constructor shortcuts
|
|
@@ -184,6 +215,8 @@ module Couchbase
|
|
|
184
215
|
CollectionSpec.new do |collection|
|
|
185
216
|
collection.name = c[:name]
|
|
186
217
|
collection.scope_name = s[:name]
|
|
218
|
+
collection.max_expiry = c[:max_expiry]
|
|
219
|
+
collection.history = c[:history]
|
|
187
220
|
end
|
|
188
221
|
end
|
|
189
222
|
end
|
|
@@ -232,29 +265,88 @@ module Couchbase
|
|
|
232
265
|
end
|
|
233
266
|
|
|
234
267
|
# Creates a new collection
|
|
268
|
+
# @overload create_collection(scope_name, collection_name, settings = CreateCollectionSettings::DEFAULT,
|
|
269
|
+
# options = Options::Collection::CreateCollection::DEFAULT)
|
|
270
|
+
# @param [String] scope_name the name of the scope the collection will be created in
|
|
271
|
+
# @param [String] collection_name the name of the collection to be created
|
|
272
|
+
# @param [CreateCollectionSettings] settings settings for the new collection
|
|
273
|
+
# @param [Options::Collection::CreateCollection] options
|
|
235
274
|
#
|
|
236
|
-
# @
|
|
237
|
-
#
|
|
275
|
+
# @overload create_collection(collection, options = Options::Collection::CreateCollection)
|
|
276
|
+
# @param [CollectionSpec] collection specification of the collection
|
|
277
|
+
# @param [Options::Collection::CreateCollection] options
|
|
278
|
+
#
|
|
279
|
+
# @deprecated Use +#create_collection(scope_name, collection_name, settings, options)+ instead
|
|
238
280
|
#
|
|
239
281
|
# @return void
|
|
240
282
|
#
|
|
241
283
|
# @raise [ArgumentError]
|
|
242
|
-
# @raise [Error::
|
|
284
|
+
# @raise [Error::CollectionExists]
|
|
285
|
+
# @raise [Error::ScopeNotFound]
|
|
286
|
+
def create_collection(*args)
|
|
287
|
+
if args[0].is_a?(CollectionSpec)
|
|
288
|
+
collection = args[0]
|
|
289
|
+
options = args[1] || Options::Collection::CreateCollection::DEFAULT
|
|
290
|
+
settings = CreateCollectionSettings.new(max_expiry: collection.max_expiry, history: collection.history)
|
|
291
|
+
|
|
292
|
+
warn "Calling create_collection with a CollectionSpec object has been deprecated, supply scope name, " \
|
|
293
|
+
"collection name and optionally a CreateCollectionSettings instance"
|
|
294
|
+
|
|
295
|
+
@backend.collection_create(@bucket_name, collection.scope_name, collection.name, settings.to_backend, options.to_backend)
|
|
296
|
+
else
|
|
297
|
+
scope_name = args[0]
|
|
298
|
+
collection_name = args[1]
|
|
299
|
+
settings = args[2] || CreateCollectionSettings::DEFAULT
|
|
300
|
+
options = args[3] || Options::Collection::CreateCollection::DEFAULT
|
|
301
|
+
@backend.collection_create(@bucket_name, scope_name, collection_name, settings.to_backend, options.to_backend)
|
|
302
|
+
end
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
# Updates the settings of an existing collection
|
|
306
|
+
#
|
|
307
|
+
# @param [String] scope_name the name of the scope the collection is in
|
|
308
|
+
# @param [String] collection_name the name of the collection to be updated
|
|
309
|
+
# @param [UpdateCollectionSettings] settings the settings that should be updated
|
|
310
|
+
#
|
|
311
|
+
# @raise [ArgumentError]
|
|
312
|
+
# @raise [Error::CollectionNotFound]
|
|
243
313
|
# @raise [Error::ScopeNotFound]
|
|
244
|
-
def
|
|
245
|
-
|
|
314
|
+
def update_collection(scope_name, collection_name, settings = UpdateCollectionSettings::DEFAULT,
|
|
315
|
+
options = Options::Collection::UpdateCollection::DEFAULT)
|
|
316
|
+
@backend.collection_update(@bucket_name, scope_name, collection_name, settings.to_backend, options.to_backend)
|
|
246
317
|
end
|
|
247
318
|
|
|
248
319
|
# Removes a collection
|
|
320
|
+
# @overload drop_collection(scope_name, collection_name, settings = CreateCollectionSettings::DEFAULT,
|
|
321
|
+
# options = Options::Collection::CreateCollection::DEFAULT)
|
|
322
|
+
# @param [String] scope_name the name of the scope the collection is in
|
|
323
|
+
# @param [String] collection_name the name of the collection to be removed
|
|
249
324
|
#
|
|
250
|
-
# @
|
|
251
|
-
#
|
|
325
|
+
# @overload drop_collection(collection, options = Options::Collection::CreateCollection)
|
|
326
|
+
# @param [CollectionSpec] collection specification of the collection
|
|
327
|
+
# @param [Options::Collection::CreateCollection] options
|
|
328
|
+
#
|
|
329
|
+
# @deprecated Use +#drop_collection(scope_name, collection_name, options)+ instead
|
|
252
330
|
#
|
|
253
331
|
# @return void
|
|
254
332
|
#
|
|
333
|
+
# @raise [ArgumentError]
|
|
255
334
|
# @raise [Error::CollectionNotFound]
|
|
256
|
-
|
|
257
|
-
|
|
335
|
+
# @raise [Error::ScopeNotFound]
|
|
336
|
+
def drop_collection(*args)
|
|
337
|
+
if args[0].is_a?(CollectionSpec)
|
|
338
|
+
collection = args[0]
|
|
339
|
+
options = args[1] || Options::Collection::CreateCollection::DEFAULT
|
|
340
|
+
|
|
341
|
+
warn "Calling drop_collection with a CollectionSpec object has been deprecated, supply scope name and collection name"
|
|
342
|
+
|
|
343
|
+
@backend.collection_drop(@bucket_name, collection.scope_name, collection.name, options.to_backend)
|
|
344
|
+
else
|
|
345
|
+
scope_name = args[0]
|
|
346
|
+
collection_name = args[1]
|
|
347
|
+
options = args[2] || Options::Collection::CreateCollection::DEFAULT
|
|
348
|
+
@backend.collection_drop(@bucket_name, scope_name, collection_name, options.to_backend)
|
|
349
|
+
end
|
|
258
350
|
end
|
|
259
351
|
|
|
260
352
|
# @deprecated use {CollectionManager#get_all_scopes} instead
|
|
@@ -289,6 +381,60 @@ module Couchbase
|
|
|
289
381
|
DropCollectionOptions = ::Couchbase::Management::Options::Collection::DropCollection
|
|
290
382
|
end
|
|
291
383
|
|
|
384
|
+
class CreateCollectionSettings
|
|
385
|
+
# @return [Integer, nil] time in seconds of the maximum expiration time for new documents in the collection
|
|
386
|
+
# (set to +nil+ to disable it)
|
|
387
|
+
attr_accessor :max_expiry
|
|
388
|
+
|
|
389
|
+
# @return [Boolean, nil] whether history retention override should be enabled in the collection (set to +nil+ to
|
|
390
|
+
# default to the bucket-level setting)
|
|
391
|
+
attr_accessor :history
|
|
392
|
+
|
|
393
|
+
def initialize(max_expiry: nil, history: nil)
|
|
394
|
+
@max_expiry = max_expiry
|
|
395
|
+
@history = history
|
|
396
|
+
|
|
397
|
+
yield self if block_given?
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
# @api private
|
|
401
|
+
def to_backend
|
|
402
|
+
{
|
|
403
|
+
max_expiry: @max_expiry,
|
|
404
|
+
history: @history,
|
|
405
|
+
}
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
DEFAULT = CreateCollectionSettings.new.freeze
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
class UpdateCollectionSettings
|
|
412
|
+
# @return [Integer, nil] time in seconds of the maximum expiration time for new documents in the collection
|
|
413
|
+
# (set to +nil+ to disable it)
|
|
414
|
+
attr_accessor :max_expiry
|
|
415
|
+
|
|
416
|
+
# @return [Boolean, nil] whether history retention override should be enabled in the collection (set to +nil+ to
|
|
417
|
+
# default to the bucket-level setting)
|
|
418
|
+
attr_accessor :history
|
|
419
|
+
|
|
420
|
+
def initialize(max_expiry: nil, history: nil)
|
|
421
|
+
@max_expiry = max_expiry
|
|
422
|
+
@history = history
|
|
423
|
+
|
|
424
|
+
yield self if block_given?
|
|
425
|
+
end
|
|
426
|
+
|
|
427
|
+
# @api private
|
|
428
|
+
def to_backend
|
|
429
|
+
{
|
|
430
|
+
max_expiry: @max_expiry,
|
|
431
|
+
history: @history,
|
|
432
|
+
}
|
|
433
|
+
end
|
|
434
|
+
|
|
435
|
+
DEFAULT = UpdateCollectionSettings.new.freeze
|
|
436
|
+
end
|
|
437
|
+
|
|
292
438
|
class ScopeSpec
|
|
293
439
|
# @return [String] name of the scope
|
|
294
440
|
attr_accessor :name
|
|
@@ -312,6 +458,9 @@ module Couchbase
|
|
|
312
458
|
# @return [Integer] time in seconds of the expiration for new documents in the collection (set to +nil+ to disable it)
|
|
313
459
|
attr_accessor :max_expiry
|
|
314
460
|
|
|
461
|
+
# @return [Boolean, nil] whether history retention is enabled for this collection
|
|
462
|
+
attr_accessor :history
|
|
463
|
+
|
|
315
464
|
# @yieldparam [CollectionSpec] self
|
|
316
465
|
def initialize
|
|
317
466
|
yield self if block_given?
|
data/lib/couchbase/options.rb
CHANGED
|
@@ -1026,6 +1026,151 @@ module Couchbase
|
|
|
1026
1026
|
DEFAULT = LookupIn.new.freeze
|
|
1027
1027
|
end
|
|
1028
1028
|
|
|
1029
|
+
# Options for {Collection#lookup_in_any_replica}
|
|
1030
|
+
class LookupInAnyReplica < Base
|
|
1031
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #decode(String)]
|
|
1032
|
+
|
|
1033
|
+
# Creates an instance of options for {Collection#lookup_in_any_replica}
|
|
1034
|
+
#
|
|
1035
|
+
# @param [JsonTranscoder, #decode(String)] transcoder used for encoding
|
|
1036
|
+
#
|
|
1037
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
|
1038
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
|
1039
|
+
# @param [Hash, nil] client_context the client context data, if set
|
|
1040
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
|
1041
|
+
#
|
|
1042
|
+
# @yieldparam [LookupIn] self
|
|
1043
|
+
def initialize(transcoder: JsonTranscoder.new,
|
|
1044
|
+
timeout: nil,
|
|
1045
|
+
retry_strategy: nil,
|
|
1046
|
+
client_context: nil,
|
|
1047
|
+
parent_span: nil)
|
|
1048
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
|
1049
|
+
@transcoder = transcoder
|
|
1050
|
+
yield self if block_given?
|
|
1051
|
+
end
|
|
1052
|
+
|
|
1053
|
+
# @api private
|
|
1054
|
+
def to_backend
|
|
1055
|
+
{
|
|
1056
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
|
1057
|
+
}
|
|
1058
|
+
end
|
|
1059
|
+
|
|
1060
|
+
# @api private
|
|
1061
|
+
# @return [Boolean]
|
|
1062
|
+
attr_accessor :access_deleted
|
|
1063
|
+
|
|
1064
|
+
# @api private
|
|
1065
|
+
DEFAULT = LookupInAnyReplica.new.freeze
|
|
1066
|
+
end
|
|
1067
|
+
|
|
1068
|
+
# Options for {Collection#lookup_in_all_replicas}
|
|
1069
|
+
class LookupInAllReplicas < Base
|
|
1070
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #decode(String)]
|
|
1071
|
+
|
|
1072
|
+
# Creates an instance of options for {Collection#lookup_in_all_replicas}
|
|
1073
|
+
#
|
|
1074
|
+
# @param [JsonTranscoder, #decode(String)] transcoder used for encoding
|
|
1075
|
+
#
|
|
1076
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
|
1077
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
|
1078
|
+
# @param [Hash, nil] client_context the client context data, if set
|
|
1079
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
|
1080
|
+
#
|
|
1081
|
+
# @yieldparam [LookupInAllReplicas] self
|
|
1082
|
+
def initialize(transcoder: JsonTranscoder.new,
|
|
1083
|
+
timeout: nil,
|
|
1084
|
+
retry_strategy: nil,
|
|
1085
|
+
client_context: nil,
|
|
1086
|
+
parent_span: nil)
|
|
1087
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
|
1088
|
+
@transcoder = transcoder
|
|
1089
|
+
yield self if block_given?
|
|
1090
|
+
end
|
|
1091
|
+
|
|
1092
|
+
# @api private
|
|
1093
|
+
def to_backend
|
|
1094
|
+
{
|
|
1095
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
|
1096
|
+
}
|
|
1097
|
+
end
|
|
1098
|
+
|
|
1099
|
+
# @api private
|
|
1100
|
+
DEFAULT = LookupInAllReplicas.new.freeze
|
|
1101
|
+
end
|
|
1102
|
+
|
|
1103
|
+
# Options for {Collection#scan}
|
|
1104
|
+
class Scan < Base
|
|
1105
|
+
attr_accessor :ids_only # @return [Boolean]
|
|
1106
|
+
attr_accessor :transcoder # @return [JsonTranscoder, #decode(String)]
|
|
1107
|
+
attr_accessor :mutation_state # @return [MutationState, nil]
|
|
1108
|
+
attr_accessor :batch_byte_limit # @return [Integer, nil]
|
|
1109
|
+
attr_accessor :batch_item_limit # @return [Integer, nil]
|
|
1110
|
+
attr_accessor :concurrency # @return [Integer, nil]
|
|
1111
|
+
|
|
1112
|
+
# Creates an instance of options for {Collection#scan}
|
|
1113
|
+
#
|
|
1114
|
+
# @param [Boolean] ids_only if set to true, the content of the documents is not included in the results
|
|
1115
|
+
# @param [JsonTranscoder, #decode(String)] transcoder used for decoding
|
|
1116
|
+
# @param [MutationState, nil] mutation_state sets the mutation tokens this scan should be consistent with
|
|
1117
|
+
# @param [Integer, nil] batch_byte_limit allows to limit the maximum amount of bytes that are sent from the server
|
|
1118
|
+
# to the client on each partition batch, defaults to 15,000
|
|
1119
|
+
# @param [Integer, nil] batch_item_limit allows to limit the maximum amount of items that are sent from the server
|
|
1120
|
+
# to the client on each partition batch, defaults to 50
|
|
1121
|
+
# @param [Integer, nil] concurrency specifies the maximum number of partitions that can be scanned concurrently,
|
|
1122
|
+
# defaults to 1
|
|
1123
|
+
#
|
|
1124
|
+
# @param [Integer, #in_milliseconds, nil] timeout
|
|
1125
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
|
1126
|
+
# @param [Hash, nil] client_context the client context data, if set
|
|
1127
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
|
1128
|
+
#
|
|
1129
|
+
# @yieldparam [LookupIn] self
|
|
1130
|
+
def initialize(ids_only: false,
|
|
1131
|
+
transcoder: JsonTranscoder.new,
|
|
1132
|
+
mutation_state: nil,
|
|
1133
|
+
batch_byte_limit: nil,
|
|
1134
|
+
batch_item_limit: nil,
|
|
1135
|
+
concurrency: nil,
|
|
1136
|
+
timeout: nil,
|
|
1137
|
+
retry_strategy: nil,
|
|
1138
|
+
client_context: nil,
|
|
1139
|
+
parent_span: nil)
|
|
1140
|
+
super(timeout: timeout, retry_strategy: retry_strategy, client_context: client_context, parent_span: parent_span)
|
|
1141
|
+
@ids_only = ids_only
|
|
1142
|
+
@transcoder = transcoder
|
|
1143
|
+
@mutation_state = mutation_state
|
|
1144
|
+
@batch_byte_limit = batch_byte_limit
|
|
1145
|
+
@batch_item_limit = batch_item_limit
|
|
1146
|
+
@concurrency = concurrency
|
|
1147
|
+
yield self if block_given?
|
|
1148
|
+
end
|
|
1149
|
+
|
|
1150
|
+
# Sets the mutation tokens this query should be consistent with
|
|
1151
|
+
#
|
|
1152
|
+
# @note overrides consistency level set by {#scan_consistency=}
|
|
1153
|
+
#
|
|
1154
|
+
# @param [MutationState] mutation_state the mutation state containing the mutation tokens
|
|
1155
|
+
def consistent_with(mutation_state)
|
|
1156
|
+
@mutation_state = mutation_state
|
|
1157
|
+
end
|
|
1158
|
+
|
|
1159
|
+
# @api private
|
|
1160
|
+
def to_backend
|
|
1161
|
+
{
|
|
1162
|
+
timeout: Utils::Time.extract_duration(@timeout),
|
|
1163
|
+
ids_only: @ids_only,
|
|
1164
|
+
mutation_state: @mutation_state.to_a,
|
|
1165
|
+
batch_byte_limit: @batch_byte_limit,
|
|
1166
|
+
batch_item_limit: @batch_item_limit,
|
|
1167
|
+
concurrency: @concurrency,
|
|
1168
|
+
}
|
|
1169
|
+
end
|
|
1170
|
+
|
|
1171
|
+
DEFAULT = Scan.new.freeze
|
|
1172
|
+
end
|
|
1173
|
+
|
|
1029
1174
|
# Options for {BinaryCollection#append}
|
|
1030
1175
|
class Append < Base
|
|
1031
1176
|
attr_accessor :cas # @return [Integer]
|
|
@@ -1849,6 +1994,7 @@ module Couchbase
|
|
|
1849
1994
|
attr_accessor :profile # @return [Symbol]
|
|
1850
1995
|
attr_accessor :flex_index # @return [Boolean]
|
|
1851
1996
|
attr_accessor :preserve_expiry # @return [Boolean]
|
|
1997
|
+
attr_accessor :use_replica # @return [Boolean, nil]
|
|
1852
1998
|
attr_accessor :scope_qualifier # @return [String]
|
|
1853
1999
|
attr_accessor :transcoder # @return [JsonTranscoder, #decode(String)]
|
|
1854
2000
|
|
|
@@ -1894,6 +2040,8 @@ module Couchbase
|
|
|
1894
2040
|
# @param [Boolean, nil] flex_index Tells the query engine to use a flex index (utilizing the search service)
|
|
1895
2041
|
# @param [Boolean, nil] preserve_expiry Tells the query engine to preserve expiration values set on any documents
|
|
1896
2042
|
# modified by this query.
|
|
2043
|
+
# @param [Boolean, nil] use_replica Specifies that the query engine should use replica nodes for KV fetches if
|
|
2044
|
+
# the active node is down. If not provided, the server default will be used
|
|
1897
2045
|
# @param [String, nil] scope_qualifier Associate scope qualifier (also known as +query_context+) with the query.
|
|
1898
2046
|
# The qualifier must be in form +{bucket_name}.{scope_name}+ or +default:{bucket_name}.{scope_name}+.
|
|
1899
2047
|
# @param [JsonTranscoder] transcoder to decode rows
|
|
@@ -1925,6 +2073,7 @@ module Couchbase
|
|
|
1925
2073
|
profile: :off,
|
|
1926
2074
|
flex_index: nil,
|
|
1927
2075
|
preserve_expiry: nil,
|
|
2076
|
+
use_replica: nil,
|
|
1928
2077
|
scope_qualifier: nil,
|
|
1929
2078
|
scan_consistency: :not_bounded,
|
|
1930
2079
|
mutation_state: nil,
|
|
@@ -1950,6 +2099,7 @@ module Couchbase
|
|
|
1950
2099
|
@profile = profile
|
|
1951
2100
|
@flex_index = flex_index
|
|
1952
2101
|
@preserve_expiry = preserve_expiry
|
|
2102
|
+
@use_replica = use_replica
|
|
1953
2103
|
@scope_qualifier = scope_qualifier
|
|
1954
2104
|
@scan_consistency = scan_consistency
|
|
1955
2105
|
@mutation_state = mutation_state
|
|
@@ -2043,6 +2193,7 @@ module Couchbase
|
|
|
2043
2193
|
readonly: @readonly,
|
|
2044
2194
|
flex_index: @flex_index,
|
|
2045
2195
|
preserve_expiry: @preserve_expiry,
|
|
2196
|
+
use_replica: @use_replica,
|
|
2046
2197
|
scan_wait: Utils::Time.extract_duration(@scan_wait),
|
|
2047
2198
|
scan_cap: @scan_cap,
|
|
2048
2199
|
pipeline_batch: @pipeline_batch,
|
data/lib/couchbase/scope.rb
CHANGED
|
@@ -79,7 +79,7 @@ module Couchbase
|
|
|
79
79
|
metrics.warning_count = resp[:meta][:metrics][:warning_count]
|
|
80
80
|
end
|
|
81
81
|
end
|
|
82
|
-
|
|
82
|
+
meta.warnings = resp[:warnings].map { |warn| Cluster::QueryWarning.new(warn[:code], warn[:message]) } if resp[:warnings]
|
|
83
83
|
end
|
|
84
84
|
res.instance_variable_set(:@rows, resp[:rows])
|
|
85
85
|
end
|
data/lib/couchbase/utils/time.rb
CHANGED
|
@@ -48,8 +48,21 @@ module Couchbase
|
|
|
48
48
|
end
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
+
# This method converts its argument to milliseconds
|
|
52
|
+
#
|
|
53
|
+
# 1. Integer values are interpreted as a number of milliseconds
|
|
54
|
+
# 2. If the argument is a Duration-like object and responds to #in_milliseconds,
|
|
55
|
+
# then use it and convert result to Integer
|
|
56
|
+
# 3. Otherwise invoke #to_i on the argument and interpret it as a number of milliseconds
|
|
51
57
|
def extract_duration(number_or_duration)
|
|
52
|
-
|
|
58
|
+
return unless number_or_duration
|
|
59
|
+
return number_or_duration if number_or_duration.class == Integer # rubocop:disable Style/ClassEqualityComparison avoid overrides of #is_a?, #kind_of?
|
|
60
|
+
|
|
61
|
+
if number_or_duration.respond_to?(:in_milliseconds)
|
|
62
|
+
number_or_duration.public_send(:in_milliseconds)
|
|
63
|
+
else
|
|
64
|
+
number_or_duration
|
|
65
|
+
end.to_i
|
|
53
66
|
end
|
|
54
67
|
end
|
|
55
68
|
end
|
data/lib/couchbase/version.rb
CHANGED
|
@@ -19,5 +19,5 @@ module Couchbase
|
|
|
19
19
|
# $ ruby -rcouchbase -e 'pp Couchbase::VERSION'
|
|
20
20
|
# {:sdk=>"3.4.0", :ruby_abi=>"3.1.0", :revision=>"416fe68e6029ec8a4c40611cf6e6b30d3b90d20f"}
|
|
21
21
|
VERSION = {} unless defined?(VERSION) # rubocop:disable Style/MutableConstant
|
|
22
|
-
VERSION.update(:sdk => "3.4.
|
|
22
|
+
VERSION.update(:sdk => "3.4.5".freeze)
|
|
23
23
|
end
|