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,107 @@
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/geo_point.hxx>
21
+ #include <couchbase/search_query.hxx>
22
+
23
+ #include <optional>
24
+ #include <string>
25
+
26
+ namespace couchbase
27
+ {
28
+ /**
29
+ * This query finds all @ref geo_point indexed matches within a given area (identified by the list of @ref geo_point coordinates). Each of
30
+ * the pairs is taken to indicate one corner of a polygon. Documents are returned if they reference a location within the area of the
31
+ * polygon.
32
+ *
33
+ * The following query-body uses an array of @ref geo_point to specify the latitude and longitude of each of the corners of a polygon, known
34
+ * as polygon points. Here, the last-specified entry is identical to the initial, thus explicitly closing the box. However, specifying an
35
+ * explicit closure in this way is optional: the closure will be inferred by the Couchbase Server if not explicitly specified.
36
+ * @snippet test_unit_search.cxx search-geo-bounding-box
37
+ *
38
+ * @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-geo-bounded-rectangle.html server documentation
39
+ *
40
+ * @since 1.0.0
41
+ * @committed
42
+ */
43
+ class geo_bounding_box_query : public search_query
44
+ {
45
+ public:
46
+ /**
47
+ * Create a new geo bounding box query.
48
+ *
49
+ * @param top_left the top left coordinates signify the bounding box area
50
+ * @param bottom_right the bottom right coordinates signify the bounding box area
51
+ *
52
+ * @since 1.0.0
53
+ * @committed
54
+ */
55
+ geo_bounding_box_query(geo_point top_left, geo_point bottom_right)
56
+ : top_left_{ top_left }
57
+ , bottom_right_{ bottom_right }
58
+ {
59
+ }
60
+
61
+ /**
62
+ * Create a new geo distance query.
63
+ *
64
+ * @param top_left_latitude latitude of the top left coordinate
65
+ * @param top_left_longitude longitude of the top left coordinate
66
+ * @param bottom_right_latitude latitude of the bottom right coordinate
67
+ * @param bottom_right_longitude latitude of the bottom right coordinate
68
+ *
69
+ * @since 1.0.0
70
+ * @committed
71
+ */
72
+ geo_bounding_box_query(double top_left_latitude, double top_left_longitude, double bottom_right_latitude, double bottom_right_longitude)
73
+ : top_left_{ geo_point{ top_left_latitude, top_left_longitude } }
74
+ , bottom_right_{ geo_point{ bottom_right_latitude, bottom_right_longitude } }
75
+ {
76
+ }
77
+
78
+ /**
79
+ * If a field is specified, only terms in that field will be matched.
80
+ *
81
+ * @param field_name name of the field to be matched
82
+ *
83
+ * @return this query for chaining purposes.
84
+ *
85
+ * @since 1.0.0
86
+ * @committed
87
+ */
88
+ auto field(std::string field_name) -> geo_bounding_box_query&
89
+ {
90
+ field_ = std::move(field_name);
91
+ return *this;
92
+ }
93
+
94
+ /**
95
+ * @return encoded representation of the query.
96
+ *
97
+ * @since 1.0.0
98
+ * @internal
99
+ */
100
+ [[nodiscard]] auto encode() const -> encoded_search_query override;
101
+
102
+ private:
103
+ geo_point top_left_;
104
+ geo_point bottom_right_;
105
+ std::optional<std::string> field_{};
106
+ };
107
+ } // namespace couchbase
@@ -0,0 +1,109 @@
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/geo_point.hxx>
21
+ #include <couchbase/search_query.hxx>
22
+
23
+ #include <optional>
24
+ #include <string>
25
+
26
+ namespace couchbase
27
+ {
28
+ /**
29
+ * This query finds all matches from a given location as @ref geo_point within the given distance. Both the point and the distance are
30
+ * required.
31
+ *
32
+ * The following query specifies a longitude of `-2.235143` and a latitude of `53.482358`. The target-field `geo` is specified, as is a
33
+ * distance of `100 miles`: this is the radius within which target-locations must reside for their documents to be returned.
34
+ * @snippet test_unit_search.cxx search-geo-distance
35
+ *
36
+ * @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-geo-point-distance.html server documentation
37
+ *
38
+ * @since 1.0.0
39
+ * @committed
40
+ */
41
+ class geo_distance_query : public search_query
42
+ {
43
+ public:
44
+ /**
45
+ * Create a new geo distance query.
46
+ *
47
+ * @param location the location represents a point from which the distance is measured.
48
+ * @param distance the distance describes how far from the location the radius should be matched. For example, `"11km"`,
49
+ * `"11kilometers"`, `"3nm"`, `"3nauticalmiles"`, `"17mi"`, `"17miles"`, `"19m"`, `"19meters"`.
50
+ *
51
+ * @see https://github.com/blevesearch/bleve/blob/ae28975038cb25655da968e3f043210749ba382b/geo/geo_dist.go#L29-L37 list of distance
52
+ * units.
53
+ *
54
+ * @since 1.0.0
55
+ * @committed
56
+ */
57
+ geo_distance_query(geo_point location, std::string distance)
58
+ : location_{ location }
59
+ , distance_{ std::move(distance) }
60
+ {
61
+ }
62
+
63
+ /**
64
+ * Create a new geo distance query.
65
+ *
66
+ * @param latitude the location latitude
67
+ * @param longitude the location longitude
68
+ * @param distance the distance describes how far from the location the radius should be matched. For example, `"11km"`,
69
+ * `"11kilometers"`, `"3nm"`, `"3nauticalmiles"`, `"17mi"`, `"17miles"`, `"19m"`, `"19meters"`.
70
+ *
71
+ * @since 1.0.0
72
+ * @committed
73
+ */
74
+ geo_distance_query(double latitude, double longitude, std::string distance)
75
+ : location_{ geo_point{ latitude, longitude } }
76
+ , distance_{ std::move(distance) }
77
+ {
78
+ }
79
+
80
+ /**
81
+ * If a field is specified, only terms in that field will be matched.
82
+ *
83
+ * @param field_name name of the field to be matched
84
+ *
85
+ * @return this query for chaining purposes.
86
+ *
87
+ * @since 1.0.0
88
+ * @committed
89
+ */
90
+ auto field(std::string field_name) -> geo_distance_query&
91
+ {
92
+ field_ = std::move(field_name);
93
+ return *this;
94
+ }
95
+
96
+ /**
97
+ * @return encoded representation of the query.
98
+ *
99
+ * @since 1.0.0
100
+ * @internal
101
+ */
102
+ [[nodiscard]] auto encode() const -> encoded_search_query override;
103
+
104
+ private:
105
+ geo_point location_;
106
+ std::string distance_;
107
+ std::optional<std::string> field_{};
108
+ };
109
+ } // namespace couchbase
@@ -0,0 +1,32 @@
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
+ namespace couchbase
21
+ {
22
+ /**
23
+ * Tuple representing geographical point.
24
+ *
25
+ * @since 1.0.0
26
+ * @committed
27
+ */
28
+ struct geo_point {
29
+ double latitude{ 0 };
30
+ double longitude{ 0 };
31
+ };
32
+ } // namespace couchbase
@@ -0,0 +1,85 @@
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/geo_point.hxx>
21
+ #include <couchbase/search_query.hxx>
22
+
23
+ #include <optional>
24
+ #include <string>
25
+ #include <vector>
26
+
27
+ namespace couchbase
28
+ {
29
+ /**
30
+ * A search query which allows to match inside a geo polygon.
31
+ *
32
+ * If a target data-location falls within the box, its document is returned.
33
+ *
34
+ * @snippet test_unit_search.cxx search-geo-polygon
35
+ *
36
+ * @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-geo-bounded-polygon.html server documentation
37
+ *
38
+ * @since 1.0.0
39
+ * @committed
40
+ */
41
+ class geo_polygon_query : public search_query
42
+ {
43
+ public:
44
+ /**
45
+ * Create a new geo polygon query.
46
+ *
47
+ * @param points the points specifying corners of geo polygon.
48
+ *
49
+ * @since 1.0.0
50
+ * @committed
51
+ */
52
+ explicit geo_polygon_query(std::vector<geo_point> points)
53
+ : polygon_points_{ std::move(points) }
54
+ {
55
+ }
56
+
57
+ /**
58
+ * If a field is specified, only terms in that field will be matched.
59
+ *
60
+ * @param field_name name of the field to be matched
61
+ *
62
+ * @return this query for chaining purposes.
63
+ *
64
+ * @since 1.0.0
65
+ * @committed
66
+ */
67
+ auto field(std::string field_name) -> geo_polygon_query&
68
+ {
69
+ field_ = std::move(field_name);
70
+ return *this;
71
+ }
72
+
73
+ /**
74
+ * @return encoded representation of the query.
75
+ *
76
+ * @since 1.0.0
77
+ * @internal
78
+ */
79
+ [[nodiscard]] auto encode() const -> encoded_search_query override;
80
+
81
+ private:
82
+ std::vector<geo_point> polygon_points_;
83
+ std::optional<std::string> field_{};
84
+ };
85
+ } // namespace couchbase
@@ -0,0 +1,45 @@
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
+ namespace couchbase
21
+ {
22
+ /**
23
+ * Enumeration of the highlighting styles recognized by the FTS engine.
24
+ *
25
+ * @since 1.0.0
26
+ * @committed
27
+ */
28
+ enum class highlight_style {
29
+ /**
30
+ * Use HTML tags `<mark>` and `</mark>` to indicate matches in the fields.
31
+ *
32
+ * @since 1.0.0
33
+ * @committed
34
+ */
35
+ html,
36
+
37
+ /**
38
+ * Use ANSI code sequences `\\x1b[43m>` and `\\x1b[0m` to indicate matches in the fields.
39
+ *
40
+ * @since 1.0.0
41
+ * @committed
42
+ */
43
+ ansi,
44
+ };
45
+ } // namespace couchbase
@@ -0,0 +1,43 @@
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
+ namespace couchbase
23
+ {
24
+ /**
25
+ * A query that matches all indexed documents.
26
+ *
27
+ * @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-match-all.html server documentation
28
+ *
29
+ * @since 1.0.0
30
+ * @committed
31
+ */
32
+ class match_all_query : public search_query
33
+ {
34
+ public:
35
+ /**
36
+ * @return encoded representation of the query.
37
+ *
38
+ * @since 1.0.0
39
+ * @internal
40
+ */
41
+ [[nodiscard]] auto encode() const -> encoded_search_query override;
42
+ };
43
+ } // namespace couchbase
@@ -0,0 +1,43 @@
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
+ namespace couchbase
23
+ {
24
+ /**
25
+ * A query that matches nothing.
26
+ *
27
+ * @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-match-none.html server documentation
28
+ *
29
+ * @since 1.0.0
30
+ * @committed
31
+ */
32
+ class match_none_query : public search_query
33
+ {
34
+ public:
35
+ /**
36
+ * @return encoded representation of the query.
37
+ *
38
+ * @since 1.0.0
39
+ * @internal
40
+ */
41
+ [[nodiscard]] auto encode() const -> encoded_search_query override;
42
+ };
43
+ } // namespace couchbase
@@ -0,0 +1,45 @@
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
+ namespace couchbase
21
+ {
22
+ /**
23
+ * Defines how the individual match terms should be logically concatenated
24
+ *
25
+ * @since 1.0.0
26
+ * @committed
27
+ */
28
+ enum class match_operator {
29
+ /**
30
+ * Individual match terms are concatenated with a logical OR - this is the default if not provided.
31
+ *
32
+ * @since 1.0.0
33
+ * @committed
34
+ */
35
+ logical_or,
36
+
37
+ /**
38
+ * Individual match terms are concatenated with a logical AND.
39
+ *
40
+ * @since 1.0.0
41
+ * @committed
42
+ */
43
+ logical_and,
44
+ };
45
+ } // namespace couchbase
@@ -0,0 +1,108 @@
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 input text is analyzed and a phrase query is built with the terms resulting from the analysis. This type of query searches for terms
29
+ * occurring in the specified positions and offsets. This depends on term vectors, which are consulted to determine phrase distance.
30
+ *
31
+ * For example, a match phrase query for `"location for functions"` is matched with `"locate the function"`, if the standard analyzer is
32
+ * used: this analyzer uses a **stemmer**, which tokenizes `"location"` and `"locate"` to `"locat"`, and reduces `"functions"` and
33
+ * `"function"` to `"function"`. Additionally, the analyzer employs stop removal, which removes small and less significant words from input
34
+ * and target text, so that matches are attempted on only the more significant elements of vocabulary: in this case `"for"` and `"the"` are
35
+ * removed. Following this processing, the tokens `"locat"` and `"function"` are recognized as common to both input and target; and also as
36
+ * being both in the same sequence as, and at the same distance from one another; and therefore a match is made.
37
+ * @snippet test_unit_search.cxx search-match-phrase
38
+ *
39
+ * @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-match-phrase.html
40
+ *
41
+ * @since 1.0.0
42
+ * @committed
43
+ */
44
+ class match_phrase_query : public search_query
45
+ {
46
+ public:
47
+ /**
48
+ * Create a new match phrase query.
49
+ *
50
+ * @param match_phrase the input string to be matched against
51
+ *
52
+ * @since 1.0.0
53
+ * @committed
54
+ */
55
+ explicit match_phrase_query(std::string match_phrase)
56
+ : match_phrase_{ std::move(match_phrase) }
57
+ {
58
+ }
59
+
60
+ /**
61
+ * Analyzers are used to transform input text into a stream of tokens for indexing. The Server comes with built-in analyzers and the
62
+ * users can create their own.
63
+ *
64
+ * @param analyzer_name the name of the analyzer used
65
+ *
66
+ * @return this query for chaining purposes.
67
+ *
68
+ * @since 1.0.0
69
+ * @committed
70
+ */
71
+ auto analyzer(std::string analyzer_name) -> match_phrase_query&
72
+ {
73
+ analyzer_ = std::move(analyzer_name);
74
+ return *this;
75
+ }
76
+
77
+ /**
78
+ * If a field is specified, only terms in that field will be matched.
79
+ *
80
+ * This can also affect the used analyzer if one isn't specified explicitly.
81
+ *
82
+ * @param field_name name of the field to be matched
83
+ *
84
+ * @return this query for chaining purposes.
85
+ *
86
+ * @since 1.0.0
87
+ * @committed
88
+ */
89
+ auto field(std::string field_name) -> match_phrase_query&
90
+ {
91
+ field_ = std::move(field_name);
92
+ return *this;
93
+ }
94
+
95
+ /**
96
+ * @return encoded representation of the query.
97
+ *
98
+ * @since 1.0.0
99
+ * @internal
100
+ */
101
+ [[nodiscard]] auto encode() const -> encoded_search_query override;
102
+
103
+ private:
104
+ std::string match_phrase_;
105
+ std::optional<std::string> analyzer_{};
106
+ std::optional<std::string> field_{};
107
+ };
108
+ } // namespace couchbase