couchbase 3.4.2 → 3.4.3
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 +1 -1
- data/ext/couchbase/CMakeLists.txt +57 -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 +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 -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/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/cluster.cxx +2 -0
- 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/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_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/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/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 +17 -0
- data/ext/couchbase/core/utils/json.cxx +4 -1
- 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 +42 -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/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_string_query.hxx +72 -0
- data/ext/couchbase/couchbase/regexp_query.hxx +82 -0
- 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 +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 +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/wildcard_query.hxx +83 -0
- data/ext/couchbase/test/CMakeLists.txt +7 -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 +7 -3
- data/ext/couchbase/test/test_integration_connect.cxx +7 -3
- data/ext/couchbase/test/test_integration_crud.cxx +13 -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 +283 -11
- data/ext/couchbase/test/test_integration_management.cxx +147 -91
- 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 +22 -2
- 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} +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_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.cxx +58 -16
- data/ext/revisions.rb +3 -3
- data/lib/couchbase/authenticator.rb +0 -1
- data/lib/couchbase/cluster.rb +0 -4
- data/lib/couchbase/config_profiles.rb +1 -1
- 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/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 +5 -0
- data/lib/couchbase/transcoder_flags.rb +62 -0
- data/lib/couchbase/version.rb +1 -1
- metadata +139 -11
- data/ext/couchbase/core/config_profile.cxx +0 -47
- /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
|
@@ -0,0 +1,223 @@
|
|
|
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/conjunction_query.hxx>
|
|
21
|
+
#include <couchbase/disjunction_query.hxx>
|
|
22
|
+
#include <couchbase/match_all_query.hxx>
|
|
23
|
+
#include <couchbase/match_none_query.hxx>
|
|
24
|
+
#include <couchbase/search_query.hxx>
|
|
25
|
+
|
|
26
|
+
#include <cstdint>
|
|
27
|
+
#include <memory>
|
|
28
|
+
#include <vector>
|
|
29
|
+
|
|
30
|
+
namespace couchbase
|
|
31
|
+
{
|
|
32
|
+
/**
|
|
33
|
+
* The boolean query is a useful combination of conjunction and disjunction queries. A boolean query takes three lists of queries:
|
|
34
|
+
*
|
|
35
|
+
* * **must** - result documents must satisfy all of these queries.
|
|
36
|
+
* * **should** - result documents should satisfy these queries.
|
|
37
|
+
* * **must not** - result documents must not satisfy any of these queries.
|
|
38
|
+
*
|
|
39
|
+
* At execution, a boolean query that has no child queries in any 3 categories is not allowed and will fail fast.
|
|
40
|
+
*
|
|
41
|
+
* The inner representation of child queries in the `must`/`must_not`/`should` sections are respectively a @ref conjunction_query and two
|
|
42
|
+
* @ref disjunction_query.
|
|
43
|
+
*
|
|
44
|
+
* In the example below the following rules enforced by the boolean query:
|
|
45
|
+
* * retrieved documents MUST match `"hostel room"` in their `reviews.content` field AND have `true` in `free_breakfast` field.
|
|
46
|
+
* * also the documents SHOULD have EITHER `reviews.ratings.Overall > 4` OR `reviews.ratings.Service > 5`.
|
|
47
|
+
* * and finally, exclude documents with `city` `"Padfield"` or `"Gilingham"`.
|
|
48
|
+
*
|
|
49
|
+
* @snippet test_unit_search.cxx search-boolean
|
|
50
|
+
*
|
|
51
|
+
* @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-boolean-field-query.html server documentation
|
|
52
|
+
*
|
|
53
|
+
* @since 1.0.0
|
|
54
|
+
* @committed
|
|
55
|
+
*/
|
|
56
|
+
class boolean_query : public search_query
|
|
57
|
+
{
|
|
58
|
+
public:
|
|
59
|
+
/**
|
|
60
|
+
* Set @ref conjunction_query that groups all queries the documents **must** satisfy.
|
|
61
|
+
*
|
|
62
|
+
* @param query must-query
|
|
63
|
+
*
|
|
64
|
+
* @return this query for chaining purposes.
|
|
65
|
+
*
|
|
66
|
+
* @since 1.0.0
|
|
67
|
+
* @committed
|
|
68
|
+
*/
|
|
69
|
+
auto must(conjunction_query query) -> boolean_query&
|
|
70
|
+
{
|
|
71
|
+
must_ = std::move(query);
|
|
72
|
+
return *this;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Create @ref conjunction_query with given queries and set it as **must** query.
|
|
77
|
+
*
|
|
78
|
+
* @tparam SearchQuery any subclass of @ref search_query
|
|
79
|
+
* @param queries
|
|
80
|
+
*
|
|
81
|
+
* @return this query for chaining purposes.
|
|
82
|
+
*
|
|
83
|
+
* @since 1.0.0
|
|
84
|
+
* @committed
|
|
85
|
+
*/
|
|
86
|
+
template<typename... SearchQuery>
|
|
87
|
+
auto must(SearchQuery... queries) -> boolean_query&
|
|
88
|
+
{
|
|
89
|
+
must_ = conjunction_query(queries...);
|
|
90
|
+
return *this;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Returns @ref conjunction_query that groups all queries the documents **must** satisfy. Use it to add more queries.
|
|
95
|
+
*
|
|
96
|
+
* @return must-query
|
|
97
|
+
*
|
|
98
|
+
* @since 1.0.0
|
|
99
|
+
* @committed
|
|
100
|
+
*/
|
|
101
|
+
auto must() -> conjunction_query&
|
|
102
|
+
{
|
|
103
|
+
if (!must_) {
|
|
104
|
+
must_ = conjunction_query();
|
|
105
|
+
}
|
|
106
|
+
return must_.value();
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Set @ref disjunction_query that groups queries the documents **should** satisfy.
|
|
111
|
+
*
|
|
112
|
+
* @param query should-query
|
|
113
|
+
*
|
|
114
|
+
* @return this query for chaining purposes.
|
|
115
|
+
*
|
|
116
|
+
* @since 1.0.0
|
|
117
|
+
* @committed
|
|
118
|
+
*/
|
|
119
|
+
auto should(disjunction_query query) -> boolean_query&
|
|
120
|
+
{
|
|
121
|
+
should_ = std::move(query);
|
|
122
|
+
return *this;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Create @ref disjunction_query with given queries and set it as **should** query.
|
|
127
|
+
*
|
|
128
|
+
* @tparam SearchQuery any subclass of @ref search_query
|
|
129
|
+
* @param queries
|
|
130
|
+
*
|
|
131
|
+
* @return this query for chaining purposes.
|
|
132
|
+
*
|
|
133
|
+
* @since 1.0.0
|
|
134
|
+
* @committed
|
|
135
|
+
*/
|
|
136
|
+
template<typename... SearchQuery>
|
|
137
|
+
auto should(SearchQuery... queries) -> boolean_query&
|
|
138
|
+
{
|
|
139
|
+
should_ = disjunction_query(queries...);
|
|
140
|
+
return *this;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Returns @ref disjunction_query that groups queries the documents **should** satisfy. Use it to add more queries or change
|
|
145
|
+
* @ref disjunction_query#min.
|
|
146
|
+
*
|
|
147
|
+
* @return should-query
|
|
148
|
+
*
|
|
149
|
+
* @since 1.0.0
|
|
150
|
+
* @committed
|
|
151
|
+
*/
|
|
152
|
+
auto should() -> disjunction_query&
|
|
153
|
+
{
|
|
154
|
+
if (!should_) {
|
|
155
|
+
should_ = disjunction_query();
|
|
156
|
+
}
|
|
157
|
+
return should_.value();
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Set @ref disjunction_query that groups queries the documents **must not** satisfy.
|
|
162
|
+
*
|
|
163
|
+
* @param query must_not-query
|
|
164
|
+
*
|
|
165
|
+
* @return this query for chaining purposes.
|
|
166
|
+
*
|
|
167
|
+
* @since 1.0.0
|
|
168
|
+
* @committed
|
|
169
|
+
*/
|
|
170
|
+
auto must_not(disjunction_query query) -> boolean_query&
|
|
171
|
+
{
|
|
172
|
+
must_not_ = std::move(query);
|
|
173
|
+
return *this;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Create @ref disjunction_query with given queries and set it as **must not** query.
|
|
178
|
+
*
|
|
179
|
+
* @tparam SearchQuery any subclass of @ref search_query
|
|
180
|
+
* @param queries
|
|
181
|
+
*
|
|
182
|
+
* @return this query for chaining purposes.
|
|
183
|
+
*
|
|
184
|
+
* @since 1.0.0
|
|
185
|
+
* @committed
|
|
186
|
+
*/
|
|
187
|
+
template<typename... SearchQuery>
|
|
188
|
+
auto must_not(SearchQuery... queries) -> boolean_query&
|
|
189
|
+
{
|
|
190
|
+
must_not_ = disjunction_query(queries...);
|
|
191
|
+
return *this;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Returns @ref disjunction_query that groups queries the documents **should** satisfy. Use it to add more queries.
|
|
196
|
+
*
|
|
197
|
+
* @return must_not-query
|
|
198
|
+
*
|
|
199
|
+
* @since 1.0.0
|
|
200
|
+
* @committed
|
|
201
|
+
*/
|
|
202
|
+
auto must_not() -> disjunction_query&
|
|
203
|
+
{
|
|
204
|
+
if (!must_not_) {
|
|
205
|
+
must_not_ = disjunction_query();
|
|
206
|
+
}
|
|
207
|
+
return must_not_.value();
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* @return encoded representation of the query.
|
|
212
|
+
*
|
|
213
|
+
* @since 1.0.0
|
|
214
|
+
* @internal
|
|
215
|
+
*/
|
|
216
|
+
[[nodiscard]] auto encode() const -> encoded_search_query override;
|
|
217
|
+
|
|
218
|
+
private:
|
|
219
|
+
std::optional<conjunction_query> must_{};
|
|
220
|
+
std::optional<disjunction_query> should_{};
|
|
221
|
+
std::optional<disjunction_query> must_not_{};
|
|
222
|
+
};
|
|
223
|
+
} // namespace couchbase
|
|
@@ -22,6 +22,8 @@
|
|
|
22
22
|
#include <couchbase/cluster_options.hxx>
|
|
23
23
|
#include <couchbase/query_index_manager.hxx>
|
|
24
24
|
#include <couchbase/query_options.hxx>
|
|
25
|
+
#include <couchbase/search_options.hxx>
|
|
26
|
+
#include <couchbase/search_query.hxx>
|
|
25
27
|
#include <couchbase/transactions.hxx>
|
|
26
28
|
|
|
27
29
|
#include <memory>
|
|
@@ -166,6 +168,43 @@ class cluster
|
|
|
166
168
|
return future;
|
|
167
169
|
}
|
|
168
170
|
|
|
171
|
+
/**
|
|
172
|
+
* Performs a query against the full text search services.
|
|
173
|
+
*
|
|
174
|
+
* @param index_name name of the search index
|
|
175
|
+
* @param query query object, see hierarchy of @ref search_query for more details.
|
|
176
|
+
* @param options options to customize the query request.
|
|
177
|
+
* @param handler the handler that implements @ref search_handler
|
|
178
|
+
*
|
|
179
|
+
* @exception errc::common::ambiguous_timeout
|
|
180
|
+
* @exception errc::common::unambiguous_timeout
|
|
181
|
+
*
|
|
182
|
+
* @see https://docs.couchbase.com/server/current/fts/fts-introduction.html
|
|
183
|
+
*
|
|
184
|
+
* @since 1.0.0
|
|
185
|
+
* @committed
|
|
186
|
+
*/
|
|
187
|
+
void search_query(std::string index_name, const search_query& query, const search_options& options, search_handler&& handler) const;
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Performs a query against the full text search services.
|
|
191
|
+
*
|
|
192
|
+
* @param index_name name of the search index
|
|
193
|
+
* @param query query object, see hierarchy of @ref search_query for more details.
|
|
194
|
+
* @param options options to customize the query request.
|
|
195
|
+
* @return future object that carries result of the operation
|
|
196
|
+
*
|
|
197
|
+
* @exception errc::common::ambiguous_timeout
|
|
198
|
+
* @exception errc::common::unambiguous_timeout
|
|
199
|
+
*
|
|
200
|
+
* @see https://docs.couchbase.com/server/current/fts/fts-introduction.html
|
|
201
|
+
*
|
|
202
|
+
* @since 1.0.0
|
|
203
|
+
* @committed
|
|
204
|
+
*/
|
|
205
|
+
[[nodiscard]] auto search_query(std::string index_name, const class search_query& query, const search_options& options = {}) const
|
|
206
|
+
-> std::future<std::pair<search_error_context, search_result>>;
|
|
207
|
+
|
|
169
208
|
/**
|
|
170
209
|
* Performs a query against the analytics services.
|
|
171
210
|
*
|
|
@@ -214,7 +253,9 @@ class cluster
|
|
|
214
253
|
/**
|
|
215
254
|
* Provides access to transaction services.
|
|
216
255
|
*
|
|
217
|
-
* @
|
|
256
|
+
* See {@link transactions} for details on using the transactions object.
|
|
257
|
+
*
|
|
258
|
+
* @return an {@link transactions} object
|
|
218
259
|
*
|
|
219
260
|
* @since 1.0.0
|
|
220
261
|
* @committed
|
|
@@ -0,0 +1,88 @@
|
|
|
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 <memory>
|
|
23
|
+
#include <vector>
|
|
24
|
+
|
|
25
|
+
namespace couchbase
|
|
26
|
+
{
|
|
27
|
+
/**
|
|
28
|
+
* The conjunction query is a compound query. The result documents must satisfy all of the child queries. It is possible to recursively nest
|
|
29
|
+
* compound queries.
|
|
30
|
+
*
|
|
31
|
+
* At execution, a conjunction query that has no child queries is not allowed and will fail fast.
|
|
32
|
+
*
|
|
33
|
+
* Match documents with `"location"` in the field `reviews.content` and `true` in the field `free_breakfast`.
|
|
34
|
+
* @snippet test_unit_search.cxx search-conjunction
|
|
35
|
+
*
|
|
36
|
+
* @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-conjuncts-disjuncts.html server documentation
|
|
37
|
+
*
|
|
38
|
+
* @since 1.0.0
|
|
39
|
+
* @committed
|
|
40
|
+
*/
|
|
41
|
+
class conjunction_query : public search_query
|
|
42
|
+
{
|
|
43
|
+
public:
|
|
44
|
+
/**
|
|
45
|
+
* Create a conjunction query.
|
|
46
|
+
*
|
|
47
|
+
* @tparam SearchQuery any subclass of @ref search_query
|
|
48
|
+
* @param queries sequence of query arguments
|
|
49
|
+
*
|
|
50
|
+
* @since 1.0.0
|
|
51
|
+
* @committed
|
|
52
|
+
*/
|
|
53
|
+
template<typename... SearchQuery>
|
|
54
|
+
explicit conjunction_query(SearchQuery&&... queries)
|
|
55
|
+
{
|
|
56
|
+
and_also(std::forward<SearchQuery>(queries)...);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Add one or more queries to add to the conjunction.
|
|
61
|
+
*
|
|
62
|
+
* @tparam SearchQuery any subclass of @ref search_query
|
|
63
|
+
* @param queries sequence of query arguments
|
|
64
|
+
*
|
|
65
|
+
* @return this query for chaining purposes.
|
|
66
|
+
*
|
|
67
|
+
* @since 1.0.0
|
|
68
|
+
* @committed
|
|
69
|
+
*/
|
|
70
|
+
template<typename... SearchQuery>
|
|
71
|
+
auto and_also(SearchQuery... queries) -> conjunction_query&
|
|
72
|
+
{
|
|
73
|
+
(conjuncts_.emplace_back(std::make_shared<SearchQuery>(std::move(queries))), ...);
|
|
74
|
+
return *this;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* @return encoded representation of the query.
|
|
79
|
+
*
|
|
80
|
+
* @since 1.0.0
|
|
81
|
+
* @internal
|
|
82
|
+
*/
|
|
83
|
+
[[nodiscard]] auto encode() const -> encoded_search_query override;
|
|
84
|
+
|
|
85
|
+
private:
|
|
86
|
+
std::vector<std::shared_ptr<search_query>> conjuncts_{};
|
|
87
|
+
};
|
|
88
|
+
} // namespace couchbase
|
|
@@ -0,0 +1,69 @@
|
|
|
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 <chrono>
|
|
21
|
+
#include <cstdint>
|
|
22
|
+
#include <ctime>
|
|
23
|
+
#include <optional>
|
|
24
|
+
#include <string>
|
|
25
|
+
#include <variant>
|
|
26
|
+
|
|
27
|
+
namespace couchbase
|
|
28
|
+
{
|
|
29
|
+
/**
|
|
30
|
+
* Date range for @ref date_range_facet.
|
|
31
|
+
*/
|
|
32
|
+
class date_range
|
|
33
|
+
{
|
|
34
|
+
public:
|
|
35
|
+
date_range(std::string name, std::string start, std::string end);
|
|
36
|
+
date_range(std::string name, std::chrono::system_clock::time_point start, std::chrono::system_clock::time_point end);
|
|
37
|
+
date_range(std::string name, std::tm start, std::tm end);
|
|
38
|
+
|
|
39
|
+
static date_range with_start(std::string name, std::string start);
|
|
40
|
+
static date_range with_start(std::string name, std::chrono::system_clock::time_point start);
|
|
41
|
+
static date_range with_start(std::string name, std::tm start);
|
|
42
|
+
|
|
43
|
+
static date_range with_end(std::string name, std::string end);
|
|
44
|
+
static date_range with_end(std::string name, std::chrono::system_clock::time_point end);
|
|
45
|
+
static date_range with_end(std::string name, std::tm end);
|
|
46
|
+
|
|
47
|
+
[[nodiscard]] auto name() const -> const std::string&
|
|
48
|
+
{
|
|
49
|
+
return name_;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
[[nodiscard]] auto start() const -> const std::optional<std::string>&
|
|
53
|
+
{
|
|
54
|
+
return start_;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
[[nodiscard]] auto end() const -> const std::optional<std::string>&
|
|
58
|
+
{
|
|
59
|
+
return end_;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
private:
|
|
63
|
+
date_range(std::string name, std::optional<std::string> start, std::optional<std::string> end);
|
|
64
|
+
|
|
65
|
+
std::string name_;
|
|
66
|
+
std::optional<std::string> start_{};
|
|
67
|
+
std::optional<std::string> end_{};
|
|
68
|
+
};
|
|
69
|
+
} // namespace couchbase
|
|
@@ -0,0 +1,56 @@
|
|
|
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/date_range.hxx>
|
|
21
|
+
#include <couchbase/search_facet.hxx>
|
|
22
|
+
|
|
23
|
+
#include <vector>
|
|
24
|
+
|
|
25
|
+
namespace couchbase
|
|
26
|
+
{
|
|
27
|
+
/**
|
|
28
|
+
* A facet that categorizes rows into dateal ranges (or buckets) provided by the user.
|
|
29
|
+
*/
|
|
30
|
+
class date_range_facet : public search_facet
|
|
31
|
+
{
|
|
32
|
+
public:
|
|
33
|
+
date_range_facet(std::string field, std::vector<date_range> ranges)
|
|
34
|
+
: search_facet{ std::move(field) }
|
|
35
|
+
, ranges_{ std::move(ranges) }
|
|
36
|
+
{
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
date_range_facet(std::string field, std::uint32_t size, std::vector<date_range> ranges)
|
|
40
|
+
: search_facet{ std::move(field), size }
|
|
41
|
+
, ranges_{ std::move(ranges) }
|
|
42
|
+
{
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @return encoded representation of the search facet.
|
|
47
|
+
*
|
|
48
|
+
* @since 1.0.0
|
|
49
|
+
* @internal
|
|
50
|
+
*/
|
|
51
|
+
[[nodiscard]] auto encode() const -> encoded_search_facet override;
|
|
52
|
+
|
|
53
|
+
private:
|
|
54
|
+
std::vector<date_range> ranges_;
|
|
55
|
+
};
|
|
56
|
+
} // namespace couchbase
|
|
@@ -0,0 +1,55 @@
|
|
|
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 <couchbase/search_date_range.hxx>
|
|
21
|
+
#include <couchbase/search_facet_result.hxx>
|
|
22
|
+
|
|
23
|
+
#include <string>
|
|
24
|
+
#include <vector>
|
|
25
|
+
|
|
26
|
+
namespace couchbase
|
|
27
|
+
{
|
|
28
|
+
#ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
|
|
29
|
+
class internal_date_range_facet_result;
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @since 1.0.0
|
|
34
|
+
* @committed
|
|
35
|
+
*/
|
|
36
|
+
class date_range_facet_result : public search_facet_result
|
|
37
|
+
{
|
|
38
|
+
public:
|
|
39
|
+
/**
|
|
40
|
+
* @since 1.0.0
|
|
41
|
+
* @internal
|
|
42
|
+
*/
|
|
43
|
+
explicit date_range_facet_result(internal_date_range_facet_result internal);
|
|
44
|
+
|
|
45
|
+
[[nodiscard]] auto name() const -> const std::string& override;
|
|
46
|
+
[[nodiscard]] auto field() const -> const std::string& override;
|
|
47
|
+
[[nodiscard]] auto total() const -> std::uint64_t override;
|
|
48
|
+
[[nodiscard]] auto missing() const -> std::uint64_t override;
|
|
49
|
+
[[nodiscard]] auto other() const -> std::uint64_t override;
|
|
50
|
+
[[nodiscard]] auto date_ranges() const -> const std::vector<search_date_range>&;
|
|
51
|
+
|
|
52
|
+
private:
|
|
53
|
+
std::unique_ptr<internal_date_range_facet_result> internal_;
|
|
54
|
+
};
|
|
55
|
+
} // namespace couchbase
|