couchbase 4.2.3 → 4.2.5-dev.1

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 (205) hide show
  1. package/CMakeLists.txt +136 -11
  2. package/deps/couchbase-cxx-client/CMakeLists.txt +54 -4
  3. package/deps/couchbase-cxx-client/README.md +1 -0
  4. package/deps/couchbase-cxx-client/bin/create-search-index +164 -0
  5. package/deps/couchbase-cxx-client/bin/init-cluster +55 -10
  6. package/deps/couchbase-cxx-client/bin/run-unit-tests +62 -6
  7. package/deps/couchbase-cxx-client/bin/travel-sample-index-v6.json +184 -0
  8. package/deps/couchbase-cxx-client/bin/travel-sample-index.json +188 -0
  9. package/deps/couchbase-cxx-client/cmake/Documentation.cmake +0 -1
  10. package/deps/couchbase-cxx-client/cmake/OpenSSL.cmake +98 -3
  11. package/deps/couchbase-cxx-client/cmake/Testing.cmake +8 -0
  12. package/deps/couchbase-cxx-client/cmake/build_config.hxx.in +3 -0
  13. package/deps/couchbase-cxx-client/core/bucket.cxx +183 -152
  14. package/deps/couchbase-cxx-client/core/bucket.hxx +17 -4
  15. package/deps/couchbase-cxx-client/core/cluster.hxx +18 -1
  16. package/deps/couchbase-cxx-client/core/cluster_options.hxx +1 -0
  17. package/deps/couchbase-cxx-client/core/error_context/key_value.cxx +2 -1
  18. package/deps/couchbase-cxx-client/core/error_context/key_value.hxx +10 -12
  19. package/deps/couchbase-cxx-client/core/error_context/search.hxx +1 -1
  20. package/deps/couchbase-cxx-client/core/impl/analytics.cxx +1 -0
  21. package/deps/couchbase-cxx-client/core/impl/boolean_field_query.cxx +40 -0
  22. package/deps/couchbase-cxx-client/core/impl/boolean_query.cxx +62 -0
  23. package/deps/couchbase-cxx-client/core/impl/cluster.cxx +1 -0
  24. package/deps/couchbase-cxx-client/core/impl/conjunction_query.cxx +51 -0
  25. package/deps/couchbase-cxx-client/core/impl/date_range.cxx +89 -0
  26. package/deps/couchbase-cxx-client/core/impl/date_range_facet.cxx +54 -0
  27. package/deps/couchbase-cxx-client/core/impl/date_range_facet_result.cxx +64 -0
  28. package/deps/couchbase-cxx-client/core/impl/date_range_query.cxx +125 -0
  29. package/deps/couchbase-cxx-client/core/impl/disjunction_query.cxx +51 -0
  30. package/deps/couchbase-cxx-client/core/impl/encoded_search_facet.hxx +29 -0
  31. package/deps/couchbase-cxx-client/core/impl/encoded_search_query.hxx +29 -0
  32. package/deps/couchbase-cxx-client/core/impl/encoded_search_sort.hxx +29 -0
  33. package/deps/couchbase-cxx-client/core/impl/geo_bounding_box_query.cxx +46 -0
  34. package/deps/couchbase-cxx-client/core/impl/geo_distance_query.cxx +43 -0
  35. package/deps/couchbase-cxx-client/core/impl/geo_polygon_query.cxx +46 -0
  36. package/deps/couchbase-cxx-client/core/impl/internal_date_range_facet_result.cxx +80 -0
  37. package/deps/couchbase-cxx-client/core/impl/internal_date_range_facet_result.hxx +48 -0
  38. package/deps/couchbase-cxx-client/core/impl/internal_numeric_range_facet_result.cxx +80 -0
  39. package/deps/couchbase-cxx-client/core/impl/internal_numeric_range_facet_result.hxx +48 -0
  40. package/deps/couchbase-cxx-client/core/impl/internal_search_error_context.cxx +141 -0
  41. package/deps/couchbase-cxx-client/core/impl/internal_search_error_context.hxx +61 -0
  42. package/deps/couchbase-cxx-client/core/impl/internal_search_meta_data.cxx +60 -0
  43. package/deps/couchbase-cxx-client/core/impl/internal_search_meta_data.hxx +41 -0
  44. package/deps/couchbase-cxx-client/core/impl/internal_search_result.cxx +84 -0
  45. package/deps/couchbase-cxx-client/core/impl/internal_search_result.hxx +43 -0
  46. package/deps/couchbase-cxx-client/core/impl/internal_search_row.cxx +82 -0
  47. package/deps/couchbase-cxx-client/core/impl/internal_search_row.hxx +56 -0
  48. package/deps/couchbase-cxx-client/core/impl/internal_search_row_location.hxx +32 -0
  49. package/deps/couchbase-cxx-client/core/impl/internal_search_row_locations.cxx +137 -0
  50. package/deps/couchbase-cxx-client/core/impl/internal_search_row_locations.hxx +45 -0
  51. package/deps/couchbase-cxx-client/core/impl/internal_term_facet_result.cxx +80 -0
  52. package/deps/couchbase-cxx-client/core/impl/internal_term_facet_result.hxx +48 -0
  53. package/deps/couchbase-cxx-client/core/impl/key_value_error_context.cxx +98 -0
  54. package/deps/couchbase-cxx-client/core/impl/match_all_query.cxx +35 -0
  55. package/deps/couchbase-cxx-client/core/impl/match_none_query.cxx +35 -0
  56. package/deps/couchbase-cxx-client/core/impl/match_phrase_query.cxx +43 -0
  57. package/deps/couchbase-cxx-client/core/impl/match_query.cxx +59 -0
  58. package/deps/couchbase-cxx-client/core/impl/numeric_range.cxx +49 -0
  59. package/deps/couchbase-cxx-client/core/impl/numeric_range_facet.cxx +54 -0
  60. package/deps/couchbase-cxx-client/core/impl/numeric_range_facet_result.cxx +64 -0
  61. package/deps/couchbase-cxx-client/core/impl/numeric_range_query.cxx +56 -0
  62. package/deps/couchbase-cxx-client/core/impl/phrase_query.cxx +42 -0
  63. package/deps/couchbase-cxx-client/core/impl/prefix_query.cxx +40 -0
  64. package/deps/couchbase-cxx-client/core/impl/query_error_context.cxx +75 -0
  65. package/deps/couchbase-cxx-client/core/impl/query_string_query.cxx +37 -0
  66. package/deps/couchbase-cxx-client/core/impl/regexp_query.cxx +40 -0
  67. package/deps/couchbase-cxx-client/core/impl/search.cxx +191 -0
  68. package/deps/couchbase-cxx-client/core/impl/search_error_context.cxx +147 -0
  69. package/deps/couchbase-cxx-client/core/impl/search_meta_data.cxx +46 -0
  70. package/deps/couchbase-cxx-client/core/impl/search_result.cxx +66 -0
  71. package/deps/couchbase-cxx-client/core/impl/search_row.cxx +74 -0
  72. package/deps/couchbase-cxx-client/core/impl/search_row_location.cxx +64 -0
  73. package/deps/couchbase-cxx-client/core/impl/search_row_locations.cxx +66 -0
  74. package/deps/couchbase-cxx-client/core/impl/search_sort_field.cxx +104 -0
  75. package/deps/couchbase-cxx-client/core/impl/search_sort_id.cxx +43 -0
  76. package/deps/couchbase-cxx-client/core/impl/search_sort_score.cxx +43 -0
  77. package/deps/couchbase-cxx-client/core/impl/term_facet.cxx +36 -0
  78. package/deps/couchbase-cxx-client/core/impl/term_facet_result.cxx +64 -0
  79. package/deps/couchbase-cxx-client/core/impl/term_query.cxx +56 -0
  80. package/deps/couchbase-cxx-client/core/impl/term_range_query.cxx +57 -0
  81. package/deps/couchbase-cxx-client/core/impl/wildcard_query.cxx +40 -0
  82. package/deps/couchbase-cxx-client/core/io/mcbp_command.hxx +9 -2
  83. package/deps/couchbase-cxx-client/core/io/mcbp_session.cxx +54 -37
  84. package/deps/couchbase-cxx-client/core/io/mcbp_session.hxx +4 -3
  85. package/deps/couchbase-cxx-client/core/json_string.hxx +5 -0
  86. package/deps/couchbase-cxx-client/core/meta/version.cxx +18 -4
  87. package/deps/couchbase-cxx-client/core/mozilla_ca_bundle.hxx +39 -0
  88. package/deps/couchbase-cxx-client/core/operations/document_search.cxx +3 -1
  89. package/deps/couchbase-cxx-client/core/operations/document_search.hxx +1 -1
  90. package/deps/couchbase-cxx-client/core/protocol/client_request.hxx +11 -2
  91. package/deps/couchbase-cxx-client/core/protocol/client_response.hxx +1 -0
  92. package/deps/couchbase-cxx-client/core/utils/connection_string.cxx +59 -46
  93. package/deps/couchbase-cxx-client/core/utils/connection_string.hxx +1 -0
  94. package/deps/couchbase-cxx-client/couchbase/analytics_error_context.hxx +1 -1
  95. package/deps/couchbase-cxx-client/couchbase/boolean_field_query.hxx +77 -0
  96. package/deps/couchbase-cxx-client/couchbase/boolean_query.hxx +223 -0
  97. package/deps/couchbase-cxx-client/couchbase/cluster.hxx +39 -0
  98. package/deps/couchbase-cxx-client/couchbase/conjunction_query.hxx +88 -0
  99. package/deps/couchbase-cxx-client/couchbase/date_range.hxx +69 -0
  100. package/deps/couchbase-cxx-client/couchbase/date_range_facet.hxx +56 -0
  101. package/deps/couchbase-cxx-client/couchbase/date_range_facet_result.hxx +55 -0
  102. package/deps/couchbase-cxx-client/couchbase/date_range_query.hxx +265 -0
  103. package/deps/couchbase-cxx-client/couchbase/disjunction_query.hxx +109 -0
  104. package/deps/couchbase-cxx-client/couchbase/doc_id_query.hxx +111 -0
  105. package/deps/couchbase-cxx-client/couchbase/error_context.hxx +17 -8
  106. package/deps/couchbase-cxx-client/couchbase/fmt/analytics_scan_consistency.hxx +52 -0
  107. package/deps/couchbase-cxx-client/{core/topology/error_map_fmt.hxx → couchbase/fmt/key_value_error_map_attribute.hxx} +21 -21
  108. package/deps/couchbase-cxx-client/couchbase/fmt/search_scan_consistency.hxx +49 -0
  109. package/deps/couchbase-cxx-client/couchbase/geo_bounding_box_query.hxx +107 -0
  110. package/deps/couchbase-cxx-client/couchbase/geo_distance_query.hxx +109 -0
  111. package/deps/couchbase-cxx-client/couchbase/geo_point.hxx +32 -0
  112. package/deps/couchbase-cxx-client/couchbase/geo_polygon_query.hxx +85 -0
  113. package/deps/couchbase-cxx-client/couchbase/highlight_style.hxx +45 -0
  114. package/deps/couchbase-cxx-client/couchbase/key_value_error_context.hxx +7 -2
  115. package/deps/couchbase-cxx-client/couchbase/manager_error_context.hxx +1 -1
  116. package/deps/couchbase-cxx-client/couchbase/match_all_query.hxx +43 -0
  117. package/deps/couchbase-cxx-client/couchbase/match_none_query.hxx +43 -0
  118. package/deps/couchbase-cxx-client/couchbase/match_operator.hxx +45 -0
  119. package/deps/couchbase-cxx-client/couchbase/match_phrase_query.hxx +108 -0
  120. package/deps/couchbase-cxx-client/couchbase/match_query.hxx +163 -0
  121. package/deps/couchbase-cxx-client/couchbase/numeric_range.hxx +58 -0
  122. package/deps/couchbase-cxx-client/couchbase/numeric_range_facet.hxx +56 -0
  123. package/deps/couchbase-cxx-client/couchbase/numeric_range_facet_result.hxx +55 -0
  124. package/deps/couchbase-cxx-client/couchbase/numeric_range_query.hxx +143 -0
  125. package/deps/couchbase-cxx-client/couchbase/phrase_query.hxx +93 -0
  126. package/deps/couchbase-cxx-client/couchbase/prefix_query.hxx +82 -0
  127. package/deps/couchbase-cxx-client/couchbase/query_error_context.hxx +3 -1
  128. package/deps/couchbase-cxx-client/couchbase/query_string_query.hxx +72 -0
  129. package/deps/couchbase-cxx-client/couchbase/regexp_query.hxx +82 -0
  130. package/deps/couchbase-cxx-client/couchbase/scope.hxx +39 -0
  131. package/deps/couchbase-cxx-client/couchbase/search_date_range.hxx +68 -0
  132. package/deps/couchbase-cxx-client/couchbase/search_error_context.hxx +138 -0
  133. package/deps/couchbase-cxx-client/couchbase/search_facet.hxx +60 -0
  134. package/deps/couchbase-cxx-client/couchbase/search_facet_result.hxx +50 -0
  135. package/deps/couchbase-cxx-client/couchbase/search_meta_data.hxx +85 -0
  136. package/deps/couchbase-cxx-client/couchbase/search_metrics.hxx +127 -0
  137. package/deps/couchbase-cxx-client/couchbase/search_numeric_range.hxx +69 -0
  138. package/deps/couchbase-cxx-client/couchbase/search_options.hxx +509 -0
  139. package/deps/couchbase-cxx-client/couchbase/search_query.hxx +69 -0
  140. package/deps/couchbase-cxx-client/couchbase/search_result.hxx +77 -0
  141. package/deps/couchbase-cxx-client/couchbase/search_row.hxx +104 -0
  142. package/deps/couchbase-cxx-client/couchbase/search_row_location.hxx +55 -0
  143. package/deps/couchbase-cxx-client/couchbase/search_row_locations.hxx +86 -0
  144. package/deps/couchbase-cxx-client/couchbase/search_scan_consistency.hxx +34 -0
  145. package/deps/couchbase-cxx-client/couchbase/search_sort.hxx +58 -0
  146. package/deps/couchbase-cxx-client/couchbase/search_sort_field.hxx +117 -0
  147. package/deps/couchbase-cxx-client/couchbase/search_sort_field_missing.hxx +26 -0
  148. package/deps/couchbase-cxx-client/couchbase/search_sort_field_mode.hxx +27 -0
  149. package/deps/couchbase-cxx-client/couchbase/search_sort_field_type.hxx +28 -0
  150. package/deps/couchbase-cxx-client/couchbase/search_sort_id.hxx +60 -0
  151. package/deps/couchbase-cxx-client/couchbase/search_sort_score.hxx +60 -0
  152. package/deps/couchbase-cxx-client/couchbase/search_term_range.hxx +51 -0
  153. package/deps/couchbase-cxx-client/couchbase/security_options.hxx +3 -0
  154. package/deps/couchbase-cxx-client/couchbase/subdocument_error_context.hxx +4 -2
  155. package/deps/couchbase-cxx-client/couchbase/term_facet.hxx +48 -0
  156. package/deps/couchbase-cxx-client/couchbase/term_facet_result.hxx +55 -0
  157. package/deps/couchbase-cxx-client/couchbase/term_query.hxx +151 -0
  158. package/deps/couchbase-cxx-client/couchbase/term_range_query.hxx +142 -0
  159. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_options.hxx +1 -1
  160. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_query_options.hxx +2 -1
  161. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_result.hxx +1 -1
  162. package/deps/couchbase-cxx-client/couchbase/transactions.hxx +3 -3
  163. package/deps/couchbase-cxx-client/couchbase/wildcard_query.hxx +83 -0
  164. package/deps/couchbase-cxx-client/docs/Doxyfile.in +1 -1
  165. package/deps/couchbase-cxx-client/docs/cbc-analytics.md +2 -2
  166. package/deps/couchbase-cxx-client/docs/cbc-get.md +3 -2
  167. package/deps/couchbase-cxx-client/docs/cbc-pillowfight.md +7 -2
  168. package/deps/couchbase-cxx-client/docs/cbc-query.md +2 -2
  169. package/deps/couchbase-cxx-client/docs/cbc.md +3 -3
  170. package/deps/couchbase-cxx-client/docs/cli.hxx +5 -5
  171. package/deps/couchbase-cxx-client/docs/mainpage.hxx +42 -5
  172. package/deps/couchbase-cxx-client/test/CMakeLists.txt +1 -0
  173. package/deps/couchbase-cxx-client/test/test_integration_analytics.cxx +28 -6
  174. package/deps/couchbase-cxx-client/test/test_integration_collections.cxx +7 -3
  175. package/deps/couchbase-cxx-client/test/test_integration_connect.cxx +7 -3
  176. package/deps/couchbase-cxx-client/test/test_integration_crud.cxx +13 -3
  177. package/deps/couchbase-cxx-client/test/test_integration_diagnostics.cxx +8 -2
  178. package/deps/couchbase-cxx-client/test/test_integration_durability.cxx +12 -7
  179. package/deps/couchbase-cxx-client/test/test_integration_examples.cxx +283 -11
  180. package/deps/couchbase-cxx-client/test/test_integration_management.cxx +140 -88
  181. package/deps/couchbase-cxx-client/test/test_integration_query.cxx +67 -9
  182. package/deps/couchbase-cxx-client/test/test_integration_range_scan.cxx +12 -12
  183. package/deps/couchbase-cxx-client/test/test_integration_read_replica.cxx +48 -11
  184. package/deps/couchbase-cxx-client/test/test_integration_search.cxx +19 -1
  185. package/deps/couchbase-cxx-client/test/test_integration_subdoc.cxx +60 -9
  186. package/deps/couchbase-cxx-client/test/test_integration_tracer.cxx +3 -0
  187. package/deps/couchbase-cxx-client/test/test_integration_transcoders.cxx +4 -0
  188. package/deps/couchbase-cxx-client/test/test_transaction_examples.cxx +100 -85
  189. package/deps/couchbase-cxx-client/test/test_unit_connection_string.cxx +29 -0
  190. package/deps/couchbase-cxx-client/test/test_unit_search.cxx +427 -0
  191. package/deps/couchbase-cxx-client/test/utils/integration_test_guard.cxx +2 -1
  192. package/deps/couchbase-cxx-client/test/utils/logger.cxx +3 -1
  193. package/deps/couchbase-cxx-client/test/utils/server_version.hxx +31 -15
  194. package/deps/couchbase-cxx-client/test/utils/test_context.cxx +8 -0
  195. package/deps/couchbase-cxx-client/tools/get.cxx +9 -8
  196. package/deps/couchbase-cxx-client/tools/pillowfight.cxx +175 -75
  197. package/deps/couchbase-cxx-client/tools/version.cxx +4 -2
  198. package/dist/binding.d.ts +1 -1
  199. package/dist/binding.js +3 -2
  200. package/package.json +96 -1
  201. package/scripts/createPlatformPackages.js +108 -0
  202. package/scripts/install.js +45 -0
  203. package/scripts/prebuilds.js +249 -0
  204. package/scripts/prune.js +124 -0
  205. package/src/jstocbpp_autogen.hpp +3 -2
@@ -0,0 +1,509 @@
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/codec/tao_json_serializer.hxx>
21
+ #include <couchbase/common_options.hxx>
22
+ #include <couchbase/highlight_style.hxx>
23
+ #include <couchbase/mutation_state.hxx>
24
+ #include <couchbase/search_error_context.hxx>
25
+ #include <couchbase/search_facet.hxx>
26
+ #include <couchbase/search_result.hxx>
27
+ #include <couchbase/search_scan_consistency.hxx>
28
+ #include <couchbase/search_sort.hxx>
29
+
30
+ #include <chrono>
31
+ #include <functional>
32
+ #include <memory>
33
+ #include <optional>
34
+
35
+ namespace couchbase
36
+ {
37
+ /**
38
+ * Options for cluster#search_query() and scope#search_query().
39
+ *
40
+ * @since 1.0.0
41
+ * @committed
42
+ */
43
+ struct search_options : public common_options<search_options> {
44
+ /**
45
+ * Immutable value object representing consistent options.
46
+ *
47
+ * @since 1.0.0
48
+ * @internal
49
+ */
50
+ struct built : public common_options<search_options>::built {
51
+ std::optional<std::string> client_context_id{};
52
+ bool include_locations{ false };
53
+ bool disable_scoring{ false };
54
+ std::optional<bool> explain{};
55
+ std::optional<std::uint32_t> limit{};
56
+ std::optional<std::uint32_t> skip{};
57
+ std::vector<std::string> collections{};
58
+ std::vector<std::string> fields{};
59
+ std::vector<std::string> highlight_fields{};
60
+ std::optional<couchbase::highlight_style> highlight_style{};
61
+ std::optional<search_scan_consistency> scan_consistency{};
62
+ std::vector<mutation_token> mutation_state{};
63
+ std::map<std::string, codec::binary, std::less<>> raw{};
64
+ std::map<std::string, std::shared_ptr<search_facet>, std::less<>> facets{};
65
+ std::vector<std::shared_ptr<search_sort>> sort{};
66
+ std::vector<std::string> sort_string{};
67
+ };
68
+
69
+ /**
70
+ * Validates options and returns them as an immutable value.
71
+ *
72
+ * @return consistent options as an immutable value
73
+ *
74
+ * @exception std::system_error with code errc::common::invalid_argument if the options are not valid
75
+ *
76
+ * @since 1.0.0
77
+ * @internal
78
+ */
79
+ [[nodiscard]] auto build() const -> built
80
+ {
81
+ return {
82
+ build_common_options(),
83
+ client_context_id_,
84
+ include_locations_,
85
+ disable_scoring_,
86
+ explain_,
87
+ limit_,
88
+ skip_,
89
+ collections_,
90
+ fields_,
91
+ highlight_fields_,
92
+ highlight_style_,
93
+ scan_consistency_,
94
+ mutation_state_,
95
+ raw_,
96
+ facets_,
97
+ sort_,
98
+ sort_string_,
99
+ };
100
+ }
101
+
102
+ /**
103
+ * Supports providing a custom client context ID for this query.
104
+ *
105
+ * If no client context ID is provided by the user, a UUID is generated and sent automatically so by default it is always possible to
106
+ * identify a query when debugging.
107
+ *
108
+ * @param client_context_id the client context ID
109
+ * @return this options builder for chaining purposes.
110
+ *
111
+ * @since 1.0.0
112
+ * @committed
113
+ */
114
+ auto client_context_id(std::string client_context_id) -> search_options&
115
+ {
116
+ if (client_context_id.empty()) {
117
+ client_context_id_.reset();
118
+ } else {
119
+ client_context_id_ = std::move(client_context_id);
120
+ }
121
+ return self();
122
+ }
123
+
124
+ /**
125
+ * Customizes the consistency guarantees for this query.
126
+ *
127
+ * Tuning the scan consistency allows to trade data "freshness" for latency and vice versa. By default
128
+ * {@link search_scan_consistency::not_bounded} is used, which means that the server returns the data it has in the index right away.
129
+ * This is fast, but might not include the most recent mutations.
130
+ *
131
+ * Note that you cannot use this method and {@link #consistent_with(const mutation_state&)} at the same time, since they are mutually
132
+ * exclusive. As a rule of thumb, if you only care to be consistent with the mutation you just wrote on the same thread/app, use
133
+ * {@link #consistent_with(const mutation_state&)}.
134
+ *
135
+ * @param scan_consistency the index scan consistency to be used for this query
136
+ * @return this options builder for chaining purposes.
137
+ *
138
+ * @since 1.0.0
139
+ * @committed
140
+ */
141
+ auto scan_consistency(search_scan_consistency scan_consistency) -> search_options&
142
+ {
143
+ scan_consistency_ = scan_consistency;
144
+ mutation_state_.clear();
145
+ return self();
146
+ }
147
+
148
+ /**
149
+ * Sets the {@link mutation_token}s this query should be consistent with.
150
+ *
151
+ * These mutation tokens are returned from mutations (i.e. as part of a {@link mutation_result}) and if you want your
152
+ * N1QL query to include those you need to pass the mutation tokens into a {@link mutation_state}.
153
+ *
154
+ * Note that you cannot use this method and {@link #scan_consistency(search_scan_consistency)} at the same time, since
155
+ * they are mutually exclusive. As a rule of thumb, if you only care to be consistent with the mutation you just wrote
156
+ * on the same thread/app, use this method.
157
+ *
158
+ * @param state the mutation state containing the mutation tokens.
159
+ * @return this options builder for chaining purposes.
160
+ *
161
+ * @since 1.0.0
162
+ * @committed
163
+ */
164
+ auto consistent_with(const mutation_state& state) -> search_options&
165
+ {
166
+ mutation_state_ = state.tokens();
167
+ scan_consistency_.reset();
168
+ return self();
169
+ }
170
+
171
+ /**
172
+ *
173
+ * @tparam Value
174
+ * @param name
175
+ * @param value
176
+ * @return this options builder for chaining purposes.
177
+ *
178
+ * @since 1.0.0
179
+ * @committed
180
+ */
181
+ template<typename Value>
182
+ auto raw(std::string name, const Value& value) -> search_options&
183
+ {
184
+ raw_[std::move(name)] = std::move(codec::tao_json_serializer::serialize(value));
185
+ return self();
186
+ }
187
+
188
+ /**
189
+ * Set the number of rows to skip (eg. for pagination).
190
+ *
191
+ * @param skip
192
+ * @return this options builder for chaining purposes.
193
+ *
194
+ * @since 1.0.0
195
+ * @committed
196
+ */
197
+ auto skip(std::uint32_t skip) -> search_options&
198
+ {
199
+ skip_ = skip;
200
+ return self();
201
+ }
202
+
203
+ /**
204
+ *
205
+ * Add a limit to the query on the number of rows it can return.
206
+ *
207
+ * @param limit
208
+ * @return this options builder for chaining purposes.
209
+ *
210
+ * @since 1.0.0
211
+ * @committed
212
+ */
213
+ auto limit(std::uint32_t limit) -> search_options&
214
+ {
215
+ limit_ = limit;
216
+ return self();
217
+ }
218
+
219
+ /**
220
+ * Activates or deactivates the explanation of each result hit in the response, according to the parameter.
221
+ *
222
+ * @param explain
223
+ * @return this options builder for chaining purposes.
224
+ *
225
+ * @since 1.0.0
226
+ * @committed
227
+ */
228
+ auto explain(bool explain) -> search_options&
229
+ {
230
+ explain_ = explain;
231
+ return self();
232
+ }
233
+
234
+ /**
235
+ * If set to true, thee server will not perform any scoring on the hits.
236
+ *
237
+ * @param disable
238
+ * @return this options builder for chaining purposes.
239
+ *
240
+ * @since 1.0.0
241
+ * @committed
242
+ */
243
+ auto disable_scoring(bool disable) -> search_options&
244
+ {
245
+ disable_scoring_ = disable;
246
+ return self();
247
+ }
248
+
249
+ /**
250
+ * If set to true, will include the @ref search_row#locations().
251
+ *
252
+ * @param include
253
+ * @return this options builder for chaining purposes.
254
+ *
255
+ * @since 1.0.0
256
+ * @committed
257
+ */
258
+ auto include_locations(bool include) -> search_options&
259
+ {
260
+ include_locations_ = include;
261
+ return self();
262
+ }
263
+
264
+ /**
265
+ * Allows to limit the search query to a specific list of collection names.
266
+ *
267
+ * @note this is only supported with server 7.0 and later.
268
+ *
269
+ * @param collections
270
+ * @return this options builder for chaining purposes.
271
+ *
272
+ * @since 1.0.0
273
+ * @committed
274
+ */
275
+ auto collections(std::vector<std::string> collections) -> search_options&
276
+ {
277
+ collections_ = std::move(collections);
278
+ return self();
279
+ }
280
+
281
+ /**
282
+ * Configures the list of fields for which the whole value should be included in the response. If empty, no field
283
+ * values are included.
284
+ *
285
+ * This drives the inclusion of the fields in each @ref search_row hit.
286
+ *
287
+ * @note to be highlighted, the fields must be stored in the FTS index.
288
+ *
289
+ * @param fields
290
+ * @return this options builder for chaining purposes.
291
+ *
292
+ * @since 1.0.0
293
+ * @committed
294
+ */
295
+ auto fields(std::vector<std::string> fields) -> search_options&
296
+ {
297
+ fields_ = std::move(fields);
298
+ return self();
299
+ }
300
+
301
+ /**
302
+ * Configures the highlighting of matches in the response.
303
+ *
304
+ * This drives the inclusion of the @ref search_row#fragments() fragments in each @ref search_row hit.
305
+ *
306
+ * @note to be highlighted, the fields must be stored in the FTS index.
307
+ *
308
+ * @param style
309
+ * @param fields
310
+ * @return this options builder for chaining purposes.
311
+ *
312
+ * @since 1.0.0
313
+ * @committed
314
+ */
315
+ auto highlight(highlight_style style = highlight_style::html, std::vector<std::string> fields = {}) -> search_options&
316
+ {
317
+ highlight_style_ = style;
318
+ highlight_fields_ = std::move(fields);
319
+ return self();
320
+ }
321
+
322
+ /**
323
+ * Configures the highlighting of matches in the response for all fields, using the server's default highlighting style.
324
+ *
325
+ * This drives the inclusion of the @ref search_row#fragments() fragments in each @ref search_row hit.
326
+ *
327
+ * @note to be highlighted, the fields must be stored in the FTS index.
328
+ *
329
+ * @param fields
330
+ * @return this options builder for chaining purposes.
331
+ *
332
+ * @since 1.0.0
333
+ * @committed
334
+ */
335
+ auto highlight(std::vector<std::string> fields) -> search_options&
336
+ {
337
+ highlight_style_ = highlight_style::html;
338
+ highlight_fields_ = std::move(fields);
339
+ return self();
340
+ }
341
+
342
+ /**
343
+ * Configures the list of fields (including special fields) which are used for sorting purposes. If empty, the default sorting
344
+ * (descending by score) is used by the server.
345
+ *
346
+ * The list of sort fields can include actual fields (like "firstname" but then they must be stored in the index, configured in the
347
+ * server side mapping). Fields provided first are considered first and in a "tie" case the next sort field is considered. So sorting by
348
+ * "firstname" and then "lastname" will first sort ascending by the firstname and if the names are equal then sort ascending by
349
+ * lastname. Special fields like "_id" and "_score" can also be used. If prefixed with "-" the sort order is set to descending.
350
+ *
351
+ * If no sort is provided, it is equal to `sort("-_score")`, since the server will sort it by score in descending order.
352
+ *
353
+ * @param sort_expressions
354
+ * @return this options builder for chaining purposes.
355
+ *
356
+ * @since 1.0.0
357
+ * @committed
358
+ */
359
+ auto sort(std::vector<std::string> sort_expressions) -> search_options&
360
+ {
361
+ sort_string_ = std::move(sort_expressions);
362
+ return self();
363
+ }
364
+
365
+ /**
366
+ * Configures the list of @ref search_sort instances which are used for sorting purposes. If empty, the default sorting
367
+ * (descending by score) is used by the server.
368
+ *
369
+ * If no sort is provided, it is equal to `sort("-_score")`, since the server will sort it by score in descending order.
370
+ *
371
+ * @param sort_objects
372
+ * @return this options builder for chaining purposes.
373
+ *
374
+ * @since 1.0.0
375
+ * @committed
376
+ */
377
+ auto sort(std::vector<std::shared_ptr<search_sort>> sort_objects) -> search_options&
378
+ {
379
+ sort_ = std::move(sort_objects);
380
+ return self();
381
+ }
382
+
383
+ /**
384
+ * Sets list of @ref search_facet to the query.
385
+ *
386
+ * This drives the inclusion of the facets in the @ref search_result.
387
+ *
388
+ * @note to be faceted, a field's value must be stored in the FTS index.
389
+ *
390
+ * @param facets
391
+ * @return this options builder for chaining purposes.
392
+ *
393
+ * @since 1.0.0
394
+ * @committed
395
+ */
396
+ auto facets(std::map<std::string, std::shared_ptr<search_facet>> facets) -> search_options&
397
+ {
398
+ facets_.clear();
399
+ for (auto& [name, facet] : facets) {
400
+ facets_[name] = std::move(facet);
401
+ }
402
+ return self();
403
+ }
404
+
405
+ /**
406
+ * Sets list of @ref search_facet to the query.
407
+ *
408
+ * This drives the inclusion of the facets in the @ref search_result.
409
+ *
410
+ * @note to be faceted, a field's value must be stored in the FTS index.
411
+ *
412
+ * @param facets pairs of std::string name and value derived from @ref search_facet
413
+ * @return this options builder for chaining purposes.
414
+ *
415
+ * @since 1.0.0
416
+ * @committed
417
+ */
418
+ template<typename... Facets>
419
+ auto facets(const Facets&... facets) -> search_options&
420
+ {
421
+ facets_.clear();
422
+ encode_facet(facets...);
423
+ return self();
424
+ }
425
+
426
+ /**
427
+ * Adds one @ref search_facet to the query.
428
+ *
429
+ * This is an additive operation (the given facets are added to any facet previously requested), but if an existing facet has the same
430
+ * name it will be replaced.
431
+ *
432
+ * This drives the inclusion of the facets in the @ref search_result.
433
+ *
434
+ * @note to be faceted, a field's value must be stored in the FTS index.
435
+ *
436
+ * @param name
437
+ * @param facet
438
+ * @return this options builder for chaining purposes.
439
+ *
440
+ * @since 1.0.0
441
+ * @committed
442
+ */
443
+ auto facet(std::string name, std::shared_ptr<search_facet> facet) -> search_options&
444
+ {
445
+ facets_[std::move(name)] = std::move(facet);
446
+ return self();
447
+ }
448
+
449
+ /**
450
+ * Adds one @ref search_facet to the query.
451
+ *
452
+ * This is an additive operation (the given facets are added to any facet previously requested), but if an existing facet has the same
453
+ * name it will be replaced.
454
+ *
455
+ * This drives the inclusion of the facets in the @ref search_result.
456
+ *
457
+ * @note to be faceted, a field's value must be stored in the FTS index.
458
+ *
459
+ * @tparam Facet type of the facet, that derived from the @ref search_facet
460
+ * @param name
461
+ * @param facet
462
+ * @return this options builder for chaining purposes.
463
+ *
464
+ * @since 1.0.0
465
+ * @committed
466
+ */
467
+ template<typename Facet>
468
+ auto facet(std::string name, Facet facet) -> search_options&
469
+ {
470
+ facets_[std::move(name)] = std::make_shared<Facet>(std::move(facet));
471
+ return self();
472
+ }
473
+
474
+ private:
475
+ template<typename Name, typename Facet, typename... Rest>
476
+ void encode_facet(const std::pair<Name, Facet>& facet, Rest... args)
477
+ {
478
+ facets_[std::move(facet.first)] = std::make_shared<Facet>(std::move(facet.second));
479
+ if constexpr (sizeof...(args) > 0) {
480
+ encode_facet(args...);
481
+ }
482
+ }
483
+
484
+ std::optional<std::string> client_context_id_{};
485
+ bool include_locations_{ false };
486
+ bool disable_scoring_{ false };
487
+ std::optional<bool> explain_{};
488
+ std::optional<std::uint32_t> limit_{};
489
+ std::optional<std::uint32_t> skip_{};
490
+ std::vector<std::string> collections_{};
491
+ std::vector<std::string> fields_{};
492
+ std::vector<std::string> highlight_fields_{};
493
+ std::optional<highlight_style> highlight_style_{};
494
+ std::optional<search_scan_consistency> scan_consistency_{};
495
+ std::vector<mutation_token> mutation_state_{};
496
+ std::map<std::string, codec::binary, std::less<>> raw_{};
497
+ std::map<std::string, std::shared_ptr<search_facet>, std::less<>> facets_{};
498
+ std::vector<std::shared_ptr<search_sort>> sort_{};
499
+ std::vector<std::string> sort_string_{};
500
+ };
501
+
502
+ /**
503
+ * The signature for the handler of the @ref cluster#search_query() and @ref scope#search_query() operations
504
+ *
505
+ * @since 1.0.0
506
+ * @uncommitted
507
+ */
508
+ using search_handler = std::function<void(couchbase::search_error_context, search_result)>;
509
+ } // 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 <cstdint>
21
+ #include <optional>
22
+
23
+ namespace couchbase
24
+ {
25
+ #ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
26
+ struct encoded_search_query;
27
+ #endif
28
+
29
+ /**
30
+ * Base class for full text search queries.
31
+ */
32
+ class search_query
33
+ {
34
+ public:
35
+ virtual ~search_query() = default;
36
+
37
+ /**
38
+ * The boost parameter is used to increase the relative weight of a clause (with a boost greater than 1) or decrease the relative weight
39
+ * (with a boost between 0 and 1).
40
+ *
41
+ * @param boost boost value
42
+ * @tparam derived_query by default it returns `this` as @ref search_query, but it can also down-cast to derived query class.
43
+ *
44
+ * @return this query for chaining purposes.
45
+ *
46
+ * @since 1.0.0
47
+ * @committed
48
+ */
49
+ template<typename derived_query = search_query, std::enable_if_t<std::is_base_of_v<search_query, derived_query>, bool> = true>
50
+ auto boost(double boost) -> derived_query&
51
+ {
52
+ boost_ = boost;
53
+ return *static_cast<derived_query*>(this);
54
+ }
55
+
56
+ /**
57
+ * @return encoded representation of the query.
58
+ *
59
+ * @since 1.0.0
60
+ * @internal
61
+ */
62
+ [[nodiscard]] virtual auto encode() const -> encoded_search_query = 0;
63
+
64
+ protected:
65
+ search_query() = default;
66
+
67
+ std::optional<double> boost_{};
68
+ };
69
+ } // namespace couchbase
@@ -0,0 +1,77 @@
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/date_range_facet_result.hxx>
21
+ #include <couchbase/numeric_range_facet_result.hxx>
22
+ #include <couchbase/search_meta_data.hxx>
23
+ #include <couchbase/search_row.hxx>
24
+ #include <couchbase/term_facet_result.hxx>
25
+
26
+ #include <chrono>
27
+ #include <cinttypes>
28
+ #include <optional>
29
+ #include <vector>
30
+
31
+ namespace couchbase
32
+ {
33
+ #ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
34
+ class internal_search_result;
35
+ #endif
36
+
37
+ /**
38
+ * Represents result of @ref cluster#search_query() and @ref scope#search_query() calls.
39
+ *
40
+ * @since 1.0.0
41
+ * @committed
42
+ */
43
+ class search_result
44
+ {
45
+ public:
46
+ search_result();
47
+ /**
48
+ * @since 1.0.0
49
+ * @volatile
50
+ */
51
+ explicit search_result(internal_search_result internal);
52
+ ~search_result();
53
+
54
+ search_result(const search_result&) = delete;
55
+ search_result& operator=(const search_result&) = delete;
56
+
57
+ search_result(search_result&&) noexcept;
58
+ search_result& operator=(search_result&&) noexcept;
59
+
60
+ /**
61
+ * Returns the {@link search_meta_data} giving access to the additional metadata associated with this search.
62
+ *
63
+ * @return response metadata
64
+ *
65
+ * @since 1.0.0
66
+ * @committed
67
+ */
68
+ [[nodiscard]] auto meta_data() const -> const search_meta_data&;
69
+
70
+ [[nodiscard]] auto rows() const -> const std::vector<search_row>&;
71
+
72
+ [[nodiscard]] auto facets() const -> const std::map<std::string, std::shared_ptr<search_facet_result>>&;
73
+
74
+ private:
75
+ std::unique_ptr<internal_search_result> internal_;
76
+ };
77
+ } // namespace couchbase