couchbase 3.7.0 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +3 -3
- data/ext/CMakeLists.txt +4 -1
- data/ext/cache/extconf_include.rb +4 -3
- data/ext/cache/mozilla-ca-bundle.crt +66 -93
- data/ext/cache/mozilla-ca-bundle.sha256 +1 -1
- data/ext/couchbase/CMakeLists.txt +24 -11
- data/ext/couchbase/cmake/APKBUILD.in +17 -1
- data/ext/couchbase/cmake/Bundler.cmake +9 -1
- data/ext/couchbase/cmake/Cache.cmake +48 -19
- data/ext/couchbase/cmake/CompilerOptions.cmake +3 -1
- data/ext/couchbase/cmake/OpenSSL.cmake +10 -2
- data/ext/couchbase/cmake/Packaging.cmake +48 -8
- data/ext/couchbase/cmake/ThirdPartyDependencies.cmake +43 -1
- data/ext/couchbase/cmake/build_config.hxx.in +2 -0
- data/ext/couchbase/cmake/couchbase-cxx-client.spec.in +18 -0
- data/ext/couchbase/cmake/tarball_glob.txt +10 -0
- data/ext/couchbase/core/app_telemetry_meter.cxx +1 -0
- data/ext/couchbase/core/app_telemetry_reporter.cxx +45 -43
- data/ext/couchbase/core/app_telemetry_reporter.hxx +4 -3
- data/ext/couchbase/core/bucket.cxx +128 -13
- data/ext/couchbase/core/bucket.hxx +12 -2
- data/ext/couchbase/core/cluster.cxx +304 -152
- data/ext/couchbase/core/cluster.hxx +32 -0
- data/ext/couchbase/core/cluster_credentials.cxx +25 -0
- data/ext/couchbase/core/cluster_credentials.hxx +5 -0
- data/ext/couchbase/core/cluster_label_listener.cxx +72 -0
- data/ext/couchbase/core/cluster_label_listener.hxx +46 -0
- data/ext/couchbase/core/cluster_options.hxx +4 -0
- data/ext/couchbase/core/deprecation_utils.hxx +26 -0
- data/ext/couchbase/core/error.hxx +27 -0
- data/ext/couchbase/core/free_form_http_request.hxx +0 -2
- data/ext/couchbase/core/http_component.cxx +12 -48
- data/ext/couchbase/core/impl/analytics.cxx +3 -2
- data/ext/couchbase/core/impl/analytics.hxx +2 -1
- data/ext/couchbase/core/impl/analytics_index_manager.cxx +249 -137
- data/ext/couchbase/core/impl/binary_collection.cxx +134 -58
- data/ext/couchbase/core/impl/bucket_manager.cxx +87 -35
- data/ext/couchbase/core/impl/collection.cxx +560 -245
- data/ext/couchbase/core/impl/collection_manager.cxx +89 -49
- data/ext/couchbase/core/impl/dns_srv_tracker.cxx +4 -4
- data/ext/couchbase/core/impl/error.cxx +20 -13
- data/ext/couchbase/core/impl/error.hxx +15 -10
- data/ext/couchbase/core/impl/get_all_replicas.hxx +1 -1
- data/ext/couchbase/core/impl/get_any_replica.hxx +2 -1
- data/ext/couchbase/core/impl/get_replica.hxx +2 -0
- data/ext/couchbase/core/impl/lookup_in_replica.hxx +1 -1
- data/ext/couchbase/core/impl/observability_recorder.cxx +161 -0
- data/ext/couchbase/core/impl/observability_recorder.hxx +77 -0
- data/ext/couchbase/core/impl/observe_seqno.hxx +2 -0
- data/ext/couchbase/core/impl/public_bucket.cxx +31 -7
- data/ext/couchbase/core/impl/public_cluster.cxx +107 -19
- data/ext/couchbase/core/impl/query.cxx +6 -3
- data/ext/couchbase/core/impl/query.hxx +3 -1
- data/ext/couchbase/core/impl/query_index_manager.cxx +267 -102
- data/ext/couchbase/core/impl/scope.cxx +53 -11
- data/ext/couchbase/core/impl/search.cxx +8 -4
- data/ext/couchbase/core/impl/search.hxx +6 -2
- data/ext/couchbase/core/impl/search_index_manager.cxx +131 -41
- data/ext/couchbase/core/impl/with_cancellation.hxx +75 -0
- data/ext/couchbase/core/io/config_tracker.cxx +9 -9
- data/ext/couchbase/core/io/config_tracker.hxx +2 -1
- data/ext/couchbase/core/io/http_command.hxx +98 -49
- data/ext/couchbase/core/io/http_context.hxx +2 -0
- data/ext/couchbase/core/io/http_session.cxx +23 -10
- data/ext/couchbase/core/io/http_session.hxx +17 -9
- data/ext/couchbase/core/io/http_session_manager.hxx +163 -228
- data/ext/couchbase/core/io/http_traits.hxx +0 -7
- data/ext/couchbase/core/io/mcbp_command.hxx +123 -44
- data/ext/couchbase/core/io/mcbp_session.cxx +251 -26
- data/ext/couchbase/core/io/mcbp_session.hxx +9 -1
- data/ext/couchbase/core/io/mcbp_traits.hxx +0 -8
- data/ext/couchbase/core/io/streams.cxx +3 -3
- data/ext/couchbase/core/io/streams.hxx +3 -2
- data/ext/couchbase/core/meta/features.hxx +15 -0
- data/ext/couchbase/core/meta/version.cxx +13 -0
- data/ext/couchbase/core/meta/version.hxx +3 -0
- data/ext/couchbase/core/metrics/constants.hxx +23 -0
- data/ext/couchbase/core/metrics/logging_meter.cxx +5 -5
- data/ext/couchbase/core/metrics/meter_wrapper.cxx +65 -63
- data/ext/couchbase/core/metrics/meter_wrapper.hxx +12 -10
- data/ext/couchbase/core/operations/document_analytics.hxx +0 -5
- data/ext/couchbase/core/operations/document_append.hxx +0 -4
- data/ext/couchbase/core/operations/document_decrement.hxx +0 -5
- data/ext/couchbase/core/operations/document_exists.hxx +0 -7
- data/ext/couchbase/core/operations/document_get.hxx +0 -7
- data/ext/couchbase/core/operations/document_get_all_replicas.hxx +77 -27
- data/ext/couchbase/core/operations/document_get_and_lock.hxx +0 -9
- data/ext/couchbase/core/operations/document_get_and_touch.hxx +0 -9
- data/ext/couchbase/core/operations/document_get_any_replica.hxx +83 -2
- data/ext/couchbase/core/operations/document_get_projected.hxx +0 -9
- data/ext/couchbase/core/operations/document_increment.hxx +0 -5
- data/ext/couchbase/core/operations/document_insert.hxx +0 -4
- data/ext/couchbase/core/operations/document_lookup_in.hxx +0 -9
- data/ext/couchbase/core/operations/document_lookup_in_all_replicas.hxx +46 -4
- data/ext/couchbase/core/operations/document_lookup_in_any_replica.hxx +121 -43
- data/ext/couchbase/core/operations/document_mutate_in.hxx +0 -5
- data/ext/couchbase/core/operations/document_prepend.hxx +0 -4
- data/ext/couchbase/core/operations/document_query.hxx +0 -4
- data/ext/couchbase/core/operations/document_remove.hxx +0 -4
- data/ext/couchbase/core/operations/document_replace.hxx +0 -4
- data/ext/couchbase/core/operations/document_search.hxx +0 -7
- data/ext/couchbase/core/operations/document_touch.hxx +0 -7
- data/ext/couchbase/core/operations/document_unlock.hxx +0 -6
- data/ext/couchbase/core/operations/document_upsert.hxx +0 -4
- data/ext/couchbase/core/operations/document_view.cxx +2 -0
- data/ext/couchbase/core/operations/document_view.hxx +10 -13
- data/ext/couchbase/core/operations/http_noop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataset_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataset_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataset_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataverse_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataverse_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_get_pending_mutations.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_index_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_index_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_index_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_connect.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_disconnect.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_replace.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_describe.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_flush.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_update.hxx +2 -0
- data/ext/couchbase/core/operations/management/change_password.hxx +2 -0
- data/ext/couchbase/core/operations/management/cluster_describe.hxx +2 -0
- data/ext/couchbase/core/operations/management/cluster_developer_preview_enable.hxx +2 -0
- data/ext/couchbase/core/operations/management/collection_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/collection_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/collection_update.hxx +2 -0
- data/ext/couchbase/core/operations/management/collections_manifest_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/error_utils.cxx +4 -1
- data/ext/couchbase/core/operations/management/eventing_deploy_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_drop_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_get_all_functions.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_get_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_get_status.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_pause_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_resume_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_undeploy_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_upsert_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/freeform.hxx +2 -0
- data/ext/couchbase/core/operations/management/group_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/group_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/group_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/group_upsert.hxx +2 -0
- data/ext/couchbase/core/operations/management/query_index_build.hxx +2 -0
- data/ext/couchbase/core/operations/management/query_index_build_deferred.hxx +68 -30
- data/ext/couchbase/core/operations/management/query_index_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/query_index_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/query_index_get_all.hxx +4 -3
- data/ext/couchbase/core/operations/management/query_index_get_all_deferred.hxx +2 -1
- data/ext/couchbase/core/operations/management/role_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/scope_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/scope_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/scope_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_get_stats.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_analyze_document.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_control_ingest.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_control_plan_freeze.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_control_query.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_get_documents_count.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_get_stats.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_upsert.hxx +2 -0
- data/ext/couchbase/core/operations/management/user_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/user_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/user_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/user_upsert.hxx +2 -0
- data/ext/couchbase/core/operations/management/view_index_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/view_index_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/view_index_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/view_index_upsert.hxx +2 -0
- data/ext/couchbase/core/operations/operation_traits.hxx +6 -0
- data/ext/couchbase/core/operations.hxx +0 -1
- data/ext/couchbase/core/operations_fwd.hxx +8 -0
- data/ext/couchbase/core/origin.cxx +67 -12
- data/ext/couchbase/core/origin.hxx +13 -8
- data/ext/couchbase/core/orphan_reporter.cxx +164 -0
- data/ext/couchbase/core/orphan_reporter.hxx +65 -0
- data/ext/couchbase/core/sasl/CMakeLists.txt +1 -0
- data/ext/couchbase/core/sasl/client.cc +6 -0
- data/ext/couchbase/core/sasl/mechanism.cc +2 -1
- data/ext/couchbase/core/sasl/mechanism.h +2 -1
- data/ext/couchbase/core/sasl/oauthbearer/oauthbearer.cc +41 -0
- data/ext/couchbase/core/sasl/oauthbearer/oauthbearer.h +47 -0
- data/ext/couchbase/core/tls_context_provider.cxx +44 -0
- data/ext/couchbase/core/tls_context_provider.hxx +44 -0
- data/ext/couchbase/core/tracing/attribute_helpers.hxx +45 -0
- data/ext/couchbase/core/tracing/constants.hxx +148 -68
- data/ext/couchbase/core/tracing/threshold_logging_options.hxx +0 -3
- data/ext/couchbase/core/tracing/threshold_logging_tracer.cxx +122 -170
- data/ext/couchbase/core/tracing/tracer_wrapper.cxx +17 -24
- data/ext/couchbase/core/tracing/tracer_wrapper.hxx +8 -10
- data/ext/couchbase/core/tracing/wrapper_sdk_tracer.cxx +114 -0
- data/ext/couchbase/core/tracing/wrapper_sdk_tracer.hxx +85 -0
- data/ext/couchbase/core/transactions/attempt_context_impl.cxx +16 -14
- data/ext/couchbase/core/transactions/attempt_context_impl.hxx +4 -4
- data/ext/couchbase/core/transactions/transactions.cxx +1 -1
- data/ext/couchbase/core/transactions/transactions_cleanup.cxx +1 -2
- data/ext/couchbase/core/utils/byteswap.hxx +12 -0
- data/ext/couchbase/core/utils/concurrent_fixed_priority_queue.hxx +102 -0
- data/ext/couchbase/core/utils/connection_string.cxx +2 -0
- data/ext/couchbase/couchbase/certificate_authenticator.hxx +1 -0
- data/ext/couchbase/couchbase/cluster.hxx +47 -0
- data/ext/couchbase/couchbase/cluster_options.hxx +16 -0
- data/ext/couchbase/couchbase/collection.hxx +60 -15
- data/ext/couchbase/couchbase/error_codes.hxx +48 -48
- data/ext/couchbase/couchbase/jwt_authenticator.hxx +52 -0
- data/ext/couchbase/couchbase/metrics/meter.hxx +2 -1
- data/ext/couchbase/couchbase/metrics/otel_meter.hxx +75 -80
- data/ext/couchbase/couchbase/network_options.hxx +19 -0
- data/ext/couchbase/couchbase/password_authenticator.hxx +1 -0
- data/ext/couchbase/couchbase/tracing/otel_tracer.hxx +15 -17
- data/ext/couchbase/couchbase/tracing/request_span.hxx +2 -2
- data/ext/couchbase.cxx +4 -0
- data/ext/extconf.rb +1 -0
- data/ext/rcb_analytics.cxx +157 -47
- data/ext/rcb_backend.cxx +118 -71
- data/ext/rcb_buckets.cxx +39 -16
- data/ext/rcb_collections.cxx +36 -12
- data/ext/rcb_crud.cxx +587 -294
- data/ext/rcb_hdr_histogram.cxx +219 -0
- data/ext/rcb_hdr_histogram.hxx +28 -0
- data/ext/rcb_multi.cxx +142 -59
- data/ext/rcb_observability.cxx +132 -0
- data/ext/rcb_observability.hxx +49 -0
- data/ext/rcb_query.cxx +77 -27
- data/ext/rcb_search.cxx +92 -31
- data/ext/rcb_users.cxx +69 -26
- data/ext/rcb_utils.cxx +91 -0
- data/ext/rcb_utils.hxx +141 -168
- data/ext/rcb_views.cxx +36 -12
- data/lib/active_support/cache/couchbase_store.rb +6 -6
- data/lib/couchbase/authenticator.rb +14 -0
- data/lib/couchbase/binary_collection.rb +37 -22
- data/lib/couchbase/bucket.rb +46 -31
- data/lib/couchbase/cluster.rb +146 -61
- data/lib/couchbase/collection.rb +257 -186
- data/lib/couchbase/datastructures/couchbase_list.rb +81 -50
- data/lib/couchbase/datastructures/couchbase_map.rb +86 -50
- data/lib/couchbase/datastructures/couchbase_queue.rb +64 -38
- data/lib/couchbase/datastructures/couchbase_set.rb +57 -41
- data/lib/couchbase/deprecations.rb +1 -1
- data/lib/couchbase/diagnostics.rb +8 -8
- data/lib/couchbase/errors.rb +6 -0
- data/lib/couchbase/management/analytics_index_manager.rb +90 -59
- data/lib/couchbase/management/bucket_manager.rb +73 -45
- data/lib/couchbase/management/collection_manager.rb +86 -43
- data/lib/couchbase/management/collection_query_index_manager.rb +56 -33
- data/lib/couchbase/management/query_index_manager.rb +88 -36
- data/lib/couchbase/management/scope_search_index_manager.rb +119 -52
- data/lib/couchbase/management/search_index_manager.rb +401 -178
- data/lib/couchbase/management/user_manager.rb +343 -174
- data/lib/couchbase/management/view_index_manager.rb +166 -73
- data/lib/couchbase/metrics/logging_meter.rb +108 -0
- data/lib/couchbase/metrics/logging_value_recorder.rb +50 -0
- data/lib/couchbase/metrics/meter.rb +27 -0
- data/lib/couchbase/metrics/noop_meter.rb +30 -0
- data/lib/couchbase/metrics/noop_value_recorder.rb +27 -0
- data/lib/couchbase/metrics/value_recorder.rb +25 -0
- data/lib/couchbase/options.rb +69 -3
- data/lib/couchbase/protostellar/cluster.rb +3 -0
- data/lib/couchbase/scope.rb +62 -48
- data/lib/couchbase/search_options.rb +18 -18
- data/lib/couchbase/tracing/noop_span.rb +29 -0
- data/lib/couchbase/tracing/noop_tracer.rb +29 -0
- data/lib/couchbase/tracing/request_span.rb +34 -0
- data/lib/couchbase/tracing/request_tracer.rb +28 -0
- data/lib/couchbase/tracing/threshold_logging_span.rb +112 -0
- data/lib/couchbase/tracing/threshold_logging_tracer.rb +231 -0
- data/lib/couchbase/utils/hdr_histogram.rb +55 -0
- data/lib/couchbase/utils/observability.rb +257 -0
- data/lib/couchbase/utils/observability_constants.rb +200 -0
- data/lib/couchbase/utils/stdlib_logger_adapter.rb +1 -3
- data/lib/couchbase/version.rb +1 -1
- data/lib/couchbase.rb +2 -2
- metadata +58 -6
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2025. 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
|
+
|
|
18
|
+
#pragma once
|
|
19
|
+
|
|
20
|
+
#include <couchbase/tracing/request_tracer.hxx>
|
|
21
|
+
|
|
22
|
+
#include "core/tracing/noop_tracer.hxx"
|
|
23
|
+
|
|
24
|
+
#include <chrono>
|
|
25
|
+
#include <map>
|
|
26
|
+
#include <memory>
|
|
27
|
+
#include <mutex>
|
|
28
|
+
#include <string>
|
|
29
|
+
#include <vector>
|
|
30
|
+
|
|
31
|
+
namespace couchbase::core::tracing
|
|
32
|
+
{
|
|
33
|
+
/**
|
|
34
|
+
* Tracer for use by C++ SDK wrappers. It is intended for storing spans & tags in memory, so that
|
|
35
|
+
* wrappers can then use their own tracing infrastructure to create them.
|
|
36
|
+
*/
|
|
37
|
+
class wrapper_sdk_tracer : public couchbase::tracing::request_tracer
|
|
38
|
+
{
|
|
39
|
+
public:
|
|
40
|
+
auto start_span(std::string name, std::shared_ptr<couchbase::tracing::request_span> parent)
|
|
41
|
+
-> std::shared_ptr<couchbase::tracing::request_span> override;
|
|
42
|
+
|
|
43
|
+
private:
|
|
44
|
+
std::shared_ptr<noop_span> noop_instance_{ std::make_shared<noop_span>() };
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
class wrapper_sdk_span : public couchbase::tracing::request_span
|
|
48
|
+
{
|
|
49
|
+
public:
|
|
50
|
+
wrapper_sdk_span() = default;
|
|
51
|
+
explicit wrapper_sdk_span(std::string name);
|
|
52
|
+
wrapper_sdk_span(std::string name,
|
|
53
|
+
const std::shared_ptr<couchbase::tracing::request_span>& parent);
|
|
54
|
+
|
|
55
|
+
void add_child(const std::shared_ptr<wrapper_sdk_span>& child);
|
|
56
|
+
|
|
57
|
+
void add_tag(const std::string& name, std::uint64_t value) override;
|
|
58
|
+
void add_tag(const std::string& name, const std::string& value) override;
|
|
59
|
+
|
|
60
|
+
void end() override;
|
|
61
|
+
|
|
62
|
+
[[nodiscard]] auto uint_tags() const -> const std::map<std::string, std::uint64_t>&;
|
|
63
|
+
[[nodiscard]] auto string_tags() const -> const std::map<std::string, std::string>&;
|
|
64
|
+
[[nodiscard]] auto children() -> std::vector<std::shared_ptr<wrapper_sdk_span>>;
|
|
65
|
+
[[nodiscard]] auto start_time() const -> const std::chrono::system_clock::time_point&;
|
|
66
|
+
[[nodiscard]] auto end_time() const -> const std::chrono::system_clock::time_point&;
|
|
67
|
+
|
|
68
|
+
[[nodiscard]] auto parent() const -> std::shared_ptr<couchbase::tracing::request_span> override;
|
|
69
|
+
|
|
70
|
+
private:
|
|
71
|
+
std::map<std::string, std::uint64_t> uint_tags_{};
|
|
72
|
+
std::map<std::string, std::string> string_tags_{};
|
|
73
|
+
std::chrono::system_clock::time_point start_time_{ std::chrono::system_clock::now() };
|
|
74
|
+
std::chrono::system_clock::time_point end_time_{};
|
|
75
|
+
|
|
76
|
+
// The only way to access spans is through their parents, so parents must hold owning references
|
|
77
|
+
// to their children.
|
|
78
|
+
std::vector<std::shared_ptr<wrapper_sdk_span>> children_{};
|
|
79
|
+
std::mutex children_mutex_;
|
|
80
|
+
|
|
81
|
+
// A weak pointer is used instead of the shared pointer in the parent class, to avoid circular
|
|
82
|
+
// references.
|
|
83
|
+
std::weak_ptr<couchbase::tracing::request_span> parent_{};
|
|
84
|
+
};
|
|
85
|
+
} // namespace couchbase::core::tracing
|
|
@@ -634,8 +634,8 @@ void
|
|
|
634
634
|
attempt_context_impl::get_multi(
|
|
635
635
|
const std::vector<couchbase::transactions::transaction_get_multi_spec>& specs,
|
|
636
636
|
const couchbase::transactions::transaction_get_multi_options& options,
|
|
637
|
-
std::function<void(error,
|
|
638
|
-
|
|
637
|
+
std::function<void(couchbase::error,
|
|
638
|
+
std::optional<couchbase::transactions::transaction_get_multi_result>)>&& cb)
|
|
639
639
|
{
|
|
640
640
|
std::vector<core::document_id> ids;
|
|
641
641
|
ids.reserve(specs.size());
|
|
@@ -666,17 +666,19 @@ auto
|
|
|
666
666
|
attempt_context_impl::get_multi(
|
|
667
667
|
const std::vector<couchbase::transactions::transaction_get_multi_spec>& specs,
|
|
668
668
|
const couchbase::transactions::transaction_get_multi_options& options)
|
|
669
|
-
-> std::pair<error,
|
|
669
|
+
-> std::pair<couchbase::error,
|
|
670
|
+
std::optional<couchbase::transactions::transaction_get_multi_result>>
|
|
670
671
|
{
|
|
671
672
|
auto barrier = std::make_shared<std::promise<
|
|
672
|
-
std::pair<error,
|
|
673
|
+
std::pair<couchbase::error,
|
|
674
|
+
std::optional<couchbase::transactions::transaction_get_multi_result>>>>();
|
|
673
675
|
auto f = barrier->get_future();
|
|
674
|
-
get_multi(
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
676
|
+
get_multi(specs,
|
|
677
|
+
options,
|
|
678
|
+
[barrier](couchbase::error err,
|
|
679
|
+
std::optional<couchbase::transactions::transaction_get_multi_result> res) {
|
|
680
|
+
return barrier->set_value(std::make_pair(std::move(err), std::move(res)));
|
|
681
|
+
});
|
|
680
682
|
return f.get();
|
|
681
683
|
}
|
|
682
684
|
|
|
@@ -749,7 +751,7 @@ attempt_context_impl::get_multi_replicas_from_preferred_server_group(
|
|
|
749
751
|
const couchbase::transactions::transaction_get_multi_replicas_from_preferred_server_group_options&
|
|
750
752
|
options,
|
|
751
753
|
std::function<
|
|
752
|
-
void(error,
|
|
754
|
+
void(couchbase::error,
|
|
753
755
|
std::optional<couchbase::transactions::
|
|
754
756
|
transaction_get_multi_replicas_from_preferred_server_group_result>)>&& cb)
|
|
755
757
|
{
|
|
@@ -790,12 +792,12 @@ attempt_context_impl::get_multi_replicas_from_preferred_server_group(
|
|
|
790
792
|
const couchbase::transactions::transaction_get_multi_replicas_from_preferred_server_group_options&
|
|
791
793
|
options)
|
|
792
794
|
-> std::pair<
|
|
793
|
-
error,
|
|
795
|
+
couchbase::error,
|
|
794
796
|
std::optional<
|
|
795
797
|
couchbase::transactions::transaction_get_multi_replicas_from_preferred_server_group_result>>
|
|
796
798
|
{
|
|
797
799
|
auto barrier = std::make_shared<std::promise<std::pair<
|
|
798
|
-
error,
|
|
800
|
+
couchbase::error,
|
|
799
801
|
std::optional<couchbase::transactions::
|
|
800
802
|
transaction_get_multi_replicas_from_preferred_server_group_result>>>>();
|
|
801
803
|
auto f = barrier->get_future();
|
|
@@ -803,7 +805,7 @@ attempt_context_impl::get_multi_replicas_from_preferred_server_group(
|
|
|
803
805
|
specs,
|
|
804
806
|
options,
|
|
805
807
|
[barrier](
|
|
806
|
-
error err,
|
|
808
|
+
couchbase::error err,
|
|
807
809
|
std::optional<
|
|
808
810
|
couchbase::transactions::transaction_get_multi_replicas_from_preferred_server_group_result>
|
|
809
811
|
res) {
|
|
@@ -357,12 +357,12 @@ public:
|
|
|
357
357
|
std::optional<transaction_get_multi_result>)>&& cb) override;
|
|
358
358
|
auto get_multi(const std::vector<couchbase::transactions::transaction_get_multi_spec>& specs,
|
|
359
359
|
const couchbase::transactions::transaction_get_multi_options& options)
|
|
360
|
-
-> std::pair<error,
|
|
360
|
+
-> std::pair<couchbase::error,
|
|
361
361
|
std::optional<couchbase::transactions::transaction_get_multi_result>> override;
|
|
362
362
|
void get_multi(
|
|
363
363
|
const std::vector<couchbase::transactions::transaction_get_multi_spec>& specs,
|
|
364
364
|
const couchbase::transactions::transaction_get_multi_options& options,
|
|
365
|
-
std::function<void(error,
|
|
365
|
+
std::function<void(couchbase::error,
|
|
366
366
|
std::optional<couchbase::transactions::transaction_get_multi_result>)>&& cb)
|
|
367
367
|
override;
|
|
368
368
|
|
|
@@ -384,7 +384,7 @@ public:
|
|
|
384
384
|
const couchbase::transactions::
|
|
385
385
|
transaction_get_multi_replicas_from_preferred_server_group_options& options)
|
|
386
386
|
-> std::pair<
|
|
387
|
-
error,
|
|
387
|
+
couchbase::error,
|
|
388
388
|
std::optional<couchbase::transactions::
|
|
389
389
|
transaction_get_multi_replicas_from_preferred_server_group_result>> override;
|
|
390
390
|
void get_multi_replicas_from_preferred_server_group(
|
|
@@ -394,7 +394,7 @@ public:
|
|
|
394
394
|
const couchbase::transactions::
|
|
395
395
|
transaction_get_multi_replicas_from_preferred_server_group_options& options,
|
|
396
396
|
std::function<void(
|
|
397
|
-
error,
|
|
397
|
+
couchbase::error,
|
|
398
398
|
std::optional<couchbase::transactions::
|
|
399
399
|
transaction_get_multi_replicas_from_preferred_server_group_result>)>&& cb)
|
|
400
400
|
override;
|
|
@@ -204,7 +204,7 @@ transactions::run(const couchbase::transactions::transaction_options& config, lo
|
|
|
204
204
|
auto
|
|
205
205
|
transactions::run(couchbase::transactions::txn_logic&& code,
|
|
206
206
|
const couchbase::transactions::transaction_options& config)
|
|
207
|
-
-> std::pair<error, couchbase::transactions::transaction_result>
|
|
207
|
+
-> std::pair<couchbase::error, couchbase::transactions::transaction_result>
|
|
208
208
|
{
|
|
209
209
|
try {
|
|
210
210
|
return { {}, wrap_public_api_run(*this, config, max_attempts_, std::move(code)) };
|
|
@@ -77,8 +77,7 @@ parse_mutation_cas(const std::string& cas) -> std::uint64_t
|
|
|
77
77
|
if (cas.empty()) {
|
|
78
78
|
return 0;
|
|
79
79
|
}
|
|
80
|
-
return core::utils::byte_swap(
|
|
81
|
-
1000000;
|
|
80
|
+
return core::utils::byte_swap(std::stoull(cas, nullptr, 16)) / 1000000;
|
|
82
81
|
}
|
|
83
82
|
|
|
84
83
|
// TODO(CXXCBC-549)
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
#pragma once
|
|
19
19
|
|
|
20
20
|
#include <cstdint>
|
|
21
|
+
#include <type_traits>
|
|
21
22
|
|
|
22
23
|
namespace couchbase::core::utils
|
|
23
24
|
{
|
|
@@ -46,4 +47,15 @@ byte_swap(std::uint64_t value) -> std::uint64_t
|
|
|
46
47
|
std::uint32_t lo = byte_swap(static_cast<std::uint32_t>(value >> 32));
|
|
47
48
|
return (hi << 32) | lo;
|
|
48
49
|
}
|
|
50
|
+
|
|
51
|
+
// when 'unsigned long long' is not the same as 'std::uint64_t'
|
|
52
|
+
template<typename Dummy = void>
|
|
53
|
+
static constexpr auto
|
|
54
|
+
byte_swap(unsigned long long value,
|
|
55
|
+
std::enable_if_t<!std::is_same_v<unsigned long long, std::uint64_t>, Dummy>* /* dummy */ =
|
|
56
|
+
nullptr) -> std::uint64_t
|
|
57
|
+
{
|
|
58
|
+
return byte_swap(static_cast<std::uint64_t>(value));
|
|
59
|
+
}
|
|
60
|
+
|
|
49
61
|
} // namespace couchbase::core::utils
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2025 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
|
+
|
|
18
|
+
#pragma once
|
|
19
|
+
|
|
20
|
+
#include <mutex>
|
|
21
|
+
#include <queue>
|
|
22
|
+
|
|
23
|
+
namespace couchbase::core::utils
|
|
24
|
+
{
|
|
25
|
+
template<typename T>
|
|
26
|
+
class concurrent_fixed_priority_queue
|
|
27
|
+
{
|
|
28
|
+
private:
|
|
29
|
+
std::mutex mutex_;
|
|
30
|
+
std::priority_queue<T, std::vector<T>, std::greater<T>> data_;
|
|
31
|
+
std::size_t dropped_count_{ 0 };
|
|
32
|
+
std::size_t capacity_{};
|
|
33
|
+
|
|
34
|
+
public:
|
|
35
|
+
using size_type = typename std::priority_queue<T, std::vector<T>, std::greater<T>>::size_type;
|
|
36
|
+
|
|
37
|
+
explicit concurrent_fixed_priority_queue(std::size_t capacity)
|
|
38
|
+
: capacity_(capacity)
|
|
39
|
+
{
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
concurrent_fixed_priority_queue(const concurrent_fixed_priority_queue&) = delete;
|
|
43
|
+
concurrent_fixed_priority_queue(concurrent_fixed_priority_queue&&) = delete;
|
|
44
|
+
auto operator=(const concurrent_fixed_priority_queue&)
|
|
45
|
+
-> concurrent_fixed_priority_queue& = delete;
|
|
46
|
+
auto operator=(concurrent_fixed_priority_queue&&) -> concurrent_fixed_priority_queue& = delete;
|
|
47
|
+
~concurrent_fixed_priority_queue() = default;
|
|
48
|
+
|
|
49
|
+
auto size() -> size_type
|
|
50
|
+
{
|
|
51
|
+
std::unique_lock<std::mutex> lock(mutex_);
|
|
52
|
+
return data_.size();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
auto empty() -> bool
|
|
56
|
+
{
|
|
57
|
+
const std::unique_lock<std::mutex> lock(mutex_);
|
|
58
|
+
return data_.empty();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
void emplace(const T&& item)
|
|
62
|
+
{
|
|
63
|
+
const std::unique_lock<std::mutex> lock(mutex_);
|
|
64
|
+
|
|
65
|
+
if (data_.size() < capacity_) {
|
|
66
|
+
data_.emplace(std::forward<const T>(item));
|
|
67
|
+
} else {
|
|
68
|
+
// We need to either drop the new item, or an existing item
|
|
69
|
+
++dropped_count_;
|
|
70
|
+
if (item > data_.top()) {
|
|
71
|
+
// The new item is greater than the smallest item, so we will replace the smallest with the
|
|
72
|
+
// new item
|
|
73
|
+
data_.pop();
|
|
74
|
+
data_.emplace(std::forward<const T>(item));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Clears the internal queue, and returns the data along with the number of items that have been
|
|
81
|
+
* dropped.
|
|
82
|
+
*/
|
|
83
|
+
auto steal_data() -> std::pair<std::priority_queue<T>, std::size_t>
|
|
84
|
+
{
|
|
85
|
+
std::priority_queue<T, std::vector<T>, std::greater<T>> reversed_data;
|
|
86
|
+
std::size_t dropped_count{};
|
|
87
|
+
{
|
|
88
|
+
const std::unique_lock<std::mutex> lock(mutex_);
|
|
89
|
+
std::swap(reversed_data, data_);
|
|
90
|
+
std::swap(dropped_count, dropped_count_);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
std::priority_queue<T> data{};
|
|
94
|
+
while (!reversed_data.empty()) {
|
|
95
|
+
data.emplace(std::move(reversed_data.top()));
|
|
96
|
+
reversed_data.pop();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return std::make_pair(std::move(data), dropped_count);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
} // namespace couchbase::core::utils
|
|
@@ -590,6 +590,8 @@ extract_options(connection_string& connstr)
|
|
|
590
590
|
parse_option(connstr.options.preserve_bootstrap_nodes_order, name, value, connstr.warnings);
|
|
591
591
|
} else if (name == "allow_enterprise_analytics") {
|
|
592
592
|
parse_option(connstr.options.allow_enterprise_analytics, name, value, connstr.warnings);
|
|
593
|
+
} else if (name == "enable_lazy_connections") {
|
|
594
|
+
parse_option(connstr.options.enable_lazy_connections, name, value, connstr.warnings);
|
|
593
595
|
} else {
|
|
594
596
|
connstr.warnings.push_back(
|
|
595
597
|
fmt::format(R"(unknown parameter "{}" in connection string (value "{}"))", name, value));
|
|
@@ -102,6 +102,53 @@ public:
|
|
|
102
102
|
void close(std::function<void()>&& handler);
|
|
103
103
|
[[nodiscard]] auto close() -> std::future<void>;
|
|
104
104
|
|
|
105
|
+
/**
|
|
106
|
+
* Replaces the current authenticator used by this cluster.
|
|
107
|
+
*
|
|
108
|
+
* NOTE: Setting a new authenticator does not change the authentication status of existing
|
|
109
|
+
* connections.
|
|
110
|
+
*
|
|
111
|
+
* @param authenticator the authenticator to replace
|
|
112
|
+
*
|
|
113
|
+
* @return error
|
|
114
|
+
*
|
|
115
|
+
* @since 1.3.0
|
|
116
|
+
* @committed
|
|
117
|
+
*/
|
|
118
|
+
auto set_authenticator(const password_authenticator& authenticator) -> error;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Replaces the current authenticator used by this cluster.
|
|
122
|
+
*
|
|
123
|
+
* NOTE: Setting a new authenticator does not change the authentication status of existing
|
|
124
|
+
connections.
|
|
125
|
+
*
|
|
126
|
+
* @param authenticator the authenticator to replace
|
|
127
|
+
|
|
128
|
+
* @exception errc::common::invalid_argument if TLS is not enabled.
|
|
129
|
+
*
|
|
130
|
+
* @return error
|
|
131
|
+
*
|
|
132
|
+
* @since 1.3.0
|
|
133
|
+
* @committed
|
|
134
|
+
*/
|
|
135
|
+
auto set_authenticator(const certificate_authenticator& authenticator) -> error;
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Replaces the current authenticator used by this cluster.
|
|
139
|
+
*
|
|
140
|
+
* NOTE: Setting a new authenticator does not change the authentication status of existing
|
|
141
|
+
connections.
|
|
142
|
+
*
|
|
143
|
+
* @param authenticator the authenticator to replace
|
|
144
|
+
*
|
|
145
|
+
* @return error
|
|
146
|
+
*
|
|
147
|
+
* @since 1.3.0
|
|
148
|
+
* @uncommitted
|
|
149
|
+
*/
|
|
150
|
+
auto set_authenticator(const jwt_authenticator& authenticator) -> error;
|
|
151
|
+
|
|
105
152
|
/**
|
|
106
153
|
* Opens a {@link bucket} with the given name.
|
|
107
154
|
*
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
#include <couchbase/configuration_profiles_registry.hxx>
|
|
25
25
|
#include <couchbase/dns_options.hxx>
|
|
26
26
|
#include <couchbase/error.hxx>
|
|
27
|
+
#include <couchbase/jwt_authenticator.hxx>
|
|
27
28
|
#include <couchbase/metrics_options.hxx>
|
|
28
29
|
#include <couchbase/network_options.hxx>
|
|
29
30
|
#include <couchbase/password_authenticator.hxx>
|
|
@@ -93,6 +94,18 @@ public:
|
|
|
93
94
|
{
|
|
94
95
|
}
|
|
95
96
|
|
|
97
|
+
/**
|
|
98
|
+
*
|
|
99
|
+
* @param authenticator
|
|
100
|
+
*
|
|
101
|
+
* @since 1.3.0
|
|
102
|
+
* @uncommitted
|
|
103
|
+
*/
|
|
104
|
+
explicit cluster_options(jwt_authenticator authenticator)
|
|
105
|
+
: jwt_token_{ std::move(authenticator.token_) }
|
|
106
|
+
{
|
|
107
|
+
}
|
|
108
|
+
|
|
96
109
|
/**
|
|
97
110
|
* Apply settings profile by name.
|
|
98
111
|
*
|
|
@@ -272,6 +285,7 @@ public:
|
|
|
272
285
|
std::string password;
|
|
273
286
|
std::string certificate_path;
|
|
274
287
|
std::string key_path;
|
|
288
|
+
std::string jwt_token;
|
|
275
289
|
std::optional<std::vector<std::string>> allowed_sasl_mechanisms;
|
|
276
290
|
compression_options::built compression;
|
|
277
291
|
timeout_options::built timeouts;
|
|
@@ -294,6 +308,7 @@ public:
|
|
|
294
308
|
password_,
|
|
295
309
|
certificate_path_,
|
|
296
310
|
key_path_,
|
|
311
|
+
jwt_token_,
|
|
297
312
|
sasl_mechanisms_,
|
|
298
313
|
compression_.build(),
|
|
299
314
|
timeouts_.build(),
|
|
@@ -315,6 +330,7 @@ private:
|
|
|
315
330
|
std::string password_{};
|
|
316
331
|
std::string certificate_path_{};
|
|
317
332
|
std::string key_path_{};
|
|
333
|
+
std::string jwt_token_{};
|
|
318
334
|
std::optional<std::vector<std::string>> sasl_mechanisms_{};
|
|
319
335
|
|
|
320
336
|
compression_options compression_{};
|
|
@@ -463,8 +463,10 @@ public:
|
|
|
463
463
|
const upsert_options& options,
|
|
464
464
|
upsert_handler&& handler) const
|
|
465
465
|
{
|
|
466
|
-
return upsert(
|
|
467
|
-
|
|
466
|
+
return upsert(std::move(document_id),
|
|
467
|
+
create_encode_fn<Transcoder, Document>(std::move(document)),
|
|
468
|
+
options,
|
|
469
|
+
std::move(handler));
|
|
468
470
|
}
|
|
469
471
|
|
|
470
472
|
/**
|
|
@@ -506,11 +508,12 @@ public:
|
|
|
506
508
|
*/
|
|
507
509
|
template<typename Transcoder = codec::default_json_transcoder, typename Document>
|
|
508
510
|
[[nodiscard]] auto upsert(std::string document_id,
|
|
509
|
-
|
|
511
|
+
Document document,
|
|
510
512
|
const upsert_options& options = {}) const
|
|
511
513
|
-> std::future<std::pair<error, mutation_result>>
|
|
512
514
|
{
|
|
513
|
-
return upsert(
|
|
515
|
+
return upsert(
|
|
516
|
+
std::move(document_id), create_encode_fn<Transcoder, Document>(std::move(document)), options);
|
|
514
517
|
}
|
|
515
518
|
|
|
516
519
|
/**
|
|
@@ -559,8 +562,10 @@ public:
|
|
|
559
562
|
const insert_options& options,
|
|
560
563
|
insert_handler&& handler) const
|
|
561
564
|
{
|
|
562
|
-
return insert(
|
|
563
|
-
|
|
565
|
+
return insert(std::move(document_id),
|
|
566
|
+
create_encode_fn<Transcoder, Document>(std::move(document)),
|
|
567
|
+
options,
|
|
568
|
+
std::move(handler));
|
|
564
569
|
}
|
|
565
570
|
|
|
566
571
|
/**
|
|
@@ -605,11 +610,12 @@ public:
|
|
|
605
610
|
typename Document,
|
|
606
611
|
std::enable_if_t<!std::is_same_v<codec::encoded_value, Document>, bool> = true>
|
|
607
612
|
[[nodiscard]] auto insert(std::string document_id,
|
|
608
|
-
|
|
613
|
+
Document document,
|
|
609
614
|
const insert_options& options = {}) const
|
|
610
615
|
-> std::future<std::pair<error, mutation_result>>
|
|
611
616
|
{
|
|
612
|
-
return insert(
|
|
617
|
+
return insert(
|
|
618
|
+
std::move(document_id), create_encode_fn<Transcoder, Document>(std::move(document)), options);
|
|
613
619
|
}
|
|
614
620
|
|
|
615
621
|
/**
|
|
@@ -660,8 +666,10 @@ public:
|
|
|
660
666
|
const replace_options& options,
|
|
661
667
|
replace_handler&& handler) const
|
|
662
668
|
{
|
|
663
|
-
return replace(
|
|
664
|
-
|
|
669
|
+
return replace(std::move(document_id),
|
|
670
|
+
create_encode_fn<Transcoder, Document>(std::move(document)),
|
|
671
|
+
options,
|
|
672
|
+
std::move(handler));
|
|
665
673
|
}
|
|
666
674
|
|
|
667
675
|
/**
|
|
@@ -708,11 +716,12 @@ public:
|
|
|
708
716
|
typename Document,
|
|
709
717
|
std::enable_if_t<!std::is_same_v<codec::encoded_value, Document>, bool> = true>
|
|
710
718
|
[[nodiscard]] auto replace(std::string document_id,
|
|
711
|
-
|
|
719
|
+
Document document,
|
|
712
720
|
const replace_options& options = {}) const
|
|
713
721
|
-> std::future<std::pair<error, mutation_result>>
|
|
714
722
|
{
|
|
715
|
-
return replace(
|
|
723
|
+
return replace(
|
|
724
|
+
std::move(document_id), create_encode_fn<Transcoder, Document>(std::move(document)), options);
|
|
716
725
|
}
|
|
717
726
|
|
|
718
727
|
/**
|
|
@@ -1090,15 +1099,51 @@ private:
|
|
|
1090
1099
|
[[nodiscard]] auto crypto_manager() const -> const std::shared_ptr<crypto::manager>&;
|
|
1091
1100
|
|
|
1092
1101
|
template<typename Transcoder, typename Document>
|
|
1093
|
-
[[nodiscard]] auto
|
|
1102
|
+
[[nodiscard]] auto create_encode_fn(Document document) const
|
|
1103
|
+
-> std::function<codec::encoded_value()>
|
|
1094
1104
|
{
|
|
1095
1105
|
if constexpr (codec::is_crypto_transcoder_v<Transcoder>) {
|
|
1096
|
-
return
|
|
1106
|
+
return [crypto_manager = crypto_manager(),
|
|
1107
|
+
document = std::move(document)]() -> codec::encoded_value {
|
|
1108
|
+
return Transcoder::encode(document, crypto_manager);
|
|
1109
|
+
};
|
|
1097
1110
|
} else {
|
|
1098
|
-
return
|
|
1111
|
+
return [document = std::move(document)]() -> codec::encoded_value {
|
|
1112
|
+
return Transcoder::encode(document);
|
|
1113
|
+
};
|
|
1099
1114
|
}
|
|
1100
1115
|
}
|
|
1101
1116
|
|
|
1117
|
+
void replace(std::string document_id,
|
|
1118
|
+
std::function<codec::encoded_value()> document_fn,
|
|
1119
|
+
const replace_options& options,
|
|
1120
|
+
replace_handler&& handler) const;
|
|
1121
|
+
|
|
1122
|
+
auto replace(std::string document_id,
|
|
1123
|
+
std::function<codec::encoded_value()> document_fn,
|
|
1124
|
+
const replace_options& options) const
|
|
1125
|
+
-> std::future<std::pair<error, mutation_result>>;
|
|
1126
|
+
|
|
1127
|
+
void upsert(std::string document_id,
|
|
1128
|
+
std::function<codec::encoded_value()> document_fn,
|
|
1129
|
+
const upsert_options& options,
|
|
1130
|
+
upsert_handler&& handler) const;
|
|
1131
|
+
|
|
1132
|
+
auto upsert(std::string document_id,
|
|
1133
|
+
std::function<codec::encoded_value()> document_fn,
|
|
1134
|
+
const upsert_options& options) const
|
|
1135
|
+
-> std::future<std::pair<error, mutation_result>>;
|
|
1136
|
+
|
|
1137
|
+
void insert(std::string document_id,
|
|
1138
|
+
std::function<codec::encoded_value()> document_fn,
|
|
1139
|
+
const insert_options& options,
|
|
1140
|
+
insert_handler&& handler) const;
|
|
1141
|
+
|
|
1142
|
+
auto insert(std::string document_id,
|
|
1143
|
+
std::function<codec::encoded_value()> document_fn,
|
|
1144
|
+
const insert_options& options) const
|
|
1145
|
+
-> std::future<std::pair<error, mutation_result>>;
|
|
1146
|
+
|
|
1102
1147
|
collection(core::cluster core,
|
|
1103
1148
|
std::string_view bucket_name,
|
|
1104
1149
|
std::string_view scope_name,
|