couchbase 3.8.1 → 3.9.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 +2 -2
- data/ext/CMakeLists.txt +16 -1
- data/ext/cache/cpm/{CPM_0.42.0.cmake → CPM_0.43.1.cmake} +18 -2
- data/ext/cache/extconf_include.rb +6 -6
- data/ext/cache/mozilla-ca-bundle.crt +214 -155
- data/ext/cache/mozilla-ca-bundle.sha256 +1 -1
- data/ext/couchbase/CMakeLists.txt +130 -21
- data/ext/couchbase/cmake/APKBUILD.in +25 -4
- data/ext/couchbase/cmake/Bundler.cmake +143 -34
- data/ext/couchbase/cmake/CPM.cmake +126 -12
- data/ext/couchbase/cmake/Cache.cmake +7 -1
- data/ext/couchbase/cmake/CompilerOptions.cmake +1 -1
- data/ext/couchbase/cmake/CompilerWarnings.cmake +17 -6
- data/ext/couchbase/cmake/GrpcProtobuf.cmake +481 -0
- data/ext/couchbase/cmake/OpenSSL.cmake +10 -3
- data/ext/couchbase/cmake/Packaging.cmake +519 -65
- data/ext/couchbase/cmake/Protostellar.cmake +250 -0
- data/ext/couchbase/cmake/Sanitizers.cmake +61 -50
- data/ext/couchbase/cmake/StaticAnalyzers.cmake +16 -5
- data/ext/couchbase/cmake/TestFramework.cmake +283 -0
- data/ext/couchbase/cmake/TestFrameworkAddTests.cmake +51 -0
- data/ext/couchbase/cmake/Testing.cmake +27 -9
- data/ext/couchbase/cmake/ThirdPartyDependencies.cmake +141 -8
- data/ext/couchbase/cmake/VersionInfo.cmake +50 -0
- data/ext/couchbase/cmake/build_config.hxx.in +2 -1
- data/ext/couchbase/cmake/couchbase-cxx-client.spec.in +101 -23
- data/ext/couchbase/cmake/couchbase_cxx_client_static-config.cmake.in +7 -0
- data/ext/couchbase/cmake/couchbase_cxx_client_static.pc.in +2 -0
- data/ext/couchbase/cmake/gRPC_Generate.cmake +58 -0
- data/ext/couchbase/cmake/protobuf_Generate.cmake +69 -0
- data/ext/couchbase/cmake/require-git-checkout.cmake +25 -0
- data/ext/couchbase/cmake/tarball_glob.txt +49 -0
- data/ext/couchbase/core/agent_group.cxx +0 -8
- data/ext/couchbase/core/agent_group.hxx +0 -4
- data/ext/couchbase/core/analytics_stream.cxx +314 -0
- data/ext/couchbase/core/analytics_stream.hxx +129 -0
- data/ext/couchbase/core/analytics_stream_component.cxx +245 -0
- data/ext/couchbase/core/analytics_stream_component.hxx +67 -0
- data/ext/couchbase/core/app_telemetry_meter.cxx +25 -3
- data/ext/couchbase/core/app_telemetry_meter.hxx +77 -0
- data/ext/couchbase/core/app_telemetry_reporter.cxx +7 -6
- data/ext/couchbase/core/bucket.cxx +381 -87
- data/ext/couchbase/core/bucket.hxx +105 -25
- data/ext/couchbase/core/bucket_unit_test_api.hxx +57 -0
- data/ext/couchbase/core/capella.hxx +91 -0
- data/ext/couchbase/core/cluster.cxx +1554 -398
- data/ext/couchbase/core/cluster.hxx +39 -8
- data/ext/couchbase/core/cluster_agent.cxx +0 -8
- data/ext/couchbase/core/cluster_agent.hxx +0 -4
- data/ext/couchbase/core/cluster_options.hxx +26 -3
- data/ext/couchbase/core/collections_component.cxx +39 -15
- data/ext/couchbase/core/config_profiles.cxx +1 -1
- data/ext/couchbase/core/crud_component.cxx +2 -2
- data/ext/couchbase/core/crud_options.hxx +34 -0
- data/ext/couchbase/core/crypto/cbcrypto.cc +18 -13
- data/ext/couchbase/core/document_id_redaction.hxx +81 -0
- data/ext/couchbase/core/error_context/base_error_context.hxx +7 -6
- data/ext/couchbase/core/error_context/key_value.cxx +25 -2
- data/ext/couchbase/core/error_context/key_value.hxx +60 -33
- data/ext/couchbase/core/error_context/key_value_error_context.hxx +16 -15
- data/ext/couchbase/core/error_context/search.hxx +5 -0
- data/ext/couchbase/core/error_context/search_json.hxx +3 -0
- data/ext/couchbase/core/error_context/subdocument_error_context.hxx +19 -18
- data/ext/couchbase/core/error_context/view.hxx +5 -0
- data/ext/couchbase/core/free_form_http_request.cxx +237 -4
- data/ext/couchbase/core/free_form_http_request.hxx +41 -8
- data/ext/couchbase/core/http_component.cxx +300 -284
- data/ext/couchbase/core/http_component.hxx +0 -4
- data/ext/couchbase/core/impl/analytics.cxx +38 -5
- data/ext/couchbase/core/impl/analytics.hxx +34 -0
- data/ext/couchbase/core/impl/bootstrap_error.hxx +0 -3
- data/ext/couchbase/core/impl/collection.cxx +215 -202
- data/ext/couchbase/core/impl/collection_manager.cxx +1 -1
- data/ext/couchbase/core/impl/dns_srv_tracker.cxx +45 -18
- data/ext/couchbase/core/impl/error.cxx +22 -2
- data/ext/couchbase/core/impl/internal_analytics_stream_result.hxx +111 -0
- data/ext/couchbase/core/impl/internal_query_stream_result.hxx +110 -0
- data/ext/couchbase/core/impl/invoke_with_node_id.hxx +15 -7
- data/ext/couchbase/core/impl/key_value_error_category.cxx +6 -0
- data/ext/couchbase/core/impl/lookup_in_replica.cxx +10 -10
- data/ext/couchbase/core/impl/lookup_in_replica.hxx +4 -4
- data/ext/couchbase/core/impl/node_id.cxx +49 -13
- data/ext/couchbase/core/impl/observability_recorder.cxx +12 -2
- data/ext/couchbase/core/impl/observe_poll.cxx +63 -23
- data/ext/couchbase/core/impl/public_analytics_stream_result.cxx +372 -0
- data/ext/couchbase/core/impl/public_bucket.cxx +48 -2
- data/ext/couchbase/core/impl/public_cluster.cxx +325 -25
- data/ext/couchbase/core/impl/public_query_stream_result.cxx +380 -0
- data/ext/couchbase/core/impl/public_transaction_get_multi_replicas_from_preferred_server_group_result.cxx +42 -0
- data/ext/couchbase/core/impl/public_transaction_get_multi_result.cxx +42 -0
- data/ext/couchbase/core/impl/query.cxx +76 -7
- data/ext/couchbase/core/impl/query.hxx +36 -0
- data/ext/couchbase/core/impl/query_index_manager.cxx +54 -1
- data/ext/couchbase/core/impl/replica_utils.cxx +101 -0
- data/ext/couchbase/core/impl/replica_utils.hxx +64 -0
- data/ext/couchbase/core/impl/resolve_node_id.hxx +125 -0
- data/ext/couchbase/core/impl/scope.cxx +70 -0
- data/ext/couchbase/core/impl/search.cxx +31 -1
- data/ext/couchbase/core/impl/transactions.cxx +130 -0
- data/ext/couchbase/core/impl/wait_until_ready.cxx +439 -0
- data/ext/couchbase/core/impl/wait_until_ready.hxx +110 -0
- data/ext/couchbase/core/impl/with_bucket_config_or_timeout.hxx +180 -0
- data/ext/couchbase/core/impl/with_cancellation.hxx +11 -3
- data/ext/couchbase/core/io/configuration_belongs_to_session.hxx +66 -0
- data/ext/couchbase/core/io/dns_client.cxx +122 -45
- data/ext/couchbase/core/io/dns_codec.hxx +21 -21
- data/ext/couchbase/core/io/dns_config.cxx +21 -6
- data/ext/couchbase/core/io/http_command.hxx +149 -121
- data/ext/couchbase/core/io/http_error.hxx +107 -0
- data/ext/couchbase/core/io/http_parser.cxx +4 -0
- data/ext/couchbase/core/io/http_session.cxx +606 -154
- data/ext/couchbase/core/io/http_session.hxx +147 -30
- data/ext/couchbase/core/io/http_session_manager.hxx +329 -382
- data/ext/couchbase/core/io/http_streaming_parser.cxx +4 -0
- data/ext/couchbase/core/io/http_streaming_response.cxx +328 -43
- data/ext/couchbase/core/io/http_streaming_response.hxx +37 -3
- data/ext/couchbase/core/io/mcbp_buffer_pool.hxx +122 -0
- data/ext/couchbase/core/io/mcbp_command.hxx +150 -51
- data/ext/couchbase/core/io/mcbp_command_id.hxx +45 -0
- data/ext/couchbase/core/io/mcbp_message.cxx +9 -1
- data/ext/couchbase/core/io/mcbp_message.hxx +19 -0
- data/ext/couchbase/core/io/mcbp_output_queue.hxx +150 -0
- data/ext/couchbase/core/io/mcbp_parser.cxx +24 -7
- data/ext/couchbase/core/io/mcbp_session.cxx +316 -317
- data/ext/couchbase/core/io/mcbp_session.hxx +27 -18
- data/ext/couchbase/core/io/opaque_ring_table.hxx +145 -0
- data/ext/couchbase/core/io/retry_orchestrator.hxx +6 -5
- data/ext/couchbase/core/io/stream_deadline.hxx +50 -0
- data/ext/couchbase/core/io/streams.cxx +275 -14
- data/ext/couchbase/core/io/streams.hxx +53 -0
- data/ext/couchbase/core/logger/logger.cxx +36 -0
- data/ext/couchbase/core/logger/logger.hxx +46 -6
- data/ext/couchbase/core/logger/redaction.hxx +503 -0
- data/ext/couchbase/core/management/eventing_status.hxx +10 -0
- data/ext/couchbase/core/management/eventing_status_json.hxx +4 -0
- data/ext/couchbase/core/mcbp/big_endian.cxx +1 -1
- data/ext/couchbase/core/mcbp/codec.cxx +27 -18
- data/ext/couchbase/core/mcbp/operation_queue.cxx +2 -2
- data/ext/couchbase/core/mcbp/packet.hxx +2 -2
- data/ext/couchbase/core/mcbp/queue_request.cxx +23 -6
- data/ext/couchbase/core/mcbp/queue_request.hxx +21 -0
- data/ext/couchbase/core/meta/features.hxx +13 -0
- data/ext/couchbase/core/meta/version.cxx +6 -3
- data/ext/couchbase/core/metrics/logging_meter.cxx +5 -10
- data/ext/couchbase/core/metrics/meter_wrapper.cxx +63 -33
- data/ext/couchbase/core/metrics/meter_wrapper.hxx +55 -3
- data/ext/couchbase/core/operations/analytics_response_parsing.cxx +177 -0
- data/ext/couchbase/core/operations/analytics_response_parsing.hxx +55 -0
- data/ext/couchbase/core/operations/document_analytics.cxx +48 -130
- data/ext/couchbase/core/operations/document_analytics.hxx +14 -2
- data/ext/couchbase/core/operations/document_get_all_replicas.hxx +15 -7
- data/ext/couchbase/core/operations/document_get_any_replica.hxx +19 -8
- data/ext/couchbase/core/operations/document_get_projected.cxx +1 -1
- data/ext/couchbase/core/{impl/get_replica.cxx → operations/document_get_replica.cxx} +21 -3
- data/ext/couchbase/core/{impl/get_replica.hxx → operations/document_get_replica.hxx} +31 -4
- data/ext/couchbase/core/operations/document_lookup_in.cxx +10 -10
- data/ext/couchbase/core/operations/document_lookup_in_all_replicas.hxx +228 -198
- data/ext/couchbase/core/operations/document_lookup_in_any_replica.hxx +215 -217
- data/ext/couchbase/core/operations/document_query.cxx +108 -221
- data/ext/couchbase/core/operations/document_query.hxx +18 -4
- data/ext/couchbase/core/operations/document_search.cxx +52 -8
- data/ext/couchbase/core/operations/document_search.hxx +3 -0
- data/ext/couchbase/core/operations/document_view.cxx +3 -3
- data/ext/couchbase/core/operations/management/analytics_dataset_create.cxx +15 -8
- data/ext/couchbase/core/operations/management/analytics_dataset_create.hxx +4 -0
- data/ext/couchbase/core/operations/management/analytics_dataset_drop.cxx +11 -6
- data/ext/couchbase/core/operations/management/analytics_dataset_get_all.cxx +3 -2
- data/ext/couchbase/core/operations/management/analytics_dataverse_create.cxx +10 -5
- data/ext/couchbase/core/operations/management/analytics_dataverse_drop.cxx +10 -5
- data/ext/couchbase/core/operations/management/analytics_get_pending_mutations.cxx +2 -1
- data/ext/couchbase/core/operations/management/analytics_index_create.cxx +33 -8
- data/ext/couchbase/core/operations/management/analytics_index_drop.cxx +12 -7
- data/ext/couchbase/core/operations/management/analytics_index_get_all.cxx +3 -2
- data/ext/couchbase/core/operations/management/analytics_link_connect.cxx +11 -6
- data/ext/couchbase/core/operations/management/analytics_link_create.cxx +3 -3
- data/ext/couchbase/core/operations/management/analytics_link_disconnect.cxx +10 -4
- data/ext/couchbase/core/operations/management/analytics_link_drop.cxx +6 -4
- data/ext/couchbase/core/operations/management/analytics_link_get_all.cxx +4 -3
- data/ext/couchbase/core/operations/management/analytics_link_replace.cxx +3 -3
- data/ext/couchbase/core/operations/management/analytics_link_utils.hxx +1 -1
- data/ext/couchbase/core/operations/management/bucket_create.cxx +37 -38
- data/ext/couchbase/core/operations/management/bucket_update.cxx +26 -28
- data/ext/couchbase/core/operations/management/change_password.cxx +2 -0
- data/ext/couchbase/core/operations/management/collection_drop.cxx +5 -1
- data/ext/couchbase/core/operations/management/error_utils.cxx +59 -5
- data/ext/couchbase/core/operations/management/error_utils.hxx +29 -1
- data/ext/couchbase/core/operations/management/eventing_deploy_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/eventing_drop_function.cxx +8 -3
- data/ext/couchbase/core/operations/management/eventing_get_all_functions.cxx +4 -2
- data/ext/couchbase/core/operations/management/eventing_get_function.cxx +5 -3
- data/ext/couchbase/core/operations/management/eventing_get_status.cxx +4 -2
- data/ext/couchbase/core/operations/management/eventing_pause_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/eventing_resume_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/eventing_undeploy_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/eventing_upsert_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/group_drop.cxx +3 -1
- data/ext/couchbase/core/operations/management/group_get.cxx +3 -1
- data/ext/couchbase/core/operations/management/group_upsert.cxx +11 -8
- data/ext/couchbase/core/operations/management/query_index_build.cxx +5 -2
- data/ext/couchbase/core/operations/management/query_index_create.cxx +9 -3
- data/ext/couchbase/core/operations/management/query_index_drop.cxx +11 -4
- data/ext/couchbase/core/operations/management/query_index_get_all.cxx +1 -1
- data/ext/couchbase/core/operations/management/query_index_get_all_deferred.cxx +1 -1
- data/ext/couchbase/core/operations/management/scope_drop.cxx +5 -1
- data/ext/couchbase/core/operations/management/scope_get_all.cxx +6 -1
- data/ext/couchbase/core/operations/management/search_get_stats.cxx +10 -0
- data/ext/couchbase/core/operations/management/search_index_analyze_document.cxx +3 -2
- data/ext/couchbase/core/operations/management/search_index_control_ingest.cxx +4 -3
- data/ext/couchbase/core/operations/management/search_index_control_plan_freeze.cxx +4 -3
- data/ext/couchbase/core/operations/management/search_index_control_query.cxx +4 -3
- data/ext/couchbase/core/operations/management/search_index_drop.cxx +2 -2
- data/ext/couchbase/core/operations/management/search_index_get.cxx +2 -2
- data/ext/couchbase/core/operations/management/search_index_get_documents_count.cxx +3 -2
- data/ext/couchbase/core/operations/management/search_index_get_stats.cxx +3 -1
- data/ext/couchbase/core/operations/management/search_index_upsert.cxx +2 -2
- data/ext/couchbase/core/operations/management/user_drop.cxx +3 -1
- data/ext/couchbase/core/operations/management/user_get.cxx +3 -1
- data/ext/couchbase/core/operations/management/user_upsert.cxx +12 -9
- data/ext/couchbase/core/operations/management/view_index_drop.cxx +1 -1
- data/ext/couchbase/core/operations/management/view_index_get.cxx +1 -1
- data/ext/couchbase/core/operations/management/view_index_upsert.cxx +1 -1
- data/ext/couchbase/core/operations/operation_traits.hxx +18 -0
- data/ext/couchbase/core/operations/query_response_parsing.cxx +211 -0
- data/ext/couchbase/core/operations/query_response_parsing.hxx +60 -0
- data/ext/couchbase/core/operations_fwd.hxx +3 -3
- data/ext/couchbase/core/origin.cxx +54 -26
- data/ext/couchbase/core/origin.hxx +12 -0
- data/ext/couchbase/core/orphan_reporter.cxx +2 -1
- data/ext/couchbase/core/platform/random.cc +7 -7
- data/ext/couchbase/core/protocol/client_request.cxx +2 -2
- data/ext/couchbase/core/protocol/client_request.hxx +38 -21
- data/ext/couchbase/core/protocol/client_response.cxx +11 -3
- data/ext/couchbase/core/protocol/client_response.hxx +27 -6
- data/ext/couchbase/core/protocol/cmd_append.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_cluster_map_change_notification.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_decrement.cxx +6 -6
- data/ext/couchbase/core/protocol/cmd_get.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_get_and_lock.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_get_and_touch.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_get_cluster_config.cxx +6 -4
- data/ext/couchbase/core/protocol/cmd_get_collection_id.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_get_error_map.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_get_meta.cxx +4 -4
- data/ext/couchbase/core/protocol/cmd_get_replica.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_hello.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_increment.cxx +6 -6
- data/ext/couchbase/core/protocol/cmd_insert.cxx +4 -4
- data/ext/couchbase/core/protocol/cmd_lookup_in.cxx +4 -3
- data/ext/couchbase/core/protocol/cmd_lookup_in_replica.cxx +4 -3
- data/ext/couchbase/core/protocol/cmd_mutate_in.cxx +10 -9
- data/ext/couchbase/core/protocol/cmd_mutate_in.hxx +10 -10
- data/ext/couchbase/core/protocol/cmd_observe_seqno.cxx +7 -7
- data/ext/couchbase/core/protocol/cmd_prepend.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_remove.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_replace.cxx +4 -4
- data/ext/couchbase/core/protocol/cmd_touch.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_upsert.cxx +4 -4
- data/ext/couchbase/core/protocol/datatype.hxx +118 -1
- data/ext/couchbase/core/protocol/frame_info_utils.cxx +1 -1
- data/ext/couchbase/core/protocol/magic.hxx +4 -0
- data/ext/couchbase/core/protocol/magic_fmt.hxx +3 -0
- data/ext/couchbase/core/protocol/server_request.hxx +3 -1
- data/ext/couchbase/core/protocol/status.cxx +1 -1
- data/ext/couchbase/core/protostellar/analytics_converter.hxx +171 -0
- data/ext/couchbase/core/protostellar/bucket_admin_converter.hxx +301 -0
- data/ext/couchbase/core/protostellar/collection_admin_converter.hxx +92 -0
- data/ext/couchbase/core/protostellar/component.cxx +2445 -0
- data/ext/couchbase/core/protostellar/component.hxx +391 -0
- data/ext/couchbase/core/{columnar/bootstrap_notification_subscriber.hxx → protostellar/compression_settings.hxx} +11 -10
- data/ext/couchbase/core/protostellar/credentials.cxx +233 -0
- data/ext/couchbase/core/protostellar/credentials.hxx +88 -0
- data/ext/couchbase/core/protostellar/dispatcher.cxx +57 -0
- data/ext/couchbase/core/protostellar/dispatcher.hxx +482 -0
- data/ext/couchbase/core/protostellar/error_utils.cxx +293 -0
- data/ext/couchbase/core/protostellar/error_utils.hxx +97 -0
- data/ext/couchbase/core/protostellar/json_payload.hxx +49 -0
- data/ext/couchbase/core/protostellar/kv_converter.cxx +70 -0
- data/ext/couchbase/core/protostellar/kv_converter.hxx +600 -0
- data/ext/couchbase/core/protostellar/query_converter.hxx +265 -0
- data/ext/couchbase/core/protostellar/query_index_admin_converter.hxx +291 -0
- data/ext/couchbase/core/protostellar/query_proto.hxx +73 -0
- data/ext/couchbase/core/protostellar/search_converter.hxx +244 -0
- data/ext/couchbase/core/protostellar/search_index_admin_converter.hxx +156 -0
- data/ext/couchbase/core/protostellar/view_converter.hxx +158 -0
- data/ext/couchbase/core/query_stream.cxx +447 -0
- data/ext/couchbase/core/query_stream.hxx +141 -0
- data/ext/couchbase/core/query_stream_component.cxx +243 -0
- data/ext/couchbase/core/query_stream_component.hxx +68 -0
- data/ext/couchbase/core/range_scan_load_balancer.cxx +15 -8
- data/ext/couchbase/core/range_scan_orchestrator.cxx +15 -3
- data/ext/couchbase/core/response_handler.hxx +41 -4
- data/ext/couchbase/core/row_streamer.cxx +332 -46
- data/ext/couchbase/core/row_streamer.hxx +31 -1
- data/ext/couchbase/core/row_streamer_options.hxx +55 -0
- data/ext/couchbase/core/sasl/client.h +3 -0
- data/ext/couchbase/core/search_scoring.hxx +66 -0
- data/ext/couchbase/core/stream_error_details.hxx +69 -0
- data/ext/couchbase/core/timeout_defaults.hxx +0 -1
- data/ext/couchbase/core/topology/capabilities.hxx +6 -0
- data/ext/couchbase/core/topology/capabilities_fmt.hxx +3 -0
- data/ext/couchbase/core/topology/configuration.cxx +21 -6
- data/ext/couchbase/core/topology/configuration.hxx +29 -8
- data/ext/couchbase/core/topology/configuration_json.hxx +3 -0
- data/ext/couchbase/core/topology/error_map_json.hxx +3 -1
- data/ext/couchbase/core/tracing/threshold_logging_tracer.cxx +70 -4
- data/ext/couchbase/core/tracing/threshold_logging_tracer.hxx +10 -0
- data/ext/couchbase/core/transactions/active_transaction_record.cxx +0 -34
- data/ext/couchbase/core/transactions/attempt_context_impl.cxx +362 -241
- data/ext/couchbase/core/transactions/attempt_context_impl.hxx +24 -3
- data/ext/couchbase/core/transactions/error_list.hxx +2 -2
- data/ext/couchbase/core/transactions/get_multi_fetch.hxx +160 -0
- data/ext/couchbase/core/transactions/get_multi_orchestrator.cxx +326 -125
- data/ext/couchbase/core/transactions/get_multi_transaction_id.hxx +62 -0
- data/ext/couchbase/core/transactions/internal/atr_entry.hxx +22 -2
- data/ext/couchbase/core/transactions/internal/transaction_context.hxx +2 -2
- data/ext/couchbase/core/transactions/internal/transactions_cleanup.hxx +23 -1
- data/ext/couchbase/core/transactions/internal/utils.hxx +50 -14
- data/ext/couchbase/core/transactions/staged_mutation.cxx +23 -18
- data/ext/couchbase/core/transactions/staged_mutation.hxx +15 -4
- data/ext/couchbase/core/transactions/transaction_context.cxx +55 -40
- data/ext/couchbase/core/transactions/transaction_get_result.hxx +16 -0
- data/ext/couchbase/core/transactions/transactions.cxx +3 -55
- data/ext/couchbase/core/transactions/transactions_cleanup.cxx +194 -66
- data/ext/couchbase/core/transactions/transactions_config.cxx +0 -11
- data/ext/couchbase/core/transactions/utils.cxx +10 -0
- data/ext/couchbase/core/transactions/waitable_op_list.hxx +15 -4
- data/ext/couchbase/core/transactions.hxx +9 -9
- data/ext/couchbase/core/utils/byteswap.hxx +166 -9
- data/ext/couchbase/core/utils/connection_string.cxx +50 -85
- data/ext/couchbase/core/utils/connection_string.hxx +15 -0
- data/ext/couchbase/core/{columnar/backoff_calculator.hxx → utils/deadline.hxx} +13 -13
- data/ext/couchbase/core/utils/duration_parser.cxx +1 -1
- data/ext/couchbase/core/utils/json_streaming_lexer.cxx +48 -5
- data/ext/couchbase/core/utils/json_streaming_lexer.hxx +4 -1
- data/ext/couchbase/core/utils/movable_function.hxx +301 -52
- data/ext/couchbase/core/utils/name_codec.hxx +154 -11
- data/ext/couchbase/core/{columnar/retry_info.hxx → utils/process_id.hxx} +18 -13
- data/ext/couchbase/core/utils/url_codec.cxx +12 -51
- data/ext/couchbase/core/websocket_codec.cxx +3 -29
- data/ext/couchbase/couchbase/analytics_options.hxx +21 -10
- data/ext/couchbase/couchbase/analytics_row.hxx +105 -0
- data/ext/couchbase/couchbase/analytics_stream_result.hxx +266 -0
- data/ext/couchbase/couchbase/boolean_query.hxx +3 -3
- data/ext/couchbase/couchbase/bucket.hxx +57 -0
- data/ext/couchbase/couchbase/cluster.hxx +216 -5
- data/ext/couchbase/{core/columnar/security_options.hxx → couchbase/cluster_state.hxx} +18 -14
- data/ext/couchbase/couchbase/codec/lenient_json_transcoder.hxx +69 -0
- data/ext/couchbase/couchbase/collection.hxx +234 -14
- data/ext/couchbase/couchbase/common_durability_options.hxx +18 -3
- data/ext/couchbase/couchbase/conjunction_query.hxx +1 -1
- data/ext/couchbase/couchbase/create_dataset_analytics_options.hxx +6 -1
- data/ext/couchbase/couchbase/date_range_query.hxx +2 -2
- data/ext/couchbase/couchbase/decrement_options.hxx +1 -1
- data/ext/couchbase/couchbase/disjunction_query.hxx +1 -1
- data/ext/couchbase/couchbase/error.hxx +32 -0
- data/ext/couchbase/couchbase/error_codes.hxx +32 -0
- data/ext/couchbase/couchbase/geo_bounding_box_query.hxx +1 -1
- data/ext/couchbase/couchbase/geo_distance_query.hxx +1 -1
- data/ext/couchbase/couchbase/geo_polygon_query.hxx +1 -1
- data/ext/couchbase/couchbase/get_replica_options.hxx +68 -0
- data/ext/couchbase/couchbase/get_replica_result.hxx +5 -3
- data/ext/couchbase/couchbase/get_replica_strategy.hxx +161 -0
- data/ext/couchbase/couchbase/get_result.hxx +1 -0
- data/ext/couchbase/couchbase/increment_options.hxx +1 -1
- data/ext/couchbase/couchbase/insert_options.hxx +1 -1
- data/ext/couchbase/couchbase/match_phrase_query.hxx +1 -1
- data/ext/couchbase/couchbase/match_query.hxx +1 -1
- data/ext/couchbase/couchbase/mutate_in_options.hxx +3 -3
- data/ext/couchbase/couchbase/network_options.hxx +1 -1
- data/ext/couchbase/couchbase/node_id.hxx +42 -14
- data/ext/couchbase/couchbase/node_id_for_options.hxx +7 -1
- data/ext/couchbase/couchbase/node_ids_options.hxx +8 -2
- data/ext/couchbase/couchbase/numeric_range_query.hxx +1 -1
- data/ext/couchbase/couchbase/phrase_query.hxx +1 -1
- data/ext/couchbase/couchbase/prefix_query.hxx +1 -1
- data/ext/couchbase/couchbase/query_options.hxx +23 -12
- data/ext/couchbase/couchbase/query_row.hxx +111 -0
- data/ext/couchbase/couchbase/query_stream_result.hxx +302 -0
- data/ext/couchbase/couchbase/query_string_query.hxx +3 -3
- data/ext/couchbase/couchbase/regexp_query.hxx +1 -1
- data/ext/couchbase/couchbase/replace_options.hxx +3 -3
- data/ext/couchbase/couchbase/result.hxx +14 -3
- data/ext/couchbase/couchbase/scan_result_item.hxx +1 -0
- data/ext/couchbase/couchbase/scope.hxx +85 -2
- data/ext/couchbase/couchbase/search_options.hxx +58 -8
- data/ext/couchbase/couchbase/search_scoring.hxx +94 -0
- data/ext/couchbase/couchbase/search_scoring_none.hxx +51 -0
- data/ext/couchbase/couchbase/search_scoring_reciprocal_rank_fusion.hxx +88 -0
- data/ext/couchbase/couchbase/search_scoring_relative_score_fusion.hxx +70 -0
- data/ext/couchbase/couchbase/term_range_query.hxx +1 -1
- data/ext/couchbase/couchbase/tracing/request_span.hxx +46 -0
- data/ext/couchbase/couchbase/transactions/transaction_get_multi_replicas_from_preferred_server_group_result.hxx +23 -21
- data/ext/couchbase/couchbase/transactions/transaction_get_multi_result.hxx +24 -19
- data/ext/couchbase/couchbase/transactions/transaction_get_result.hxx +17 -3
- data/ext/couchbase/couchbase/transactions/transactions_config.hxx +4 -2
- data/ext/couchbase/couchbase/transactions.hxx +27 -18
- data/ext/couchbase/couchbase/upsert_options.hxx +3 -3
- data/ext/couchbase/couchbase/vector_query.hxx +1 -1
- data/ext/couchbase/couchbase/wait_until_ready_options.hxx +111 -0
- data/ext/couchbase/couchbase/wildcard_query.hxx +1 -1
- data/ext/extconf.rb +15 -10
- data/ext/rcb_analytics.cxx +82 -102
- data/ext/rcb_backend.cxx +42 -36
- data/ext/rcb_backend.hxx +2 -0
- data/ext/rcb_buckets.cxx +47 -59
- data/ext/rcb_collections.cxx +42 -52
- data/ext/rcb_crud.cxx +345 -224
- data/ext/rcb_diagnostics.cxx +117 -27
- data/ext/rcb_exceptions.cxx +152 -99
- data/ext/rcb_exceptions.hxx +25 -0
- data/ext/rcb_extras.cxx +18 -19
- data/ext/rcb_hdr_histogram.cxx +19 -4
- data/ext/rcb_logger.cxx +202 -27
- data/ext/rcb_logger.hxx +12 -0
- data/ext/rcb_multi.cxx +40 -40
- data/ext/rcb_observability.cxx +7 -5
- data/ext/rcb_query.cxx +99 -142
- data/ext/rcb_range_scan.cxx +41 -35
- data/ext/rcb_search.cxx +98 -99
- data/ext/rcb_users.cxx +36 -56
- data/ext/rcb_utils.cxx +100 -37
- data/ext/rcb_utils.hxx +287 -33
- data/ext/rcb_version.cxx +1 -1
- data/ext/rcb_views.cxx +55 -51
- data/lib/active_support/cache/couchbase_store.rb +77 -12
- data/lib/couchbase/bucket.rb +20 -0
- data/lib/couchbase/cluster.rb +33 -14
- data/lib/couchbase/collection.rb +36 -1
- data/lib/couchbase/errors.rb +18 -0
- data/lib/couchbase/fork_hooks.rb +16 -7
- data/lib/couchbase/get_replica_strategy.rb +89 -0
- data/lib/couchbase/logger.rb +1 -1
- data/lib/couchbase/management/analytics_index_manager.rb +15 -15
- data/lib/couchbase/management/bucket_manager.rb +6 -6
- data/lib/couchbase/management/collection_manager.rb +6 -6
- data/lib/couchbase/management/query_index_manager.rb +7 -7
- data/lib/couchbase/management/search_index_manager.rb +13 -13
- data/lib/couchbase/management/user_manager.rb +10 -10
- data/lib/couchbase/management/view_index_manager.rb +5 -5
- data/lib/couchbase/options.rb +181 -44
- data/lib/couchbase/protostellar/bucket.rb +4 -0
- data/lib/couchbase/protostellar/cluster.rb +4 -0
- data/lib/couchbase/protostellar/collection.rb +4 -0
- data/lib/couchbase/protostellar/error_handling.rb +2 -1
- data/lib/couchbase/protostellar/request.rb +1 -0
- data/lib/couchbase/protostellar/request_generator/kv.rb +16 -2
- data/lib/couchbase/protostellar/request_generator/search.rb +17 -1
- data/lib/couchbase/protostellar/retry/orchestrator.rb +3 -2
- data/lib/couchbase/protostellar/retry/strategies/fail_fast.rb +33 -0
- data/lib/couchbase/protostellar/retry/strategies.rb +1 -0
- data/lib/couchbase/search_options.rb +95 -6
- data/lib/couchbase/version.rb +1 -1
- metadata +92 -33
- data/ext/0001-fix-build-for-mingw-w64-ucrt-x86_64-toolchain.patch +0 -40
- data/ext/couchbase/core/columnar/agent.hxx +0 -71
- data/ext/couchbase/core/columnar/agent_config.hxx +0 -59
- data/ext/couchbase/core/columnar/background_bootstrap_listener.hxx +0 -42
- data/ext/couchbase/core/columnar/backoff_calculator.cxx +0 -62
- data/ext/couchbase/core/columnar/columnar_agent.cxx +0 -147
- data/ext/couchbase/core/columnar/columnar_agent_config.cxx +0 -48
- data/ext/couchbase/core/columnar/columnar_error.cxx +0 -51
- data/ext/couchbase/core/columnar/database_management_options.hxx +0 -56
- data/ext/couchbase/core/columnar/error.hxx +0 -51
- data/ext/couchbase/core/columnar/error_codes.cxx +0 -107
- data/ext/couchbase/core/columnar/error_codes.hxx +0 -75
- data/ext/couchbase/core/columnar/management_component.cxx +0 -300
- data/ext/couchbase/core/columnar/management_component.hxx +0 -56
- data/ext/couchbase/core/columnar/query_component.cxx +0 -523
- data/ext/couchbase/core/columnar/query_component.hxx +0 -57
- data/ext/couchbase/core/columnar/query_options.hxx +0 -59
- data/ext/couchbase/core/columnar/query_result.cxx +0 -130
- data/ext/couchbase/core/columnar/query_result.hxx +0 -78
- data/ext/couchbase/core/io/config_tracker.cxx +0 -687
- data/ext/couchbase/core/io/config_tracker.hxx +0 -123
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2026-Present 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/common_options.hxx>
|
|
21
|
+
#include <couchbase/error.hxx>
|
|
22
|
+
#include <couchbase/get_replica_result.hxx>
|
|
23
|
+
|
|
24
|
+
#include <functional>
|
|
25
|
+
|
|
26
|
+
namespace couchbase
|
|
27
|
+
{
|
|
28
|
+
/**
|
|
29
|
+
* Options for collection#get_replica().
|
|
30
|
+
*
|
|
31
|
+
* @since 1.5.0
|
|
32
|
+
* @committed
|
|
33
|
+
*/
|
|
34
|
+
struct get_replica_options : public common_options<get_replica_options> {
|
|
35
|
+
/**
|
|
36
|
+
* Immutable value object representing consistent options.
|
|
37
|
+
*
|
|
38
|
+
* @since 1.5.0
|
|
39
|
+
* @internal
|
|
40
|
+
*/
|
|
41
|
+
struct built : public common_options<get_replica_options>::built {
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Validates options and returns them as an immutable value.
|
|
46
|
+
*
|
|
47
|
+
* @return consistent options as an immutable value
|
|
48
|
+
*
|
|
49
|
+
* @exception std::system_error with code errc::common::invalid_argument if the options are not
|
|
50
|
+
* valid
|
|
51
|
+
*
|
|
52
|
+
* @since 1.5.0
|
|
53
|
+
* @internal
|
|
54
|
+
*/
|
|
55
|
+
[[nodiscard]] auto build() const -> built
|
|
56
|
+
{
|
|
57
|
+
return { build_common_options() };
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The signature for the handler of the @ref collection#get_replica() operation
|
|
63
|
+
*
|
|
64
|
+
* @since 1.5.0
|
|
65
|
+
* @committed
|
|
66
|
+
*/
|
|
67
|
+
using get_replica_handler = std::function<void(error, get_replica_result)>;
|
|
68
|
+
} // namespace couchbase
|
|
@@ -32,8 +32,8 @@ class manager;
|
|
|
32
32
|
#endif
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
|
-
* Represents result of @ref collection#get_any_replica
|
|
36
|
-
* collection#
|
|
35
|
+
* Represents result of @ref collection#get_any_replica, @ref collection#get_all_replicas and
|
|
36
|
+
* @ref collection#get_replica operations
|
|
37
37
|
*
|
|
38
38
|
* @since 1.0.0
|
|
39
39
|
* @committed
|
|
@@ -48,11 +48,13 @@ public:
|
|
|
48
48
|
get_replica_result() = default;
|
|
49
49
|
|
|
50
50
|
/**
|
|
51
|
-
* Constructs result for get_any_replica operation, or an entry for
|
|
51
|
+
* Constructs result for get_any_replica or get_replica operation, or an entry for
|
|
52
|
+
* get_all_replicas operation.
|
|
52
53
|
*
|
|
53
54
|
* @param cas
|
|
54
55
|
* @param is_replica true if the document originates from replica node
|
|
55
56
|
* @param value raw document contents along with flags describing its structure
|
|
57
|
+
* @param crypto_manager manager handed to the transcoder to decrypt encrypted fields
|
|
56
58
|
*
|
|
57
59
|
* @since 1.0.0
|
|
58
60
|
* @committed
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2026-Present 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 <cstddef>
|
|
21
|
+
|
|
22
|
+
namespace couchbase
|
|
23
|
+
{
|
|
24
|
+
/**
|
|
25
|
+
* Replica to read from, where @ref replica_index::first is the first replica of
|
|
26
|
+
* the vbucket. The active copy cannot be selected.
|
|
27
|
+
*
|
|
28
|
+
* @since 1.5.0
|
|
29
|
+
* @committed
|
|
30
|
+
*/
|
|
31
|
+
enum class replica_index {
|
|
32
|
+
first = 0,
|
|
33
|
+
second = 1,
|
|
34
|
+
third = 2,
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Options for @ref get_replica_strategy::from_index().
|
|
39
|
+
*
|
|
40
|
+
* @since 1.5.0
|
|
41
|
+
* @committed
|
|
42
|
+
*/
|
|
43
|
+
struct get_replica_strategy_from_index_options {
|
|
44
|
+
/**
|
|
45
|
+
* Immutable value object representing consistent options.
|
|
46
|
+
*
|
|
47
|
+
* @since 1.5.0
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
50
|
+
struct built {
|
|
51
|
+
bool wrap;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Resolve an index that cannot be read as requested to the next one that can,
|
|
56
|
+
* instead of failing with @ref errc::key_value::replica_index_out_of_bounds or
|
|
57
|
+
* @ref errc::key_value::replica_index_currently_unavailable.
|
|
58
|
+
*
|
|
59
|
+
* The search walks the bucket's configured replica count, starting at the
|
|
60
|
+
* requested index modulo that count. An index beyond the vbucket map's
|
|
61
|
+
* current row therefore still reaches the replicas the row does list.
|
|
62
|
+
*
|
|
63
|
+
* Two failures remain. A bucket configured for no replicas reports
|
|
64
|
+
* @ref errc::key_value::replica_index_out_of_bounds. A full lap that finds
|
|
65
|
+
* nothing readable reports
|
|
66
|
+
* @ref errc::key_value::replica_index_currently_unavailable.
|
|
67
|
+
*
|
|
68
|
+
* Resolution follows the vbucket map, not node health: a replica the map
|
|
69
|
+
* places on a node is selected even when that node cannot be reached, and the
|
|
70
|
+
* operation retries against it until its timeout rather than moving on to
|
|
71
|
+
* another replica.
|
|
72
|
+
*
|
|
73
|
+
* @param value whether to wrap around the available replicas
|
|
74
|
+
* @return this options builder for chaining purposes.
|
|
75
|
+
*
|
|
76
|
+
* @since 1.5.0
|
|
77
|
+
* @committed
|
|
78
|
+
*/
|
|
79
|
+
auto wrap(bool value) -> get_replica_strategy_from_index_options&
|
|
80
|
+
{
|
|
81
|
+
wrap_ = value;
|
|
82
|
+
return *this;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Returns the options as an immutable value.
|
|
87
|
+
*
|
|
88
|
+
* @return the options as an immutable value
|
|
89
|
+
*
|
|
90
|
+
* @since 1.5.0
|
|
91
|
+
* @internal
|
|
92
|
+
*/
|
|
93
|
+
[[nodiscard]] auto build() const -> built
|
|
94
|
+
{
|
|
95
|
+
return { wrap_ };
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private:
|
|
99
|
+
bool wrap_{ false };
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Selects the replica that @ref collection#get_replica() reads from.
|
|
104
|
+
*
|
|
105
|
+
* @since 1.5.0
|
|
106
|
+
* @committed
|
|
107
|
+
*/
|
|
108
|
+
class get_replica_strategy
|
|
109
|
+
{
|
|
110
|
+
public:
|
|
111
|
+
/**
|
|
112
|
+
* Read from the replica at the given index.
|
|
113
|
+
*
|
|
114
|
+
* @param index the replica to read from
|
|
115
|
+
* @param options the custom options
|
|
116
|
+
* @return the strategy to pass to @ref collection#get_replica()
|
|
117
|
+
*
|
|
118
|
+
* @since 1.5.0
|
|
119
|
+
* @committed
|
|
120
|
+
*/
|
|
121
|
+
[[nodiscard]] static auto from_index(replica_index index,
|
|
122
|
+
const get_replica_strategy_from_index_options& options = {})
|
|
123
|
+
-> get_replica_strategy
|
|
124
|
+
{
|
|
125
|
+
return get_replica_strategy{ static_cast<std::size_t>(index), options.build() };
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Immutable value object representing a consistent strategy.
|
|
130
|
+
*
|
|
131
|
+
* @since 1.5.0
|
|
132
|
+
* @internal
|
|
133
|
+
*/
|
|
134
|
+
struct built {
|
|
135
|
+
std::size_t replica_index;
|
|
136
|
+
bool wrap;
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Returns the strategy as an immutable value.
|
|
141
|
+
*
|
|
142
|
+
* @return the strategy as an immutable value
|
|
143
|
+
*
|
|
144
|
+
* @since 1.5.0
|
|
145
|
+
* @internal
|
|
146
|
+
*/
|
|
147
|
+
[[nodiscard]] auto build() const -> built
|
|
148
|
+
{
|
|
149
|
+
return built_;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
private:
|
|
153
|
+
get_replica_strategy(std::size_t index,
|
|
154
|
+
const get_replica_strategy_from_index_options::built& options)
|
|
155
|
+
: built_{ index, options.wrap }
|
|
156
|
+
{
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
built built_;
|
|
160
|
+
};
|
|
161
|
+
} // namespace couchbase
|
|
@@ -56,6 +56,7 @@ public:
|
|
|
56
56
|
* @param cas
|
|
57
57
|
* @param value raw document contents along with flags describing its structure
|
|
58
58
|
* @param expiry_time optional point in time when the document will expire
|
|
59
|
+
* @param crypto_manager manager handed to the transcoder to decrypt encrypted fields
|
|
59
60
|
*
|
|
60
61
|
* @since 1.0.0
|
|
61
62
|
* @committed
|
|
@@ -69,7 +69,7 @@ struct increment_options : public common_durability_options<increment_options> {
|
|
|
69
69
|
* Sets the expiry for the document. By default the document will never expire.
|
|
70
70
|
*
|
|
71
71
|
* The duration must be less than 50 years. For expiry further in the future, use
|
|
72
|
-
* {@link #expiry(std::chrono::system_clock::time_point)}.
|
|
72
|
+
* {@link #expiry expiry(std::chrono::system_clock::time_point)}.
|
|
73
73
|
*
|
|
74
74
|
* @param duration the duration after which the document will expire (zero duration means never
|
|
75
75
|
* expire).
|
|
@@ -70,7 +70,7 @@ struct insert_options : public common_durability_options<insert_options> {
|
|
|
70
70
|
* Sets the expiry for the document. By default the document will never expire.
|
|
71
71
|
*
|
|
72
72
|
* The duration must be less than 50 years. For expiry further in the future, use
|
|
73
|
-
* {@link #expiry(std::chrono::system_clock::time_point)}.
|
|
73
|
+
* {@link #expiry expiry(std::chrono::system_clock::time_point)}.
|
|
74
74
|
*
|
|
75
75
|
* @param duration the duration after which the document will expire (zero duration means never
|
|
76
76
|
* expire).
|
|
@@ -39,7 +39,7 @@ namespace couchbase
|
|
|
39
39
|
* Following this processing, the tokens `"locat"` and
|
|
40
40
|
* `"function"` are recognized as common to both input and target; and also as being both in the
|
|
41
41
|
* same sequence as, and at the same distance from one another; and therefore a match is made.
|
|
42
|
-
* @snippet{trimleft}
|
|
42
|
+
* @snippet{trimleft} unit/management/search.cxx search-match-phrase
|
|
43
43
|
*
|
|
44
44
|
* @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-match-phrase.html
|
|
45
45
|
*
|
|
@@ -33,7 +33,7 @@ namespace couchbase
|
|
|
33
33
|
*
|
|
34
34
|
* Match documents with both `"location"` and `"hostel"` terms in the field `reviews.content`,
|
|
35
35
|
* ensuring common prefix length `4`, maximum fuzziness and select standard analyzer.
|
|
36
|
-
* @snippet{trimleft}
|
|
36
|
+
* @snippet{trimleft} unit/management/search.cxx search-match
|
|
37
37
|
*
|
|
38
38
|
* @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-match.html server
|
|
39
39
|
* documentation
|
|
@@ -80,8 +80,8 @@ struct mutate_in_options : public common_durability_options<mutate_in_options> {
|
|
|
80
80
|
*
|
|
81
81
|
* If true, and the document exists, its expiry will not be modified. Otherwise the document's
|
|
82
82
|
* expiry is determined by
|
|
83
|
-
* {@link #expiry(std::chrono::seconds)} or {@link
|
|
84
|
-
*
|
|
83
|
+
* {@link #expiry expiry(std::chrono::seconds)} or {@link #expiry
|
|
84
|
+
* expiry(std::chrono::system_clock::time_point)}.
|
|
85
85
|
*
|
|
86
86
|
* Requires Couchbase Server 7.0 or later.
|
|
87
87
|
*
|
|
@@ -101,7 +101,7 @@ struct mutate_in_options : public common_durability_options<mutate_in_options> {
|
|
|
101
101
|
* Sets the expiry for the document. By default the document will never expire.
|
|
102
102
|
*
|
|
103
103
|
* The duration must be less than 50 years. For expiry further in the future, use
|
|
104
|
-
* {@link #expiry(std::chrono::system_clock::time_point)}.
|
|
104
|
+
* {@link #expiry expiry(std::chrono::system_clock::time_point)}.
|
|
105
105
|
*
|
|
106
106
|
* @param duration the duration after which the document will expire (zero duration means never
|
|
107
107
|
* expire).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
2
|
/*
|
|
3
|
-
* Copyright
|
|
3
|
+
* Copyright 2026-Present Couchbase, Inc.
|
|
4
4
|
*
|
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
6
|
* you may not use this file except in compliance with the License.
|
|
@@ -25,13 +25,13 @@ namespace couchbase
|
|
|
25
25
|
{
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
|
-
*
|
|
28
|
+
* @brief Identifies a cluster node.
|
|
29
29
|
*
|
|
30
30
|
* On Couchbase Server 8.0.1+ the identifier is the server-assigned node UUID.
|
|
31
31
|
* On older releases, a stable opaque token is derived from the node's hostname
|
|
32
|
-
* and
|
|
32
|
+
* and KV port.
|
|
33
33
|
*
|
|
34
|
-
* The type is equality-comparable, ordered, and hashable.
|
|
34
|
+
* The type is equality-comparable, totally ordered, and hashable.
|
|
35
35
|
*
|
|
36
36
|
* @since 1.3.2
|
|
37
37
|
* @uncommitted
|
|
@@ -42,23 +42,33 @@ public:
|
|
|
42
42
|
/**
|
|
43
43
|
* Creates an empty (invalid) node_id.
|
|
44
44
|
*
|
|
45
|
+
* @see operator bool()
|
|
46
|
+
*
|
|
45
47
|
* @since 1.3.2
|
|
46
48
|
* @uncommitted
|
|
47
49
|
*/
|
|
48
50
|
node_id() = default;
|
|
49
51
|
|
|
52
|
+
// Copy and move are noexcept: all members (std::string + std::uint16_t)
|
|
53
|
+
// have noexcept moves on every conforming implementation.
|
|
54
|
+
node_id(const node_id&) = default;
|
|
55
|
+
node_id(node_id&&) noexcept = default;
|
|
56
|
+
auto operator=(const node_id&) -> node_id& = default;
|
|
57
|
+
auto operator=(node_id&&) noexcept -> node_id& = default;
|
|
58
|
+
~node_id() = default;
|
|
59
|
+
|
|
50
60
|
/**
|
|
51
61
|
* User-facing identifier string.
|
|
52
62
|
*
|
|
53
63
|
* Returns node_uuid when the server provides one, otherwise a stable
|
|
54
|
-
* hex-encoded hash derived from hostname and
|
|
64
|
+
* hex-encoded hash derived from hostname and KV port.
|
|
55
65
|
*
|
|
56
66
|
* @return opaque identifier string (empty for default-constructed instances)
|
|
57
67
|
*
|
|
58
68
|
* @since 1.3.2
|
|
59
69
|
* @uncommitted
|
|
60
70
|
*/
|
|
61
|
-
[[nodiscard]] auto id() const -> const std::string&;
|
|
71
|
+
[[nodiscard]] auto id() const noexcept -> const std::string&;
|
|
62
72
|
|
|
63
73
|
/**
|
|
64
74
|
* The server-assigned node UUID (empty on servers before 8.0.1).
|
|
@@ -66,7 +76,7 @@ public:
|
|
|
66
76
|
* @since 1.3.2
|
|
67
77
|
* @uncommitted
|
|
68
78
|
*/
|
|
69
|
-
[[nodiscard]] auto node_uuid() const -> const std::string&;
|
|
79
|
+
[[nodiscard]] auto node_uuid() const noexcept -> const std::string&;
|
|
70
80
|
|
|
71
81
|
/**
|
|
72
82
|
* The hostname of the node.
|
|
@@ -74,18 +84,20 @@ public:
|
|
|
74
84
|
* @since 1.3.2
|
|
75
85
|
* @uncommitted
|
|
76
86
|
*/
|
|
77
|
-
[[nodiscard]] auto hostname() const -> const std::string&;
|
|
87
|
+
[[nodiscard]] auto hostname() const noexcept -> const std::string&;
|
|
78
88
|
|
|
79
89
|
/**
|
|
80
90
|
* The port of the node's key-value service.
|
|
81
91
|
*
|
|
82
92
|
* This reflects the port actually used by the client: the TLS port when the
|
|
83
|
-
* cluster connection is TLS-enabled, otherwise the plain port.
|
|
93
|
+
* cluster connection is TLS-enabled, otherwise the plain port. A value of
|
|
94
|
+
* @c 0 indicates the port is unknown or the node is not bound; in that case
|
|
95
|
+
* @c operator @c bool() also returns @c false.
|
|
84
96
|
*
|
|
85
97
|
* @since 1.3.2
|
|
86
98
|
* @uncommitted
|
|
87
99
|
*/
|
|
88
|
-
[[nodiscard]] auto port() const -> std::uint16_t;
|
|
100
|
+
[[nodiscard]] auto port() const noexcept -> std::uint16_t;
|
|
89
101
|
|
|
90
102
|
/**
|
|
91
103
|
* Returns true when the node_id was properly initialized (not default-constructed).
|
|
@@ -93,13 +105,25 @@ public:
|
|
|
93
105
|
* @since 1.3.2
|
|
94
106
|
* @uncommitted
|
|
95
107
|
*/
|
|
96
|
-
explicit operator bool() const;
|
|
108
|
+
[[nodiscard]] explicit operator bool() const noexcept;
|
|
97
109
|
|
|
98
|
-
|
|
99
|
-
auto operator
|
|
100
|
-
|
|
110
|
+
/** @since 1.3.2 @uncommitted */
|
|
111
|
+
[[nodiscard]] auto operator==(const node_id& other) const noexcept -> bool;
|
|
112
|
+
/** @since 1.3.2 @uncommitted */
|
|
113
|
+
[[nodiscard]] auto operator!=(const node_id& other) const noexcept -> bool;
|
|
114
|
+
/** @since 1.3.2 @uncommitted */
|
|
115
|
+
[[nodiscard]] auto operator<(const node_id& other) const noexcept -> bool;
|
|
116
|
+
/** @since 1.3.2 @uncommitted */
|
|
117
|
+
[[nodiscard]] auto operator<=(const node_id& other) const noexcept -> bool;
|
|
118
|
+
/** @since 1.3.2 @uncommitted */
|
|
119
|
+
[[nodiscard]] auto operator>(const node_id& other) const noexcept -> bool;
|
|
120
|
+
/** @since 1.3.2 @uncommitted */
|
|
121
|
+
[[nodiscard]] auto operator>=(const node_id& other) const noexcept -> bool;
|
|
101
122
|
|
|
102
123
|
private:
|
|
124
|
+
// Construction from core-level data is restricted to internal_node_id,
|
|
125
|
+
// declared in core/impl/node_id.hxx. Public users cannot construct node_id
|
|
126
|
+
// directly.
|
|
103
127
|
friend class internal_node_id;
|
|
104
128
|
|
|
105
129
|
node_id(std::string node_uuid, std::string hostname, std::uint16_t port);
|
|
@@ -116,6 +140,10 @@ private:
|
|
|
116
140
|
|
|
117
141
|
template<>
|
|
118
142
|
struct std::hash<couchbase::node_id> {
|
|
143
|
+
// Hashes the full id_ string. For the fallback case id_ is 8 hex chars;
|
|
144
|
+
// for a server-assigned UUID it is typically 32-36 chars. The cost is well
|
|
145
|
+
// under 100ns per lookup and not on a critical path; if profiling shows
|
|
146
|
+
// otherwise, cache the hash on node_id and return it from a friend accessor.
|
|
119
147
|
auto operator()(const couchbase::node_id& nid) const noexcept -> std::size_t
|
|
120
148
|
{
|
|
121
149
|
return std::hash<std::string>{}(nid.id());
|
|
@@ -27,7 +27,7 @@ namespace couchbase
|
|
|
27
27
|
{
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
|
-
* Options for @ref collection
|
|
30
|
+
* Options for @ref couchbase::collection::node_id_for().
|
|
31
31
|
*
|
|
32
32
|
* @since 1.3.2
|
|
33
33
|
* @uncommitted
|
|
@@ -56,6 +56,12 @@ struct node_id_for_options : public common_options<node_id_for_options> {
|
|
|
56
56
|
}
|
|
57
57
|
};
|
|
58
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Handler signature for @ref couchbase::collection::node_id_for().
|
|
61
|
+
*
|
|
62
|
+
* @since 1.3.2
|
|
63
|
+
* @uncommitted
|
|
64
|
+
*/
|
|
59
65
|
using node_id_for_handler = std::function<void(error, node_id)>;
|
|
60
66
|
|
|
61
67
|
} // namespace couchbase
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
2
|
/*
|
|
3
|
-
* Copyright
|
|
3
|
+
* Copyright 2026-Present Couchbase, Inc.
|
|
4
4
|
*
|
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
6
|
* you may not use this file except in compliance with the License.
|
|
@@ -28,7 +28,7 @@ namespace couchbase
|
|
|
28
28
|
{
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
|
-
* Options for @ref collection
|
|
31
|
+
* Options for @ref couchbase::collection::node_ids().
|
|
32
32
|
*
|
|
33
33
|
* @since 1.3.2
|
|
34
34
|
* @uncommitted
|
|
@@ -57,6 +57,12 @@ struct node_ids_options : public common_options<node_ids_options> {
|
|
|
57
57
|
}
|
|
58
58
|
};
|
|
59
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Handler signature for @ref couchbase::collection::node_ids().
|
|
62
|
+
*
|
|
63
|
+
* @since 1.3.2
|
|
64
|
+
* @uncommitted
|
|
65
|
+
*/
|
|
60
66
|
using node_ids_handler = std::function<void(error, std::vector<node_id>)>;
|
|
61
67
|
|
|
62
68
|
} // namespace couchbase
|
|
@@ -34,7 +34,7 @@ namespace couchbase
|
|
|
34
34
|
*
|
|
35
35
|
* Match documents where field `id` contains numbers in the range `(100, 1000)`:
|
|
36
36
|
*
|
|
37
|
-
* @snippet{trimleft}
|
|
37
|
+
* @snippet{trimleft} unit/management/search.cxx search-numeric-range
|
|
38
38
|
*
|
|
39
39
|
* @since 1.0.0
|
|
40
40
|
* @committed
|
|
@@ -34,7 +34,7 @@ namespace couchbase
|
|
|
34
34
|
* @ref match_phrase_query should usually be preferred for real-world use cases.
|
|
35
35
|
*
|
|
36
36
|
* Match documents with terms `"nice"` and `"view"` in field `reviews.content`:
|
|
37
|
-
* @snippet{trimleft}
|
|
37
|
+
* @snippet{trimleft} unit/management/search.cxx search-phrase
|
|
38
38
|
*
|
|
39
39
|
* @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-phrase.html server
|
|
40
40
|
* documentation
|
|
@@ -30,7 +30,7 @@ namespace couchbase
|
|
|
30
30
|
* @ref match_query.
|
|
31
31
|
*
|
|
32
32
|
* Match documents where field `reviews.content` contains words starting with `"inter"`:
|
|
33
|
-
* @snippet{trimleft}
|
|
33
|
+
* @snippet{trimleft} unit/management/search.cxx search-prefix
|
|
34
34
|
*
|
|
35
35
|
* @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-prefix-query.html server
|
|
36
36
|
* documentation
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
#include <couchbase/query_profile.hxx>
|
|
24
24
|
#include <couchbase/query_result.hxx>
|
|
25
25
|
#include <couchbase/query_scan_consistency.hxx>
|
|
26
|
+
#include <couchbase/query_stream_result.hxx>
|
|
26
27
|
|
|
27
28
|
#include <chrono>
|
|
28
29
|
#include <functional>
|
|
@@ -136,8 +137,9 @@ struct query_options : public common_options<query_options> {
|
|
|
136
137
|
*
|
|
137
138
|
* If this method is set to true, the server will send metrics back to the client which are
|
|
138
139
|
* available through the
|
|
139
|
-
* {@link query_meta_data#metrics()} section. As opposed to {@link #profile
|
|
140
|
-
* returning metrics is rather cheap and can also be enabled in
|
|
140
|
+
* {@link query_meta_data#metrics()} section. As opposed to {@link #profile
|
|
141
|
+
* profile(query_profile)}, returning metrics is rather cheap and can also be enabled in
|
|
142
|
+
* production if needed.
|
|
141
143
|
*
|
|
142
144
|
* @param metrics set to true if the server should return simple query metrics.
|
|
143
145
|
* @return this options builder for chaining purposes.
|
|
@@ -384,10 +386,11 @@ struct query_options : public common_options<query_options> {
|
|
|
384
386
|
* mutations. If you want to include all the mutations up to the point of the query, use {@link
|
|
385
387
|
* query_scan_consistency::request_plus}.
|
|
386
388
|
*
|
|
387
|
-
* Note that you cannot use this method and {@link #consistent_with(const
|
|
388
|
-
* same time, since they are mutually exclusive. As a rule of thumb, if
|
|
389
|
-
* consistent with the mutation you just wrote on the same thread/app, use
|
|
390
|
-
* {@link #consistent_with(const mutation_state&)}. If you need "global" scan
|
|
389
|
+
* Note that you cannot use this method and {@link #consistent_with consistent_with(const
|
|
390
|
+
* mutation_state&)} at the same time, since they are mutually exclusive. As a rule of thumb, if
|
|
391
|
+
* you only care to be consistent with the mutation you just wrote on the same thread/app, use
|
|
392
|
+
* {@link #consistent_with consistent_with(const mutation_state&)}. If you need "global" scan
|
|
393
|
+
* consistency, use
|
|
391
394
|
* {@link query_scan_consistency::request_plus} on this method.
|
|
392
395
|
*
|
|
393
396
|
* @param scan_consistency the index scan consistency to be used for this query
|
|
@@ -410,12 +413,12 @@ struct query_options : public common_options<query_options> {
|
|
|
410
413
|
* and if you want your N1QL query to include those you need to pass the mutation tokens into a
|
|
411
414
|
* {@link mutation_state}.
|
|
412
415
|
*
|
|
413
|
-
* Note that you cannot use this method and {@link #scan_consistency
|
|
414
|
-
* the same time, since they are mutually exclusive.
|
|
415
|
-
* consistent with the mutation you just wrote on the
|
|
416
|
-
* need "global" scan consistency, use
|
|
417
|
-
* {@link query_scan_consistency#request_plus} on {@link
|
|
418
|
-
*
|
|
416
|
+
* Note that you cannot use this method and {@link #scan_consistency
|
|
417
|
+
* scan_consistency(query_scan_consistency)} at the same time, since they are mutually exclusive.
|
|
418
|
+
* As a rule of thumb, if you only care to be consistent with the mutation you just wrote on the
|
|
419
|
+
* same thread/app, use this method. If you need "global" scan consistency, use
|
|
420
|
+
* {@link query_scan_consistency#request_plus} on {@link #scan_consistency
|
|
421
|
+
* scan_consistency(query_scan_consistency)}.
|
|
419
422
|
*
|
|
420
423
|
* @param state the mutation state containing the mutation tokens.
|
|
421
424
|
* @return this options builder for chaining purposes.
|
|
@@ -675,4 +678,12 @@ private:
|
|
|
675
678
|
* @uncommitted
|
|
676
679
|
*/
|
|
677
680
|
using query_handler = std::function<void(error, query_result)>;
|
|
681
|
+
|
|
682
|
+
/**
|
|
683
|
+
* The signature for the handler of a streaming query operation.
|
|
684
|
+
*
|
|
685
|
+
* @since 1.4.0
|
|
686
|
+
* @volatile
|
|
687
|
+
*/
|
|
688
|
+
using query_stream_handler = std::function<void(error, query_stream_result)>;
|
|
678
689
|
} // namespace couchbase
|