couchbase 3.4.2 → 3.4.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -26,6 +26,12 @@ namespace couchbase::transactions
|
|
26
26
|
{
|
27
27
|
class transaction_context;
|
28
28
|
|
29
|
+
/**
|
30
|
+
* The transaction_query_options are options specific to a query.
|
31
|
+
*
|
32
|
+
* Some of the options will override the corresponding elements in the @ref transactions_query_config section of the
|
33
|
+
* @ref transactions_config.
|
34
|
+
*/
|
29
35
|
class transaction_query_options
|
30
36
|
{
|
31
37
|
public:
|
@@ -34,120 +40,227 @@ class transaction_query_options
|
|
34
40
|
// set defaults specific to query in transactions.
|
35
41
|
opts_.metrics(true);
|
36
42
|
}
|
37
|
-
/*transaction_query_options(const core::operations::query_request& req)
|
38
|
-
: query_req_(req)
|
39
|
-
{
|
40
|
-
}*/
|
41
43
|
|
44
|
+
/**
|
45
|
+
* Set an option which isn't exposed explicitly in transaction_query_options.
|
46
|
+
*
|
47
|
+
* @see query_options::raw for details.
|
48
|
+
*
|
49
|
+
* @tparam Value type of the value.
|
50
|
+
* @param key The name of the option.
|
51
|
+
* @param value The value of this option.
|
52
|
+
* @return reference to this object, convenient for chaining calls.
|
53
|
+
*/
|
42
54
|
template<typename Value>
|
43
55
|
transaction_query_options& raw(const std::string& key, const Value& value)
|
44
56
|
{
|
45
57
|
opts_.raw(key, value);
|
46
58
|
return *this;
|
47
59
|
}
|
48
|
-
|
60
|
+
/**
|
61
|
+
* Set ad_hoc.
|
62
|
+
*
|
63
|
+
* Inform query service that this query is, or is not, a prepared statement query. @see query_options::adhoc for
|
64
|
+
* detailed discussion.
|
65
|
+
*
|
66
|
+
* @param value if set to false this query will be turned into a prepared statement query.
|
67
|
+
* @return reference to this object, convenient for chaining calls.
|
68
|
+
*/
|
49
69
|
transaction_query_options& ad_hoc(bool value)
|
50
70
|
{
|
51
71
|
opts_.adhoc(value);
|
52
72
|
return *this;
|
53
73
|
}
|
54
|
-
|
74
|
+
/**
|
75
|
+
* Set the query_scan_consistency for this query.
|
76
|
+
*
|
77
|
+
* @see query_options::scan_consistency for details.
|
78
|
+
*
|
79
|
+
* @param scan_consistency Desired scan consistency.
|
80
|
+
* @return reference to this object, convenient for chaining calls.
|
81
|
+
*/
|
55
82
|
transaction_query_options& scan_consistency(query_scan_consistency scan_consistency)
|
56
83
|
{
|
57
84
|
opts_.scan_consistency(scan_consistency);
|
58
85
|
return *this;
|
59
86
|
}
|
60
87
|
|
88
|
+
/**
|
89
|
+
* Set the profile mode for this query.
|
90
|
+
*
|
91
|
+
* @see query_options::profile for details.
|
92
|
+
*
|
93
|
+
* @param mode desired profile mode.
|
94
|
+
* @return reference to this object, convenient for chaining calls.
|
95
|
+
*/
|
61
96
|
transaction_query_options& profile(query_profile mode)
|
62
97
|
{
|
63
98
|
opts_.profile(mode);
|
64
99
|
return *this;
|
65
100
|
}
|
66
|
-
|
101
|
+
/**
|
102
|
+
* Set a client id for this query.
|
103
|
+
*
|
104
|
+
* @see query_options::client_context_id for details.
|
105
|
+
*
|
106
|
+
* @param id Desired id
|
107
|
+
* @return reference to this object, convenient for chaining calls.
|
108
|
+
*/
|
67
109
|
transaction_query_options& client_context_id(const std::string& id)
|
68
110
|
{
|
69
111
|
opts_.client_context_id(id);
|
70
112
|
return *this;
|
71
113
|
}
|
72
114
|
|
115
|
+
/**
|
116
|
+
* Set the scan_wait time
|
117
|
+
*
|
118
|
+
* @see query_options::scan_wait for details.
|
119
|
+
*
|
120
|
+
* @param scan_wait Desired time for scan_wait.
|
121
|
+
* @return reference to this object, convenient for chaining calls.
|
122
|
+
*/
|
73
123
|
transaction_query_options& scan_wait(std::chrono::milliseconds scan_wait)
|
74
124
|
{
|
75
125
|
opts_.scan_wait(scan_wait);
|
76
126
|
return *this;
|
77
127
|
}
|
78
128
|
|
129
|
+
/**
|
130
|
+
* Set the readonly hint for this query.
|
131
|
+
*
|
132
|
+
* @see query_options::readonly
|
133
|
+
*
|
134
|
+
* @param readonly True if query doesn't mutate documents.
|
135
|
+
* @return reference to this object, convenient for chaining calls.
|
136
|
+
*/
|
79
137
|
transaction_query_options& readonly(bool readonly)
|
80
138
|
{
|
81
139
|
opts_.readonly(readonly);
|
82
140
|
return *this;
|
83
141
|
}
|
84
|
-
|
142
|
+
/**
|
143
|
+
* Set the scan cap for this query.
|
144
|
+
*
|
145
|
+
* @see query_options::scan_cap for details.
|
146
|
+
*
|
147
|
+
* @param cap Desired cap.
|
148
|
+
* @return reference to this object, convenient for chaining calls.
|
149
|
+
*/
|
85
150
|
transaction_query_options& scan_cap(std::uint64_t cap)
|
86
151
|
{
|
87
152
|
opts_.scan_cap(cap);
|
88
153
|
return *this;
|
89
154
|
}
|
90
|
-
|
155
|
+
/**
|
156
|
+
* Set pipeline_batch size for this query.
|
157
|
+
*
|
158
|
+
* @see query_options::pipeline_batch for details.
|
159
|
+
*
|
160
|
+
* @param batch desired batch size.
|
161
|
+
* @return reference to this object, convenient for chaining calls.
|
162
|
+
*/
|
91
163
|
transaction_query_options& pipeline_batch(std::uint64_t batch)
|
92
164
|
{
|
93
165
|
opts_.pipeline_batch(batch);
|
94
166
|
return *this;
|
95
167
|
}
|
96
168
|
|
169
|
+
/**
|
170
|
+
* Set pipeline cap for this query.
|
171
|
+
*
|
172
|
+
* @see query_options::pipeline_cap for details.
|
173
|
+
*
|
174
|
+
* @param cap desired cap.
|
175
|
+
* @return reference to this object, convenient for chaining calls.
|
176
|
+
*/
|
97
177
|
transaction_query_options& pipeline_cap(std::uint64_t cap)
|
98
178
|
{
|
99
179
|
opts_.pipeline_cap(cap);
|
100
180
|
return *this;
|
101
181
|
}
|
102
182
|
|
183
|
+
/**
|
184
|
+
* Set positional parameters for this query.
|
185
|
+
*
|
186
|
+
* @see query_options::positional_parameters for details.
|
187
|
+
*
|
188
|
+
* @tparam Parameters Types of the parameters
|
189
|
+
* @param parameters the sequence of positional parameters for this query.
|
190
|
+
* @return reference to this object, convenient for chaining calls.
|
191
|
+
*/
|
103
192
|
template<typename... Parameters>
|
104
193
|
auto positional_parameters(const Parameters&... parameters)
|
105
194
|
{
|
106
195
|
opts_.positional_parameters(parameters...);
|
107
196
|
return *this;
|
108
197
|
}
|
109
|
-
|
198
|
+
/**
|
199
|
+
* Set named parameters for this query.
|
200
|
+
*
|
201
|
+
* @see query_options::named_parameters for details.
|
202
|
+
*
|
203
|
+
* @tparam Parameters Types of the parameter pairs.
|
204
|
+
* @param parameters the sequence of name-value pairs. Each value will be encoded into JSON.
|
205
|
+
* @return reference to this object, convenient for chaining calls.
|
206
|
+
*/
|
110
207
|
template<typename... Parameters>
|
111
208
|
transaction_query_options& named_parameters(const Parameters&... parameters)
|
112
209
|
{
|
113
210
|
opts_.named_parameters(parameters...);
|
114
211
|
return *this;
|
115
212
|
}
|
116
|
-
|
213
|
+
/**
|
214
|
+
* Set metrics for this query.
|
215
|
+
*
|
216
|
+
* If true, the query results will contain metrics. This is true by default for transactional queries.
|
217
|
+
* @see query_options::metrics for details.
|
218
|
+
*
|
219
|
+
* @param metrics True if metrics are desired.
|
220
|
+
* @return reference to this object, convenient for chaining calls.
|
221
|
+
*/
|
117
222
|
transaction_query_options& metrics(bool metrics)
|
118
223
|
{
|
119
224
|
opts_.metrics(metrics);
|
120
225
|
return *this;
|
121
226
|
}
|
122
227
|
|
228
|
+
/**
|
229
|
+
* Set max parallelism for this query.
|
230
|
+
*
|
231
|
+
* @see query_options::max_parallelism for details.
|
232
|
+
*
|
233
|
+
* @param max Desired max parallelism
|
234
|
+
* @return reference to this object, convenient for chaining calls.
|
235
|
+
*/
|
123
236
|
transaction_query_options& max_parallelism(std::uint64_t max)
|
124
237
|
{
|
125
238
|
opts_.max_parallelism(max);
|
126
239
|
return *this;
|
127
240
|
}
|
128
241
|
|
129
|
-
/** @
|
242
|
+
/** @private */
|
130
243
|
transaction_query_options& encoded_raw_options(std::map<std::string, codec::binary, std::less<>> options)
|
131
244
|
{
|
132
245
|
opts_.encoded_raw_options(options);
|
133
246
|
return *this;
|
134
247
|
}
|
135
248
|
|
136
|
-
/** @
|
249
|
+
/** @private */
|
137
250
|
transaction_query_options& encoded_positional_parameters(std::vector<codec::binary> parameters)
|
138
251
|
{
|
139
252
|
opts_.encoded_positional_parameters(parameters);
|
140
253
|
return *this;
|
141
254
|
}
|
142
255
|
|
143
|
-
/** @
|
256
|
+
/** @private */
|
144
257
|
transaction_query_options& encoded_named_parameters(std::map<std::string, codec::binary, std::less<>> parameters)
|
145
258
|
{
|
146
259
|
opts_.encoded_named_parameters(parameters);
|
147
260
|
return *this;
|
148
261
|
}
|
149
262
|
|
150
|
-
/** @
|
263
|
+
/** @private */
|
151
264
|
const query_options& get_query_options() const
|
152
265
|
{
|
153
266
|
return opts_;
|
@@ -20,6 +20,10 @@
|
|
20
20
|
|
21
21
|
namespace couchbase::transactions
|
22
22
|
{
|
23
|
+
/**
|
24
|
+
* Transactional queries will return a transaction_query_result. Note that this is currently identical
|
25
|
+
* to a @ref query_result. See @ref query_result for details.
|
26
|
+
*/
|
23
27
|
class transaction_query_result : public query_result
|
24
28
|
{
|
25
29
|
public:
|
@@ -25,7 +25,7 @@ namespace couchbase::transactions
|
|
25
25
|
* @volatile
|
26
26
|
*
|
27
27
|
* Contains internal information on a transaction,
|
28
|
-
* returned by @ref
|
28
|
+
* returned by @ref couchbase::transactions::transactions::run()
|
29
29
|
*/
|
30
30
|
struct transaction_result {
|
31
31
|
std::string transaction_id;
|
@@ -21,7 +21,9 @@
|
|
21
21
|
#include <couchbase/transactions/transaction_keyspace.hxx>
|
22
22
|
namespace couchbase::transactions
|
23
23
|
{
|
24
|
-
|
24
|
+
/**
|
25
|
+
* Configuration parameters for the background transaction cleanup threads.
|
26
|
+
*/
|
25
27
|
class transactions_cleanup_config
|
26
28
|
{
|
27
29
|
public:
|
@@ -117,7 +119,7 @@ class transactions_cleanup_config
|
|
117
119
|
return *this;
|
118
120
|
}
|
119
121
|
|
120
|
-
/** @
|
122
|
+
/** @private */
|
121
123
|
struct built {
|
122
124
|
bool cleanup_lost_attempts;
|
123
125
|
bool cleanup_client_attempts;
|
@@ -125,7 +127,7 @@ class transactions_cleanup_config
|
|
125
127
|
std::list<couchbase::transactions::transaction_keyspace> collections;
|
126
128
|
};
|
127
129
|
|
128
|
-
/** @
|
130
|
+
/** @private */
|
129
131
|
[[nodiscard]] auto build() const -> built
|
130
132
|
{
|
131
133
|
return { cleanup_lost_attempts_, cleanup_client_attempts_, cleanup_window_, collections_ };
|
@@ -53,6 +53,8 @@ class transactions_config
|
|
53
53
|
/**
|
54
54
|
* @brief Get the default durability level for all transaction operations
|
55
55
|
*
|
56
|
+
* @see couchbase::durability_level for details.
|
57
|
+
*
|
56
58
|
* @return The default durability level used for write operations.
|
57
59
|
*/
|
58
60
|
[[nodiscard]] couchbase::durability_level durability_level() const
|
@@ -63,6 +65,8 @@ class transactions_config
|
|
63
65
|
/**
|
64
66
|
* @brief Set the default durability level for all transaction operations
|
65
67
|
*
|
68
|
+
* @see couchbase::durability_level for details.
|
69
|
+
*
|
66
70
|
* @param level The default durability level desired for write operations.
|
67
71
|
* @return reference to this, so calls can be chained.
|
68
72
|
*/
|
@@ -115,7 +119,7 @@ class transactions_config
|
|
115
119
|
/**
|
116
120
|
* @brief Set the expiration time for transactions.
|
117
121
|
*
|
118
|
-
* @param duration desired expiration for transactions.
|
122
|
+
* @param duration desired expiration for transactions.
|
119
123
|
* @return reference to this, so calls can be chained.
|
120
124
|
*/
|
121
125
|
template<typename T>
|
@@ -206,7 +210,7 @@ class transactions_config
|
|
206
210
|
return *this;
|
207
211
|
}
|
208
212
|
|
209
|
-
/** @
|
213
|
+
/** @private */
|
210
214
|
transactions_config& test_factories(std::shared_ptr<core::transactions::attempt_context_testing_hooks> hooks,
|
211
215
|
std::shared_ptr<core::transactions::cleanup_testing_hooks> cleanup_hooks)
|
212
216
|
{
|
@@ -215,19 +219,19 @@ class transactions_config
|
|
215
219
|
return *this;
|
216
220
|
}
|
217
221
|
|
218
|
-
/** @
|
222
|
+
/** @private */
|
219
223
|
[[nodiscard]] core::transactions::attempt_context_testing_hooks& attempt_context_hooks() const
|
220
224
|
{
|
221
225
|
return *attempt_context_hooks_;
|
222
226
|
}
|
223
227
|
|
224
|
-
/** @
|
228
|
+
/** @private */
|
225
229
|
[[nodiscard]] core::transactions::cleanup_testing_hooks& cleanup_hooks() const
|
226
230
|
{
|
227
231
|
return *cleanup_hooks_;
|
228
232
|
}
|
229
233
|
|
230
|
-
/** @
|
234
|
+
/** @private */
|
231
235
|
struct built {
|
232
236
|
couchbase::durability_level level;
|
233
237
|
std::chrono::nanoseconds expiration_time;
|
@@ -19,11 +19,14 @@
|
|
19
19
|
|
20
20
|
namespace couchbase::transactions
|
21
21
|
{
|
22
|
+
/**
|
23
|
+
* The transactions_query_config sets the defaults for all queries in the transactions.
|
24
|
+
*/
|
22
25
|
class transactions_query_config
|
23
26
|
{
|
24
27
|
public:
|
25
28
|
/**
|
26
|
-
* Set scan consistency for transactions.
|
29
|
+
* Set scan consistency for transactions. @see query_options::scan_consistency for details.
|
27
30
|
*
|
28
31
|
* @param consistency the query_scan_consistency to use.
|
29
32
|
* @return reference to this, so calls can be chained.
|
@@ -44,12 +47,12 @@ class transactions_query_config
|
|
44
47
|
return scan_consistency_;
|
45
48
|
}
|
46
49
|
|
47
|
-
/** @
|
50
|
+
/** @private */
|
48
51
|
struct built {
|
49
52
|
query_scan_consistency scan_consistency;
|
50
53
|
};
|
51
54
|
|
52
|
-
/** @
|
55
|
+
/** @private */
|
53
56
|
[[nodiscard]] auto build() const -> built
|
54
57
|
{
|
55
58
|
return { scan_consistency_ };
|
@@ -30,14 +30,47 @@ using txn_logic = std::function<void(attempt_context&)>;
|
|
30
30
|
using async_txn_logic = std::function<void(async_attempt_context&)>;
|
31
31
|
using async_txn_complete_logic = std::function<void(couchbase::transaction_error_context, transaction_result)>;
|
32
32
|
|
33
|
+
/**
|
34
|
+
* The transactions object is used to initiate a transaction.
|
35
|
+
*
|
36
|
+
*
|
37
|
+
*/
|
33
38
|
class transactions
|
34
39
|
{
|
35
40
|
public:
|
36
41
|
virtual ~transactions() = default;
|
42
|
+
|
43
|
+
/**
|
44
|
+
* Run a blocking transaction.
|
45
|
+
*
|
46
|
+
* You can supply a lambda or function which uses a yielded {@link attempt_context} to perform a transaction, where each transaction
|
47
|
+
* operation is blocking. A simple usage would be to get a document and replace the contents:
|
48
|
+
*
|
49
|
+
* @snippet{trimleft} test/test_transaction_examples.cxx simple-blocking-txn
|
50
|
+
*
|
51
|
+
* @param logic a lambda or function which uses the yielded {@link attempt_context} to perform the desired transactional operations.
|
52
|
+
* @param cfg if passed in, these options override the defaults, or those set in the {@link cluster_options}.
|
53
|
+
* @return an {@link transaction_error_context}, and a {@link transaction_result} representing the results of the transaction.
|
54
|
+
*/
|
37
55
|
virtual std::pair<transaction_error_context, transaction_result> run(txn_logic&& logic,
|
38
56
|
const transaction_options& cfg = transaction_options()) = 0;
|
57
|
+
/**
|
58
|
+
* Run an asynchronous transaction.
|
59
|
+
*
|
60
|
+
* You can supply a lambda or function which uses a yielded {@link async_attempt_context} to perform a transaction, where each
|
61
|
+
* transaction operation is asynchronous. A simple usage would be to get 3 document and replace the contents of each. In the example
|
62
|
+
* below, we get the 3 documents in parallel, and update each when the get returns the document. This can be significantly faster than
|
63
|
+
* getting each document in serial, and updating it using the blocking api:
|
64
|
+
*
|
65
|
+
* @snippet{trimleft} test/test_transaction_examples.cxx simple-async-txn
|
66
|
+
*
|
67
|
+
* @param logic a lambda or function which uses the yielded {@link async_attempt_context} to perform the desired transactional
|
68
|
+
* operations.
|
69
|
+
* @param complete_callback a lambda or function to which is yielded a {transaction_error_context} and {transaction_result}.
|
70
|
+
* @param cfg if passed in, these options override the defaults, or those set in the {@link cluster_options}.
|
71
|
+
*/
|
39
72
|
virtual void run(async_txn_logic&& logic,
|
40
73
|
async_txn_complete_logic&& complete_callback,
|
41
74
|
const transaction_options& cfg = transaction_options()) = 0;
|
42
75
|
};
|
43
|
-
} // namespace couchbase::transactions
|
76
|
+
} // namespace couchbase::transactions
|
@@ -89,8 +89,8 @@ initiate_unlock_operation(std::shared_ptr<couchbase::core::cluster> core,
|
|
89
89
|
std::string collection_name,
|
90
90
|
std::string document_key,
|
91
91
|
couchbase::cas cas,
|
92
|
-
unlock_options::built options,
|
93
|
-
unlock_handler&& handler);
|
92
|
+
couchbase::unlock_options::built options,
|
93
|
+
couchbase::unlock_handler&& handler);
|
94
94
|
#endif
|
95
95
|
} // namespace impl
|
96
96
|
} // namespace core
|
@@ -0,0 +1,41 @@
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
|
+
/*
|
3
|
+
* Copyright 2020-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 <functional>
|
21
|
+
#include <memory>
|
22
|
+
#include <optional>
|
23
|
+
#include <string>
|
24
|
+
|
25
|
+
namespace couchbase
|
26
|
+
{
|
27
|
+
struct update_bucket_options : public common_options<update_bucket_options> {
|
28
|
+
public:
|
29
|
+
struct built : public common_options<update_bucket_options>::built {
|
30
|
+
};
|
31
|
+
|
32
|
+
[[nodiscard]] auto build() const -> built
|
33
|
+
{
|
34
|
+
return { build_common_options() };
|
35
|
+
}
|
36
|
+
|
37
|
+
private:
|
38
|
+
};
|
39
|
+
|
40
|
+
using update_bucket_handler = std::function<void(couchbase::manager_error_context)>;
|
41
|
+
} // namespace couchbase
|
@@ -149,9 +149,9 @@ initiate_upsert_operation(std::shared_ptr<couchbase::core::cluster> core,
|
|
149
149
|
std::string scope_name,
|
150
150
|
std::string collection_name,
|
151
151
|
std::string document_key,
|
152
|
-
codec::encoded_value encoded,
|
153
|
-
upsert_options::built options,
|
154
|
-
upsert_handler&& handler);
|
152
|
+
couchbase::codec::encoded_value encoded,
|
153
|
+
couchbase::upsert_options::built options,
|
154
|
+
couchbase::upsert_handler&& handler);
|
155
155
|
#endif
|
156
156
|
} // namespace impl
|
157
157
|
} // namespace core
|
@@ -81,35 +81,4 @@ class watch_query_indexes_options : public common_options<watch_query_indexes_op
|
|
81
81
|
*/
|
82
82
|
|
83
83
|
using watch_query_indexes_handler = std::function<void(couchbase::manager_error_context)>;
|
84
|
-
|
85
|
-
#ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
|
86
|
-
namespace core
|
87
|
-
{
|
88
|
-
class cluster;
|
89
|
-
class query_context;
|
90
|
-
namespace impl
|
91
|
-
{
|
92
|
-
|
93
|
-
/**
|
94
|
-
* @since 1.0.0
|
95
|
-
* @internal
|
96
|
-
*/
|
97
|
-
void
|
98
|
-
initiate_watch_query_indexes(std::shared_ptr<couchbase::core::cluster> core,
|
99
|
-
std::string bucket_name,
|
100
|
-
std::vector<std::string> index_names,
|
101
|
-
couchbase::watch_query_indexes_options::built options,
|
102
|
-
query_context query_ctx,
|
103
|
-
std::string collection_name,
|
104
|
-
watch_query_indexes_handler&& handler);
|
105
|
-
void
|
106
|
-
initiate_watch_query_indexes(std::shared_ptr<couchbase::core::cluster> core,
|
107
|
-
std::string bucket_name,
|
108
|
-
std::vector<std::string> index_names,
|
109
|
-
couchbase::watch_query_indexes_options::built options,
|
110
|
-
watch_query_indexes_handler&& handler);
|
111
|
-
|
112
|
-
#endif
|
113
|
-
} // namespace impl
|
114
|
-
} // namespace core
|
115
84
|
} // namespace couchbase
|
@@ -0,0 +1,83 @@
|
|
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
|
+
* A wildcard query is a query in which term the character `*` will match `0..n` occurrences of any characters and `?` will match `1`
|
29
|
+
* occurrence of any character.
|
30
|
+
*
|
31
|
+
* Match documents where field `reviews.content` contains words starting with `"inter"`:
|
32
|
+
* @snippet test_unit_search.cxx search-wildcard
|
33
|
+
*
|
34
|
+
* @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-wildcard.html server documentation
|
35
|
+
*
|
36
|
+
* @since 1.0.0
|
37
|
+
* @committed
|
38
|
+
*/
|
39
|
+
class wildcard_query : public search_query
|
40
|
+
{
|
41
|
+
public:
|
42
|
+
/**
|
43
|
+
* Create a new wildcard query.
|
44
|
+
*
|
45
|
+
* @param regexp the wildcard-containing term to be analyzed and searched
|
46
|
+
*
|
47
|
+
* @since 1.0.0
|
48
|
+
* @committed
|
49
|
+
*/
|
50
|
+
explicit wildcard_query(std::string regexp)
|
51
|
+
: wildcard_{ std::move(regexp) }
|
52
|
+
{
|
53
|
+
}
|
54
|
+
|
55
|
+
/**
|
56
|
+
* If a field is specified, only terms in that field will be matched.
|
57
|
+
*
|
58
|
+
* @param field_name name of the field to be matched
|
59
|
+
*
|
60
|
+
* @return this query for chaining purposes.
|
61
|
+
*
|
62
|
+
* @since 1.0.0
|
63
|
+
* @committed
|
64
|
+
*/
|
65
|
+
auto field(std::string field_name) -> wildcard_query&
|
66
|
+
{
|
67
|
+
field_ = std::move(field_name);
|
68
|
+
return *this;
|
69
|
+
}
|
70
|
+
|
71
|
+
/**
|
72
|
+
* @return encoded representation of the query.
|
73
|
+
*
|
74
|
+
* @since 1.0.0
|
75
|
+
* @internal
|
76
|
+
*/
|
77
|
+
[[nodiscard]] auto encode() const -> encoded_search_query override;
|
78
|
+
|
79
|
+
private:
|
80
|
+
std::string wildcard_;
|
81
|
+
std::optional<std::string> field_{};
|
82
|
+
};
|
83
|
+
} // namespace couchbase
|
@@ -25,18 +25,21 @@ unit_test(json_streaming_lexer)
|
|
25
25
|
unit_test(jsonsl)
|
26
26
|
unit_test(config_profiles)
|
27
27
|
unit_test(options)
|
28
|
+
unit_test(search)
|
29
|
+
unit_test(query)
|
28
30
|
target_link_libraries(test_unit_jsonsl jsonsl)
|
29
31
|
|
30
32
|
integration_benchmark(get)
|
31
33
|
|
32
|
-
transaction_test(
|
33
|
-
transaction_test(
|
34
|
-
transaction_test(
|
35
|
-
transaction_test(
|
36
|
-
transaction_test(
|
34
|
+
transaction_test(context)
|
35
|
+
transaction_test(simple)
|
36
|
+
transaction_test(simple_async)
|
37
|
+
transaction_test(public_blocking_api)
|
38
|
+
transaction_test(public_async_api)
|
37
39
|
|
38
40
|
unit_test(transaction_logging)
|
39
41
|
unit_test(transaction_utils)
|
40
42
|
unit_test(waitable_op_list)
|
41
43
|
|
42
44
|
integration_test(examples)
|
45
|
+
transaction_test(examples)
|