couchbase 3.4.1 → 3.4.3
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 +59 -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/ThirdPartyDependencies.cmake +4 -0
- data/ext/couchbase/cmake/build_config.hxx.in +3 -0
- data/ext/couchbase/core/bucket.cxx +3 -2
- data/ext/couchbase/core/bucket.hxx +9 -0
- data/ext/couchbase/core/cluster.hxx +17 -0
- data/ext/couchbase/core/cluster_options.cxx +2 -2
- data/ext/couchbase/core/cluster_options.hxx +4 -7
- data/ext/couchbase/core/{config_profile.cxx → cluster_options_fwd.hxx} +7 -6
- data/ext/couchbase/core/config_profile.hxx +2 -65
- data/ext/couchbase/core/config_profiles.cxx +79 -0
- data/ext/couchbase/core/config_profiles.hxx +56 -0
- data/ext/couchbase/core/error_context/search.hxx +1 -1
- data/ext/couchbase/core/impl/analytics.cxx +237 -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/cluster.cxx +2 -1
- data/ext/couchbase/core/impl/conjunction_query.cxx +51 -0
- 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 +5 -3
- 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/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/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_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/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 +5 -5
- 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/wildcard_query.cxx +40 -0
- data/ext/couchbase/core/io/dns_client.cxx +225 -0
- data/ext/couchbase/core/io/dns_client.hxx +19 -188
- data/ext/couchbase/core/io/http_context.hxx +1 -1
- data/ext/couchbase/core/io/http_session.hxx +10 -0
- data/ext/couchbase/core/io/http_session_manager.hxx +5 -3
- data/ext/couchbase/core/io/mcbp_session.cxx +28 -1
- data/ext/couchbase/core/io/retry_orchestrator.hxx +3 -2
- data/ext/couchbase/core/json_string.hxx +5 -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_mutate_in.hxx +1 -1
- data/ext/couchbase/core/operations/document_prepend.hxx +1 -1
- data/ext/couchbase/core/operations/document_query.cxx +2 -0
- data/ext/couchbase/core/operations/document_query.hxx +6 -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/protocol/client_request.hxx +11 -2
- data/ext/couchbase/core/public_fwd.hxx +21 -0
- data/ext/couchbase/core/tls_verify_mode.hxx +26 -0
- data/ext/couchbase/core/topology/configuration.cxx +15 -2
- data/ext/couchbase/core/topology/configuration.hxx +5 -1
- data/ext/couchbase/core/transactions/active_transaction_record.hxx +2 -2
- data/ext/couchbase/core/transactions/attempt_context_impl.cxx +3 -0
- data/ext/couchbase/core/transactions/attempt_context_impl.hxx +1 -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/transactions/internal/transaction_context.hxx +12 -12
- data/ext/couchbase/core/transactions/internal/transactions_cleanup.hxx +7 -1
- data/ext/couchbase/core/transactions/transaction_context.cxx +1 -0
- data/ext/couchbase/core/transactions/transactions_cleanup.cxx +144 -155
- data/ext/couchbase/core/utils/connection_string.cxx +27 -3
- data/ext/couchbase/core/utils/connection_string.hxx +3 -3
- data/ext/couchbase/core/utils/json.cxx +4 -1
- data/ext/couchbase/couchbase/analytics_error_context.hxx +143 -0
- data/ext/couchbase/couchbase/analytics_meta_data.hxx +155 -0
- data/ext/couchbase/couchbase/analytics_metrics.hxx +163 -0
- data/ext/couchbase/couchbase/analytics_options.hxx +359 -0
- data/ext/couchbase/couchbase/analytics_result.hxx +102 -0
- data/ext/couchbase/couchbase/analytics_scan_consistency.hxx +46 -0
- data/ext/couchbase/couchbase/analytics_status.hxx +41 -0
- data/ext/couchbase/couchbase/analytics_warning.hxx +85 -0
- data/ext/couchbase/couchbase/behavior_options.hxx +10 -1
- data/ext/couchbase/couchbase/boolean_field_query.hxx +77 -0
- data/ext/couchbase/couchbase/boolean_query.hxx +223 -0
- data/ext/couchbase/couchbase/cluster.hxx +75 -1
- data/ext/couchbase/couchbase/conjunction_query.hxx +88 -0
- 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/error_context.hxx +7 -6
- data/ext/couchbase/couchbase/fmt/analytics_scan_consistency.hxx +52 -0
- data/ext/couchbase/couchbase/fmt/analytics_status.hxx +76 -0
- 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/highlight_style.hxx +45 -0
- 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/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_options.hxx +0 -1
- data/ext/couchbase/couchbase/query_string_query.hxx +72 -0
- data/ext/couchbase/couchbase/regexp_query.hxx +82 -0
- data/ext/couchbase/couchbase/scope.hxx +73 -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 +3 -0
- 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/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 +68 -1
- 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/wildcard_query.hxx +83 -0
- data/ext/couchbase/test/CMakeLists.txt +8 -7
- data/ext/couchbase/test/benchmark_helper_integration.hxx +2 -2
- data/ext/couchbase/test/test_helper.hxx +6 -6
- data/ext/couchbase/test/test_integration_analytics.cxx +314 -16
- data/ext/couchbase/test/test_integration_collections.cxx +7 -3
- data/ext/couchbase/test/test_integration_connect.cxx +7 -3
- data/ext/couchbase/test/test_integration_crud.cxx +19 -2
- 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 +324 -11
- data/ext/couchbase/test/test_integration_management.cxx +162 -94
- data/ext/couchbase/test/test_integration_query.cxx +68 -10
- data/ext/couchbase/test/test_integration_range_scan.cxx +12 -12
- data/ext/couchbase/test/test_integration_read_replica.cxx +48 -11
- data/ext/couchbase/test/test_integration_search.cxx +621 -0
- data/ext/couchbase/test/test_integration_subdoc.cxx +62 -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_simple.cxx → test_transaction_simple.cxx} +90 -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 +13 -13
- data/ext/couchbase/test/test_unit_connection_string.cxx +35 -0
- data/ext/couchbase/test/test_unit_json_transcoder.cxx +4 -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/third_party/snappy/CMakeLists.txt +150 -27
- data/ext/couchbase/third_party/snappy/cmake/config.h.in +28 -24
- data/ext/couchbase/third_party/snappy/snappy-internal.h +189 -25
- data/ext/couchbase/third_party/snappy/snappy-sinksource.cc +26 -9
- data/ext/couchbase/third_party/snappy/snappy-sinksource.h +11 -11
- data/ext/couchbase/third_party/snappy/snappy-stubs-internal.cc +1 -1
- data/ext/couchbase/third_party/snappy/snappy-stubs-internal.h +227 -308
- data/ext/couchbase/third_party/snappy/snappy-stubs-public.h.in +0 -11
- data/ext/couchbase/third_party/snappy/snappy.cc +1176 -410
- data/ext/couchbase/third_party/snappy/snappy.h +19 -4
- data/ext/couchbase.cxx +85 -22
- data/ext/revisions.rb +3 -3
- data/lib/couchbase/authenticator.rb +0 -1
- data/lib/couchbase/cluster.rb +13 -13
- data/lib/couchbase/cluster_registry.rb +7 -2
- data/lib/couchbase/config_profiles.rb +1 -1
- data/lib/couchbase/configuration.rb +3 -4
- data/lib/couchbase/json_transcoder.rb +12 -5
- 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 +85 -2
- 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/search_options.rb +163 -240
- data/lib/couchbase/transcoder_flags.rb +62 -0
- data/lib/couchbase/version.rb +1 -1
- metadata +151 -12
- data/ext/couchbase/core/CMakeLists.txt +0 -0
- /data/ext/couchbase/test/{test_transaction_transaction_public_async_api.cxx → test_transaction_public_async_api.cxx} +0 -0
- /data/ext/couchbase/test/{test_transaction_transaction_public_blocking_api.cxx → test_transaction_public_blocking_api.cxx} +0 -0
@@ -17,9 +17,18 @@
|
|
17
17
|
|
18
18
|
#include "test_helper_integration.hxx"
|
19
19
|
|
20
|
+
#include "core/operations/management/query_index_build.hxx"
|
21
|
+
#include "core/operations/management/query_index_create.hxx"
|
22
|
+
#include "core/operations/management/query_index_get_all.hxx"
|
23
|
+
|
24
|
+
#include <couchbase/boolean_query.hxx>
|
20
25
|
#include <couchbase/cluster.hxx>
|
21
26
|
#include <couchbase/fmt/cas.hxx>
|
22
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>
|
23
32
|
|
24
33
|
#include <tao/json.hpp>
|
25
34
|
|
@@ -40,9 +49,9 @@ main(int argc, const char* argv[])
|
|
40
49
|
return 1;
|
41
50
|
}
|
42
51
|
|
43
|
-
std::string connection_string{ argv[1] };
|
44
|
-
std::string username{ argv[2] };
|
45
|
-
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"
|
46
55
|
std::string bucket_name{ "travel-sample" };
|
47
56
|
|
48
57
|
// run IO context on separate thread
|
@@ -55,6 +64,7 @@ main(int argc, const char* argv[])
|
|
55
64
|
// For example, optimize timeouts for WAN
|
56
65
|
options.apply_profile("wan_development");
|
57
66
|
|
67
|
+
// [1] connect to cluster using the given connection string and the options
|
58
68
|
auto [cluster, ec] = couchbase::cluster::connect(io, connection_string, options).get();
|
59
69
|
if (ec) {
|
60
70
|
fmt::print("unable to connect to the cluster: {}\n", ec.message());
|
@@ -68,8 +78,7 @@ main(int argc, const char* argv[])
|
|
68
78
|
auto scope = bucket.scope("tenant_agent_00");
|
69
79
|
auto collection = scope.collection("users");
|
70
80
|
|
71
|
-
{
|
72
|
-
// upsert document
|
81
|
+
{ // [2] upsert document
|
73
82
|
auto [ctx, upsert_result] = collection.upsert("my-document", tao::json::value{ { "name", "mike" } }).get();
|
74
83
|
if (ctx.ec()) {
|
75
84
|
fmt::print("unable to upsert the document \"{}\": {}\n", ctx.id(), ctx.ec().message());
|
@@ -78,8 +87,7 @@ main(int argc, const char* argv[])
|
|
78
87
|
fmt::print("saved document \"{}\", cas={}, token={}\n", ctx.id(), upsert_result.cas(), upsert_result.mutation_token().value());
|
79
88
|
}
|
80
89
|
|
81
|
-
{
|
82
|
-
// get document
|
90
|
+
{ // [3] get document
|
83
91
|
auto [ctx, get_result] = collection.get("my-document").get();
|
84
92
|
if (ctx.ec()) {
|
85
93
|
fmt::print("unable to get the document \"{}\": {}\n", ctx.id(), ctx.ec().message());
|
@@ -89,8 +97,7 @@ main(int argc, const char* argv[])
|
|
89
97
|
fmt::print("retrieved document \"{}\", name=\"{}\"\n", ctx.id(), name);
|
90
98
|
}
|
91
99
|
|
92
|
-
{
|
93
|
-
// N1QL query
|
100
|
+
{ // [4] N1QL query
|
94
101
|
auto inventory_scope = bucket.scope("inventory");
|
95
102
|
auto [ctx, query_result] = inventory_scope.query("SELECT * FROM airline WHERE id = 10").get();
|
96
103
|
if (ctx.ec()) {
|
@@ -102,7 +109,7 @@ main(int argc, const char* argv[])
|
|
102
109
|
}
|
103
110
|
}
|
104
111
|
|
105
|
-
// close cluster connection
|
112
|
+
// [5] close cluster connection
|
106
113
|
cluster.close();
|
107
114
|
guard.reset();
|
108
115
|
|
@@ -126,9 +133,49 @@ TEST_CASE("example: start using", "[integration]")
|
|
126
133
|
{
|
127
134
|
test::utils::integration_test_guard integration;
|
128
135
|
if (!integration.cluster_version().supports_collections()) {
|
129
|
-
|
136
|
+
SKIP("cluster does not support collections");
|
137
|
+
}
|
138
|
+
if (integration.cluster_version().is_mock()) {
|
139
|
+
SKIP("GOCAVES cannot load travel-sample bucket. See https://github.com/couchbaselabs/gocaves/issues/101");
|
140
|
+
}
|
141
|
+
|
142
|
+
{
|
143
|
+
couchbase::core::operations::management::query_index_create_request req{};
|
144
|
+
req.index_name = "def_inventory_airline_primary";
|
145
|
+
req.bucket_name = "travel-sample";
|
146
|
+
req.scope_name = "inventory";
|
147
|
+
req.collection_name = "airline";
|
148
|
+
req.is_primary = true;
|
149
|
+
req.ignore_if_exists = true;
|
150
|
+
auto resp = test::utils::execute(integration.cluster, req);
|
151
|
+
REQUIRE_FALSE(resp.ctx.ec);
|
130
152
|
}
|
131
153
|
|
154
|
+
{
|
155
|
+
couchbase::core::operations::management::query_index_build_request req{};
|
156
|
+
req.index_names = { "def_inventory_airline_primary" };
|
157
|
+
req.bucket_name = "travel-sample";
|
158
|
+
req.scope_name = "inventory";
|
159
|
+
req.collection_name = "airline";
|
160
|
+
auto resp = test::utils::execute(integration.cluster, req);
|
161
|
+
REQUIRE_FALSE(resp.ctx.ec);
|
162
|
+
}
|
163
|
+
|
164
|
+
CHECK(test::utils::wait_until(
|
165
|
+
[&integration]() {
|
166
|
+
couchbase::core::operations::management::query_index_get_all_request req{};
|
167
|
+
req.bucket_name = "travel-sample";
|
168
|
+
req.scope_name = "inventory";
|
169
|
+
auto resp = test::utils::execute(integration.cluster, req);
|
170
|
+
if (resp.ctx.ec) {
|
171
|
+
return false;
|
172
|
+
}
|
173
|
+
return std::any_of(resp.indexes.begin(), resp.indexes.end(), [](const auto& index) {
|
174
|
+
return index.collection_name == "airline" && index.is_primary && index.state == "online";
|
175
|
+
});
|
176
|
+
},
|
177
|
+
std::chrono::minutes{ 5 }));
|
178
|
+
|
132
179
|
const auto env = test::utils::test_context::load_from_environment();
|
133
180
|
const char* argv[] = {
|
134
181
|
"start_using", // name of the "executable"
|
@@ -139,3 +186,269 @@ TEST_CASE("example: start using", "[integration]")
|
|
139
186
|
|
140
187
|
REQUIRE(start_using::main(4, argv) == 0);
|
141
188
|
}
|
189
|
+
|
190
|
+
namespace example_search
|
191
|
+
{
|
192
|
+
//! [example-search]
|
193
|
+
#include <couchbase/cluster.hxx>
|
194
|
+
|
195
|
+
#include <couchbase/boolean_query.hxx>
|
196
|
+
#include <couchbase/match_query.hxx>
|
197
|
+
#include <couchbase/numeric_range_query.hxx>
|
198
|
+
#include <couchbase/query_string_query.hxx>
|
199
|
+
|
200
|
+
#include <couchbase/fmt/cas.hxx>
|
201
|
+
#include <couchbase/fmt/mutation_token.hxx>
|
202
|
+
|
203
|
+
#include <tao/json.hpp>
|
204
|
+
|
205
|
+
int
|
206
|
+
main(int argc, const char* argv[])
|
207
|
+
{
|
208
|
+
if (argc != 4) {
|
209
|
+
fmt::print("USAGE: ./example_search couchbase://127.0.0.1 Administrator password\n");
|
210
|
+
return 1;
|
211
|
+
}
|
212
|
+
|
213
|
+
std::string connection_string{ argv[1] }; // "couchbase://127.0.0.1"
|
214
|
+
std::string username{ argv[2] }; // "Administrator"
|
215
|
+
std::string password{ argv[3] }; // "password"
|
216
|
+
std::string bucket_name{ "travel-sample" };
|
217
|
+
|
218
|
+
// run IO context on separate thread
|
219
|
+
asio::io_context io;
|
220
|
+
auto guard = asio::make_work_guard(io);
|
221
|
+
std::thread io_thread([&io]() { io.run(); });
|
222
|
+
|
223
|
+
auto options = couchbase::cluster_options(username, password);
|
224
|
+
// customize through the 'options'.
|
225
|
+
// For example, optimize timeouts for WAN
|
226
|
+
options.apply_profile("wan_development");
|
227
|
+
|
228
|
+
auto [cluster, ec] = couchbase::cluster::connect(io, connection_string, options).get();
|
229
|
+
if (ec) {
|
230
|
+
fmt::print("unable to connect to the cluster: {}\n", ec.message());
|
231
|
+
return 1;
|
232
|
+
}
|
233
|
+
|
234
|
+
{
|
235
|
+
fmt::print("--- simple query\n");
|
236
|
+
auto [ctx, result] = cluster.search_query("travel-sample-index", couchbase::query_string_query("nice bar")).get();
|
237
|
+
|
238
|
+
if (ctx.ec()) {
|
239
|
+
fmt::print("unable to perform search query: {}, ({}, {})\n", ctx.ec().message(), ctx.status(), ctx.error());
|
240
|
+
return 1;
|
241
|
+
}
|
242
|
+
fmt::print("{} hits, total: {}\n", result.rows().size(), result.meta_data().metrics().total_rows());
|
243
|
+
for (const auto& row : result.rows()) {
|
244
|
+
fmt::print("id: {}, score: {}\n", row.id(), row.score());
|
245
|
+
}
|
246
|
+
}
|
247
|
+
|
248
|
+
{
|
249
|
+
fmt::print("--- simple query with fields\n");
|
250
|
+
auto [ctx, result] = cluster
|
251
|
+
.search_query("travel-sample-index",
|
252
|
+
couchbase::query_string_query("nice bar"),
|
253
|
+
couchbase::search_options{}.fields({ "description" }))
|
254
|
+
.get();
|
255
|
+
|
256
|
+
if (ctx.ec()) {
|
257
|
+
fmt::print("unable to perform search query: {}, ({}, {})\n", ctx.ec().message(), ctx.status(), ctx.error());
|
258
|
+
return 1;
|
259
|
+
}
|
260
|
+
fmt::print("{} hits, total: {}\n", result.rows().size(), result.meta_data().metrics().total_rows());
|
261
|
+
for (const auto& row : result.rows()) {
|
262
|
+
auto fields = row.fields_as<couchbase::codec::tao_json_serializer>();
|
263
|
+
fmt::print("id: {}, score: {}, description: {}\n", row.id(), row.score(), fields["description"].as<std::string>());
|
264
|
+
}
|
265
|
+
}
|
266
|
+
|
267
|
+
{
|
268
|
+
fmt::print("--- simple query with limit\n");
|
269
|
+
auto [ctx, result] =
|
270
|
+
cluster
|
271
|
+
.search_query("travel-sample-index", couchbase::query_string_query("nice bar"), couchbase::search_options{}.skip(3).limit(4))
|
272
|
+
.get();
|
273
|
+
|
274
|
+
if (ctx.ec()) {
|
275
|
+
fmt::print("unable to perform search query: {}, ({}, {})\n", ctx.ec().message(), ctx.status(), ctx.error());
|
276
|
+
return 1;
|
277
|
+
}
|
278
|
+
fmt::print("{} hits, total: {}\n", result.rows().size(), result.meta_data().metrics().total_rows());
|
279
|
+
for (const auto& row : result.rows()) {
|
280
|
+
fmt::print("id: {}, score: {}\n", row.id(), row.score());
|
281
|
+
}
|
282
|
+
}
|
283
|
+
|
284
|
+
{
|
285
|
+
fmt::print("--- simple query with highlight\n");
|
286
|
+
auto [ctx, result] =
|
287
|
+
cluster
|
288
|
+
.search_query("travel-sample-index",
|
289
|
+
couchbase::query_string_query("nice bar"),
|
290
|
+
couchbase::search_options{}.highlight(couchbase::highlight_style::html, { "description", "title" }))
|
291
|
+
.get();
|
292
|
+
|
293
|
+
if (ctx.ec()) {
|
294
|
+
fmt::print("unable to perform search query: {}, ({}, {})\n", ctx.ec().message(), ctx.status(), ctx.error());
|
295
|
+
return 1;
|
296
|
+
}
|
297
|
+
fmt::print("{} hits, total: {}\n", result.rows().size(), result.meta_data().metrics().total_rows());
|
298
|
+
for (const auto& row : result.rows()) {
|
299
|
+
fmt::print("id: {}, score: {}\n", row.id(), row.score());
|
300
|
+
for (const auto& [field, fragments] : row.fragments()) {
|
301
|
+
fmt::print("- {}:\n", field);
|
302
|
+
for (const auto& fragment : fragments) {
|
303
|
+
fmt::print("-- {}\n", fragment);
|
304
|
+
}
|
305
|
+
}
|
306
|
+
}
|
307
|
+
}
|
308
|
+
|
309
|
+
{
|
310
|
+
fmt::print("--- simple query with collections\n");
|
311
|
+
auto [ctx, result] = cluster
|
312
|
+
.search_query("travel-sample-index",
|
313
|
+
couchbase::query_string_query("west"),
|
314
|
+
couchbase::search_options{}.collections({ "airline" }))
|
315
|
+
.get();
|
316
|
+
|
317
|
+
if (ctx.ec()) {
|
318
|
+
fmt::print("unable to perform search query: {}, ({}, {})\n", ctx.ec().message(), ctx.status(), ctx.error());
|
319
|
+
return 1;
|
320
|
+
}
|
321
|
+
fmt::print("{} hits, total: {}\n", result.rows().size(), result.meta_data().metrics().total_rows());
|
322
|
+
for (const auto& row : result.rows()) {
|
323
|
+
fmt::print("id: {}, score: {}\n", row.id(), row.score());
|
324
|
+
}
|
325
|
+
}
|
326
|
+
|
327
|
+
{
|
328
|
+
fmt::print("--- query with consistency requirements\n");
|
329
|
+
|
330
|
+
auto bucket = cluster.bucket(bucket_name);
|
331
|
+
auto collection = bucket.scope("inventory").collection("hotel");
|
332
|
+
|
333
|
+
couchbase::mutation_state state;
|
334
|
+
|
335
|
+
{
|
336
|
+
auto [ctx, upsert_result] =
|
337
|
+
collection
|
338
|
+
.upsert(
|
339
|
+
"prancing-pony",
|
340
|
+
tao::json::value{
|
341
|
+
{ "title", "The Prancing Pony" },
|
342
|
+
{ "type", "hotel" },
|
343
|
+
{ "description",
|
344
|
+
"The inn was located just where the East Road bent round the foot of Bree-hill, within the dike that stretched "
|
345
|
+
"around the town. The building was three stories tall with many windows. Its front faced the Road and it had two "
|
346
|
+
"wings that ran back towards the elevated ground of the hill, such that in the rear the second floor was at ground "
|
347
|
+
"level. " } })
|
348
|
+
.get();
|
349
|
+
if (ctx.ec()) {
|
350
|
+
fmt::print("unable to upsert the document \"{}\": {}\n", ctx.id(), ctx.ec().message());
|
351
|
+
return 1;
|
352
|
+
}
|
353
|
+
fmt::print("saved document \"{}\", cas={}, token={}\n",
|
354
|
+
ctx.id(),
|
355
|
+
upsert_result.cas(),
|
356
|
+
upsert_result.mutation_token().value_or(couchbase::mutation_token{}));
|
357
|
+
state.add(upsert_result);
|
358
|
+
}
|
359
|
+
|
360
|
+
auto [ctx, result] =
|
361
|
+
cluster
|
362
|
+
.search_query("travel-sample-index", couchbase::query_string_query("bree"), couchbase::search_options{}.consistent_with(state))
|
363
|
+
.get();
|
364
|
+
|
365
|
+
if (ctx.ec()) {
|
366
|
+
fmt::print("unable to perform search query: {}, ({}, {})\n", ctx.ec().message(), ctx.status(), ctx.error());
|
367
|
+
return 1;
|
368
|
+
}
|
369
|
+
fmt::print("{} hits, total: {}\n", result.rows().size(), result.meta_data().metrics().total_rows());
|
370
|
+
for (const auto& row : result.rows()) {
|
371
|
+
fmt::print("id: {}, score: {}\n", row.id(), row.score());
|
372
|
+
}
|
373
|
+
}
|
374
|
+
|
375
|
+
{
|
376
|
+
fmt::print("--- complex query\n");
|
377
|
+
auto [ctx, result] = cluster
|
378
|
+
.search_query("travel-sample-index",
|
379
|
+
couchbase::boolean_query()
|
380
|
+
.must(couchbase::match_query("honeymoon").field("reviews.content"),
|
381
|
+
couchbase::numeric_range_query().field("reviews.ratings.Overall").min(4))
|
382
|
+
.must_not(couchbase::match_query("San Francisco").field("city")),
|
383
|
+
couchbase::search_options{}.collections({ "hotel" }).highlight())
|
384
|
+
.get();
|
385
|
+
if (ctx.ec()) {
|
386
|
+
fmt::print("unable to perform search query: {}, ({}, {})\n", ctx.ec().message(), ctx.status(), ctx.error());
|
387
|
+
return 1;
|
388
|
+
}
|
389
|
+
fmt::print("{} hits, total: {}\n", result.rows().size(), result.meta_data().metrics().total_rows());
|
390
|
+
for (const auto& row : result.rows()) {
|
391
|
+
fmt::print("id: {}, score: {}\n", row.id(), row.score());
|
392
|
+
}
|
393
|
+
}
|
394
|
+
|
395
|
+
{
|
396
|
+
fmt::print("--- simple query with facets\n");
|
397
|
+
auto [ctx, result] =
|
398
|
+
cluster
|
399
|
+
.search_query("travel-sample-index",
|
400
|
+
couchbase::query_string_query("honeymoon"),
|
401
|
+
couchbase::search_options{}.collections({ "hotel" }).facet("by_country", couchbase::term_facet("country", 3)))
|
402
|
+
.get();
|
403
|
+
if (ctx.ec()) {
|
404
|
+
fmt::print("unable to perform search query: {}, ({}, {})\n", ctx.ec().message(), ctx.status(), ctx.error());
|
405
|
+
return 1;
|
406
|
+
}
|
407
|
+
fmt::print("{} hits, total: {}\n", result.rows().size(), result.meta_data().metrics().total_rows());
|
408
|
+
for (const auto& [name, facet] : result.facets()) {
|
409
|
+
fmt::print("{} facet: total={}, missing={}\n", name, facet->total(), facet->missing());
|
410
|
+
if (name == "by_country") {
|
411
|
+
auto term_facet = std::static_pointer_cast<couchbase::term_facet_result>(facet);
|
412
|
+
for (const auto& group : term_facet->terms()) {
|
413
|
+
fmt::print("* {}: {}\n", group.name(), group.count());
|
414
|
+
}
|
415
|
+
}
|
416
|
+
}
|
417
|
+
}
|
418
|
+
|
419
|
+
// close cluster connection
|
420
|
+
cluster.close();
|
421
|
+
guard.reset();
|
422
|
+
|
423
|
+
io_thread.join();
|
424
|
+
return 0;
|
425
|
+
}
|
426
|
+
|
427
|
+
/*
|
428
|
+
|
429
|
+
$ ./example_search couchbase://127.0.0.1 Administrator password
|
430
|
+
saved document "my-document", cas=17486a1722b20000
|
431
|
+
retrieved document "my-document", name="mike"
|
432
|
+
row: {"airline":{"callsign":"MILE-AIR","country":"United States","iata":"Q5","icao":"MLA","id":10,"name":"40-Mile Air","type":"airline"}}
|
433
|
+
|
434
|
+
*/
|
435
|
+
//! [example-search]
|
436
|
+
} // namespace example_search
|
437
|
+
|
438
|
+
TEST_CASE("example: search", "[integration]")
|
439
|
+
{
|
440
|
+
test::utils::integration_test_guard integration;
|
441
|
+
if (!integration.cluster_version().supports_collections()) {
|
442
|
+
return;
|
443
|
+
}
|
444
|
+
|
445
|
+
const auto env = test::utils::test_context::load_from_environment();
|
446
|
+
const char* argv[] = {
|
447
|
+
"example_search", // name of the "executable"
|
448
|
+
env.connection_string.c_str(),
|
449
|
+
env.username.c_str(),
|
450
|
+
env.password.c_str(),
|
451
|
+
};
|
452
|
+
|
453
|
+
REQUIRE(example_search::main(4, argv) == 0);
|
454
|
+
}
|