couchbase 3.4.2 → 3.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/ext/couchbase/CMakeLists.txt +71 -7
- data/ext/couchbase/cmake/Documentation.cmake +0 -1
- data/ext/couchbase/cmake/OpenSSL.cmake +98 -3
- data/ext/couchbase/cmake/Testing.cmake +12 -4
- data/ext/couchbase/cmake/build_config.hxx.in +3 -0
- data/ext/couchbase/core/bucket.cxx +183 -151
- data/ext/couchbase/core/bucket.hxx +23 -1
- data/ext/couchbase/core/cluster.hxx +51 -13
- data/ext/couchbase/core/cluster_options.cxx +2 -2
- data/ext/couchbase/core/cluster_options.hxx +7 -6
- data/ext/couchbase/core/cluster_options_fwd.hxx +26 -0
- data/ext/couchbase/core/config_profile.hxx +1 -54
- data/ext/couchbase/core/config_profiles.cxx +79 -0
- data/ext/couchbase/core/config_profiles.hxx +56 -0
- data/ext/couchbase/core/crud_component.cxx +51 -22
- data/ext/couchbase/core/error_context/key_value.cxx +2 -1
- data/ext/couchbase/core/error_context/key_value.hxx +10 -12
- data/ext/couchbase/core/error_context/search.hxx +1 -1
- data/ext/couchbase/core/impl/analytics.cxx +1 -0
- data/ext/couchbase/core/impl/boolean_field_query.cxx +40 -0
- data/ext/couchbase/core/impl/boolean_query.cxx +62 -0
- data/ext/couchbase/core/impl/build_deferred_query_indexes.cxx +115 -50
- data/ext/couchbase/core/impl/cluster.cxx +8 -0
- data/ext/couchbase/core/impl/conjunction_query.cxx +51 -0
- data/ext/couchbase/core/impl/create_bucket.cxx +155 -0
- data/ext/couchbase/core/impl/create_query_index.cxx +172 -59
- data/ext/couchbase/core/impl/date_range.cxx +89 -0
- data/ext/couchbase/core/impl/date_range_facet.cxx +54 -0
- data/ext/couchbase/core/impl/date_range_facet_result.cxx +64 -0
- data/ext/couchbase/core/impl/date_range_query.cxx +125 -0
- data/ext/couchbase/core/impl/disjunction_query.cxx +51 -0
- data/ext/couchbase/core/impl/dns_srv_tracker.cxx +2 -1
- data/ext/couchbase/core/impl/drop_bucket.cxx +66 -0
- data/ext/couchbase/core/impl/drop_query_index.cxx +138 -59
- data/ext/couchbase/core/impl/encoded_search_facet.hxx +29 -0
- data/ext/couchbase/core/impl/encoded_search_query.hxx +29 -0
- data/ext/couchbase/core/impl/encoded_search_sort.hxx +29 -0
- data/ext/couchbase/core/impl/flush_bucket.cxx +66 -0
- data/ext/couchbase/core/impl/geo_bounding_box_query.cxx +46 -0
- data/ext/couchbase/core/impl/geo_distance_query.cxx +43 -0
- data/ext/couchbase/core/impl/geo_polygon_query.cxx +46 -0
- data/ext/couchbase/core/impl/get_all_buckets.cxx +163 -0
- data/ext/couchbase/core/impl/get_all_query_indexes.cxx +67 -37
- data/ext/couchbase/core/impl/get_bucket.cxx +153 -0
- data/ext/couchbase/core/impl/internal_date_range_facet_result.cxx +80 -0
- data/ext/couchbase/core/impl/internal_date_range_facet_result.hxx +48 -0
- data/ext/couchbase/core/impl/internal_manager_error_context.cxx +113 -0
- data/ext/couchbase/core/impl/internal_manager_error_context.hxx +60 -0
- data/ext/couchbase/core/impl/internal_numeric_range_facet_result.cxx +80 -0
- data/ext/couchbase/core/impl/internal_numeric_range_facet_result.hxx +48 -0
- data/ext/couchbase/core/impl/internal_search_error_context.cxx +141 -0
- data/ext/couchbase/core/impl/internal_search_error_context.hxx +61 -0
- data/ext/couchbase/core/impl/internal_search_meta_data.cxx +60 -0
- data/ext/couchbase/core/impl/internal_search_meta_data.hxx +41 -0
- data/ext/couchbase/core/impl/internal_search_result.cxx +84 -0
- data/ext/couchbase/core/impl/internal_search_result.hxx +43 -0
- data/ext/couchbase/core/impl/internal_search_row.cxx +82 -0
- data/ext/couchbase/core/impl/internal_search_row.hxx +56 -0
- data/ext/couchbase/core/impl/internal_search_row_location.hxx +32 -0
- data/ext/couchbase/core/impl/internal_search_row_locations.cxx +137 -0
- data/ext/couchbase/core/impl/internal_search_row_locations.hxx +45 -0
- data/ext/couchbase/core/impl/internal_term_facet_result.cxx +80 -0
- data/ext/couchbase/core/impl/internal_term_facet_result.hxx +48 -0
- data/ext/couchbase/core/impl/key_value_error_category.cxx +2 -4
- data/ext/couchbase/core/impl/key_value_error_context.cxx +98 -0
- data/ext/couchbase/core/impl/lookup_in.cxx +1 -0
- data/ext/couchbase/core/impl/lookup_in_all_replicas.cxx +176 -0
- data/ext/couchbase/core/impl/lookup_in_all_replicas.hxx +80 -0
- data/ext/couchbase/core/impl/lookup_in_any_replica.cxx +167 -0
- data/ext/couchbase/core/impl/lookup_in_any_replica.hxx +75 -0
- data/ext/couchbase/core/impl/lookup_in_replica.cxx +97 -0
- data/ext/couchbase/core/impl/lookup_in_replica.hxx +67 -0
- data/ext/couchbase/core/impl/manager_error_context.cxx +100 -0
- data/ext/couchbase/core/impl/match_all_query.cxx +35 -0
- data/ext/couchbase/core/impl/match_none_query.cxx +35 -0
- data/ext/couchbase/core/impl/match_phrase_query.cxx +43 -0
- data/ext/couchbase/core/impl/match_query.cxx +59 -0
- data/ext/couchbase/core/impl/numeric_range.cxx +49 -0
- data/ext/couchbase/core/impl/numeric_range_facet.cxx +54 -0
- data/ext/couchbase/core/impl/numeric_range_facet_result.cxx +64 -0
- data/ext/couchbase/core/impl/numeric_range_query.cxx +56 -0
- data/ext/couchbase/core/impl/phrase_query.cxx +42 -0
- data/ext/couchbase/core/impl/prefix_query.cxx +40 -0
- data/ext/couchbase/core/impl/query.cxx +1 -0
- data/ext/couchbase/core/impl/query_error_context.cxx +75 -0
- data/ext/couchbase/core/impl/query_string_query.cxx +37 -0
- data/ext/couchbase/core/impl/regexp_query.cxx +40 -0
- data/ext/couchbase/core/impl/search.cxx +191 -0
- data/ext/couchbase/core/impl/search_error_context.cxx +147 -0
- data/ext/couchbase/core/impl/search_meta_data.cxx +46 -0
- data/ext/couchbase/core/impl/search_result.cxx +66 -0
- data/ext/couchbase/core/impl/search_row.cxx +74 -0
- data/ext/couchbase/core/impl/search_row_location.cxx +64 -0
- data/ext/couchbase/core/impl/search_row_locations.cxx +66 -0
- data/ext/couchbase/core/impl/search_sort_field.cxx +104 -0
- data/ext/couchbase/core/impl/search_sort_id.cxx +43 -0
- data/ext/couchbase/core/impl/search_sort_score.cxx +43 -0
- data/ext/couchbase/core/impl/term_facet.cxx +36 -0
- data/ext/couchbase/core/impl/term_facet_result.cxx +64 -0
- data/ext/couchbase/core/impl/term_query.cxx +56 -0
- data/ext/couchbase/core/impl/term_range_query.cxx +57 -0
- data/ext/couchbase/core/impl/update_bucket.cxx +130 -0
- data/ext/couchbase/core/impl/watch_query_indexes.cxx +53 -29
- data/ext/couchbase/core/impl/wildcard_query.cxx +40 -0
- data/ext/couchbase/core/io/dns_client.cxx +111 -40
- data/ext/couchbase/core/io/dns_config.cxx +5 -4
- data/ext/couchbase/core/io/http_context.hxx +1 -1
- data/ext/couchbase/core/io/http_session.hxx +34 -1
- data/ext/couchbase/core/io/http_session_manager.hxx +5 -3
- data/ext/couchbase/core/io/mcbp_command.hxx +9 -2
- data/ext/couchbase/core/io/mcbp_session.cxx +106 -42
- data/ext/couchbase/core/io/mcbp_session.hxx +4 -3
- data/ext/couchbase/core/io/retry_orchestrator.hxx +3 -2
- data/ext/couchbase/core/json_string.hxx +5 -0
- data/ext/couchbase/core/logger/custom_rotating_file_sink.cxx +1 -1
- data/ext/couchbase/core/logger/logger.cxx +80 -20
- data/ext/couchbase/core/logger/logger.hxx +31 -0
- data/ext/couchbase/core/meta/features.hxx +25 -0
- data/ext/couchbase/core/meta/version.cxx +18 -4
- data/ext/couchbase/core/mozilla_ca_bundle.hxx +39 -0
- data/ext/couchbase/core/operations/document_analytics.cxx +1 -0
- data/ext/couchbase/core/operations/document_analytics.hxx +1 -0
- data/ext/couchbase/core/operations/document_append.hxx +1 -1
- data/ext/couchbase/core/operations/document_decrement.hxx +1 -1
- data/ext/couchbase/core/operations/document_exists.hxx +1 -1
- data/ext/couchbase/core/operations/document_get.hxx +1 -1
- data/ext/couchbase/core/operations/document_get_and_lock.hxx +1 -1
- data/ext/couchbase/core/operations/document_get_and_touch.hxx +1 -1
- data/ext/couchbase/core/operations/document_get_projected.hxx +1 -1
- data/ext/couchbase/core/operations/document_increment.hxx +1 -1
- data/ext/couchbase/core/operations/document_insert.hxx +1 -1
- data/ext/couchbase/core/operations/document_lookup_in.hxx +1 -1
- data/ext/couchbase/core/operations/document_lookup_in_all_replicas.hxx +192 -0
- data/ext/couchbase/core/operations/document_lookup_in_any_replica.hxx +188 -0
- data/ext/couchbase/core/operations/document_mutate_in.hxx +1 -1
- data/ext/couchbase/core/operations/document_prepend.hxx +1 -1
- data/ext/couchbase/core/operations/document_query.cxx +13 -0
- data/ext/couchbase/core/operations/document_query.hxx +7 -0
- data/ext/couchbase/core/operations/document_remove.hxx +1 -1
- data/ext/couchbase/core/operations/document_replace.hxx +1 -1
- data/ext/couchbase/core/operations/document_search.cxx +4 -1
- data/ext/couchbase/core/operations/document_search.hxx +2 -1
- data/ext/couchbase/core/operations/document_touch.hxx +1 -1
- data/ext/couchbase/core/operations/document_unlock.hxx +1 -1
- data/ext/couchbase/core/operations/document_upsert.hxx +1 -1
- data/ext/couchbase/core/operations/document_view.hxx +1 -0
- data/ext/couchbase/core/operations.hxx +2 -0
- data/ext/couchbase/core/origin.cxx +270 -0
- data/ext/couchbase/core/origin.hxx +2 -0
- data/ext/couchbase/core/protocol/client_request.hxx +11 -2
- data/ext/couchbase/core/protocol/client_response.hxx +1 -0
- data/ext/couchbase/core/protocol/cmd_hello.hxx +1 -0
- data/ext/couchbase/core/protocol/cmd_lookup_in_replica.cxx +107 -0
- data/ext/couchbase/core/protocol/cmd_lookup_in_replica.hxx +137 -0
- data/ext/couchbase/core/protocol/hello_feature.hxx +6 -0
- data/ext/couchbase/core/protocol/hello_feature_fmt.hxx +3 -0
- data/ext/couchbase/core/protocol/status.cxx +2 -2
- data/ext/couchbase/core/public_fwd.hxx +21 -0
- data/ext/couchbase/core/range_scan_options.cxx +3 -27
- data/ext/couchbase/core/range_scan_options.hxx +13 -17
- data/ext/couchbase/core/range_scan_orchestrator.cxx +388 -170
- data/ext/couchbase/core/range_scan_orchestrator.hxx +13 -2
- data/ext/couchbase/core/range_scan_orchestrator_options.hxx +5 -3
- data/ext/couchbase/core/scan_options.hxx +0 -19
- data/ext/couchbase/core/scan_result.cxx +19 -5
- data/ext/couchbase/core/scan_result.hxx +5 -2
- data/ext/couchbase/core/timeout_defaults.hxx +2 -3
- data/ext/couchbase/core/tls_verify_mode.hxx +26 -0
- data/ext/couchbase/core/topology/capabilities.hxx +3 -0
- data/ext/couchbase/core/topology/capabilities_fmt.hxx +8 -0
- data/ext/couchbase/core/topology/collections_manifest_fmt.hxx +1 -1
- data/ext/couchbase/core/topology/configuration.cxx +15 -2
- data/ext/couchbase/core/topology/configuration.hxx +20 -1
- data/ext/couchbase/core/topology/configuration_json.hxx +6 -1
- data/ext/couchbase/core/transactions/attempt_context_testing_hooks.cxx +93 -0
- data/ext/couchbase/core/transactions/attempt_context_testing_hooks.hxx +48 -75
- data/ext/couchbase/core/transactions/cleanup_testing_hooks.cxx +52 -0
- data/ext/couchbase/core/transactions/cleanup_testing_hooks.hxx +17 -31
- data/ext/couchbase/core/transactions/exceptions.hxx +12 -9
- data/ext/couchbase/core/utils/connection_string.cxx +75 -43
- data/ext/couchbase/core/utils/connection_string.hxx +1 -0
- data/ext/couchbase/core/utils/json.cxx +4 -1
- data/ext/couchbase/couchbase/analytics_error_context.hxx +1 -1
- data/ext/couchbase/couchbase/behavior_options.hxx +27 -1
- data/ext/couchbase/couchbase/boolean_field_query.hxx +77 -0
- data/ext/couchbase/couchbase/boolean_query.hxx +223 -0
- data/ext/couchbase/couchbase/bucket_manager.hxx +135 -0
- data/ext/couchbase/couchbase/build_query_index_options.hxx +0 -30
- data/ext/couchbase/couchbase/cluster.hxx +56 -1
- data/ext/couchbase/couchbase/collection.hxx +111 -0
- data/ext/couchbase/couchbase/collection_query_index_manager.hxx +7 -48
- data/ext/couchbase/couchbase/conjunction_query.hxx +88 -0
- data/ext/couchbase/couchbase/create_bucket_options.hxx +41 -0
- data/ext/couchbase/couchbase/create_primary_query_index_options.hxx +0 -29
- data/ext/couchbase/couchbase/create_query_index_options.hxx +0 -33
- data/ext/couchbase/couchbase/date_range.hxx +69 -0
- data/ext/couchbase/couchbase/date_range_facet.hxx +56 -0
- data/ext/couchbase/couchbase/date_range_facet_result.hxx +55 -0
- data/ext/couchbase/couchbase/date_range_query.hxx +265 -0
- data/ext/couchbase/couchbase/disjunction_query.hxx +109 -0
- data/ext/couchbase/couchbase/doc_id_query.hxx +111 -0
- data/ext/couchbase/couchbase/drop_bucket_options.hxx +41 -0
- data/ext/couchbase/couchbase/drop_primary_query_index_options.hxx +0 -30
- data/ext/couchbase/couchbase/drop_query_index_options.hxx +0 -31
- data/ext/couchbase/couchbase/error_codes.hxx +1 -2
- data/ext/couchbase/couchbase/error_context.hxx +17 -8
- data/ext/couchbase/couchbase/flush_bucket_options.hxx +41 -0
- data/ext/couchbase/couchbase/fmt/analytics_scan_consistency.hxx +52 -0
- data/ext/couchbase/{core/topology/error_map_fmt.hxx → couchbase/fmt/key_value_error_map_attribute.hxx} +21 -21
- data/ext/couchbase/couchbase/fmt/search_scan_consistency.hxx +49 -0
- data/ext/couchbase/couchbase/geo_bounding_box_query.hxx +107 -0
- data/ext/couchbase/couchbase/geo_distance_query.hxx +109 -0
- data/ext/couchbase/couchbase/geo_point.hxx +32 -0
- data/ext/couchbase/couchbase/geo_polygon_query.hxx +85 -0
- data/ext/couchbase/couchbase/get_all_buckets_options.hxx +44 -0
- data/ext/couchbase/couchbase/get_all_query_indexes_options.hxx +0 -30
- data/ext/couchbase/couchbase/get_and_lock_options.hxx +2 -2
- data/ext/couchbase/couchbase/get_and_touch_options.hxx +2 -2
- data/ext/couchbase/couchbase/get_bucket_options.hxx +43 -0
- data/ext/couchbase/couchbase/get_options.hxx +2 -2
- data/ext/couchbase/couchbase/highlight_style.hxx +45 -0
- data/ext/couchbase/couchbase/insert_options.hxx +3 -3
- data/ext/couchbase/couchbase/key_value_error_context.hxx +7 -2
- data/ext/couchbase/couchbase/lookup_in_all_replicas_options.hxx +109 -0
- data/ext/couchbase/couchbase/lookup_in_any_replica_options.hxx +101 -0
- data/ext/couchbase/couchbase/lookup_in_options.hxx +2 -2
- data/ext/couchbase/couchbase/lookup_in_replica_result.hxx +74 -0
- data/ext/couchbase/couchbase/lookup_in_result.hxx +26 -0
- data/ext/couchbase/couchbase/management/bucket_settings.hxx +116 -0
- data/ext/couchbase/couchbase/manager_error_context.hxx +29 -53
- data/ext/couchbase/couchbase/match_all_query.hxx +43 -0
- data/ext/couchbase/couchbase/match_none_query.hxx +43 -0
- data/ext/couchbase/couchbase/match_operator.hxx +45 -0
- data/ext/couchbase/couchbase/match_phrase_query.hxx +108 -0
- data/ext/couchbase/couchbase/match_query.hxx +163 -0
- data/ext/couchbase/couchbase/mutate_in_options.hxx +2 -2
- data/ext/couchbase/couchbase/numeric_range.hxx +58 -0
- data/ext/couchbase/couchbase/numeric_range_facet.hxx +56 -0
- data/ext/couchbase/couchbase/numeric_range_facet_result.hxx +55 -0
- data/ext/couchbase/couchbase/numeric_range_query.hxx +143 -0
- data/ext/couchbase/couchbase/phrase_query.hxx +93 -0
- data/ext/couchbase/couchbase/prefix_query.hxx +82 -0
- data/ext/couchbase/couchbase/query_error_context.hxx +3 -1
- data/ext/couchbase/couchbase/query_index_manager.hxx +16 -83
- data/ext/couchbase/couchbase/query_options.hxx +18 -0
- data/ext/couchbase/couchbase/query_string_query.hxx +72 -0
- data/ext/couchbase/couchbase/regexp_query.hxx +82 -0
- data/ext/couchbase/couchbase/remove_options.hxx +2 -2
- data/ext/couchbase/couchbase/replace_options.hxx +3 -3
- data/ext/couchbase/couchbase/scope.hxx +40 -0
- data/ext/couchbase/couchbase/search_date_range.hxx +68 -0
- data/ext/couchbase/couchbase/search_error_context.hxx +138 -0
- data/ext/couchbase/couchbase/search_facet.hxx +60 -0
- data/ext/couchbase/couchbase/search_facet_result.hxx +50 -0
- data/ext/couchbase/couchbase/search_meta_data.hxx +85 -0
- data/ext/couchbase/couchbase/search_metrics.hxx +127 -0
- data/ext/couchbase/couchbase/search_numeric_range.hxx +69 -0
- data/ext/couchbase/couchbase/search_options.hxx +509 -0
- data/ext/couchbase/couchbase/search_query.hxx +69 -0
- data/ext/couchbase/couchbase/search_result.hxx +77 -0
- data/ext/couchbase/couchbase/search_row.hxx +104 -0
- data/ext/couchbase/couchbase/search_row_location.hxx +55 -0
- data/ext/couchbase/couchbase/search_row_locations.hxx +86 -0
- data/ext/couchbase/couchbase/search_scan_consistency.hxx +34 -0
- data/ext/couchbase/couchbase/search_sort.hxx +58 -0
- data/ext/couchbase/couchbase/search_sort_field.hxx +117 -0
- data/ext/couchbase/couchbase/search_sort_field_missing.hxx +26 -0
- data/ext/couchbase/couchbase/search_sort_field_mode.hxx +27 -0
- data/ext/couchbase/couchbase/search_sort_field_type.hxx +28 -0
- data/ext/couchbase/couchbase/search_sort_id.hxx +60 -0
- data/ext/couchbase/couchbase/search_sort_score.hxx +60 -0
- data/ext/couchbase/couchbase/search_term_range.hxx +51 -0
- data/ext/couchbase/couchbase/security_options.hxx +18 -0
- data/ext/couchbase/couchbase/subdocument_error_context.hxx +4 -2
- data/ext/couchbase/couchbase/term_facet.hxx +48 -0
- data/ext/couchbase/couchbase/term_facet_result.hxx +55 -0
- data/ext/couchbase/couchbase/term_query.hxx +151 -0
- data/ext/couchbase/couchbase/term_range_query.hxx +142 -0
- data/ext/couchbase/couchbase/touch_options.hxx +2 -2
- data/ext/couchbase/couchbase/tracing/request_span.hxx +63 -0
- data/ext/couchbase/couchbase/tracing/request_tracer.hxx +2 -40
- data/ext/couchbase/couchbase/transactions/async_attempt_context.hxx +83 -4
- data/ext/couchbase/couchbase/transactions/attempt_context.hxx +67 -0
- data/ext/couchbase/couchbase/transactions/transaction_get_result.hxx +2 -0
- data/ext/couchbase/couchbase/transactions/transaction_keyspace.hxx +11 -1
- data/ext/couchbase/couchbase/transactions/transaction_options.hxx +79 -8
- data/ext/couchbase/couchbase/transactions/transaction_query_options.hxx +128 -15
- data/ext/couchbase/couchbase/transactions/transaction_query_result.hxx +4 -0
- data/ext/couchbase/couchbase/transactions/transaction_result.hxx +1 -1
- data/ext/couchbase/couchbase/transactions/transactions_cleanup_config.hxx +5 -3
- data/ext/couchbase/couchbase/transactions/transactions_config.hxx +9 -5
- data/ext/couchbase/couchbase/transactions/transactions_query_config.hxx +6 -3
- data/ext/couchbase/couchbase/transactions.hxx +34 -1
- data/ext/couchbase/couchbase/unlock_options.hxx +2 -2
- data/ext/couchbase/couchbase/update_bucket_options.hxx +41 -0
- data/ext/couchbase/couchbase/upsert_options.hxx +3 -3
- data/ext/couchbase/couchbase/watch_query_indexes_options.hxx +0 -31
- data/ext/couchbase/couchbase/wildcard_query.hxx +83 -0
- data/ext/couchbase/test/CMakeLists.txt +8 -5
- data/ext/couchbase/test/benchmark_helper_integration.hxx +2 -2
- data/ext/couchbase/test/test_helper.hxx +5 -5
- data/ext/couchbase/test/test_integration_analytics.cxx +28 -6
- data/ext/couchbase/test/test_integration_collections.cxx +13 -3
- data/ext/couchbase/test/test_integration_connect.cxx +7 -3
- data/ext/couchbase/test/test_integration_crud.cxx +18 -3
- data/ext/couchbase/test/test_integration_diagnostics.cxx +11 -5
- data/ext/couchbase/test/test_integration_durability.cxx +12 -7
- data/ext/couchbase/test/test_integration_examples.cxx +419 -11
- data/ext/couchbase/test/test_integration_management.cxx +867 -368
- data/ext/couchbase/test/test_integration_query.cxx +87 -17
- data/ext/couchbase/test/test_integration_range_scan.cxx +363 -124
- data/ext/couchbase/test/test_integration_read_replica.cxx +48 -11
- data/ext/couchbase/test/test_integration_search.cxx +32 -3
- data/ext/couchbase/test/test_integration_subdoc.cxx +717 -11
- data/ext/couchbase/test/test_integration_tracer.cxx +5 -0
- data/ext/couchbase/test/test_integration_transcoders.cxx +13 -5
- data/ext/couchbase/test/{test_transaction_transaction_context.cxx → test_transaction_context.cxx} +1 -1
- data/ext/couchbase/test/test_transaction_examples.cxx +195 -0
- data/ext/couchbase/test/{test_transaction_transaction_public_async_api.cxx → test_transaction_public_async_api.cxx} +13 -12
- data/ext/couchbase/test/{test_transaction_transaction_public_blocking_api.cxx → test_transaction_public_blocking_api.cxx} +27 -21
- data/ext/couchbase/test/{test_transaction_transaction_simple.cxx → test_transaction_simple.cxx} +17 -5
- data/ext/couchbase/test/{test_transaction_transaction_simple_async.cxx → test_transaction_simple_async.cxx} +19 -21
- data/ext/couchbase/test/test_unit_config_profiles.cxx +1 -1
- data/ext/couchbase/test/test_unit_connection_string.cxx +29 -0
- data/ext/couchbase/test/test_unit_json_transcoder.cxx +4 -0
- data/ext/couchbase/test/test_unit_query.cxx +75 -0
- data/ext/couchbase/test/test_unit_search.cxx +427 -0
- data/ext/couchbase/test/test_unit_transaction_utils.cxx +10 -1
- data/ext/couchbase/test/test_unit_utils.cxx +8 -4
- data/ext/couchbase.cxx +641 -45
- data/ext/revisions.rb +3 -3
- data/lib/couchbase/authenticator.rb +0 -1
- data/lib/couchbase/cluster.rb +1 -5
- data/lib/couchbase/collection.rb +108 -0
- data/lib/couchbase/collection_options.rb +100 -0
- data/lib/couchbase/config_profiles.rb +1 -1
- data/lib/couchbase/errors.rb +5 -0
- data/lib/couchbase/json_transcoder.rb +12 -5
- data/lib/couchbase/key_value_scan.rb +125 -0
- data/lib/couchbase/management/collection_query_index_manager.rb +54 -15
- data/lib/couchbase/management/query_index_manager.rb +70 -5
- data/lib/couchbase/options.rb +151 -0
- data/lib/couchbase/raw_binary_transcoder.rb +37 -0
- data/lib/couchbase/raw_json_transcoder.rb +38 -0
- data/lib/couchbase/raw_string_transcoder.rb +40 -0
- data/lib/couchbase/scope.rb +1 -1
- data/lib/couchbase/search_options.rb +5 -0
- data/lib/couchbase/transcoder_flags.rb +62 -0
- data/lib/couchbase/utils/time.rb +14 -1
- data/lib/couchbase/version.rb +1 -1
- metadata +175 -13
- data/ext/couchbase/core/config_profile.cxx +0 -47
- data/ext/couchbase/core/impl/collection_query_index_manager.cxx +0 -93
|
@@ -18,52 +18,38 @@
|
|
|
18
18
|
#include "core/transactions/error_class.hxx"
|
|
19
19
|
|
|
20
20
|
#include <functional>
|
|
21
|
+
#include <optional>
|
|
21
22
|
#include <string>
|
|
22
23
|
|
|
23
24
|
namespace couchbase::core::transactions
|
|
24
25
|
{
|
|
25
26
|
using error_func3 = std::function<std::optional<error_class>(const std::string&)>;
|
|
26
27
|
using error_func4 = std::function<std::optional<error_class>(void)>;
|
|
27
|
-
namespace
|
|
28
|
-
{
|
|
29
|
-
std::optional<couchbase::core::transactions::error_class>
|
|
30
|
-
noop1(const std::string&)
|
|
31
|
-
{
|
|
32
|
-
return {};
|
|
33
|
-
}
|
|
34
|
-
std::optional<couchbase::core::transactions::error_class>
|
|
35
|
-
noop2()
|
|
36
|
-
{
|
|
37
|
-
return {};
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
} // namespace
|
|
41
28
|
|
|
42
29
|
/**
|
|
43
30
|
* Hooks purely for testing purposes. If you're an end-user looking at these for any reason, then please contact us first
|
|
44
31
|
* about your use-case: we are always open to adding good ideas into the transactions library.
|
|
45
32
|
*/
|
|
46
33
|
struct cleanup_testing_hooks {
|
|
47
|
-
error_func3 before_commit_doc
|
|
48
|
-
error_func3 before_doc_get
|
|
49
|
-
error_func3 before_remove_doc_staged_for_removal
|
|
50
|
-
error_func3 before_remove_doc
|
|
51
|
-
error_func3 before_atr_get
|
|
52
|
-
error_func3 before_remove_links
|
|
34
|
+
error_func3 before_commit_doc;
|
|
35
|
+
error_func3 before_doc_get;
|
|
36
|
+
error_func3 before_remove_doc_staged_for_removal;
|
|
37
|
+
error_func3 before_remove_doc;
|
|
38
|
+
error_func3 before_atr_get;
|
|
39
|
+
error_func3 before_remove_links;
|
|
53
40
|
|
|
54
|
-
error_func4 before_atr_remove
|
|
41
|
+
error_func4 before_atr_remove;
|
|
55
42
|
|
|
56
|
-
error_func4 on_cleanup_docs_completed
|
|
57
|
-
error_func4 on_cleanup_completed
|
|
43
|
+
error_func4 on_cleanup_docs_completed;
|
|
44
|
+
error_func4 on_cleanup_completed;
|
|
58
45
|
|
|
59
|
-
error_func3 client_record_before_create
|
|
60
|
-
error_func3 client_record_before_get
|
|
61
|
-
error_func3 client_record_before_update
|
|
62
|
-
error_func3 client_record_before_remove_client
|
|
46
|
+
error_func3 client_record_before_create;
|
|
47
|
+
error_func3 client_record_before_get;
|
|
48
|
+
error_func3 client_record_before_update;
|
|
49
|
+
error_func3 client_record_before_remove_client;
|
|
63
50
|
|
|
51
|
+
cleanup_testing_hooks();
|
|
64
52
|
// needed for unique_ptr<cleanup_testing_hooks> in transaction_config, with a forward declaration.
|
|
65
|
-
~cleanup_testing_hooks()
|
|
66
|
-
{
|
|
67
|
-
}
|
|
53
|
+
~cleanup_testing_hooks() = default;
|
|
68
54
|
};
|
|
69
|
-
} // namespace couchbase::core::transactions
|
|
55
|
+
} // namespace couchbase::core::transactions
|
|
@@ -16,11 +16,14 @@
|
|
|
16
16
|
|
|
17
17
|
#pragma once
|
|
18
18
|
|
|
19
|
-
#include
|
|
19
|
+
#include "core/error_context/query.hxx"
|
|
20
|
+
#include "error_class.hxx"
|
|
21
|
+
|
|
20
22
|
#include <couchbase/error_codes.hxx>
|
|
21
23
|
#include <couchbase/transactions/transaction_result.hxx>
|
|
22
|
-
|
|
24
|
+
|
|
23
25
|
#include <stdexcept>
|
|
26
|
+
#include <utility>
|
|
24
27
|
|
|
25
28
|
namespace couchbase::core::transactions
|
|
26
29
|
{
|
|
@@ -135,7 +138,7 @@ class op_exception : public std::runtime_error
|
|
|
135
138
|
transaction_op_error_context ctx_;
|
|
136
139
|
|
|
137
140
|
public:
|
|
138
|
-
op_exception(transaction_op_error_context ctx, external_exception cause = COUCHBASE_EXCEPTION)
|
|
141
|
+
explicit op_exception(transaction_op_error_context ctx, external_exception cause = COUCHBASE_EXCEPTION)
|
|
139
142
|
: std::runtime_error(ctx.ec().message())
|
|
140
143
|
, cause_(cause)
|
|
141
144
|
, ctx_(std::move(ctx))
|
|
@@ -157,7 +160,7 @@ class document_not_found : public op_exception
|
|
|
157
160
|
{
|
|
158
161
|
public:
|
|
159
162
|
explicit document_not_found(transaction_op_error_context ctx)
|
|
160
|
-
: op_exception(ctx, DOCUMENT_NOT_FOUND_EXCEPTION)
|
|
163
|
+
: op_exception(std::move(ctx), DOCUMENT_NOT_FOUND_EXCEPTION)
|
|
161
164
|
{
|
|
162
165
|
}
|
|
163
166
|
};
|
|
@@ -166,7 +169,7 @@ class document_exists : public op_exception
|
|
|
166
169
|
{
|
|
167
170
|
public:
|
|
168
171
|
explicit document_exists(transaction_op_error_context ctx)
|
|
169
|
-
: op_exception(ctx, DOCUMENT_EXISTS_EXCEPTION)
|
|
172
|
+
: op_exception(std::move(ctx), DOCUMENT_EXISTS_EXCEPTION)
|
|
170
173
|
{
|
|
171
174
|
}
|
|
172
175
|
};
|
|
@@ -175,7 +178,7 @@ class query_attempt_not_found : public op_exception
|
|
|
175
178
|
{
|
|
176
179
|
public:
|
|
177
180
|
query_attempt_not_found(transaction_op_error_context ctx)
|
|
178
|
-
: op_exception(ctx)
|
|
181
|
+
: op_exception(std::move(ctx))
|
|
179
182
|
{
|
|
180
183
|
}
|
|
181
184
|
};
|
|
@@ -184,7 +187,7 @@ class query_cas_mismatch : public op_exception
|
|
|
184
187
|
{
|
|
185
188
|
public:
|
|
186
189
|
query_cas_mismatch(transaction_op_error_context ctx)
|
|
187
|
-
: op_exception(ctx)
|
|
190
|
+
: op_exception(std::move(ctx))
|
|
188
191
|
{
|
|
189
192
|
}
|
|
190
193
|
};
|
|
@@ -193,7 +196,7 @@ class query_attempt_expired : public op_exception
|
|
|
193
196
|
{
|
|
194
197
|
public:
|
|
195
198
|
query_attempt_expired(transaction_op_error_context ctx)
|
|
196
|
-
: op_exception(ctx)
|
|
199
|
+
: op_exception(std::move(ctx))
|
|
197
200
|
{
|
|
198
201
|
}
|
|
199
202
|
};
|
|
@@ -202,7 +205,7 @@ class query_parsing_failure : public op_exception
|
|
|
202
205
|
{
|
|
203
206
|
public:
|
|
204
207
|
query_parsing_failure(transaction_op_error_context ctx)
|
|
205
|
-
: op_exception(ctx, PARSING_FAILURE)
|
|
208
|
+
: op_exception(std::move(ctx), PARSING_FAILURE)
|
|
206
209
|
{
|
|
207
210
|
}
|
|
208
211
|
};
|
|
@@ -182,33 +182,39 @@ struct action<bucket_name> {
|
|
|
182
182
|
} // namespace priv
|
|
183
183
|
|
|
184
184
|
void
|
|
185
|
-
parse_option(std::string& receiver, const std::string& /* name */, const std::string& value)
|
|
185
|
+
parse_option(std::string& receiver, const std::string& /* name */, const std::string& value, std::vector<std::string>& /* warnings */)
|
|
186
186
|
{
|
|
187
187
|
receiver = string_codec::url_decode(value);
|
|
188
188
|
}
|
|
189
189
|
|
|
190
190
|
void
|
|
191
|
-
parse_option(bool& receiver, const std::string&
|
|
191
|
+
parse_option(bool& receiver, const std::string& name, const std::string& value, std::vector<std::string>& warnings)
|
|
192
192
|
{
|
|
193
193
|
if (value == "true" || value == "yes" || value == "on") {
|
|
194
194
|
receiver = true;
|
|
195
195
|
} else if (value == "false" || value == "no" || value == "off") {
|
|
196
196
|
receiver = false;
|
|
197
|
+
} else {
|
|
198
|
+
warnings.push_back(fmt::format(
|
|
199
|
+
R"(unable to parse "{}" parameter in connection string (value "{}" cannot be interpreted as a boolean))", name, value));
|
|
197
200
|
}
|
|
198
201
|
}
|
|
199
202
|
|
|
200
203
|
void
|
|
201
|
-
parse_option(tls_verify_mode& receiver, const std::string&
|
|
204
|
+
parse_option(tls_verify_mode& receiver, const std::string& name, const std::string& value, std::vector<std::string>& warnings)
|
|
202
205
|
{
|
|
203
206
|
if (value == "none") {
|
|
204
207
|
receiver = tls_verify_mode::none;
|
|
205
208
|
} else if (value == "peer") {
|
|
206
209
|
receiver = tls_verify_mode::peer;
|
|
210
|
+
} else {
|
|
211
|
+
warnings.push_back(fmt::format(
|
|
212
|
+
R"(unable to parse "{}" parameter in connection string (value "{}" is not a valid TLS verification mode))", name, value));
|
|
207
213
|
}
|
|
208
214
|
}
|
|
209
215
|
|
|
210
216
|
void
|
|
211
|
-
parse_option(io::ip_protocol& receiver, const std::string&
|
|
217
|
+
parse_option(io::ip_protocol& receiver, const std::string& name, const std::string& value, std::vector<std::string>& warnings)
|
|
212
218
|
{
|
|
213
219
|
if (value == "any") {
|
|
214
220
|
receiver = io::ip_protocol::any;
|
|
@@ -216,23 +222,28 @@ parse_option(io::ip_protocol& receiver, const std::string& /* name */, const std
|
|
|
216
222
|
receiver = io::ip_protocol::force_ipv4;
|
|
217
223
|
} else if (value == "force_ipv6") {
|
|
218
224
|
receiver = io::ip_protocol::force_ipv6;
|
|
225
|
+
} else {
|
|
226
|
+
warnings.push_back(fmt::format(
|
|
227
|
+
R"(unable to parse "{}" parameter in connection string (value "{}" is not a valid IP protocol preference))", name, value));
|
|
219
228
|
}
|
|
220
229
|
}
|
|
221
230
|
|
|
222
231
|
void
|
|
223
|
-
parse_option(std::size_t& receiver, const std::string& name, const std::string& value)
|
|
232
|
+
parse_option(std::size_t& receiver, const std::string& name, const std::string& value, std::vector<std::string>& warnings)
|
|
224
233
|
{
|
|
225
234
|
try {
|
|
226
235
|
receiver = std::stoull(value, nullptr, 10);
|
|
227
236
|
} catch (const std::invalid_argument& ex1) {
|
|
228
|
-
|
|
237
|
+
warnings.push_back(
|
|
238
|
+
fmt::format(R"(unable to parse "{}" parameter in connection string (value "{}" is not a number): {})", name, value, ex1.what()));
|
|
229
239
|
} catch (const std::out_of_range& ex2) {
|
|
230
|
-
|
|
240
|
+
warnings.push_back(
|
|
241
|
+
fmt::format(R"(unable to parse "{}" parameter in connection string (value "{}" is out of range): {})", name, value, ex2.what()));
|
|
231
242
|
}
|
|
232
243
|
}
|
|
233
244
|
|
|
234
245
|
void
|
|
235
|
-
parse_option(std::chrono::milliseconds& receiver, const std::string& name, const std::string& value)
|
|
246
|
+
parse_option(std::chrono::milliseconds& receiver, const std::string& name, const std::string& value, std::vector<std::string>& warnings)
|
|
236
247
|
{
|
|
237
248
|
try {
|
|
238
249
|
receiver = std::chrono::duration_cast<std::chrono::milliseconds>(parse_duration(value));
|
|
@@ -240,11 +251,11 @@ parse_option(std::chrono::milliseconds& receiver, const std::string& name, const
|
|
|
240
251
|
try {
|
|
241
252
|
receiver = std::chrono::milliseconds(std::stoull(value, nullptr, 10));
|
|
242
253
|
} catch (const std::invalid_argument& ex1) {
|
|
243
|
-
|
|
244
|
-
R"(unable to parse "{}" parameter in connection string (value "{}" is not a number): {})", name, value, ex1.what());
|
|
254
|
+
warnings.push_back(fmt::format(
|
|
255
|
+
R"(unable to parse "{}" parameter in connection string (value "{}" is not a number): {})", name, value, ex1.what()));
|
|
245
256
|
} catch (const std::out_of_range& ex2) {
|
|
246
|
-
|
|
247
|
-
R"(unable to parse "{}" parameter in connection string (value "{}" is out of range): {})", name, value, ex2.what());
|
|
257
|
+
warnings.push_back(fmt::format(
|
|
258
|
+
R"(unable to parse "{}" parameter in connection string (value "{}" is out of range): {})", name, value, ex2.what()));
|
|
248
259
|
}
|
|
249
260
|
}
|
|
250
261
|
}
|
|
@@ -262,68 +273,68 @@ extract_options(connection_string& connstr)
|
|
|
262
273
|
* Number of seconds the client should wait while attempting to connect to a node’s KV service via a socket. Initial
|
|
263
274
|
* connection, reconnecting, node added, etc.
|
|
264
275
|
*/
|
|
265
|
-
parse_option(connstr.options.connect_timeout, name, value);
|
|
276
|
+
parse_option(connstr.options.connect_timeout, name, value, connstr.warnings);
|
|
266
277
|
} else if (name == "kv_timeout" || name == "key_value_timeout") {
|
|
267
278
|
/**
|
|
268
279
|
* Number of milliseconds to wait before timing out a KV operation by the client.
|
|
269
280
|
*/
|
|
270
|
-
parse_option(connstr.options.key_value_timeout, name, value);
|
|
281
|
+
parse_option(connstr.options.key_value_timeout, name, value, connstr.warnings);
|
|
271
282
|
} else if (name == "kv_durable_timeout" || name == "key_value_durable_timeout") {
|
|
272
283
|
/**
|
|
273
284
|
* Number of milliseconds to wait before timing out a KV operation that is either using synchronous durability or
|
|
274
285
|
* observe-based durability.
|
|
275
286
|
*/
|
|
276
|
-
parse_option(connstr.options.key_value_durable_timeout, name, value);
|
|
287
|
+
parse_option(connstr.options.key_value_durable_timeout, name, value, connstr.warnings);
|
|
277
288
|
} else if (name == "view_timeout") {
|
|
278
289
|
/**
|
|
279
290
|
* Number of seconds to wait before timing out a View request by the client..
|
|
280
291
|
*/
|
|
281
|
-
parse_option(connstr.options.view_timeout, name, value);
|
|
292
|
+
parse_option(connstr.options.view_timeout, name, value, connstr.warnings);
|
|
282
293
|
} else if (name == "query_timeout") {
|
|
283
294
|
/**
|
|
284
295
|
* Number of seconds to wait before timing out a Query or N1QL request by the client.
|
|
285
296
|
*/
|
|
286
|
-
parse_option(connstr.options.query_timeout, name, value);
|
|
297
|
+
parse_option(connstr.options.query_timeout, name, value, connstr.warnings);
|
|
287
298
|
} else if (name == "analytics_timeout") {
|
|
288
299
|
/**
|
|
289
300
|
* Number of seconds to wait before timing out an Analytics request by the client.
|
|
290
301
|
*/
|
|
291
|
-
parse_option(connstr.options.analytics_timeout, name, value);
|
|
302
|
+
parse_option(connstr.options.analytics_timeout, name, value, connstr.warnings);
|
|
292
303
|
} else if (name == "search_timeout") {
|
|
293
304
|
/**
|
|
294
305
|
* Number of seconds to wait before timing out a Search request by the client.
|
|
295
306
|
*/
|
|
296
|
-
parse_option(connstr.options.search_timeout, name, value);
|
|
307
|
+
parse_option(connstr.options.search_timeout, name, value, connstr.warnings);
|
|
297
308
|
} else if (name == "management_timeout") {
|
|
298
309
|
/**
|
|
299
310
|
* Number of seconds to wait before timing out a Management API request by the client.
|
|
300
311
|
*/
|
|
301
|
-
parse_option(connstr.options.management_timeout, name, value);
|
|
312
|
+
parse_option(connstr.options.management_timeout, name, value, connstr.warnings);
|
|
302
313
|
} else if (name == "trust_certificate") {
|
|
303
|
-
parse_option(connstr.options.trust_certificate, name, value);
|
|
314
|
+
parse_option(connstr.options.trust_certificate, name, value, connstr.warnings);
|
|
304
315
|
} else if (name == "enable_mutation_tokens") {
|
|
305
316
|
/**
|
|
306
317
|
* Request mutation tokens at connection negotiation time. Turning this off will save 16 bytes per operation response.
|
|
307
318
|
*/
|
|
308
|
-
parse_option(connstr.options.enable_mutation_tokens, name, value);
|
|
319
|
+
parse_option(connstr.options.enable_mutation_tokens, name, value, connstr.warnings);
|
|
309
320
|
} else if (name == "enable_tcp_keep_alive") {
|
|
310
321
|
/**
|
|
311
322
|
* Gets or sets a value indicating whether enable TCP keep-alive.
|
|
312
323
|
*/
|
|
313
|
-
parse_option(connstr.options.enable_tcp_keep_alive, name, value);
|
|
324
|
+
parse_option(connstr.options.enable_tcp_keep_alive, name, value, connstr.warnings);
|
|
314
325
|
} else if (name == "tcp_keep_alive_interval") {
|
|
315
326
|
/**
|
|
316
327
|
* Specifies the timeout, in milliseconds, with no activity until the first keep-alive packet is sent. This applies to all
|
|
317
328
|
* services, but is advisory: if the underlying platform does not support this on all connections, it will be applied only
|
|
318
329
|
* on those it can be.
|
|
319
330
|
*/
|
|
320
|
-
parse_option(connstr.options.tcp_keep_alive_interval, name, value);
|
|
331
|
+
parse_option(connstr.options.tcp_keep_alive_interval, name, value, connstr.warnings);
|
|
321
332
|
} else if (name == "force_ipv4") {
|
|
322
333
|
/**
|
|
323
334
|
* Sets the SDK configuration to do IPv4 Name Resolution
|
|
324
335
|
*/
|
|
325
336
|
bool force_ipv4 = false;
|
|
326
|
-
parse_option(force_ipv4, name, value);
|
|
337
|
+
parse_option(force_ipv4, name, value, connstr.warnings);
|
|
327
338
|
if (force_ipv4) {
|
|
328
339
|
connstr.options.use_ip_protocol = io::ip_protocol::force_ipv4;
|
|
329
340
|
}
|
|
@@ -331,30 +342,40 @@ extract_options(connection_string& connstr)
|
|
|
331
342
|
/**
|
|
332
343
|
* Controls preference of IP protocol for name resolution
|
|
333
344
|
*/
|
|
334
|
-
parse_option(connstr.options.use_ip_protocol, name, value);
|
|
345
|
+
parse_option(connstr.options.use_ip_protocol, name, value, connstr.warnings);
|
|
335
346
|
} else if (name == "config_poll_interval") {
|
|
336
|
-
parse_option(connstr.options.config_poll_interval, name, value);
|
|
347
|
+
parse_option(connstr.options.config_poll_interval, name, value, connstr.warnings);
|
|
337
348
|
} else if (name == "config_poll_floor") {
|
|
338
|
-
parse_option(connstr.options.config_poll_floor, name, value);
|
|
349
|
+
parse_option(connstr.options.config_poll_floor, name, value, connstr.warnings);
|
|
339
350
|
} else if (name == "max_http_connections") {
|
|
340
351
|
/**
|
|
341
352
|
* The maximum number of HTTP connections allowed on a per-host and per-port basis. 0 indicates an unlimited number of
|
|
342
353
|
* connections are permitted.
|
|
343
354
|
*/
|
|
344
|
-
parse_option(connstr.options.max_http_connections, name, value);
|
|
355
|
+
parse_option(connstr.options.max_http_connections, name, value, connstr.warnings);
|
|
345
356
|
} else if (name == "idle_http_connection_timeout") {
|
|
346
357
|
/**
|
|
347
358
|
* The period of time an HTTP connection can be idle before it is forcefully disconnected.
|
|
348
359
|
*/
|
|
349
|
-
parse_option(connstr.options.idle_http_connection_timeout, name, value);
|
|
360
|
+
parse_option(connstr.options.idle_http_connection_timeout, name, value, connstr.warnings);
|
|
361
|
+
} else if (name == "bootstrap_timeout") {
|
|
362
|
+
/**
|
|
363
|
+
* The period of time allocated to complete bootstrap
|
|
364
|
+
*/
|
|
365
|
+
parse_option(connstr.options.bootstrap_timeout, name, value, connstr.warnings);
|
|
366
|
+
} else if (name == "resolve_timeout") {
|
|
367
|
+
/**
|
|
368
|
+
* The period of time to resolve DNS name of the node to IP address
|
|
369
|
+
*/
|
|
370
|
+
parse_option(connstr.options.resolve_timeout, name, value, connstr.warnings);
|
|
350
371
|
} else if (name == "enable_dns_srv") {
|
|
351
372
|
if (connstr.bootstrap_nodes.size() == 1) {
|
|
352
|
-
parse_option(connstr.options.enable_dns_srv, name, value);
|
|
373
|
+
parse_option(connstr.options.enable_dns_srv, name, value, connstr.warnings);
|
|
353
374
|
} else {
|
|
354
|
-
|
|
355
|
-
R"(parameter "{}"
|
|
375
|
+
connstr.warnings.push_back(fmt::format(
|
|
376
|
+
R"(parameter "{}" requires single entry in bootstrap nodes list of the connection string, ignoring (value "{}"))",
|
|
356
377
|
name,
|
|
357
|
-
value);
|
|
378
|
+
value));
|
|
358
379
|
}
|
|
359
380
|
} else if (name == "network") {
|
|
360
381
|
connstr.options.network = value; /* current known values are "auto", "default" and "external" */
|
|
@@ -362,44 +383,55 @@ extract_options(connection_string& connstr)
|
|
|
362
383
|
/**
|
|
363
384
|
* Whether to display N1QL, Analytics, Search queries on info level (default false)
|
|
364
385
|
*/
|
|
365
|
-
parse_option(connstr.options.show_queries, name, value);
|
|
386
|
+
parse_option(connstr.options.show_queries, name, value, connstr.warnings);
|
|
366
387
|
} else if (name == "enable_clustermap_notification") {
|
|
367
388
|
/**
|
|
368
389
|
* Allow the server to push configuration updates asynchronously.
|
|
369
390
|
*/
|
|
370
|
-
parse_option(connstr.options.enable_clustermap_notification, name, value);
|
|
391
|
+
parse_option(connstr.options.enable_clustermap_notification, name, value, connstr.warnings);
|
|
371
392
|
} else if (name == "enable_unordered_execution") {
|
|
372
393
|
/**
|
|
373
394
|
* Allow the server to reorder commands
|
|
374
395
|
*/
|
|
375
|
-
parse_option(connstr.options.enable_unordered_execution, name, value);
|
|
396
|
+
parse_option(connstr.options.enable_unordered_execution, name, value, connstr.warnings);
|
|
376
397
|
} else if (name == "enable_compression") {
|
|
377
398
|
/**
|
|
378
399
|
* Announce support of compression (snappy) to server
|
|
379
400
|
*/
|
|
380
|
-
parse_option(connstr.options.enable_compression, name, value);
|
|
401
|
+
parse_option(connstr.options.enable_compression, name, value, connstr.warnings);
|
|
381
402
|
} else if (name == "enable_tracing") {
|
|
382
403
|
/**
|
|
383
404
|
* true - use threshold_logging_tracer
|
|
384
405
|
* false - use noop_tracer
|
|
385
406
|
*/
|
|
386
|
-
parse_option(connstr.options.enable_tracing, name, value);
|
|
407
|
+
parse_option(connstr.options.enable_tracing, name, value, connstr.warnings);
|
|
387
408
|
} else if (name == "enable_metrics") {
|
|
388
409
|
/**
|
|
389
410
|
* true - use logging_meter
|
|
390
411
|
* false - use noop_meter
|
|
391
412
|
*/
|
|
392
|
-
parse_option(connstr.options.enable_metrics, name, value);
|
|
413
|
+
parse_option(connstr.options.enable_metrics, name, value, connstr.warnings);
|
|
393
414
|
} else if (name == "tls_verify") {
|
|
394
|
-
parse_option(connstr.options.tls_verify, name, value);
|
|
415
|
+
parse_option(connstr.options.tls_verify, name, value, connstr.warnings);
|
|
416
|
+
} else if (name == "disable_mozilla_ca_certificates") {
|
|
417
|
+
parse_option(connstr.options.disable_mozilla_ca_certificates, name, value, connstr.warnings);
|
|
418
|
+
} else if (name == "tls_disable_deprecated_protocols") {
|
|
419
|
+
parse_option(connstr.options.tls_disable_deprecated_protocols, name, value, connstr.warnings);
|
|
420
|
+
} else if (name == "tls_disable_v1_2") {
|
|
421
|
+
parse_option(connstr.options.tls_disable_v1_2, name, value, connstr.warnings);
|
|
395
422
|
} else if (name == "user_agent_extra") {
|
|
396
423
|
/**
|
|
397
424
|
* string, that will be appended to identification fields of the server protocols (key in HELO packet for MCBP, "user-agent"
|
|
398
425
|
* header for HTTP)
|
|
399
426
|
*/
|
|
400
|
-
parse_option(connstr.options.user_agent_extra, name, value);
|
|
427
|
+
parse_option(connstr.options.user_agent_extra, name, value, connstr.warnings);
|
|
428
|
+
} else if (name == "dump_configuration") {
|
|
429
|
+
/**
|
|
430
|
+
* Whether to dump every new configuration on TRACE level
|
|
431
|
+
*/
|
|
432
|
+
parse_option(connstr.options.dump_configuration, name, value, connstr.warnings);
|
|
401
433
|
} else {
|
|
402
|
-
|
|
434
|
+
connstr.warnings.push_back(fmt::format(R"(unknown parameter "{}" in connection string (value "{}"))", name, value));
|
|
403
435
|
}
|
|
404
436
|
}
|
|
405
437
|
}
|
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
#include <tao/json.hpp>
|
|
21
21
|
#include <tao/json/contrib/traits.hpp>
|
|
22
22
|
|
|
23
|
+
#include <gsl/span>
|
|
24
|
+
|
|
23
25
|
namespace couchbase::core::utils::json
|
|
24
26
|
{
|
|
25
27
|
/**
|
|
@@ -102,7 +104,8 @@ class to_byte_vector
|
|
|
102
104
|
void write(std::string_view data)
|
|
103
105
|
{
|
|
104
106
|
buffer_.reserve(buffer_.size() + data.size());
|
|
105
|
-
|
|
107
|
+
const auto* begin = reinterpret_cast<const std::byte*>(data.data());
|
|
108
|
+
buffer_.insert(buffer_.end(), begin, begin + data.size());
|
|
106
109
|
}
|
|
107
110
|
|
|
108
111
|
inline void escape(const std::string_view s)
|
|
@@ -57,7 +57,7 @@ class analytics_error_context : public error_context
|
|
|
57
57
|
std::string http_body,
|
|
58
58
|
std::string hostname,
|
|
59
59
|
std::uint16_t port)
|
|
60
|
-
: error_context{ ec, std::move(last_dispatched_to), std::move(last_dispatched_from), retry_attempts, std::move(retry_reasons) }
|
|
60
|
+
: error_context{ {}, ec, std::move(last_dispatched_to), std::move(last_dispatched_from), retry_attempts, std::move(retry_reasons) }
|
|
61
61
|
, first_error_code_{ first_error_code }
|
|
62
62
|
, first_error_message_{ std::move(first_error_message) }
|
|
63
63
|
, client_context_id_{ std::move(client_context_id) }
|
|
@@ -54,18 +54,42 @@ class behavior_options
|
|
|
54
54
|
return *this;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
auto dump_configuration(bool enable) -> behavior_options&
|
|
58
|
+
{
|
|
59
|
+
dump_configuration_ = enable;
|
|
60
|
+
return *this;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Selects network to use.
|
|
65
|
+
*
|
|
66
|
+
* @param name network name as it is exposed in the configuration.
|
|
67
|
+
* @return this object for chaining purposes.
|
|
68
|
+
*
|
|
69
|
+
* @see https://docs.couchbase.com/server/current/learn/clusters-and-availability/connectivity.html#alternate-addresses
|
|
70
|
+
* @see https://docs.couchbase.com/server/current/rest-api/rest-set-up-alternate-address.html
|
|
71
|
+
*/
|
|
72
|
+
auto network(std::string name) -> behavior_options&
|
|
73
|
+
{
|
|
74
|
+
network_ = std::move(name);
|
|
75
|
+
return *this;
|
|
76
|
+
}
|
|
77
|
+
|
|
57
78
|
struct built {
|
|
58
79
|
std::string user_agent_extra;
|
|
59
80
|
bool show_queries;
|
|
60
81
|
bool enable_clustermap_notification;
|
|
61
82
|
bool enable_mutation_tokens;
|
|
62
83
|
bool enable_unordered_execution;
|
|
84
|
+
bool dump_configuration;
|
|
85
|
+
std::string network;
|
|
63
86
|
};
|
|
64
87
|
|
|
65
88
|
[[nodiscard]] auto build() const -> built
|
|
66
89
|
{
|
|
67
90
|
return {
|
|
68
|
-
user_agent_extra_,
|
|
91
|
+
user_agent_extra_, show_queries_, enable_clustermap_notification_, enable_mutation_tokens_, enable_unordered_execution_,
|
|
92
|
+
dump_configuration_, network_,
|
|
69
93
|
};
|
|
70
94
|
}
|
|
71
95
|
|
|
@@ -75,5 +99,7 @@ class behavior_options
|
|
|
75
99
|
bool enable_clustermap_notification_{ false };
|
|
76
100
|
bool enable_mutation_tokens_{ true };
|
|
77
101
|
bool enable_unordered_execution_{ true };
|
|
102
|
+
bool dump_configuration_{ false };
|
|
103
|
+
std::string network_{ "auto" };
|
|
78
104
|
};
|
|
79
105
|
} // namespace couchbase
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2023-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/search_query.hxx>
|
|
21
|
+
|
|
22
|
+
#include <optional>
|
|
23
|
+
#include <string>
|
|
24
|
+
|
|
25
|
+
namespace couchbase
|
|
26
|
+
{
|
|
27
|
+
/**
|
|
28
|
+
* Allow to match `true`/`false` in a field mapped as boolean.
|
|
29
|
+
*
|
|
30
|
+
* @since 1.0.0
|
|
31
|
+
* @committed
|
|
32
|
+
*/
|
|
33
|
+
class boolean_field_query : public search_query
|
|
34
|
+
{
|
|
35
|
+
public:
|
|
36
|
+
/**
|
|
37
|
+
* Create a new boolean field query.
|
|
38
|
+
*
|
|
39
|
+
* @param value the input string to be matched against
|
|
40
|
+
*
|
|
41
|
+
* @since 1.0.0
|
|
42
|
+
* @committed
|
|
43
|
+
*/
|
|
44
|
+
explicit boolean_field_query(bool value)
|
|
45
|
+
: bool_{ value }
|
|
46
|
+
{
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* If a field is specified, only terms in that field will be matched.
|
|
51
|
+
*
|
|
52
|
+
* @param field_name name of the field to be matched
|
|
53
|
+
*
|
|
54
|
+
* @return this query for chaining purposes.
|
|
55
|
+
*
|
|
56
|
+
* @since 1.0.0
|
|
57
|
+
* @committed
|
|
58
|
+
*/
|
|
59
|
+
auto field(std::string field_name) -> boolean_field_query&
|
|
60
|
+
{
|
|
61
|
+
field_ = std::move(field_name);
|
|
62
|
+
return *this;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @return encoded representation of the query.
|
|
67
|
+
*
|
|
68
|
+
* @since 1.0.0
|
|
69
|
+
* @internal
|
|
70
|
+
*/
|
|
71
|
+
[[nodiscard]] auto encode() const -> encoded_search_query override;
|
|
72
|
+
|
|
73
|
+
private:
|
|
74
|
+
bool bool_;
|
|
75
|
+
std::optional<std::string> field_{};
|
|
76
|
+
};
|
|
77
|
+
} // namespace couchbase
|