couchbase 3.4.1 → 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 (278) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/ext/couchbase/CMakeLists.txt +59 -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/ThirdPartyDependencies.cmake +4 -0
  8. data/ext/couchbase/cmake/build_config.hxx.in +3 -0
  9. data/ext/couchbase/core/bucket.cxx +3 -2
  10. data/ext/couchbase/core/bucket.hxx +9 -0
  11. data/ext/couchbase/core/cluster.hxx +17 -0
  12. data/ext/couchbase/core/cluster_options.cxx +2 -2
  13. data/ext/couchbase/core/cluster_options.hxx +4 -7
  14. data/ext/couchbase/core/{config_profile.cxx → cluster_options_fwd.hxx} +7 -6
  15. data/ext/couchbase/core/config_profile.hxx +2 -65
  16. data/ext/couchbase/core/config_profiles.cxx +79 -0
  17. data/ext/couchbase/core/config_profiles.hxx +56 -0
  18. data/ext/couchbase/core/error_context/search.hxx +1 -1
  19. data/ext/couchbase/core/impl/analytics.cxx +237 -0
  20. data/ext/couchbase/core/impl/boolean_field_query.cxx +40 -0
  21. data/ext/couchbase/core/impl/boolean_query.cxx +62 -0
  22. data/ext/couchbase/core/impl/cluster.cxx +2 -1
  23. data/ext/couchbase/core/impl/conjunction_query.cxx +51 -0
  24. data/ext/couchbase/core/impl/date_range.cxx +89 -0
  25. data/ext/couchbase/core/impl/date_range_facet.cxx +54 -0
  26. data/ext/couchbase/core/impl/date_range_facet_result.cxx +64 -0
  27. data/ext/couchbase/core/impl/date_range_query.cxx +125 -0
  28. data/ext/couchbase/core/impl/disjunction_query.cxx +51 -0
  29. data/ext/couchbase/core/impl/dns_srv_tracker.cxx +5 -3
  30. data/ext/couchbase/core/impl/encoded_search_facet.hxx +29 -0
  31. data/ext/couchbase/core/impl/encoded_search_query.hxx +29 -0
  32. data/ext/couchbase/core/impl/encoded_search_sort.hxx +29 -0
  33. data/ext/couchbase/core/impl/geo_bounding_box_query.cxx +46 -0
  34. data/ext/couchbase/core/impl/geo_distance_query.cxx +43 -0
  35. data/ext/couchbase/core/impl/geo_polygon_query.cxx +46 -0
  36. data/ext/couchbase/core/impl/internal_date_range_facet_result.cxx +80 -0
  37. data/ext/couchbase/core/impl/internal_date_range_facet_result.hxx +48 -0
  38. data/ext/couchbase/core/impl/internal_numeric_range_facet_result.cxx +80 -0
  39. data/ext/couchbase/core/impl/internal_numeric_range_facet_result.hxx +48 -0
  40. data/ext/couchbase/core/impl/internal_search_error_context.cxx +141 -0
  41. data/ext/couchbase/core/impl/internal_search_error_context.hxx +61 -0
  42. data/ext/couchbase/core/impl/internal_search_meta_data.cxx +60 -0
  43. data/ext/couchbase/core/impl/internal_search_meta_data.hxx +41 -0
  44. data/ext/couchbase/core/impl/internal_search_result.cxx +84 -0
  45. data/ext/couchbase/core/impl/internal_search_result.hxx +43 -0
  46. data/ext/couchbase/core/impl/internal_search_row.cxx +82 -0
  47. data/ext/couchbase/core/impl/internal_search_row.hxx +56 -0
  48. data/ext/couchbase/core/impl/internal_search_row_location.hxx +32 -0
  49. data/ext/couchbase/core/impl/internal_search_row_locations.cxx +137 -0
  50. data/ext/couchbase/core/impl/internal_search_row_locations.hxx +45 -0
  51. data/ext/couchbase/core/impl/internal_term_facet_result.cxx +80 -0
  52. data/ext/couchbase/core/impl/internal_term_facet_result.hxx +48 -0
  53. data/ext/couchbase/core/impl/match_all_query.cxx +35 -0
  54. data/ext/couchbase/core/impl/match_none_query.cxx +35 -0
  55. data/ext/couchbase/core/impl/match_phrase_query.cxx +43 -0
  56. data/ext/couchbase/core/impl/match_query.cxx +59 -0
  57. data/ext/couchbase/core/impl/numeric_range.cxx +49 -0
  58. data/ext/couchbase/core/impl/numeric_range_facet.cxx +54 -0
  59. data/ext/couchbase/core/impl/numeric_range_facet_result.cxx +64 -0
  60. data/ext/couchbase/core/impl/numeric_range_query.cxx +56 -0
  61. data/ext/couchbase/core/impl/phrase_query.cxx +42 -0
  62. data/ext/couchbase/core/impl/prefix_query.cxx +40 -0
  63. data/ext/couchbase/core/impl/query.cxx +5 -5
  64. data/ext/couchbase/core/impl/query_string_query.cxx +37 -0
  65. data/ext/couchbase/core/impl/regexp_query.cxx +40 -0
  66. data/ext/couchbase/core/impl/search.cxx +191 -0
  67. data/ext/couchbase/core/impl/search_error_context.cxx +147 -0
  68. data/ext/couchbase/core/impl/search_meta_data.cxx +46 -0
  69. data/ext/couchbase/core/impl/search_result.cxx +66 -0
  70. data/ext/couchbase/core/impl/search_row.cxx +74 -0
  71. data/ext/couchbase/core/impl/search_row_location.cxx +64 -0
  72. data/ext/couchbase/core/impl/search_row_locations.cxx +66 -0
  73. data/ext/couchbase/core/impl/search_sort_field.cxx +104 -0
  74. data/ext/couchbase/core/impl/search_sort_id.cxx +43 -0
  75. data/ext/couchbase/core/impl/search_sort_score.cxx +43 -0
  76. data/ext/couchbase/core/impl/term_facet.cxx +36 -0
  77. data/ext/couchbase/core/impl/term_facet_result.cxx +64 -0
  78. data/ext/couchbase/core/impl/term_query.cxx +56 -0
  79. data/ext/couchbase/core/impl/term_range_query.cxx +57 -0
  80. data/ext/couchbase/core/impl/wildcard_query.cxx +40 -0
  81. data/ext/couchbase/core/io/dns_client.cxx +225 -0
  82. data/ext/couchbase/core/io/dns_client.hxx +19 -188
  83. data/ext/couchbase/core/io/http_context.hxx +1 -1
  84. data/ext/couchbase/core/io/http_session.hxx +10 -0
  85. data/ext/couchbase/core/io/http_session_manager.hxx +5 -3
  86. data/ext/couchbase/core/io/mcbp_session.cxx +28 -1
  87. data/ext/couchbase/core/io/retry_orchestrator.hxx +3 -2
  88. data/ext/couchbase/core/json_string.hxx +5 -0
  89. data/ext/couchbase/core/meta/version.cxx +18 -4
  90. data/ext/couchbase/core/mozilla_ca_bundle.hxx +39 -0
  91. data/ext/couchbase/core/operations/document_analytics.cxx +1 -0
  92. data/ext/couchbase/core/operations/document_analytics.hxx +1 -0
  93. data/ext/couchbase/core/operations/document_append.hxx +1 -1
  94. data/ext/couchbase/core/operations/document_decrement.hxx +1 -1
  95. data/ext/couchbase/core/operations/document_exists.hxx +1 -1
  96. data/ext/couchbase/core/operations/document_get.hxx +1 -1
  97. data/ext/couchbase/core/operations/document_get_and_lock.hxx +1 -1
  98. data/ext/couchbase/core/operations/document_get_and_touch.hxx +1 -1
  99. data/ext/couchbase/core/operations/document_get_projected.hxx +1 -1
  100. data/ext/couchbase/core/operations/document_increment.hxx +1 -1
  101. data/ext/couchbase/core/operations/document_insert.hxx +1 -1
  102. data/ext/couchbase/core/operations/document_lookup_in.hxx +1 -1
  103. data/ext/couchbase/core/operations/document_mutate_in.hxx +1 -1
  104. data/ext/couchbase/core/operations/document_prepend.hxx +1 -1
  105. data/ext/couchbase/core/operations/document_query.cxx +2 -0
  106. data/ext/couchbase/core/operations/document_query.hxx +6 -0
  107. data/ext/couchbase/core/operations/document_remove.hxx +1 -1
  108. data/ext/couchbase/core/operations/document_replace.hxx +1 -1
  109. data/ext/couchbase/core/operations/document_search.cxx +4 -1
  110. data/ext/couchbase/core/operations/document_search.hxx +2 -1
  111. data/ext/couchbase/core/operations/document_touch.hxx +1 -1
  112. data/ext/couchbase/core/operations/document_unlock.hxx +1 -1
  113. data/ext/couchbase/core/operations/document_upsert.hxx +1 -1
  114. data/ext/couchbase/core/operations/document_view.hxx +1 -0
  115. data/ext/couchbase/core/protocol/client_request.hxx +11 -2
  116. data/ext/couchbase/core/public_fwd.hxx +21 -0
  117. data/ext/couchbase/core/tls_verify_mode.hxx +26 -0
  118. data/ext/couchbase/core/topology/configuration.cxx +15 -2
  119. data/ext/couchbase/core/topology/configuration.hxx +5 -1
  120. data/ext/couchbase/core/transactions/active_transaction_record.hxx +2 -2
  121. data/ext/couchbase/core/transactions/attempt_context_impl.cxx +3 -0
  122. data/ext/couchbase/core/transactions/attempt_context_impl.hxx +1 -1
  123. data/ext/couchbase/core/transactions/attempt_context_testing_hooks.cxx +93 -0
  124. data/ext/couchbase/core/transactions/attempt_context_testing_hooks.hxx +48 -75
  125. data/ext/couchbase/core/transactions/cleanup_testing_hooks.cxx +52 -0
  126. data/ext/couchbase/core/transactions/cleanup_testing_hooks.hxx +17 -31
  127. data/ext/couchbase/core/transactions/exceptions.hxx +12 -9
  128. data/ext/couchbase/core/transactions/internal/transaction_context.hxx +12 -12
  129. data/ext/couchbase/core/transactions/internal/transactions_cleanup.hxx +7 -1
  130. data/ext/couchbase/core/transactions/transaction_context.cxx +1 -0
  131. data/ext/couchbase/core/transactions/transactions_cleanup.cxx +144 -155
  132. data/ext/couchbase/core/utils/connection_string.cxx +27 -3
  133. data/ext/couchbase/core/utils/connection_string.hxx +3 -3
  134. data/ext/couchbase/core/utils/json.cxx +4 -1
  135. data/ext/couchbase/couchbase/analytics_error_context.hxx +143 -0
  136. data/ext/couchbase/couchbase/analytics_meta_data.hxx +155 -0
  137. data/ext/couchbase/couchbase/analytics_metrics.hxx +163 -0
  138. data/ext/couchbase/couchbase/analytics_options.hxx +359 -0
  139. data/ext/couchbase/couchbase/analytics_result.hxx +102 -0
  140. data/ext/couchbase/couchbase/analytics_scan_consistency.hxx +46 -0
  141. data/ext/couchbase/couchbase/analytics_status.hxx +41 -0
  142. data/ext/couchbase/couchbase/analytics_warning.hxx +85 -0
  143. data/ext/couchbase/couchbase/behavior_options.hxx +10 -1
  144. data/ext/couchbase/couchbase/boolean_field_query.hxx +77 -0
  145. data/ext/couchbase/couchbase/boolean_query.hxx +223 -0
  146. data/ext/couchbase/couchbase/cluster.hxx +75 -1
  147. data/ext/couchbase/couchbase/conjunction_query.hxx +88 -0
  148. data/ext/couchbase/couchbase/date_range.hxx +69 -0
  149. data/ext/couchbase/couchbase/date_range_facet.hxx +56 -0
  150. data/ext/couchbase/couchbase/date_range_facet_result.hxx +55 -0
  151. data/ext/couchbase/couchbase/date_range_query.hxx +265 -0
  152. data/ext/couchbase/couchbase/disjunction_query.hxx +109 -0
  153. data/ext/couchbase/couchbase/doc_id_query.hxx +111 -0
  154. data/ext/couchbase/couchbase/error_context.hxx +7 -6
  155. data/ext/couchbase/couchbase/fmt/analytics_scan_consistency.hxx +52 -0
  156. data/ext/couchbase/couchbase/fmt/analytics_status.hxx +76 -0
  157. data/ext/couchbase/couchbase/fmt/search_scan_consistency.hxx +49 -0
  158. data/ext/couchbase/couchbase/geo_bounding_box_query.hxx +107 -0
  159. data/ext/couchbase/couchbase/geo_distance_query.hxx +109 -0
  160. data/ext/couchbase/couchbase/geo_point.hxx +32 -0
  161. data/ext/couchbase/couchbase/geo_polygon_query.hxx +85 -0
  162. data/ext/couchbase/couchbase/highlight_style.hxx +45 -0
  163. data/ext/couchbase/couchbase/match_all_query.hxx +43 -0
  164. data/ext/couchbase/couchbase/match_none_query.hxx +43 -0
  165. data/ext/couchbase/couchbase/match_operator.hxx +45 -0
  166. data/ext/couchbase/couchbase/match_phrase_query.hxx +108 -0
  167. data/ext/couchbase/couchbase/match_query.hxx +163 -0
  168. data/ext/couchbase/couchbase/numeric_range.hxx +58 -0
  169. data/ext/couchbase/couchbase/numeric_range_facet.hxx +56 -0
  170. data/ext/couchbase/couchbase/numeric_range_facet_result.hxx +55 -0
  171. data/ext/couchbase/couchbase/numeric_range_query.hxx +143 -0
  172. data/ext/couchbase/couchbase/phrase_query.hxx +93 -0
  173. data/ext/couchbase/couchbase/prefix_query.hxx +82 -0
  174. data/ext/couchbase/couchbase/query_options.hxx +0 -1
  175. data/ext/couchbase/couchbase/query_string_query.hxx +72 -0
  176. data/ext/couchbase/couchbase/regexp_query.hxx +82 -0
  177. data/ext/couchbase/couchbase/scope.hxx +73 -0
  178. data/ext/couchbase/couchbase/search_date_range.hxx +68 -0
  179. data/ext/couchbase/couchbase/search_error_context.hxx +138 -0
  180. data/ext/couchbase/couchbase/search_facet.hxx +60 -0
  181. data/ext/couchbase/couchbase/search_facet_result.hxx +50 -0
  182. data/ext/couchbase/couchbase/search_meta_data.hxx +85 -0
  183. data/ext/couchbase/couchbase/search_metrics.hxx +127 -0
  184. data/ext/couchbase/couchbase/search_numeric_range.hxx +69 -0
  185. data/ext/couchbase/couchbase/search_options.hxx +509 -0
  186. data/ext/couchbase/couchbase/search_query.hxx +69 -0
  187. data/ext/couchbase/couchbase/search_result.hxx +77 -0
  188. data/ext/couchbase/couchbase/search_row.hxx +104 -0
  189. data/ext/couchbase/couchbase/search_row_location.hxx +55 -0
  190. data/ext/couchbase/couchbase/search_row_locations.hxx +86 -0
  191. data/ext/couchbase/couchbase/search_scan_consistency.hxx +34 -0
  192. data/ext/couchbase/couchbase/search_sort.hxx +58 -0
  193. data/ext/couchbase/couchbase/search_sort_field.hxx +117 -0
  194. data/ext/couchbase/couchbase/search_sort_field_missing.hxx +26 -0
  195. data/ext/couchbase/couchbase/search_sort_field_mode.hxx +27 -0
  196. data/ext/couchbase/couchbase/search_sort_field_type.hxx +28 -0
  197. data/ext/couchbase/couchbase/search_sort_id.hxx +60 -0
  198. data/ext/couchbase/couchbase/search_sort_score.hxx +60 -0
  199. data/ext/couchbase/couchbase/search_term_range.hxx +51 -0
  200. data/ext/couchbase/couchbase/security_options.hxx +3 -0
  201. data/ext/couchbase/couchbase/term_facet.hxx +48 -0
  202. data/ext/couchbase/couchbase/term_facet_result.hxx +55 -0
  203. data/ext/couchbase/couchbase/term_query.hxx +151 -0
  204. data/ext/couchbase/couchbase/term_range_query.hxx +142 -0
  205. data/ext/couchbase/couchbase/tracing/request_span.hxx +63 -0
  206. data/ext/couchbase/couchbase/tracing/request_tracer.hxx +2 -40
  207. data/ext/couchbase/couchbase/transactions/async_attempt_context.hxx +83 -4
  208. data/ext/couchbase/couchbase/transactions/attempt_context.hxx +68 -1
  209. data/ext/couchbase/couchbase/transactions/transaction_get_result.hxx +2 -0
  210. data/ext/couchbase/couchbase/transactions/transaction_keyspace.hxx +11 -1
  211. data/ext/couchbase/couchbase/transactions/transaction_options.hxx +79 -8
  212. data/ext/couchbase/couchbase/transactions/transaction_query_options.hxx +128 -15
  213. data/ext/couchbase/couchbase/transactions/transaction_query_result.hxx +4 -0
  214. data/ext/couchbase/couchbase/transactions/transaction_result.hxx +1 -1
  215. data/ext/couchbase/couchbase/transactions/transactions_cleanup_config.hxx +5 -3
  216. data/ext/couchbase/couchbase/transactions/transactions_config.hxx +9 -5
  217. data/ext/couchbase/couchbase/transactions/transactions_query_config.hxx +6 -3
  218. data/ext/couchbase/couchbase/transactions.hxx +34 -1
  219. data/ext/couchbase/couchbase/wildcard_query.hxx +83 -0
  220. data/ext/couchbase/test/CMakeLists.txt +8 -7
  221. data/ext/couchbase/test/benchmark_helper_integration.hxx +2 -2
  222. data/ext/couchbase/test/test_helper.hxx +6 -6
  223. data/ext/couchbase/test/test_integration_analytics.cxx +314 -16
  224. data/ext/couchbase/test/test_integration_collections.cxx +7 -3
  225. data/ext/couchbase/test/test_integration_connect.cxx +7 -3
  226. data/ext/couchbase/test/test_integration_crud.cxx +19 -2
  227. data/ext/couchbase/test/test_integration_diagnostics.cxx +11 -5
  228. data/ext/couchbase/test/test_integration_durability.cxx +12 -7
  229. data/ext/couchbase/test/test_integration_examples.cxx +324 -11
  230. data/ext/couchbase/test/test_integration_management.cxx +162 -94
  231. data/ext/couchbase/test/test_integration_query.cxx +68 -10
  232. data/ext/couchbase/test/test_integration_range_scan.cxx +12 -12
  233. data/ext/couchbase/test/test_integration_read_replica.cxx +48 -11
  234. data/ext/couchbase/test/test_integration_search.cxx +621 -0
  235. data/ext/couchbase/test/test_integration_subdoc.cxx +62 -11
  236. data/ext/couchbase/test/test_integration_tracer.cxx +5 -0
  237. data/ext/couchbase/test/test_integration_transcoders.cxx +13 -5
  238. data/ext/couchbase/test/{test_transaction_transaction_context.cxx → test_transaction_context.cxx} +1 -1
  239. data/ext/couchbase/test/test_transaction_examples.cxx +195 -0
  240. data/ext/couchbase/test/{test_transaction_transaction_simple.cxx → test_transaction_simple.cxx} +90 -5
  241. data/ext/couchbase/test/{test_transaction_transaction_simple_async.cxx → test_transaction_simple_async.cxx} +19 -21
  242. data/ext/couchbase/test/test_unit_config_profiles.cxx +13 -13
  243. data/ext/couchbase/test/test_unit_connection_string.cxx +35 -0
  244. data/ext/couchbase/test/test_unit_json_transcoder.cxx +4 -0
  245. data/ext/couchbase/test/test_unit_search.cxx +427 -0
  246. data/ext/couchbase/test/test_unit_transaction_utils.cxx +10 -1
  247. data/ext/couchbase/test/test_unit_utils.cxx +8 -4
  248. data/ext/couchbase/third_party/snappy/CMakeLists.txt +150 -27
  249. data/ext/couchbase/third_party/snappy/cmake/config.h.in +28 -24
  250. data/ext/couchbase/third_party/snappy/snappy-internal.h +189 -25
  251. data/ext/couchbase/third_party/snappy/snappy-sinksource.cc +26 -9
  252. data/ext/couchbase/third_party/snappy/snappy-sinksource.h +11 -11
  253. data/ext/couchbase/third_party/snappy/snappy-stubs-internal.cc +1 -1
  254. data/ext/couchbase/third_party/snappy/snappy-stubs-internal.h +227 -308
  255. data/ext/couchbase/third_party/snappy/snappy-stubs-public.h.in +0 -11
  256. data/ext/couchbase/third_party/snappy/snappy.cc +1176 -410
  257. data/ext/couchbase/third_party/snappy/snappy.h +19 -4
  258. data/ext/couchbase.cxx +85 -22
  259. data/ext/revisions.rb +3 -3
  260. data/lib/couchbase/authenticator.rb +0 -1
  261. data/lib/couchbase/cluster.rb +13 -13
  262. data/lib/couchbase/cluster_registry.rb +7 -2
  263. data/lib/couchbase/config_profiles.rb +1 -1
  264. data/lib/couchbase/configuration.rb +3 -4
  265. data/lib/couchbase/json_transcoder.rb +12 -5
  266. data/lib/couchbase/management/collection_query_index_manager.rb +54 -15
  267. data/lib/couchbase/management/query_index_manager.rb +70 -5
  268. data/lib/couchbase/options.rb +85 -2
  269. data/lib/couchbase/raw_binary_transcoder.rb +37 -0
  270. data/lib/couchbase/raw_json_transcoder.rb +38 -0
  271. data/lib/couchbase/raw_string_transcoder.rb +40 -0
  272. data/lib/couchbase/search_options.rb +163 -240
  273. data/lib/couchbase/transcoder_flags.rb +62 -0
  274. data/lib/couchbase/version.rb +1 -1
  275. metadata +151 -12
  276. data/ext/couchbase/core/CMakeLists.txt +0 -0
  277. /data/ext/couchbase/test/{test_transaction_transaction_public_async_api.cxx → test_transaction_public_async_api.cxx} +0 -0
  278. /data/ext/couchbase/test/{test_transaction_transaction_public_blocking_api.cxx → test_transaction_public_blocking_api.cxx} +0 -0
@@ -0,0 +1,102 @@
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/analytics_meta_data.hxx>
21
+ #include <couchbase/codec/tao_json_serializer.hxx>
22
+
23
+ #include <chrono>
24
+ #include <cinttypes>
25
+ #include <optional>
26
+ #include <vector>
27
+
28
+ namespace couchbase
29
+ {
30
+
31
+ /**
32
+ * Represents result of @ref cluster#analytics_query() and @ref scope#analytics_query() calls.
33
+ *
34
+ * @since 1.0.0
35
+ * @committed
36
+ */
37
+ class analytics_result
38
+ {
39
+ public:
40
+ /**
41
+ * @since 1.0.0
42
+ * @internal
43
+ */
44
+ analytics_result() = default;
45
+
46
+ /**
47
+ * @since 1.0.0
48
+ * @volatile
49
+ */
50
+ analytics_result(analytics_meta_data meta_data, std::vector<codec::binary> rows)
51
+ : meta_data_{ std::move(meta_data) }
52
+ , rows_{ std::move(rows) }
53
+ {
54
+ }
55
+
56
+ /**
57
+ * Returns the {@link analytics_meta_data} giving access to the additional metadata associated with this analytics query.
58
+ *
59
+ * @return response metadata
60
+ *
61
+ * @since 1.0.0
62
+ * @committed
63
+ */
64
+ [[nodiscard]] auto meta_data() const -> const analytics_meta_data&
65
+ {
66
+ return meta_data_;
67
+ }
68
+
69
+ /**
70
+ * @return list of analytics results as binary strings
71
+ *
72
+ * @since 1.0.0
73
+ * @internal
74
+ */
75
+ [[nodiscard]] auto rows_as_binary() const -> const std::vector<codec::binary>&
76
+ {
77
+ return rows_;
78
+ }
79
+
80
+ template<typename Serializer,
81
+ typename Document = typename Serializer::document_type,
82
+ std::enable_if_t<codec::is_serializer_v<Serializer>, bool> = true>
83
+ [[nodiscard]] auto rows_as() const -> std::vector<Document>
84
+ {
85
+ std::vector<Document> rows;
86
+ rows.reserve(rows_.size());
87
+ for (const auto& row : rows_) {
88
+ rows.emplace_back(Serializer::template deserialize<Document>(row));
89
+ }
90
+ return rows;
91
+ }
92
+
93
+ [[nodiscard]] auto rows_as_json() const -> std::vector<codec::tao_json_serializer::document_type>
94
+ {
95
+ return rows_as<codec::tao_json_serializer>();
96
+ }
97
+
98
+ private:
99
+ analytics_meta_data meta_data_{};
100
+ std::vector<codec::binary> rows_{};
101
+ };
102
+ } // namespace couchbase
@@ -0,0 +1,46 @@
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
+ enum class analytics_scan_consistency {
23
+ /**
24
+ * The indexer will return whatever state it has to the query engine at the time of query.
25
+ *
26
+ * This is the default (for single-statement requests). No timestamp vector is used in the index scan. This is also the fastest mode,
27
+ * because we avoid the cost of obtaining the vector, and we also avoid any wait for the index to catch up to the vector.
28
+ *
29
+ * @since 1.0.0
30
+ * @committed
31
+ */
32
+ not_bounded = 0,
33
+
34
+ /**
35
+ * The indexer will wait until all mutations have been processed at the time of request before returning to the query engine.
36
+ *
37
+ * This implements strong consistency per request. Before processing the request, a current vector is obtained. The vector is used as a
38
+ * lower bound for the statements in the request. If there are DML statements in the request, RYOW ("read your own write") is also
39
+ * applied within the request.
40
+ *
41
+ * @since 1.0.0
42
+ * @committed
43
+ */
44
+ request_plus,
45
+ };
46
+ } // namespace couchbase
@@ -0,0 +1,41 @@
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
+ * Status of the Analytics Query
24
+ *
25
+ * @since 1.0.0
26
+ * @committed
27
+ */
28
+ enum class analytics_status {
29
+ running,
30
+ success,
31
+ errors,
32
+ completed,
33
+ stopped,
34
+ timeout,
35
+ closed,
36
+ fatal,
37
+ aborted,
38
+ unknown,
39
+ };
40
+
41
+ } // namespace couchbase
@@ -0,0 +1,85 @@
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 <cstdint>
21
+ #include <optional>
22
+ #include <string>
23
+
24
+ namespace couchbase
25
+ {
26
+
27
+ /**
28
+ * Represents a single warning returned from the analytics engine.
29
+ *
30
+ * @note warnings are not terminal errors but hints from the engine that something was not as expected.
31
+ *
32
+ * @since 1.0.0
33
+ * @committed
34
+ */
35
+ class analytics_warning
36
+ {
37
+ public:
38
+ /**
39
+ * @since 1.0.0
40
+ * @internal
41
+ */
42
+ analytics_warning() = default;
43
+
44
+ /**
45
+ * @since 1.0.0
46
+ * @volatile
47
+ */
48
+ analytics_warning(std::uint64_t code, std::string message)
49
+ : code_{ code }
50
+ , message_{ std::move(message) }
51
+ {
52
+ }
53
+
54
+ /**
55
+ * Error code.
56
+ *
57
+ * @return error code
58
+ *
59
+ * @since 1.0.0
60
+ * @committed
61
+ */
62
+ [[nodiscard]] auto code() const -> std::uint64_t
63
+ {
64
+ return code_;
65
+ }
66
+
67
+ /**
68
+ * Error message.
69
+ *
70
+ * @return human readable explanation
71
+ *
72
+ * @since 1.0.0
73
+ * @committed
74
+ */
75
+ [[nodiscard]] auto message() const -> const std::string&
76
+ {
77
+ return message_;
78
+ }
79
+
80
+ private:
81
+ std::uint64_t code_{};
82
+ std::string message_{};
83
+ };
84
+
85
+ } // namespace couchbase
@@ -54,18 +54,26 @@ class behavior_options
54
54
  return *this;
55
55
  }
56
56
 
57
+ auto dump_configuration(bool enable) -> behavior_options&
58
+ {
59
+ dump_configuration_ = enable;
60
+ return *this;
61
+ }
62
+
57
63
  struct built {
58
64
  std::string user_agent_extra;
59
65
  bool show_queries;
60
66
  bool enable_clustermap_notification;
61
67
  bool enable_mutation_tokens;
62
68
  bool enable_unordered_execution;
69
+ bool dump_configuration;
63
70
  };
64
71
 
65
72
  [[nodiscard]] auto build() const -> built
66
73
  {
67
74
  return {
68
- user_agent_extra_, show_queries_, enable_clustermap_notification_, enable_mutation_tokens_, enable_unordered_execution_,
75
+ user_agent_extra_, show_queries_, enable_clustermap_notification_, enable_mutation_tokens_,
76
+ enable_unordered_execution_, dump_configuration_,
69
77
  };
70
78
  }
71
79
 
@@ -75,5 +83,6 @@ class behavior_options
75
83
  bool enable_clustermap_notification_{ false };
76
84
  bool enable_mutation_tokens_{ true };
77
85
  bool enable_unordered_execution_{ true };
86
+ bool dump_configuration_{ false };
78
87
  };
79
88
  } // namespace couchbase
@@ -0,0 +1,77 @@
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
+ * Allow to match `true`/`false` in a field mapped as boolean.
29
+ *
30
+ * @since 1.0.0
31
+ * @committed
32
+ */
33
+ class boolean_field_query : public search_query
34
+ {
35
+ public:
36
+ /**
37
+ * Create a new boolean field query.
38
+ *
39
+ * @param value the input string to be matched against
40
+ *
41
+ * @since 1.0.0
42
+ * @committed
43
+ */
44
+ explicit boolean_field_query(bool value)
45
+ : bool_{ value }
46
+ {
47
+ }
48
+
49
+ /**
50
+ * If a field is specified, only terms in that field will be matched.
51
+ *
52
+ * @param field_name name of the field to be matched
53
+ *
54
+ * @return this query for chaining purposes.
55
+ *
56
+ * @since 1.0.0
57
+ * @committed
58
+ */
59
+ auto field(std::string field_name) -> boolean_field_query&
60
+ {
61
+ field_ = std::move(field_name);
62
+ return *this;
63
+ }
64
+
65
+ /**
66
+ * @return encoded representation of the query.
67
+ *
68
+ * @since 1.0.0
69
+ * @internal
70
+ */
71
+ [[nodiscard]] auto encode() const -> encoded_search_query override;
72
+
73
+ private:
74
+ bool bool_;
75
+ std::optional<std::string> field_{};
76
+ };
77
+ } // namespace couchbase
@@ -0,0 +1,223 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2023-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include <couchbase/conjunction_query.hxx>
21
+ #include <couchbase/disjunction_query.hxx>
22
+ #include <couchbase/match_all_query.hxx>
23
+ #include <couchbase/match_none_query.hxx>
24
+ #include <couchbase/search_query.hxx>
25
+
26
+ #include <cstdint>
27
+ #include <memory>
28
+ #include <vector>
29
+
30
+ namespace couchbase
31
+ {
32
+ /**
33
+ * The boolean query is a useful combination of conjunction and disjunction queries. A boolean query takes three lists of queries:
34
+ *
35
+ * * **must** - result documents must satisfy all of these queries.
36
+ * * **should** - result documents should satisfy these queries.
37
+ * * **must not** - result documents must not satisfy any of these queries.
38
+ *
39
+ * At execution, a boolean query that has no child queries in any 3 categories is not allowed and will fail fast.
40
+ *
41
+ * The inner representation of child queries in the `must`/`must_not`/`should` sections are respectively a @ref conjunction_query and two
42
+ * @ref disjunction_query.
43
+ *
44
+ * In the example below the following rules enforced by the boolean query:
45
+ * * retrieved documents MUST match `"hostel room"` in their `reviews.content` field AND have `true` in `free_breakfast` field.
46
+ * * also the documents SHOULD have EITHER `reviews.ratings.Overall > 4` OR `reviews.ratings.Service > 5`.
47
+ * * and finally, exclude documents with `city` `"Padfield"` or `"Gilingham"`.
48
+ *
49
+ * @snippet test_unit_search.cxx search-boolean
50
+ *
51
+ * @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-boolean-field-query.html server documentation
52
+ *
53
+ * @since 1.0.0
54
+ * @committed
55
+ */
56
+ class boolean_query : public search_query
57
+ {
58
+ public:
59
+ /**
60
+ * Set @ref conjunction_query that groups all queries the documents **must** satisfy.
61
+ *
62
+ * @param query must-query
63
+ *
64
+ * @return this query for chaining purposes.
65
+ *
66
+ * @since 1.0.0
67
+ * @committed
68
+ */
69
+ auto must(conjunction_query query) -> boolean_query&
70
+ {
71
+ must_ = std::move(query);
72
+ return *this;
73
+ }
74
+
75
+ /**
76
+ * Create @ref conjunction_query with given queries and set it as **must** query.
77
+ *
78
+ * @tparam SearchQuery any subclass of @ref search_query
79
+ * @param queries
80
+ *
81
+ * @return this query for chaining purposes.
82
+ *
83
+ * @since 1.0.0
84
+ * @committed
85
+ */
86
+ template<typename... SearchQuery>
87
+ auto must(SearchQuery... queries) -> boolean_query&
88
+ {
89
+ must_ = conjunction_query(queries...);
90
+ return *this;
91
+ }
92
+
93
+ /**
94
+ * Returns @ref conjunction_query that groups all queries the documents **must** satisfy. Use it to add more queries.
95
+ *
96
+ * @return must-query
97
+ *
98
+ * @since 1.0.0
99
+ * @committed
100
+ */
101
+ auto must() -> conjunction_query&
102
+ {
103
+ if (!must_) {
104
+ must_ = conjunction_query();
105
+ }
106
+ return must_.value();
107
+ }
108
+
109
+ /**
110
+ * Set @ref disjunction_query that groups queries the documents **should** satisfy.
111
+ *
112
+ * @param query should-query
113
+ *
114
+ * @return this query for chaining purposes.
115
+ *
116
+ * @since 1.0.0
117
+ * @committed
118
+ */
119
+ auto should(disjunction_query query) -> boolean_query&
120
+ {
121
+ should_ = std::move(query);
122
+ return *this;
123
+ }
124
+
125
+ /**
126
+ * Create @ref disjunction_query with given queries and set it as **should** query.
127
+ *
128
+ * @tparam SearchQuery any subclass of @ref search_query
129
+ * @param queries
130
+ *
131
+ * @return this query for chaining purposes.
132
+ *
133
+ * @since 1.0.0
134
+ * @committed
135
+ */
136
+ template<typename... SearchQuery>
137
+ auto should(SearchQuery... queries) -> boolean_query&
138
+ {
139
+ should_ = disjunction_query(queries...);
140
+ return *this;
141
+ }
142
+
143
+ /**
144
+ * Returns @ref disjunction_query that groups queries the documents **should** satisfy. Use it to add more queries or change
145
+ * @ref disjunction_query#min.
146
+ *
147
+ * @return should-query
148
+ *
149
+ * @since 1.0.0
150
+ * @committed
151
+ */
152
+ auto should() -> disjunction_query&
153
+ {
154
+ if (!should_) {
155
+ should_ = disjunction_query();
156
+ }
157
+ return should_.value();
158
+ }
159
+
160
+ /**
161
+ * Set @ref disjunction_query that groups queries the documents **must not** satisfy.
162
+ *
163
+ * @param query must_not-query
164
+ *
165
+ * @return this query for chaining purposes.
166
+ *
167
+ * @since 1.0.0
168
+ * @committed
169
+ */
170
+ auto must_not(disjunction_query query) -> boolean_query&
171
+ {
172
+ must_not_ = std::move(query);
173
+ return *this;
174
+ }
175
+
176
+ /**
177
+ * Create @ref disjunction_query with given queries and set it as **must not** query.
178
+ *
179
+ * @tparam SearchQuery any subclass of @ref search_query
180
+ * @param queries
181
+ *
182
+ * @return this query for chaining purposes.
183
+ *
184
+ * @since 1.0.0
185
+ * @committed
186
+ */
187
+ template<typename... SearchQuery>
188
+ auto must_not(SearchQuery... queries) -> boolean_query&
189
+ {
190
+ must_not_ = disjunction_query(queries...);
191
+ return *this;
192
+ }
193
+
194
+ /**
195
+ * Returns @ref disjunction_query that groups queries the documents **should** satisfy. Use it to add more queries.
196
+ *
197
+ * @return must_not-query
198
+ *
199
+ * @since 1.0.0
200
+ * @committed
201
+ */
202
+ auto must_not() -> disjunction_query&
203
+ {
204
+ if (!must_not_) {
205
+ must_not_ = disjunction_query();
206
+ }
207
+ return must_not_.value();
208
+ }
209
+
210
+ /**
211
+ * @return encoded representation of the query.
212
+ *
213
+ * @since 1.0.0
214
+ * @internal
215
+ */
216
+ [[nodiscard]] auto encode() const -> encoded_search_query override;
217
+
218
+ private:
219
+ std::optional<conjunction_query> must_{};
220
+ std::optional<disjunction_query> should_{};
221
+ std::optional<disjunction_query> must_not_{};
222
+ };
223
+ } // namespace couchbase