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
|
@@ -21,9 +21,14 @@
|
|
|
21
21
|
#include "core/operations/management/query_index_create.hxx"
|
|
22
22
|
#include "core/operations/management/query_index_get_all.hxx"
|
|
23
23
|
|
|
24
|
+
#include <couchbase/boolean_query.hxx>
|
|
24
25
|
#include <couchbase/cluster.hxx>
|
|
25
26
|
#include <couchbase/fmt/cas.hxx>
|
|
26
27
|
#include <couchbase/fmt/mutation_token.hxx>
|
|
28
|
+
#include <couchbase/match_query.hxx>
|
|
29
|
+
#include <couchbase/numeric_range_query.hxx>
|
|
30
|
+
#include <couchbase/query_string_query.hxx>
|
|
31
|
+
#include <couchbase/term_facet.hxx>
|
|
27
32
|
|
|
28
33
|
#include <tao/json.hpp>
|
|
29
34
|
|
|
@@ -44,9 +49,9 @@ main(int argc, const char* argv[])
|
|
|
44
49
|
return 1;
|
|
45
50
|
}
|
|
46
51
|
|
|
47
|
-
std::string connection_string{ argv[1] };
|
|
48
|
-
std::string username{ argv[2] };
|
|
49
|
-
std::string password{ argv[3] };
|
|
52
|
+
std::string connection_string{ argv[1] }; // "couchbase://127.0.0.1"
|
|
53
|
+
std::string username{ argv[2] }; // "Administrator"
|
|
54
|
+
std::string password{ argv[3] }; // "password"
|
|
50
55
|
std::string bucket_name{ "travel-sample" };
|
|
51
56
|
|
|
52
57
|
// run IO context on separate thread
|
|
@@ -59,6 +64,7 @@ main(int argc, const char* argv[])
|
|
|
59
64
|
// For example, optimize timeouts for WAN
|
|
60
65
|
options.apply_profile("wan_development");
|
|
61
66
|
|
|
67
|
+
// [1] connect to cluster using the given connection string and the options
|
|
62
68
|
auto [cluster, ec] = couchbase::cluster::connect(io, connection_string, options).get();
|
|
63
69
|
if (ec) {
|
|
64
70
|
fmt::print("unable to connect to the cluster: {}\n", ec.message());
|
|
@@ -72,8 +78,7 @@ main(int argc, const char* argv[])
|
|
|
72
78
|
auto scope = bucket.scope("tenant_agent_00");
|
|
73
79
|
auto collection = scope.collection("users");
|
|
74
80
|
|
|
75
|
-
{
|
|
76
|
-
// upsert document
|
|
81
|
+
{ // [2] upsert document
|
|
77
82
|
auto [ctx, upsert_result] = collection.upsert("my-document", tao::json::value{ { "name", "mike" } }).get();
|
|
78
83
|
if (ctx.ec()) {
|
|
79
84
|
fmt::print("unable to upsert the document \"{}\": {}\n", ctx.id(), ctx.ec().message());
|
|
@@ -82,8 +87,7 @@ main(int argc, const char* argv[])
|
|
|
82
87
|
fmt::print("saved document \"{}\", cas={}, token={}\n", ctx.id(), upsert_result.cas(), upsert_result.mutation_token().value());
|
|
83
88
|
}
|
|
84
89
|
|
|
85
|
-
{
|
|
86
|
-
// get document
|
|
90
|
+
{ // [3] get document
|
|
87
91
|
auto [ctx, get_result] = collection.get("my-document").get();
|
|
88
92
|
if (ctx.ec()) {
|
|
89
93
|
fmt::print("unable to get the document \"{}\": {}\n", ctx.id(), ctx.ec().message());
|
|
@@ -93,8 +97,7 @@ main(int argc, const char* argv[])
|
|
|
93
97
|
fmt::print("retrieved document \"{}\", name=\"{}\"\n", ctx.id(), name);
|
|
94
98
|
}
|
|
95
99
|
|
|
96
|
-
{
|
|
97
|
-
// N1QL query
|
|
100
|
+
{ // [4] N1QL query
|
|
98
101
|
auto inventory_scope = bucket.scope("inventory");
|
|
99
102
|
auto [ctx, query_result] = inventory_scope.query("SELECT * FROM airline WHERE id = 10").get();
|
|
100
103
|
if (ctx.ec()) {
|
|
@@ -106,7 +109,7 @@ main(int argc, const char* argv[])
|
|
|
106
109
|
}
|
|
107
110
|
}
|
|
108
111
|
|
|
109
|
-
// close cluster connection
|
|
112
|
+
// [5] close cluster connection
|
|
110
113
|
cluster.close();
|
|
111
114
|
guard.reset();
|
|
112
115
|
|
|
@@ -129,8 +132,14 @@ row: {"airline":{"callsign":"MILE-AIR","country":"United States","iata":"Q5","ic
|
|
|
129
132
|
TEST_CASE("example: start using", "[integration]")
|
|
130
133
|
{
|
|
131
134
|
test::utils::integration_test_guard integration;
|
|
135
|
+
if (integration.cluster_version().is_capella()) {
|
|
136
|
+
SKIP("Capella does not allow to use REST API to load sample buckets");
|
|
137
|
+
}
|
|
132
138
|
if (!integration.cluster_version().supports_collections()) {
|
|
133
|
-
|
|
139
|
+
SKIP("cluster does not support collections");
|
|
140
|
+
}
|
|
141
|
+
if (integration.cluster_version().is_mock()) {
|
|
142
|
+
SKIP("GOCAVES cannot load travel-sample bucket. See https://github.com/couchbaselabs/gocaves/issues/101");
|
|
134
143
|
}
|
|
135
144
|
|
|
136
145
|
{
|
|
@@ -180,3 +189,402 @@ TEST_CASE("example: start using", "[integration]")
|
|
|
180
189
|
|
|
181
190
|
REQUIRE(start_using::main(4, argv) == 0);
|
|
182
191
|
}
|
|
192
|
+
|
|
193
|
+
namespace example_search
|
|
194
|
+
{
|
|
195
|
+
//! [example-search]
|
|
196
|
+
#include <couchbase/cluster.hxx>
|
|
197
|
+
|
|
198
|
+
#include <couchbase/boolean_query.hxx>
|
|
199
|
+
#include <couchbase/match_query.hxx>
|
|
200
|
+
#include <couchbase/numeric_range_query.hxx>
|
|
201
|
+
#include <couchbase/query_string_query.hxx>
|
|
202
|
+
|
|
203
|
+
#include <couchbase/fmt/cas.hxx>
|
|
204
|
+
#include <couchbase/fmt/mutation_token.hxx>
|
|
205
|
+
|
|
206
|
+
#include <tao/json.hpp>
|
|
207
|
+
|
|
208
|
+
int
|
|
209
|
+
main(int argc, const char* argv[])
|
|
210
|
+
{
|
|
211
|
+
if (argc != 4) {
|
|
212
|
+
fmt::print("USAGE: ./example_search couchbase://127.0.0.1 Administrator password\n");
|
|
213
|
+
return 1;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
std::string connection_string{ argv[1] }; // "couchbase://127.0.0.1"
|
|
217
|
+
std::string username{ argv[2] }; // "Administrator"
|
|
218
|
+
std::string password{ argv[3] }; // "password"
|
|
219
|
+
std::string bucket_name{ "travel-sample" };
|
|
220
|
+
|
|
221
|
+
// run IO context on separate thread
|
|
222
|
+
asio::io_context io;
|
|
223
|
+
auto guard = asio::make_work_guard(io);
|
|
224
|
+
std::thread io_thread([&io]() { io.run(); });
|
|
225
|
+
|
|
226
|
+
auto options = couchbase::cluster_options(username, password);
|
|
227
|
+
// customize through the 'options'.
|
|
228
|
+
// For example, optimize timeouts for WAN
|
|
229
|
+
options.apply_profile("wan_development");
|
|
230
|
+
|
|
231
|
+
auto [cluster, ec] = couchbase::cluster::connect(io, connection_string, options).get();
|
|
232
|
+
if (ec) {
|
|
233
|
+
fmt::print("unable to connect to the cluster: {}\n", ec.message());
|
|
234
|
+
return 1;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
{
|
|
238
|
+
fmt::print("--- simple query\n");
|
|
239
|
+
auto [ctx, result] = cluster.search_query("travel-sample-index", couchbase::query_string_query("nice bar")).get();
|
|
240
|
+
|
|
241
|
+
if (ctx.ec()) {
|
|
242
|
+
fmt::print("unable to perform search query: {}, ({}, {})\n", ctx.ec().message(), ctx.status(), ctx.error());
|
|
243
|
+
return 1;
|
|
244
|
+
}
|
|
245
|
+
fmt::print("{} hits, total: {}\n", result.rows().size(), result.meta_data().metrics().total_rows());
|
|
246
|
+
for (const auto& row : result.rows()) {
|
|
247
|
+
fmt::print("id: {}, score: {}\n", row.id(), row.score());
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
{
|
|
252
|
+
fmt::print("--- simple query with fields\n");
|
|
253
|
+
auto [ctx, result] = cluster
|
|
254
|
+
.search_query("travel-sample-index",
|
|
255
|
+
couchbase::query_string_query("nice bar"),
|
|
256
|
+
couchbase::search_options{}.fields({ "description" }))
|
|
257
|
+
.get();
|
|
258
|
+
|
|
259
|
+
if (ctx.ec()) {
|
|
260
|
+
fmt::print("unable to perform search query: {}, ({}, {})\n", ctx.ec().message(), ctx.status(), ctx.error());
|
|
261
|
+
return 1;
|
|
262
|
+
}
|
|
263
|
+
fmt::print("{} hits, total: {}\n", result.rows().size(), result.meta_data().metrics().total_rows());
|
|
264
|
+
for (const auto& row : result.rows()) {
|
|
265
|
+
auto fields = row.fields_as<couchbase::codec::tao_json_serializer>();
|
|
266
|
+
fmt::print("id: {}, score: {}, description: {}\n", row.id(), row.score(), fields["description"].as<std::string>());
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
{
|
|
271
|
+
fmt::print("--- simple query with limit\n");
|
|
272
|
+
auto [ctx, result] =
|
|
273
|
+
cluster
|
|
274
|
+
.search_query("travel-sample-index", couchbase::query_string_query("nice bar"), couchbase::search_options{}.skip(3).limit(4))
|
|
275
|
+
.get();
|
|
276
|
+
|
|
277
|
+
if (ctx.ec()) {
|
|
278
|
+
fmt::print("unable to perform search query: {}, ({}, {})\n", ctx.ec().message(), ctx.status(), ctx.error());
|
|
279
|
+
return 1;
|
|
280
|
+
}
|
|
281
|
+
fmt::print("{} hits, total: {}\n", result.rows().size(), result.meta_data().metrics().total_rows());
|
|
282
|
+
for (const auto& row : result.rows()) {
|
|
283
|
+
fmt::print("id: {}, score: {}\n", row.id(), row.score());
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
{
|
|
288
|
+
fmt::print("--- simple query with highlight\n");
|
|
289
|
+
auto [ctx, result] =
|
|
290
|
+
cluster
|
|
291
|
+
.search_query("travel-sample-index",
|
|
292
|
+
couchbase::query_string_query("nice bar"),
|
|
293
|
+
couchbase::search_options{}.highlight(couchbase::highlight_style::html, { "description", "title" }))
|
|
294
|
+
.get();
|
|
295
|
+
|
|
296
|
+
if (ctx.ec()) {
|
|
297
|
+
fmt::print("unable to perform search query: {}, ({}, {})\n", ctx.ec().message(), ctx.status(), ctx.error());
|
|
298
|
+
return 1;
|
|
299
|
+
}
|
|
300
|
+
fmt::print("{} hits, total: {}\n", result.rows().size(), result.meta_data().metrics().total_rows());
|
|
301
|
+
for (const auto& row : result.rows()) {
|
|
302
|
+
fmt::print("id: {}, score: {}\n", row.id(), row.score());
|
|
303
|
+
for (const auto& [field, fragments] : row.fragments()) {
|
|
304
|
+
fmt::print("- {}:\n", field);
|
|
305
|
+
for (const auto& fragment : fragments) {
|
|
306
|
+
fmt::print("-- {}\n", fragment);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
{
|
|
313
|
+
fmt::print("--- simple query with collections\n");
|
|
314
|
+
auto [ctx, result] = cluster
|
|
315
|
+
.search_query("travel-sample-index",
|
|
316
|
+
couchbase::query_string_query("west"),
|
|
317
|
+
couchbase::search_options{}.collections({ "airline" }))
|
|
318
|
+
.get();
|
|
319
|
+
|
|
320
|
+
if (ctx.ec()) {
|
|
321
|
+
fmt::print("unable to perform search query: {}, ({}, {})\n", ctx.ec().message(), ctx.status(), ctx.error());
|
|
322
|
+
return 1;
|
|
323
|
+
}
|
|
324
|
+
fmt::print("{} hits, total: {}\n", result.rows().size(), result.meta_data().metrics().total_rows());
|
|
325
|
+
for (const auto& row : result.rows()) {
|
|
326
|
+
fmt::print("id: {}, score: {}\n", row.id(), row.score());
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
{
|
|
331
|
+
fmt::print("--- query with consistency requirements\n");
|
|
332
|
+
|
|
333
|
+
auto bucket = cluster.bucket(bucket_name);
|
|
334
|
+
auto collection = bucket.scope("inventory").collection("hotel");
|
|
335
|
+
|
|
336
|
+
couchbase::mutation_state state;
|
|
337
|
+
|
|
338
|
+
{
|
|
339
|
+
auto [ctx, upsert_result] =
|
|
340
|
+
collection
|
|
341
|
+
.upsert(
|
|
342
|
+
"prancing-pony",
|
|
343
|
+
tao::json::value{
|
|
344
|
+
{ "title", "The Prancing Pony" },
|
|
345
|
+
{ "type", "hotel" },
|
|
346
|
+
{ "description",
|
|
347
|
+
"The inn was located just where the East Road bent round the foot of Bree-hill, within the dike that stretched "
|
|
348
|
+
"around the town. The building was three stories tall with many windows. Its front faced the Road and it had two "
|
|
349
|
+
"wings that ran back towards the elevated ground of the hill, such that in the rear the second floor was at ground "
|
|
350
|
+
"level. " } })
|
|
351
|
+
.get();
|
|
352
|
+
if (ctx.ec()) {
|
|
353
|
+
fmt::print("unable to upsert the document \"{}\": {}\n", ctx.id(), ctx.ec().message());
|
|
354
|
+
return 1;
|
|
355
|
+
}
|
|
356
|
+
fmt::print("saved document \"{}\", cas={}, token={}\n",
|
|
357
|
+
ctx.id(),
|
|
358
|
+
upsert_result.cas(),
|
|
359
|
+
upsert_result.mutation_token().value_or(couchbase::mutation_token{}));
|
|
360
|
+
state.add(upsert_result);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
auto [ctx, result] =
|
|
364
|
+
cluster
|
|
365
|
+
.search_query("travel-sample-index", couchbase::query_string_query("bree"), couchbase::search_options{}.consistent_with(state))
|
|
366
|
+
.get();
|
|
367
|
+
|
|
368
|
+
if (ctx.ec()) {
|
|
369
|
+
fmt::print("unable to perform search query: {}, ({}, {})\n", ctx.ec().message(), ctx.status(), ctx.error());
|
|
370
|
+
return 1;
|
|
371
|
+
}
|
|
372
|
+
fmt::print("{} hits, total: {}\n", result.rows().size(), result.meta_data().metrics().total_rows());
|
|
373
|
+
for (const auto& row : result.rows()) {
|
|
374
|
+
fmt::print("id: {}, score: {}\n", row.id(), row.score());
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
{
|
|
379
|
+
fmt::print("--- complex query\n");
|
|
380
|
+
auto [ctx, result] = cluster
|
|
381
|
+
.search_query("travel-sample-index",
|
|
382
|
+
couchbase::boolean_query()
|
|
383
|
+
.must(couchbase::match_query("honeymoon").field("reviews.content"),
|
|
384
|
+
couchbase::numeric_range_query().field("reviews.ratings.Overall").min(4))
|
|
385
|
+
.must_not(couchbase::match_query("San Francisco").field("city")),
|
|
386
|
+
couchbase::search_options{}.collections({ "hotel" }).highlight())
|
|
387
|
+
.get();
|
|
388
|
+
if (ctx.ec()) {
|
|
389
|
+
fmt::print("unable to perform search query: {}, ({}, {})\n", ctx.ec().message(), ctx.status(), ctx.error());
|
|
390
|
+
return 1;
|
|
391
|
+
}
|
|
392
|
+
fmt::print("{} hits, total: {}\n", result.rows().size(), result.meta_data().metrics().total_rows());
|
|
393
|
+
for (const auto& row : result.rows()) {
|
|
394
|
+
fmt::print("id: {}, score: {}\n", row.id(), row.score());
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
{
|
|
399
|
+
fmt::print("--- simple query with facets\n");
|
|
400
|
+
auto [ctx, result] =
|
|
401
|
+
cluster
|
|
402
|
+
.search_query("travel-sample-index",
|
|
403
|
+
couchbase::query_string_query("honeymoon"),
|
|
404
|
+
couchbase::search_options{}.collections({ "hotel" }).facet("by_country", couchbase::term_facet("country", 3)))
|
|
405
|
+
.get();
|
|
406
|
+
if (ctx.ec()) {
|
|
407
|
+
fmt::print("unable to perform search query: {}, ({}, {})\n", ctx.ec().message(), ctx.status(), ctx.error());
|
|
408
|
+
return 1;
|
|
409
|
+
}
|
|
410
|
+
fmt::print("{} hits, total: {}\n", result.rows().size(), result.meta_data().metrics().total_rows());
|
|
411
|
+
for (const auto& [name, facet] : result.facets()) {
|
|
412
|
+
fmt::print("{} facet: total={}, missing={}\n", name, facet->total(), facet->missing());
|
|
413
|
+
if (name == "by_country") {
|
|
414
|
+
auto term_facet = std::static_pointer_cast<couchbase::term_facet_result>(facet);
|
|
415
|
+
for (const auto& group : term_facet->terms()) {
|
|
416
|
+
fmt::print("* {}: {}\n", group.name(), group.count());
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
// close cluster connection
|
|
423
|
+
cluster.close();
|
|
424
|
+
guard.reset();
|
|
425
|
+
|
|
426
|
+
io_thread.join();
|
|
427
|
+
return 0;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
/*
|
|
431
|
+
|
|
432
|
+
$ ./example_search couchbase://127.0.0.1 Administrator password
|
|
433
|
+
saved document "my-document", cas=17486a1722b20000
|
|
434
|
+
retrieved document "my-document", name="mike"
|
|
435
|
+
row: {"airline":{"callsign":"MILE-AIR","country":"United States","iata":"Q5","icao":"MLA","id":10,"name":"40-Mile Air","type":"airline"}}
|
|
436
|
+
|
|
437
|
+
*/
|
|
438
|
+
//! [example-search]
|
|
439
|
+
} // namespace example_search
|
|
440
|
+
|
|
441
|
+
TEST_CASE("example: search", "[integration]")
|
|
442
|
+
{
|
|
443
|
+
test::utils::integration_test_guard integration;
|
|
444
|
+
|
|
445
|
+
if (integration.cluster_version().is_capella()) {
|
|
446
|
+
SKIP("Capella does not allow to use REST API to load sample buckets");
|
|
447
|
+
}
|
|
448
|
+
if (!integration.cluster_version().supports_collections()) {
|
|
449
|
+
SKIP("cluster does not support collections");
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
const auto env = test::utils::test_context::load_from_environment();
|
|
453
|
+
const char* argv[] = {
|
|
454
|
+
"example_search", // name of the "executable"
|
|
455
|
+
env.connection_string.c_str(),
|
|
456
|
+
env.username.c_str(),
|
|
457
|
+
env.password.c_str(),
|
|
458
|
+
};
|
|
459
|
+
|
|
460
|
+
REQUIRE(example_search::main(4, argv) == 0);
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
namespace example_buckets
|
|
464
|
+
{
|
|
465
|
+
//! [example-buckets]
|
|
466
|
+
#include <couchbase/cluster.hxx>
|
|
467
|
+
|
|
468
|
+
int
|
|
469
|
+
main(int argc, const char* argv[])
|
|
470
|
+
{
|
|
471
|
+
if (argc != 4) {
|
|
472
|
+
fmt::print("USAGE: ./example_buckets couchbase://127.0.0.1 Administrator password\n");
|
|
473
|
+
return 1;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
std::string connection_string{ argv[1] }; // "couchbase://127.0.0.1"
|
|
477
|
+
std::string username{ argv[2] }; // "Administrator"
|
|
478
|
+
std::string password{ argv[3] }; // "password"
|
|
479
|
+
std::string bucket_name{ "travel-sample" };
|
|
480
|
+
|
|
481
|
+
// run IO context on separate thread
|
|
482
|
+
asio::io_context io;
|
|
483
|
+
auto guard = asio::make_work_guard(io);
|
|
484
|
+
std::thread io_thread([&io]() { io.run(); });
|
|
485
|
+
|
|
486
|
+
auto options = couchbase::cluster_options(username, password);
|
|
487
|
+
// customize through the 'options'.
|
|
488
|
+
// For example, optimize timeouts for WAN
|
|
489
|
+
options.apply_profile("wan_development");
|
|
490
|
+
|
|
491
|
+
auto [cluster, ec] = couchbase::cluster::connect(io, connection_string, options).get();
|
|
492
|
+
if (ec) {
|
|
493
|
+
fmt::print("unable to connect to the cluster: {}\n", ec.message());
|
|
494
|
+
return 1;
|
|
495
|
+
}
|
|
496
|
+
auto manager = cluster.buckets();
|
|
497
|
+
|
|
498
|
+
couchbase::management::cluster::bucket_settings bucket_settings{};
|
|
499
|
+
std::string test_bucket_name = "cxx_test_integration_examples_bucket";
|
|
500
|
+
bucket_settings.name = test_bucket_name;
|
|
501
|
+
bucket_settings.ram_quota_mb = 150;
|
|
502
|
+
bucket_settings.bucket_type = couchbase::management::cluster::bucket_type::couchbase;
|
|
503
|
+
bucket_settings.eviction_policy = couchbase::management::cluster::bucket_eviction_policy::value_only;
|
|
504
|
+
bucket_settings.flush_enabled = true;
|
|
505
|
+
bucket_settings.replica_indexes = true;
|
|
506
|
+
bucket_settings.conflict_resolution_type = couchbase::management::cluster::bucket_conflict_resolution::sequence_number;
|
|
507
|
+
{
|
|
508
|
+
fmt::print("--- create bucket\n");
|
|
509
|
+
auto ctx = manager.create_bucket(bucket_settings).get();
|
|
510
|
+
if (ctx.ec()) {
|
|
511
|
+
if (ctx.ec() == couchbase::errc::common::invalid_argument) {
|
|
512
|
+
fmt::print("bucket already exists\n");
|
|
513
|
+
} else {
|
|
514
|
+
fmt::print("unable to create the bucket: {}\n", ctx.ec().message());
|
|
515
|
+
return 1;
|
|
516
|
+
}
|
|
517
|
+
} else {
|
|
518
|
+
fmt::print("--- bucket has been successfully created\n");
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
{
|
|
522
|
+
fmt::print("--- get bucket\n");
|
|
523
|
+
auto [ctx, bucket] = manager.get_bucket(bucket_name).get();
|
|
524
|
+
if (ctx.ec()) {
|
|
525
|
+
fmt::print("unable to get the bucket: {}\n", ctx.ec().message());
|
|
526
|
+
return 1;
|
|
527
|
+
}
|
|
528
|
+
fmt::print("name of fetched bucket: {}\n", bucket.name);
|
|
529
|
+
}
|
|
530
|
+
{
|
|
531
|
+
fmt::print("--- get all buckets\n");
|
|
532
|
+
auto [ctx, buckets] = manager.get_all_buckets().get();
|
|
533
|
+
if (ctx.ec()) {
|
|
534
|
+
fmt::print("unable to get all buckets: {}\n", ctx.ec().message());
|
|
535
|
+
return 1;
|
|
536
|
+
}
|
|
537
|
+
for (const auto& fetched_bucket : buckets) {
|
|
538
|
+
fmt::print("Bucket name: {}\n", fetched_bucket.name);
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
{
|
|
542
|
+
fmt::print("--- update bucket\n");
|
|
543
|
+
bucket_settings.ram_quota_mb = 150;
|
|
544
|
+
auto ctx = manager.update_bucket(bucket_settings).get();
|
|
545
|
+
if (ctx.ec()) {
|
|
546
|
+
fmt::print("unable to update the bucket: {}\n", ctx.ec().message());
|
|
547
|
+
return 1;
|
|
548
|
+
}
|
|
549
|
+
fmt::print("bucket has been updated\n");
|
|
550
|
+
}
|
|
551
|
+
{
|
|
552
|
+
fmt::print("--- drop bucket\n");
|
|
553
|
+
auto ctx = manager.drop_bucket(test_bucket_name).get();
|
|
554
|
+
if (ctx.ec()) {
|
|
555
|
+
fmt::print("unable to drop the bucket: {}\n", ctx.ec().message());
|
|
556
|
+
return 1;
|
|
557
|
+
}
|
|
558
|
+
fmt::print("bucket has been dropped\n");
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
// close cluster connection
|
|
562
|
+
cluster.close();
|
|
563
|
+
guard.reset();
|
|
564
|
+
|
|
565
|
+
io_thread.join();
|
|
566
|
+
return 0;
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
//! [example-buckets]
|
|
570
|
+
} // namespace example_buckets
|
|
571
|
+
|
|
572
|
+
TEST_CASE("example: bucket management", "[integration]")
|
|
573
|
+
{
|
|
574
|
+
test::utils::integration_test_guard integration;
|
|
575
|
+
|
|
576
|
+
if (integration.cluster_version().is_capella()) {
|
|
577
|
+
SKIP("Capella does not allow to use REST API to load sample buckets");
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
const auto env = test::utils::test_context::load_from_environment();
|
|
581
|
+
|
|
582
|
+
const char* argv[] = {
|
|
583
|
+
"example_buckets", // name of the "executable"
|
|
584
|
+
env.connection_string.c_str(),
|
|
585
|
+
env.username.c_str(),
|
|
586
|
+
env.password.c_str(),
|
|
587
|
+
};
|
|
588
|
+
|
|
589
|
+
REQUIRE(example_buckets::main(4, argv) == 0);
|
|
590
|
+
}
|