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.
Files changed (241) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/ext/couchbase/CMakeLists.txt +57 -7
  4. data/ext/couchbase/cmake/Documentation.cmake +0 -1
  5. data/ext/couchbase/cmake/OpenSSL.cmake +98 -3
  6. data/ext/couchbase/cmake/Testing.cmake +12 -4
  7. data/ext/couchbase/cmake/build_config.hxx.in +3 -0
  8. data/ext/couchbase/core/bucket.cxx +3 -2
  9. data/ext/couchbase/core/bucket.hxx +9 -0
  10. data/ext/couchbase/core/cluster.hxx +17 -0
  11. data/ext/couchbase/core/cluster_options.cxx +2 -2
  12. data/ext/couchbase/core/cluster_options.hxx +4 -6
  13. data/ext/couchbase/core/cluster_options_fwd.hxx +26 -0
  14. data/ext/couchbase/core/config_profile.hxx +1 -54
  15. data/ext/couchbase/core/config_profiles.cxx +79 -0
  16. data/ext/couchbase/core/config_profiles.hxx +56 -0
  17. data/ext/couchbase/core/error_context/search.hxx +1 -1
  18. data/ext/couchbase/core/impl/analytics.cxx +1 -0
  19. data/ext/couchbase/core/impl/boolean_field_query.cxx +40 -0
  20. data/ext/couchbase/core/impl/boolean_query.cxx +62 -0
  21. data/ext/couchbase/core/impl/cluster.cxx +2 -0
  22. data/ext/couchbase/core/impl/conjunction_query.cxx +51 -0
  23. data/ext/couchbase/core/impl/date_range.cxx +89 -0
  24. data/ext/couchbase/core/impl/date_range_facet.cxx +54 -0
  25. data/ext/couchbase/core/impl/date_range_facet_result.cxx +64 -0
  26. data/ext/couchbase/core/impl/date_range_query.cxx +125 -0
  27. data/ext/couchbase/core/impl/disjunction_query.cxx +51 -0
  28. data/ext/couchbase/core/impl/encoded_search_facet.hxx +29 -0
  29. data/ext/couchbase/core/impl/encoded_search_query.hxx +29 -0
  30. data/ext/couchbase/core/impl/encoded_search_sort.hxx +29 -0
  31. data/ext/couchbase/core/impl/geo_bounding_box_query.cxx +46 -0
  32. data/ext/couchbase/core/impl/geo_distance_query.cxx +43 -0
  33. data/ext/couchbase/core/impl/geo_polygon_query.cxx +46 -0
  34. data/ext/couchbase/core/impl/internal_date_range_facet_result.cxx +80 -0
  35. data/ext/couchbase/core/impl/internal_date_range_facet_result.hxx +48 -0
  36. data/ext/couchbase/core/impl/internal_numeric_range_facet_result.cxx +80 -0
  37. data/ext/couchbase/core/impl/internal_numeric_range_facet_result.hxx +48 -0
  38. data/ext/couchbase/core/impl/internal_search_error_context.cxx +141 -0
  39. data/ext/couchbase/core/impl/internal_search_error_context.hxx +61 -0
  40. data/ext/couchbase/core/impl/internal_search_meta_data.cxx +60 -0
  41. data/ext/couchbase/core/impl/internal_search_meta_data.hxx +41 -0
  42. data/ext/couchbase/core/impl/internal_search_result.cxx +84 -0
  43. data/ext/couchbase/core/impl/internal_search_result.hxx +43 -0
  44. data/ext/couchbase/core/impl/internal_search_row.cxx +82 -0
  45. data/ext/couchbase/core/impl/internal_search_row.hxx +56 -0
  46. data/ext/couchbase/core/impl/internal_search_row_location.hxx +32 -0
  47. data/ext/couchbase/core/impl/internal_search_row_locations.cxx +137 -0
  48. data/ext/couchbase/core/impl/internal_search_row_locations.hxx +45 -0
  49. data/ext/couchbase/core/impl/internal_term_facet_result.cxx +80 -0
  50. data/ext/couchbase/core/impl/internal_term_facet_result.hxx +48 -0
  51. data/ext/couchbase/core/impl/match_all_query.cxx +35 -0
  52. data/ext/couchbase/core/impl/match_none_query.cxx +35 -0
  53. data/ext/couchbase/core/impl/match_phrase_query.cxx +43 -0
  54. data/ext/couchbase/core/impl/match_query.cxx +59 -0
  55. data/ext/couchbase/core/impl/numeric_range.cxx +49 -0
  56. data/ext/couchbase/core/impl/numeric_range_facet.cxx +54 -0
  57. data/ext/couchbase/core/impl/numeric_range_facet_result.cxx +64 -0
  58. data/ext/couchbase/core/impl/numeric_range_query.cxx +56 -0
  59. data/ext/couchbase/core/impl/phrase_query.cxx +42 -0
  60. data/ext/couchbase/core/impl/prefix_query.cxx +40 -0
  61. data/ext/couchbase/core/impl/query_string_query.cxx +37 -0
  62. data/ext/couchbase/core/impl/regexp_query.cxx +40 -0
  63. data/ext/couchbase/core/impl/search.cxx +191 -0
  64. data/ext/couchbase/core/impl/search_error_context.cxx +147 -0
  65. data/ext/couchbase/core/impl/search_meta_data.cxx +46 -0
  66. data/ext/couchbase/core/impl/search_result.cxx +66 -0
  67. data/ext/couchbase/core/impl/search_row.cxx +74 -0
  68. data/ext/couchbase/core/impl/search_row_location.cxx +64 -0
  69. data/ext/couchbase/core/impl/search_row_locations.cxx +66 -0
  70. data/ext/couchbase/core/impl/search_sort_field.cxx +104 -0
  71. data/ext/couchbase/core/impl/search_sort_id.cxx +43 -0
  72. data/ext/couchbase/core/impl/search_sort_score.cxx +43 -0
  73. data/ext/couchbase/core/impl/term_facet.cxx +36 -0
  74. data/ext/couchbase/core/impl/term_facet_result.cxx +64 -0
  75. data/ext/couchbase/core/impl/term_query.cxx +56 -0
  76. data/ext/couchbase/core/impl/term_range_query.cxx +57 -0
  77. data/ext/couchbase/core/impl/wildcard_query.cxx +40 -0
  78. data/ext/couchbase/core/io/http_context.hxx +1 -1
  79. data/ext/couchbase/core/io/http_session.hxx +10 -0
  80. data/ext/couchbase/core/io/http_session_manager.hxx +5 -3
  81. data/ext/couchbase/core/io/mcbp_session.cxx +28 -1
  82. data/ext/couchbase/core/io/retry_orchestrator.hxx +3 -2
  83. data/ext/couchbase/core/json_string.hxx +5 -0
  84. data/ext/couchbase/core/meta/version.cxx +18 -4
  85. data/ext/couchbase/core/mozilla_ca_bundle.hxx +39 -0
  86. data/ext/couchbase/core/operations/document_analytics.cxx +1 -0
  87. data/ext/couchbase/core/operations/document_analytics.hxx +1 -0
  88. data/ext/couchbase/core/operations/document_append.hxx +1 -1
  89. data/ext/couchbase/core/operations/document_decrement.hxx +1 -1
  90. data/ext/couchbase/core/operations/document_exists.hxx +1 -1
  91. data/ext/couchbase/core/operations/document_get.hxx +1 -1
  92. data/ext/couchbase/core/operations/document_get_and_lock.hxx +1 -1
  93. data/ext/couchbase/core/operations/document_get_and_touch.hxx +1 -1
  94. data/ext/couchbase/core/operations/document_get_projected.hxx +1 -1
  95. data/ext/couchbase/core/operations/document_increment.hxx +1 -1
  96. data/ext/couchbase/core/operations/document_insert.hxx +1 -1
  97. data/ext/couchbase/core/operations/document_lookup_in.hxx +1 -1
  98. data/ext/couchbase/core/operations/document_mutate_in.hxx +1 -1
  99. data/ext/couchbase/core/operations/document_prepend.hxx +1 -1
  100. data/ext/couchbase/core/operations/document_query.cxx +2 -0
  101. data/ext/couchbase/core/operations/document_query.hxx +6 -0
  102. data/ext/couchbase/core/operations/document_remove.hxx +1 -1
  103. data/ext/couchbase/core/operations/document_replace.hxx +1 -1
  104. data/ext/couchbase/core/operations/document_search.cxx +4 -1
  105. data/ext/couchbase/core/operations/document_search.hxx +2 -1
  106. data/ext/couchbase/core/operations/document_touch.hxx +1 -1
  107. data/ext/couchbase/core/operations/document_unlock.hxx +1 -1
  108. data/ext/couchbase/core/operations/document_upsert.hxx +1 -1
  109. data/ext/couchbase/core/operations/document_view.hxx +1 -0
  110. data/ext/couchbase/core/protocol/client_request.hxx +11 -2
  111. data/ext/couchbase/core/public_fwd.hxx +21 -0
  112. data/ext/couchbase/core/tls_verify_mode.hxx +26 -0
  113. data/ext/couchbase/core/topology/configuration.cxx +15 -2
  114. data/ext/couchbase/core/topology/configuration.hxx +5 -1
  115. data/ext/couchbase/core/transactions/attempt_context_testing_hooks.cxx +93 -0
  116. data/ext/couchbase/core/transactions/attempt_context_testing_hooks.hxx +48 -75
  117. data/ext/couchbase/core/transactions/cleanup_testing_hooks.cxx +52 -0
  118. data/ext/couchbase/core/transactions/cleanup_testing_hooks.hxx +17 -31
  119. data/ext/couchbase/core/transactions/exceptions.hxx +12 -9
  120. data/ext/couchbase/core/utils/connection_string.cxx +17 -0
  121. data/ext/couchbase/core/utils/json.cxx +4 -1
  122. data/ext/couchbase/couchbase/behavior_options.hxx +10 -1
  123. data/ext/couchbase/couchbase/boolean_field_query.hxx +77 -0
  124. data/ext/couchbase/couchbase/boolean_query.hxx +223 -0
  125. data/ext/couchbase/couchbase/cluster.hxx +42 -1
  126. data/ext/couchbase/couchbase/conjunction_query.hxx +88 -0
  127. data/ext/couchbase/couchbase/date_range.hxx +69 -0
  128. data/ext/couchbase/couchbase/date_range_facet.hxx +56 -0
  129. data/ext/couchbase/couchbase/date_range_facet_result.hxx +55 -0
  130. data/ext/couchbase/couchbase/date_range_query.hxx +265 -0
  131. data/ext/couchbase/couchbase/disjunction_query.hxx +109 -0
  132. data/ext/couchbase/couchbase/doc_id_query.hxx +111 -0
  133. data/ext/couchbase/couchbase/error_context.hxx +7 -6
  134. data/ext/couchbase/couchbase/fmt/analytics_scan_consistency.hxx +52 -0
  135. data/ext/couchbase/couchbase/fmt/search_scan_consistency.hxx +49 -0
  136. data/ext/couchbase/couchbase/geo_bounding_box_query.hxx +107 -0
  137. data/ext/couchbase/couchbase/geo_distance_query.hxx +109 -0
  138. data/ext/couchbase/couchbase/geo_point.hxx +32 -0
  139. data/ext/couchbase/couchbase/geo_polygon_query.hxx +85 -0
  140. data/ext/couchbase/couchbase/highlight_style.hxx +45 -0
  141. data/ext/couchbase/couchbase/match_all_query.hxx +43 -0
  142. data/ext/couchbase/couchbase/match_none_query.hxx +43 -0
  143. data/ext/couchbase/couchbase/match_operator.hxx +45 -0
  144. data/ext/couchbase/couchbase/match_phrase_query.hxx +108 -0
  145. data/ext/couchbase/couchbase/match_query.hxx +163 -0
  146. data/ext/couchbase/couchbase/numeric_range.hxx +58 -0
  147. data/ext/couchbase/couchbase/numeric_range_facet.hxx +56 -0
  148. data/ext/couchbase/couchbase/numeric_range_facet_result.hxx +55 -0
  149. data/ext/couchbase/couchbase/numeric_range_query.hxx +143 -0
  150. data/ext/couchbase/couchbase/phrase_query.hxx +93 -0
  151. data/ext/couchbase/couchbase/prefix_query.hxx +82 -0
  152. data/ext/couchbase/couchbase/query_string_query.hxx +72 -0
  153. data/ext/couchbase/couchbase/regexp_query.hxx +82 -0
  154. data/ext/couchbase/couchbase/scope.hxx +40 -0
  155. data/ext/couchbase/couchbase/search_date_range.hxx +68 -0
  156. data/ext/couchbase/couchbase/search_error_context.hxx +138 -0
  157. data/ext/couchbase/couchbase/search_facet.hxx +60 -0
  158. data/ext/couchbase/couchbase/search_facet_result.hxx +50 -0
  159. data/ext/couchbase/couchbase/search_meta_data.hxx +85 -0
  160. data/ext/couchbase/couchbase/search_metrics.hxx +127 -0
  161. data/ext/couchbase/couchbase/search_numeric_range.hxx +69 -0
  162. data/ext/couchbase/couchbase/search_options.hxx +509 -0
  163. data/ext/couchbase/couchbase/search_query.hxx +69 -0
  164. data/ext/couchbase/couchbase/search_result.hxx +77 -0
  165. data/ext/couchbase/couchbase/search_row.hxx +104 -0
  166. data/ext/couchbase/couchbase/search_row_location.hxx +55 -0
  167. data/ext/couchbase/couchbase/search_row_locations.hxx +86 -0
  168. data/ext/couchbase/couchbase/search_scan_consistency.hxx +34 -0
  169. data/ext/couchbase/couchbase/search_sort.hxx +58 -0
  170. data/ext/couchbase/couchbase/search_sort_field.hxx +117 -0
  171. data/ext/couchbase/couchbase/search_sort_field_missing.hxx +26 -0
  172. data/ext/couchbase/couchbase/search_sort_field_mode.hxx +27 -0
  173. data/ext/couchbase/couchbase/search_sort_field_type.hxx +28 -0
  174. data/ext/couchbase/couchbase/search_sort_id.hxx +60 -0
  175. data/ext/couchbase/couchbase/search_sort_score.hxx +60 -0
  176. data/ext/couchbase/couchbase/search_term_range.hxx +51 -0
  177. data/ext/couchbase/couchbase/security_options.hxx +3 -0
  178. data/ext/couchbase/couchbase/term_facet.hxx +48 -0
  179. data/ext/couchbase/couchbase/term_facet_result.hxx +55 -0
  180. data/ext/couchbase/couchbase/term_query.hxx +151 -0
  181. data/ext/couchbase/couchbase/term_range_query.hxx +142 -0
  182. data/ext/couchbase/couchbase/tracing/request_span.hxx +63 -0
  183. data/ext/couchbase/couchbase/tracing/request_tracer.hxx +2 -40
  184. data/ext/couchbase/couchbase/transactions/async_attempt_context.hxx +83 -4
  185. data/ext/couchbase/couchbase/transactions/attempt_context.hxx +67 -0
  186. data/ext/couchbase/couchbase/transactions/transaction_get_result.hxx +2 -0
  187. data/ext/couchbase/couchbase/transactions/transaction_keyspace.hxx +11 -1
  188. data/ext/couchbase/couchbase/transactions/transaction_options.hxx +79 -8
  189. data/ext/couchbase/couchbase/transactions/transaction_query_options.hxx +128 -15
  190. data/ext/couchbase/couchbase/transactions/transaction_query_result.hxx +4 -0
  191. data/ext/couchbase/couchbase/transactions/transaction_result.hxx +1 -1
  192. data/ext/couchbase/couchbase/transactions/transactions_cleanup_config.hxx +5 -3
  193. data/ext/couchbase/couchbase/transactions/transactions_config.hxx +9 -5
  194. data/ext/couchbase/couchbase/transactions/transactions_query_config.hxx +6 -3
  195. data/ext/couchbase/couchbase/transactions.hxx +34 -1
  196. data/ext/couchbase/couchbase/wildcard_query.hxx +83 -0
  197. data/ext/couchbase/test/CMakeLists.txt +7 -5
  198. data/ext/couchbase/test/benchmark_helper_integration.hxx +2 -2
  199. data/ext/couchbase/test/test_helper.hxx +5 -5
  200. data/ext/couchbase/test/test_integration_analytics.cxx +28 -6
  201. data/ext/couchbase/test/test_integration_collections.cxx +7 -3
  202. data/ext/couchbase/test/test_integration_connect.cxx +7 -3
  203. data/ext/couchbase/test/test_integration_crud.cxx +13 -3
  204. data/ext/couchbase/test/test_integration_diagnostics.cxx +11 -5
  205. data/ext/couchbase/test/test_integration_durability.cxx +12 -7
  206. data/ext/couchbase/test/test_integration_examples.cxx +283 -11
  207. data/ext/couchbase/test/test_integration_management.cxx +147 -91
  208. data/ext/couchbase/test/test_integration_query.cxx +68 -10
  209. data/ext/couchbase/test/test_integration_range_scan.cxx +12 -12
  210. data/ext/couchbase/test/test_integration_read_replica.cxx +48 -11
  211. data/ext/couchbase/test/test_integration_search.cxx +22 -2
  212. data/ext/couchbase/test/test_integration_subdoc.cxx +62 -11
  213. data/ext/couchbase/test/test_integration_tracer.cxx +5 -0
  214. data/ext/couchbase/test/test_integration_transcoders.cxx +13 -5
  215. data/ext/couchbase/test/{test_transaction_transaction_context.cxx → test_transaction_context.cxx} +1 -1
  216. data/ext/couchbase/test/test_transaction_examples.cxx +195 -0
  217. data/ext/couchbase/test/{test_transaction_transaction_simple.cxx → test_transaction_simple.cxx} +17 -5
  218. data/ext/couchbase/test/{test_transaction_transaction_simple_async.cxx → test_transaction_simple_async.cxx} +19 -21
  219. data/ext/couchbase/test/test_unit_config_profiles.cxx +1 -1
  220. data/ext/couchbase/test/test_unit_json_transcoder.cxx +4 -0
  221. data/ext/couchbase/test/test_unit_search.cxx +427 -0
  222. data/ext/couchbase/test/test_unit_transaction_utils.cxx +10 -1
  223. data/ext/couchbase/test/test_unit_utils.cxx +8 -4
  224. data/ext/couchbase.cxx +58 -16
  225. data/ext/revisions.rb +3 -3
  226. data/lib/couchbase/authenticator.rb +0 -1
  227. data/lib/couchbase/cluster.rb +0 -4
  228. data/lib/couchbase/config_profiles.rb +1 -1
  229. data/lib/couchbase/json_transcoder.rb +12 -5
  230. data/lib/couchbase/management/collection_query_index_manager.rb +54 -15
  231. data/lib/couchbase/management/query_index_manager.rb +70 -5
  232. data/lib/couchbase/raw_binary_transcoder.rb +37 -0
  233. data/lib/couchbase/raw_json_transcoder.rb +38 -0
  234. data/lib/couchbase/raw_string_transcoder.rb +40 -0
  235. data/lib/couchbase/search_options.rb +5 -0
  236. data/lib/couchbase/transcoder_flags.rb +62 -0
  237. data/lib/couchbase/version.rb +1 -1
  238. metadata +139 -11
  239. data/ext/couchbase/core/config_profile.cxx +0 -47
  240. /data/ext/couchbase/test/{test_transaction_transaction_public_async_api.cxx → test_transaction_public_async_api.cxx} +0 -0
  241. /data/ext/couchbase/test/{test_transaction_transaction_public_blocking_api.cxx → test_transaction_public_blocking_api.cxx} +0 -0
@@ -0,0 +1,163 @@
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/match_operator.hxx>
21
+ #include <couchbase/search_query.hxx>
22
+
23
+ #include <cstdint>
24
+ #include <optional>
25
+ #include <stdexcept>
26
+ #include <string>
27
+
28
+ namespace couchbase
29
+ {
30
+ /**
31
+ * A match query analyzes the input text and uses that analyzed text to query the index. An attempt is made to use the same analyzer that
32
+ * was used when the field was indexed.
33
+ *
34
+ * Match documents with both `"location"` and `"hostel"` terms in the field `reviews.content`, ensuring common prefix length `4`, maximum
35
+ * fuzziness and select standard analyzer.
36
+ * @snippet test_unit_search.cxx search-match
37
+ *
38
+ * @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-match.html server documentation
39
+ *
40
+ * @since 1.0.0
41
+ * @committed
42
+ */
43
+ class match_query : public search_query
44
+ {
45
+ public:
46
+ /**
47
+ * Create a new match query.
48
+ *
49
+ * @param match the input string to be matched against
50
+ *
51
+ * @since 1.0.0
52
+ * @committed
53
+ */
54
+ explicit match_query(std::string match)
55
+ : match_{ std::move(match) }
56
+ {
57
+ }
58
+
59
+ /**
60
+ * Require that the term also have the same prefix of the specified length (must be positive).
61
+ *
62
+ * @param length the length of the term prefix
63
+ *
64
+ * @return this query for chaining purposes.
65
+ *
66
+ * @since 1.0.0
67
+ * @committed
68
+ */
69
+ auto prefix_length(std::uint32_t length) -> match_query&
70
+ {
71
+ if (length <= 0) {
72
+ throw std::invalid_argument("prefix_length must be positive");
73
+ }
74
+
75
+ prefix_length_ = length;
76
+ return *this;
77
+ }
78
+
79
+ /**
80
+ * Analyzers are used to transform input text into a stream of tokens for indexing. The Server comes with built-in analyzers and the
81
+ * users can create their own.
82
+ *
83
+ * @param analyzer_name the name of the analyzer used
84
+ *
85
+ * @return this query for chaining purposes.
86
+ *
87
+ * @since 1.0.0
88
+ * @committed
89
+ */
90
+ auto analyzer(std::string analyzer_name) -> match_query&
91
+ {
92
+ analyzer_ = std::move(analyzer_name);
93
+ return *this;
94
+ }
95
+
96
+ /**
97
+ * If a field is specified, only terms in that field will be matched.
98
+ *
99
+ * This can also affect the used analyzer if one isn't specified explicitly.
100
+ *
101
+ * @param field_name name of the field to be matched
102
+ *
103
+ * @return this query for chaining purposes.
104
+ *
105
+ * @since 1.0.0
106
+ * @committed
107
+ */
108
+ auto field(std::string field_name) -> match_query&
109
+ {
110
+ field_ = std::move(field_name);
111
+ return *this;
112
+ }
113
+
114
+ /**
115
+ * Perform fuzzy matching. If the fuzziness parameter is set to a non-zero integer the analyzed text will be matched with the specified
116
+ * level of fuzziness.
117
+ *
118
+ * @param fuzziness level of fuzziness (the maximum supported fuzziness is 2).
119
+ *
120
+ * @return this query for chaining purposes.
121
+ *
122
+ * @since 1.0.0
123
+ * @committed
124
+ */
125
+ auto fuzziness(std::uint32_t fuzziness) -> match_query&
126
+ {
127
+ fuzziness_ = fuzziness;
128
+ return *this;
129
+ }
130
+
131
+ /**
132
+ * Defines how the individual match terms should be logically concatenated
133
+ *
134
+ * @param concatenation_operator operator to be used
135
+ *
136
+ * @return this query for chaining purposes.
137
+ *
138
+ * @since 1.0.0
139
+ * @committed
140
+ */
141
+ auto match_operator(couchbase::match_operator concatenation_operator) -> match_query&
142
+ {
143
+ operator_ = concatenation_operator;
144
+ return *this;
145
+ }
146
+
147
+ /**
148
+ * @return encoded representation of the query.
149
+ *
150
+ * @since 1.0.0
151
+ * @internal
152
+ */
153
+ [[nodiscard]] auto encode() const -> encoded_search_query override;
154
+
155
+ private:
156
+ std::string match_;
157
+ std::optional<std::uint32_t> prefix_length_{};
158
+ std::optional<std::string> analyzer_{};
159
+ std::optional<std::string> field_{};
160
+ std::optional<std::uint32_t> fuzziness_{};
161
+ std::optional<couchbase::match_operator> operator_{};
162
+ };
163
+ } // namespace couchbase
@@ -0,0 +1,58 @@
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 <cstdint>
21
+ #include <optional>
22
+ #include <string>
23
+
24
+ namespace couchbase
25
+ {
26
+ /**
27
+ * Numeric range for @ref numeric_range_facet.
28
+ */
29
+ class numeric_range
30
+ {
31
+ public:
32
+ numeric_range(std::string name, double min, double max);
33
+ static numeric_range with_min(std::string name, double start);
34
+ static numeric_range with_max(std::string name, double end);
35
+
36
+ [[nodiscard]] auto name() const -> const std::string&
37
+ {
38
+ return name_;
39
+ }
40
+
41
+ [[nodiscard]] auto min() const -> const std::optional<double>&
42
+ {
43
+ return min_;
44
+ }
45
+
46
+ [[nodiscard]] auto max() const -> const std::optional<double>&
47
+ {
48
+ return max_;
49
+ }
50
+
51
+ private:
52
+ numeric_range(std::string name, std::optional<double> min, std::optional<double> max);
53
+
54
+ std::string name_;
55
+ std::optional<double> min_{};
56
+ std::optional<double> max_{};
57
+ };
58
+ } // 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/numeric_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 numerical ranges (or buckets) provided by the user.
29
+ */
30
+ class numeric_range_facet : public search_facet
31
+ {
32
+ public:
33
+ numeric_range_facet(std::string field, std::vector<numeric_range> ranges)
34
+ : search_facet{ std::move(field) }
35
+ , ranges_{ std::move(ranges) }
36
+ {
37
+ }
38
+
39
+ numeric_range_facet(std::string field, std::uint32_t size, std::vector<numeric_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<numeric_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_facet_result.hxx>
21
+ #include <couchbase/search_numeric_range.hxx>
22
+
23
+ #include <string>
24
+ #include <vector>
25
+
26
+ namespace couchbase
27
+ {
28
+ #ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
29
+ class internal_numeric_range_facet_result;
30
+ #endif
31
+
32
+ /**
33
+ * @since 1.0.0
34
+ * @committed
35
+ */
36
+ class numeric_range_facet_result : public search_facet_result
37
+ {
38
+ public:
39
+ /**
40
+ * @since 1.0.0
41
+ * @internal
42
+ */
43
+ explicit numeric_range_facet_result(internal_numeric_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 numeric_ranges() const -> const std::vector<search_numeric_range>&;
51
+
52
+ private:
53
+ std::unique_ptr<internal_numeric_range_facet_result> internal_;
54
+ };
55
+ } // namespace couchbase
@@ -0,0 +1,143 @@
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/match_operator.hxx>
21
+ #include <couchbase/search_query.hxx>
22
+
23
+ #include <cstdint>
24
+ #include <optional>
25
+ #include <string>
26
+
27
+ namespace couchbase
28
+ {
29
+ /**
30
+ * The numeric range query finds documents containing a numeric value in the specified field within the specified range. Either min or max
31
+ * can be omitted, but not both.
32
+ *
33
+ * By default, min is inclusive and max is exclusive.
34
+ *
35
+ * Match documents where field `id` contains numbers in the range `(100, 1000)`:
36
+ * @snippet test_unit_search.cxx search-numeric-range
37
+ *
38
+ * @since 1.0.0
39
+ * @committed
40
+ */
41
+ class numeric_range_query : public search_query
42
+ {
43
+ public:
44
+ /**
45
+ * Set lower limit of the range. Whether to include limit into the range will be decided by server defaults (inclusive).
46
+ *
47
+ * @param value lower limit of the range.
48
+ *
49
+ * @return this query for chaining purposes.
50
+ *
51
+ * @since 1.0.0
52
+ * @committed
53
+ */
54
+ auto min(double value) -> numeric_range_query&
55
+ {
56
+ min_ = value;
57
+ return *this;
58
+ }
59
+
60
+ /**
61
+ * Set lower limit and specify whether to include it into the limit.
62
+ *
63
+ * @param value lower limit of the range.
64
+ * @param inclusive whether to include limit value into the interval.
65
+ *
66
+ * @return this query for chaining purposes.
67
+ *
68
+ * @since 1.0.0
69
+ * @committed
70
+ */
71
+ auto min(double value, bool inclusive) -> numeric_range_query&
72
+ {
73
+ min_ = value;
74
+ inclusive_min_ = inclusive;
75
+ return *this;
76
+ }
77
+
78
+ /**
79
+ * Set upper limit of the range. Whether to include limit into the range will be decided by server defaults (exclusive).
80
+ *
81
+ * @param value upper limit of the range
82
+ *
83
+ * @return this query for chaining purposes.
84
+ *
85
+ * @since 1.0.0
86
+ * @committed
87
+ */
88
+ auto max(double value) -> numeric_range_query&
89
+ {
90
+ max_ = value;
91
+ return *this;
92
+ }
93
+
94
+ /**
95
+ * Set upper limit and specify whether to include it into the limit.
96
+ *
97
+ * @param value upper limit of the range.
98
+ * @param inclusive whether to include limit value into the interval.
99
+ *
100
+ * @return this query for chaining purposes.
101
+ *
102
+ * @since 1.0.0
103
+ * @committed
104
+ */
105
+ auto max(double value, bool inclusive) -> numeric_range_query&
106
+ {
107
+ max_ = value;
108
+ inclusive_max_ = inclusive;
109
+ return *this;
110
+ }
111
+
112
+ /**
113
+ * If a field is specified, only terms in that field will be matched.
114
+ *
115
+ * @param field_name name of the field to be matched
116
+ *
117
+ * @return this query for chaining purposes.
118
+ *
119
+ * @since 1.0.0
120
+ * @committed
121
+ */
122
+ auto field(std::string field_name) -> numeric_range_query&
123
+ {
124
+ field_ = std::move(field_name);
125
+ return *this;
126
+ }
127
+
128
+ /**
129
+ * @return encoded representation of the query.
130
+ *
131
+ * @since 1.0.0
132
+ * @internal
133
+ */
134
+ [[nodiscard]] auto encode() const -> encoded_search_query override;
135
+
136
+ private:
137
+ std::optional<double> min_{};
138
+ std::optional<double> max_{};
139
+ std::optional<bool> inclusive_min_{};
140
+ std::optional<bool> inclusive_max_{};
141
+ std::optional<std::string> field_{};
142
+ };
143
+ } // namespace couchbase
@@ -0,0 +1,93 @@
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 <stdexcept>
24
+ #include <string>
25
+ #include <vector>
26
+
27
+ namespace couchbase
28
+ {
29
+ /**
30
+ * A query that looks for **exact** match of several terms (in the exact order) in the index. The provided terms must exist in the correct
31
+ * order, at the correct index offsets, in the specified field (as no analyzer are applied to the terms). Queried field must have been
32
+ * indexed with `includeTermVectors` set to `true`. It is generally more useful in debugging scenarios, and the @ref match_phrase_query
33
+ * should usually be preferred for real-world use cases.
34
+ *
35
+ * Match documents with terms `"nice"` and `"view"` in field `reviews.content`:
36
+ * @snippet test_unit_search.cxx search-phrase
37
+ *
38
+ * @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-phrase.html server documentation
39
+ *
40
+ * @since 1.0.0
41
+ * @committed
42
+ */
43
+ class phrase_query : public search_query
44
+ {
45
+ public:
46
+ /**
47
+ * Create a new phrase query.
48
+ *
49
+ * The mandatory list of terms that must exactly match in the index. Note that the index can (and usually will) contain terms that are
50
+ * derived from the text in documents, as analyzers can apply process like stemming.
51
+ *
52
+ * @param terms non-empty vector of terms.
53
+ *
54
+ * @since 1.0.0
55
+ * @committed
56
+ */
57
+ explicit phrase_query(std::initializer_list<std::string> terms)
58
+ : terms_{ terms }
59
+ {
60
+ if (terms_.empty()) {
61
+ throw std::invalid_argument("terms must not be empty in phrase_query");
62
+ }
63
+ }
64
+
65
+ /**
66
+ * If a field is specified, only terms in that field will be matched.
67
+ *
68
+ * @param field_name name of the field to be matched
69
+ *
70
+ * @return this query for chaining purposes.
71
+ *
72
+ * @since 1.0.0
73
+ * @committed
74
+ */
75
+ auto field(std::string field_name) -> phrase_query&
76
+ {
77
+ field_ = std::move(field_name);
78
+ return *this;
79
+ }
80
+
81
+ /**
82
+ * @return encoded representation of the query.
83
+ *
84
+ * @since 1.0.0
85
+ * @internal
86
+ */
87
+ [[nodiscard]] auto encode() const -> encoded_search_query override;
88
+
89
+ private:
90
+ std::vector<std::string> terms_;
91
+ std::optional<std::string> field_{};
92
+ };
93
+ } // namespace couchbase
@@ -0,0 +1,82 @@
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
+ * The prefix query finds documents containing terms that start with the provided prefix. Usual better alternative is @ref match_query.
29
+ *
30
+ * Match documents where field `reviews.content` contains words starting with `"inter"`:
31
+ * @snippet test_unit_search.cxx search-prefix
32
+ *
33
+ * @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-prefix-query.html server documentation
34
+ *
35
+ * @since 1.0.0
36
+ * @committed
37
+ */
38
+ class prefix_query : public search_query
39
+ {
40
+ public:
41
+ /**
42
+ * Create a new prefix query.
43
+ *
44
+ * @param prefix prefix to match
45
+ *
46
+ * @since 1.0.0
47
+ * @committed
48
+ */
49
+ explicit prefix_query(std::string prefix)
50
+ : prefix_{ std::move(prefix) }
51
+ {
52
+ }
53
+
54
+ /**
55
+ * If a field is specified, only terms in that field will be matched.
56
+ *
57
+ * @param field_name name of the field to be matched
58
+ *
59
+ * @return this query for chaining purposes.
60
+ *
61
+ * @since 1.0.0
62
+ * @committed
63
+ */
64
+ auto field(std::string field_name) -> prefix_query&
65
+ {
66
+ field_ = std::move(field_name);
67
+ return *this;
68
+ }
69
+
70
+ /**
71
+ * @return encoded representation of the query.
72
+ *
73
+ * @since 1.0.0
74
+ * @internal
75
+ */
76
+ [[nodiscard]] auto encode() const -> encoded_search_query override;
77
+
78
+ private:
79
+ std::string prefix_;
80
+ std::optional<std::string> field_{};
81
+ };
82
+ } // namespace couchbase