couchbase 3.4.2 → 3.4.4

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 (355) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/ext/couchbase/CMakeLists.txt +71 -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 +183 -151
  9. data/ext/couchbase/core/bucket.hxx +23 -1
  10. data/ext/couchbase/core/cluster.hxx +51 -13
  11. data/ext/couchbase/core/cluster_options.cxx +2 -2
  12. data/ext/couchbase/core/cluster_options.hxx +7 -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/crud_component.cxx +51 -22
  18. data/ext/couchbase/core/error_context/key_value.cxx +2 -1
  19. data/ext/couchbase/core/error_context/key_value.hxx +10 -12
  20. data/ext/couchbase/core/error_context/search.hxx +1 -1
  21. data/ext/couchbase/core/impl/analytics.cxx +1 -0
  22. data/ext/couchbase/core/impl/boolean_field_query.cxx +40 -0
  23. data/ext/couchbase/core/impl/boolean_query.cxx +62 -0
  24. data/ext/couchbase/core/impl/build_deferred_query_indexes.cxx +115 -50
  25. data/ext/couchbase/core/impl/cluster.cxx +8 -0
  26. data/ext/couchbase/core/impl/conjunction_query.cxx +51 -0
  27. data/ext/couchbase/core/impl/create_bucket.cxx +155 -0
  28. data/ext/couchbase/core/impl/create_query_index.cxx +172 -59
  29. data/ext/couchbase/core/impl/date_range.cxx +89 -0
  30. data/ext/couchbase/core/impl/date_range_facet.cxx +54 -0
  31. data/ext/couchbase/core/impl/date_range_facet_result.cxx +64 -0
  32. data/ext/couchbase/core/impl/date_range_query.cxx +125 -0
  33. data/ext/couchbase/core/impl/disjunction_query.cxx +51 -0
  34. data/ext/couchbase/core/impl/dns_srv_tracker.cxx +2 -1
  35. data/ext/couchbase/core/impl/drop_bucket.cxx +66 -0
  36. data/ext/couchbase/core/impl/drop_query_index.cxx +138 -59
  37. data/ext/couchbase/core/impl/encoded_search_facet.hxx +29 -0
  38. data/ext/couchbase/core/impl/encoded_search_query.hxx +29 -0
  39. data/ext/couchbase/core/impl/encoded_search_sort.hxx +29 -0
  40. data/ext/couchbase/core/impl/flush_bucket.cxx +66 -0
  41. data/ext/couchbase/core/impl/geo_bounding_box_query.cxx +46 -0
  42. data/ext/couchbase/core/impl/geo_distance_query.cxx +43 -0
  43. data/ext/couchbase/core/impl/geo_polygon_query.cxx +46 -0
  44. data/ext/couchbase/core/impl/get_all_buckets.cxx +163 -0
  45. data/ext/couchbase/core/impl/get_all_query_indexes.cxx +67 -37
  46. data/ext/couchbase/core/impl/get_bucket.cxx +153 -0
  47. data/ext/couchbase/core/impl/internal_date_range_facet_result.cxx +80 -0
  48. data/ext/couchbase/core/impl/internal_date_range_facet_result.hxx +48 -0
  49. data/ext/couchbase/core/impl/internal_manager_error_context.cxx +113 -0
  50. data/ext/couchbase/core/impl/internal_manager_error_context.hxx +60 -0
  51. data/ext/couchbase/core/impl/internal_numeric_range_facet_result.cxx +80 -0
  52. data/ext/couchbase/core/impl/internal_numeric_range_facet_result.hxx +48 -0
  53. data/ext/couchbase/core/impl/internal_search_error_context.cxx +141 -0
  54. data/ext/couchbase/core/impl/internal_search_error_context.hxx +61 -0
  55. data/ext/couchbase/core/impl/internal_search_meta_data.cxx +60 -0
  56. data/ext/couchbase/core/impl/internal_search_meta_data.hxx +41 -0
  57. data/ext/couchbase/core/impl/internal_search_result.cxx +84 -0
  58. data/ext/couchbase/core/impl/internal_search_result.hxx +43 -0
  59. data/ext/couchbase/core/impl/internal_search_row.cxx +82 -0
  60. data/ext/couchbase/core/impl/internal_search_row.hxx +56 -0
  61. data/ext/couchbase/core/impl/internal_search_row_location.hxx +32 -0
  62. data/ext/couchbase/core/impl/internal_search_row_locations.cxx +137 -0
  63. data/ext/couchbase/core/impl/internal_search_row_locations.hxx +45 -0
  64. data/ext/couchbase/core/impl/internal_term_facet_result.cxx +80 -0
  65. data/ext/couchbase/core/impl/internal_term_facet_result.hxx +48 -0
  66. data/ext/couchbase/core/impl/key_value_error_category.cxx +2 -4
  67. data/ext/couchbase/core/impl/key_value_error_context.cxx +98 -0
  68. data/ext/couchbase/core/impl/lookup_in.cxx +1 -0
  69. data/ext/couchbase/core/impl/lookup_in_all_replicas.cxx +176 -0
  70. data/ext/couchbase/core/impl/lookup_in_all_replicas.hxx +80 -0
  71. data/ext/couchbase/core/impl/lookup_in_any_replica.cxx +167 -0
  72. data/ext/couchbase/core/impl/lookup_in_any_replica.hxx +75 -0
  73. data/ext/couchbase/core/impl/lookup_in_replica.cxx +97 -0
  74. data/ext/couchbase/core/impl/lookup_in_replica.hxx +67 -0
  75. data/ext/couchbase/core/impl/manager_error_context.cxx +100 -0
  76. data/ext/couchbase/core/impl/match_all_query.cxx +35 -0
  77. data/ext/couchbase/core/impl/match_none_query.cxx +35 -0
  78. data/ext/couchbase/core/impl/match_phrase_query.cxx +43 -0
  79. data/ext/couchbase/core/impl/match_query.cxx +59 -0
  80. data/ext/couchbase/core/impl/numeric_range.cxx +49 -0
  81. data/ext/couchbase/core/impl/numeric_range_facet.cxx +54 -0
  82. data/ext/couchbase/core/impl/numeric_range_facet_result.cxx +64 -0
  83. data/ext/couchbase/core/impl/numeric_range_query.cxx +56 -0
  84. data/ext/couchbase/core/impl/phrase_query.cxx +42 -0
  85. data/ext/couchbase/core/impl/prefix_query.cxx +40 -0
  86. data/ext/couchbase/core/impl/query.cxx +1 -0
  87. data/ext/couchbase/core/impl/query_error_context.cxx +75 -0
  88. data/ext/couchbase/core/impl/query_string_query.cxx +37 -0
  89. data/ext/couchbase/core/impl/regexp_query.cxx +40 -0
  90. data/ext/couchbase/core/impl/search.cxx +191 -0
  91. data/ext/couchbase/core/impl/search_error_context.cxx +147 -0
  92. data/ext/couchbase/core/impl/search_meta_data.cxx +46 -0
  93. data/ext/couchbase/core/impl/search_result.cxx +66 -0
  94. data/ext/couchbase/core/impl/search_row.cxx +74 -0
  95. data/ext/couchbase/core/impl/search_row_location.cxx +64 -0
  96. data/ext/couchbase/core/impl/search_row_locations.cxx +66 -0
  97. data/ext/couchbase/core/impl/search_sort_field.cxx +104 -0
  98. data/ext/couchbase/core/impl/search_sort_id.cxx +43 -0
  99. data/ext/couchbase/core/impl/search_sort_score.cxx +43 -0
  100. data/ext/couchbase/core/impl/term_facet.cxx +36 -0
  101. data/ext/couchbase/core/impl/term_facet_result.cxx +64 -0
  102. data/ext/couchbase/core/impl/term_query.cxx +56 -0
  103. data/ext/couchbase/core/impl/term_range_query.cxx +57 -0
  104. data/ext/couchbase/core/impl/update_bucket.cxx +130 -0
  105. data/ext/couchbase/core/impl/watch_query_indexes.cxx +53 -29
  106. data/ext/couchbase/core/impl/wildcard_query.cxx +40 -0
  107. data/ext/couchbase/core/io/dns_client.cxx +111 -40
  108. data/ext/couchbase/core/io/dns_config.cxx +5 -4
  109. data/ext/couchbase/core/io/http_context.hxx +1 -1
  110. data/ext/couchbase/core/io/http_session.hxx +34 -1
  111. data/ext/couchbase/core/io/http_session_manager.hxx +5 -3
  112. data/ext/couchbase/core/io/mcbp_command.hxx +9 -2
  113. data/ext/couchbase/core/io/mcbp_session.cxx +106 -42
  114. data/ext/couchbase/core/io/mcbp_session.hxx +4 -3
  115. data/ext/couchbase/core/io/retry_orchestrator.hxx +3 -2
  116. data/ext/couchbase/core/json_string.hxx +5 -0
  117. data/ext/couchbase/core/logger/custom_rotating_file_sink.cxx +1 -1
  118. data/ext/couchbase/core/logger/logger.cxx +80 -20
  119. data/ext/couchbase/core/logger/logger.hxx +31 -0
  120. data/ext/couchbase/core/meta/features.hxx +25 -0
  121. data/ext/couchbase/core/meta/version.cxx +18 -4
  122. data/ext/couchbase/core/mozilla_ca_bundle.hxx +39 -0
  123. data/ext/couchbase/core/operations/document_analytics.cxx +1 -0
  124. data/ext/couchbase/core/operations/document_analytics.hxx +1 -0
  125. data/ext/couchbase/core/operations/document_append.hxx +1 -1
  126. data/ext/couchbase/core/operations/document_decrement.hxx +1 -1
  127. data/ext/couchbase/core/operations/document_exists.hxx +1 -1
  128. data/ext/couchbase/core/operations/document_get.hxx +1 -1
  129. data/ext/couchbase/core/operations/document_get_and_lock.hxx +1 -1
  130. data/ext/couchbase/core/operations/document_get_and_touch.hxx +1 -1
  131. data/ext/couchbase/core/operations/document_get_projected.hxx +1 -1
  132. data/ext/couchbase/core/operations/document_increment.hxx +1 -1
  133. data/ext/couchbase/core/operations/document_insert.hxx +1 -1
  134. data/ext/couchbase/core/operations/document_lookup_in.hxx +1 -1
  135. data/ext/couchbase/core/operations/document_lookup_in_all_replicas.hxx +192 -0
  136. data/ext/couchbase/core/operations/document_lookup_in_any_replica.hxx +188 -0
  137. data/ext/couchbase/core/operations/document_mutate_in.hxx +1 -1
  138. data/ext/couchbase/core/operations/document_prepend.hxx +1 -1
  139. data/ext/couchbase/core/operations/document_query.cxx +13 -0
  140. data/ext/couchbase/core/operations/document_query.hxx +7 -0
  141. data/ext/couchbase/core/operations/document_remove.hxx +1 -1
  142. data/ext/couchbase/core/operations/document_replace.hxx +1 -1
  143. data/ext/couchbase/core/operations/document_search.cxx +4 -1
  144. data/ext/couchbase/core/operations/document_search.hxx +2 -1
  145. data/ext/couchbase/core/operations/document_touch.hxx +1 -1
  146. data/ext/couchbase/core/operations/document_unlock.hxx +1 -1
  147. data/ext/couchbase/core/operations/document_upsert.hxx +1 -1
  148. data/ext/couchbase/core/operations/document_view.hxx +1 -0
  149. data/ext/couchbase/core/operations.hxx +2 -0
  150. data/ext/couchbase/core/origin.cxx +270 -0
  151. data/ext/couchbase/core/origin.hxx +2 -0
  152. data/ext/couchbase/core/protocol/client_request.hxx +11 -2
  153. data/ext/couchbase/core/protocol/client_response.hxx +1 -0
  154. data/ext/couchbase/core/protocol/cmd_hello.hxx +1 -0
  155. data/ext/couchbase/core/protocol/cmd_lookup_in_replica.cxx +107 -0
  156. data/ext/couchbase/core/protocol/cmd_lookup_in_replica.hxx +137 -0
  157. data/ext/couchbase/core/protocol/hello_feature.hxx +6 -0
  158. data/ext/couchbase/core/protocol/hello_feature_fmt.hxx +3 -0
  159. data/ext/couchbase/core/protocol/status.cxx +2 -2
  160. data/ext/couchbase/core/public_fwd.hxx +21 -0
  161. data/ext/couchbase/core/range_scan_options.cxx +3 -27
  162. data/ext/couchbase/core/range_scan_options.hxx +13 -17
  163. data/ext/couchbase/core/range_scan_orchestrator.cxx +388 -170
  164. data/ext/couchbase/core/range_scan_orchestrator.hxx +13 -2
  165. data/ext/couchbase/core/range_scan_orchestrator_options.hxx +5 -3
  166. data/ext/couchbase/core/scan_options.hxx +0 -19
  167. data/ext/couchbase/core/scan_result.cxx +19 -5
  168. data/ext/couchbase/core/scan_result.hxx +5 -2
  169. data/ext/couchbase/core/timeout_defaults.hxx +2 -3
  170. data/ext/couchbase/core/tls_verify_mode.hxx +26 -0
  171. data/ext/couchbase/core/topology/capabilities.hxx +3 -0
  172. data/ext/couchbase/core/topology/capabilities_fmt.hxx +8 -0
  173. data/ext/couchbase/core/topology/collections_manifest_fmt.hxx +1 -1
  174. data/ext/couchbase/core/topology/configuration.cxx +15 -2
  175. data/ext/couchbase/core/topology/configuration.hxx +20 -1
  176. data/ext/couchbase/core/topology/configuration_json.hxx +6 -1
  177. data/ext/couchbase/core/transactions/attempt_context_testing_hooks.cxx +93 -0
  178. data/ext/couchbase/core/transactions/attempt_context_testing_hooks.hxx +48 -75
  179. data/ext/couchbase/core/transactions/cleanup_testing_hooks.cxx +52 -0
  180. data/ext/couchbase/core/transactions/cleanup_testing_hooks.hxx +17 -31
  181. data/ext/couchbase/core/transactions/exceptions.hxx +12 -9
  182. data/ext/couchbase/core/utils/connection_string.cxx +75 -43
  183. data/ext/couchbase/core/utils/connection_string.hxx +1 -0
  184. data/ext/couchbase/core/utils/json.cxx +4 -1
  185. data/ext/couchbase/couchbase/analytics_error_context.hxx +1 -1
  186. data/ext/couchbase/couchbase/behavior_options.hxx +27 -1
  187. data/ext/couchbase/couchbase/boolean_field_query.hxx +77 -0
  188. data/ext/couchbase/couchbase/boolean_query.hxx +223 -0
  189. data/ext/couchbase/couchbase/bucket_manager.hxx +135 -0
  190. data/ext/couchbase/couchbase/build_query_index_options.hxx +0 -30
  191. data/ext/couchbase/couchbase/cluster.hxx +56 -1
  192. data/ext/couchbase/couchbase/collection.hxx +111 -0
  193. data/ext/couchbase/couchbase/collection_query_index_manager.hxx +7 -48
  194. data/ext/couchbase/couchbase/conjunction_query.hxx +88 -0
  195. data/ext/couchbase/couchbase/create_bucket_options.hxx +41 -0
  196. data/ext/couchbase/couchbase/create_primary_query_index_options.hxx +0 -29
  197. data/ext/couchbase/couchbase/create_query_index_options.hxx +0 -33
  198. data/ext/couchbase/couchbase/date_range.hxx +69 -0
  199. data/ext/couchbase/couchbase/date_range_facet.hxx +56 -0
  200. data/ext/couchbase/couchbase/date_range_facet_result.hxx +55 -0
  201. data/ext/couchbase/couchbase/date_range_query.hxx +265 -0
  202. data/ext/couchbase/couchbase/disjunction_query.hxx +109 -0
  203. data/ext/couchbase/couchbase/doc_id_query.hxx +111 -0
  204. data/ext/couchbase/couchbase/drop_bucket_options.hxx +41 -0
  205. data/ext/couchbase/couchbase/drop_primary_query_index_options.hxx +0 -30
  206. data/ext/couchbase/couchbase/drop_query_index_options.hxx +0 -31
  207. data/ext/couchbase/couchbase/error_codes.hxx +1 -2
  208. data/ext/couchbase/couchbase/error_context.hxx +17 -8
  209. data/ext/couchbase/couchbase/flush_bucket_options.hxx +41 -0
  210. data/ext/couchbase/couchbase/fmt/analytics_scan_consistency.hxx +52 -0
  211. data/ext/couchbase/{core/topology/error_map_fmt.hxx → couchbase/fmt/key_value_error_map_attribute.hxx} +21 -21
  212. data/ext/couchbase/couchbase/fmt/search_scan_consistency.hxx +49 -0
  213. data/ext/couchbase/couchbase/geo_bounding_box_query.hxx +107 -0
  214. data/ext/couchbase/couchbase/geo_distance_query.hxx +109 -0
  215. data/ext/couchbase/couchbase/geo_point.hxx +32 -0
  216. data/ext/couchbase/couchbase/geo_polygon_query.hxx +85 -0
  217. data/ext/couchbase/couchbase/get_all_buckets_options.hxx +44 -0
  218. data/ext/couchbase/couchbase/get_all_query_indexes_options.hxx +0 -30
  219. data/ext/couchbase/couchbase/get_and_lock_options.hxx +2 -2
  220. data/ext/couchbase/couchbase/get_and_touch_options.hxx +2 -2
  221. data/ext/couchbase/couchbase/get_bucket_options.hxx +43 -0
  222. data/ext/couchbase/couchbase/get_options.hxx +2 -2
  223. data/ext/couchbase/couchbase/highlight_style.hxx +45 -0
  224. data/ext/couchbase/couchbase/insert_options.hxx +3 -3
  225. data/ext/couchbase/couchbase/key_value_error_context.hxx +7 -2
  226. data/ext/couchbase/couchbase/lookup_in_all_replicas_options.hxx +109 -0
  227. data/ext/couchbase/couchbase/lookup_in_any_replica_options.hxx +101 -0
  228. data/ext/couchbase/couchbase/lookup_in_options.hxx +2 -2
  229. data/ext/couchbase/couchbase/lookup_in_replica_result.hxx +74 -0
  230. data/ext/couchbase/couchbase/lookup_in_result.hxx +26 -0
  231. data/ext/couchbase/couchbase/management/bucket_settings.hxx +116 -0
  232. data/ext/couchbase/couchbase/manager_error_context.hxx +29 -53
  233. data/ext/couchbase/couchbase/match_all_query.hxx +43 -0
  234. data/ext/couchbase/couchbase/match_none_query.hxx +43 -0
  235. data/ext/couchbase/couchbase/match_operator.hxx +45 -0
  236. data/ext/couchbase/couchbase/match_phrase_query.hxx +108 -0
  237. data/ext/couchbase/couchbase/match_query.hxx +163 -0
  238. data/ext/couchbase/couchbase/mutate_in_options.hxx +2 -2
  239. data/ext/couchbase/couchbase/numeric_range.hxx +58 -0
  240. data/ext/couchbase/couchbase/numeric_range_facet.hxx +56 -0
  241. data/ext/couchbase/couchbase/numeric_range_facet_result.hxx +55 -0
  242. data/ext/couchbase/couchbase/numeric_range_query.hxx +143 -0
  243. data/ext/couchbase/couchbase/phrase_query.hxx +93 -0
  244. data/ext/couchbase/couchbase/prefix_query.hxx +82 -0
  245. data/ext/couchbase/couchbase/query_error_context.hxx +3 -1
  246. data/ext/couchbase/couchbase/query_index_manager.hxx +16 -83
  247. data/ext/couchbase/couchbase/query_options.hxx +18 -0
  248. data/ext/couchbase/couchbase/query_string_query.hxx +72 -0
  249. data/ext/couchbase/couchbase/regexp_query.hxx +82 -0
  250. data/ext/couchbase/couchbase/remove_options.hxx +2 -2
  251. data/ext/couchbase/couchbase/replace_options.hxx +3 -3
  252. data/ext/couchbase/couchbase/scope.hxx +40 -0
  253. data/ext/couchbase/couchbase/search_date_range.hxx +68 -0
  254. data/ext/couchbase/couchbase/search_error_context.hxx +138 -0
  255. data/ext/couchbase/couchbase/search_facet.hxx +60 -0
  256. data/ext/couchbase/couchbase/search_facet_result.hxx +50 -0
  257. data/ext/couchbase/couchbase/search_meta_data.hxx +85 -0
  258. data/ext/couchbase/couchbase/search_metrics.hxx +127 -0
  259. data/ext/couchbase/couchbase/search_numeric_range.hxx +69 -0
  260. data/ext/couchbase/couchbase/search_options.hxx +509 -0
  261. data/ext/couchbase/couchbase/search_query.hxx +69 -0
  262. data/ext/couchbase/couchbase/search_result.hxx +77 -0
  263. data/ext/couchbase/couchbase/search_row.hxx +104 -0
  264. data/ext/couchbase/couchbase/search_row_location.hxx +55 -0
  265. data/ext/couchbase/couchbase/search_row_locations.hxx +86 -0
  266. data/ext/couchbase/couchbase/search_scan_consistency.hxx +34 -0
  267. data/ext/couchbase/couchbase/search_sort.hxx +58 -0
  268. data/ext/couchbase/couchbase/search_sort_field.hxx +117 -0
  269. data/ext/couchbase/couchbase/search_sort_field_missing.hxx +26 -0
  270. data/ext/couchbase/couchbase/search_sort_field_mode.hxx +27 -0
  271. data/ext/couchbase/couchbase/search_sort_field_type.hxx +28 -0
  272. data/ext/couchbase/couchbase/search_sort_id.hxx +60 -0
  273. data/ext/couchbase/couchbase/search_sort_score.hxx +60 -0
  274. data/ext/couchbase/couchbase/search_term_range.hxx +51 -0
  275. data/ext/couchbase/couchbase/security_options.hxx +18 -0
  276. data/ext/couchbase/couchbase/subdocument_error_context.hxx +4 -2
  277. data/ext/couchbase/couchbase/term_facet.hxx +48 -0
  278. data/ext/couchbase/couchbase/term_facet_result.hxx +55 -0
  279. data/ext/couchbase/couchbase/term_query.hxx +151 -0
  280. data/ext/couchbase/couchbase/term_range_query.hxx +142 -0
  281. data/ext/couchbase/couchbase/touch_options.hxx +2 -2
  282. data/ext/couchbase/couchbase/tracing/request_span.hxx +63 -0
  283. data/ext/couchbase/couchbase/tracing/request_tracer.hxx +2 -40
  284. data/ext/couchbase/couchbase/transactions/async_attempt_context.hxx +83 -4
  285. data/ext/couchbase/couchbase/transactions/attempt_context.hxx +67 -0
  286. data/ext/couchbase/couchbase/transactions/transaction_get_result.hxx +2 -0
  287. data/ext/couchbase/couchbase/transactions/transaction_keyspace.hxx +11 -1
  288. data/ext/couchbase/couchbase/transactions/transaction_options.hxx +79 -8
  289. data/ext/couchbase/couchbase/transactions/transaction_query_options.hxx +128 -15
  290. data/ext/couchbase/couchbase/transactions/transaction_query_result.hxx +4 -0
  291. data/ext/couchbase/couchbase/transactions/transaction_result.hxx +1 -1
  292. data/ext/couchbase/couchbase/transactions/transactions_cleanup_config.hxx +5 -3
  293. data/ext/couchbase/couchbase/transactions/transactions_config.hxx +9 -5
  294. data/ext/couchbase/couchbase/transactions/transactions_query_config.hxx +6 -3
  295. data/ext/couchbase/couchbase/transactions.hxx +34 -1
  296. data/ext/couchbase/couchbase/unlock_options.hxx +2 -2
  297. data/ext/couchbase/couchbase/update_bucket_options.hxx +41 -0
  298. data/ext/couchbase/couchbase/upsert_options.hxx +3 -3
  299. data/ext/couchbase/couchbase/watch_query_indexes_options.hxx +0 -31
  300. data/ext/couchbase/couchbase/wildcard_query.hxx +83 -0
  301. data/ext/couchbase/test/CMakeLists.txt +8 -5
  302. data/ext/couchbase/test/benchmark_helper_integration.hxx +2 -2
  303. data/ext/couchbase/test/test_helper.hxx +5 -5
  304. data/ext/couchbase/test/test_integration_analytics.cxx +28 -6
  305. data/ext/couchbase/test/test_integration_collections.cxx +13 -3
  306. data/ext/couchbase/test/test_integration_connect.cxx +7 -3
  307. data/ext/couchbase/test/test_integration_crud.cxx +18 -3
  308. data/ext/couchbase/test/test_integration_diagnostics.cxx +11 -5
  309. data/ext/couchbase/test/test_integration_durability.cxx +12 -7
  310. data/ext/couchbase/test/test_integration_examples.cxx +419 -11
  311. data/ext/couchbase/test/test_integration_management.cxx +867 -368
  312. data/ext/couchbase/test/test_integration_query.cxx +87 -17
  313. data/ext/couchbase/test/test_integration_range_scan.cxx +363 -124
  314. data/ext/couchbase/test/test_integration_read_replica.cxx +48 -11
  315. data/ext/couchbase/test/test_integration_search.cxx +32 -3
  316. data/ext/couchbase/test/test_integration_subdoc.cxx +717 -11
  317. data/ext/couchbase/test/test_integration_tracer.cxx +5 -0
  318. data/ext/couchbase/test/test_integration_transcoders.cxx +13 -5
  319. data/ext/couchbase/test/{test_transaction_transaction_context.cxx → test_transaction_context.cxx} +1 -1
  320. data/ext/couchbase/test/test_transaction_examples.cxx +195 -0
  321. data/ext/couchbase/test/{test_transaction_transaction_public_async_api.cxx → test_transaction_public_async_api.cxx} +13 -12
  322. data/ext/couchbase/test/{test_transaction_transaction_public_blocking_api.cxx → test_transaction_public_blocking_api.cxx} +27 -21
  323. data/ext/couchbase/test/{test_transaction_transaction_simple.cxx → test_transaction_simple.cxx} +17 -5
  324. data/ext/couchbase/test/{test_transaction_transaction_simple_async.cxx → test_transaction_simple_async.cxx} +19 -21
  325. data/ext/couchbase/test/test_unit_config_profiles.cxx +1 -1
  326. data/ext/couchbase/test/test_unit_connection_string.cxx +29 -0
  327. data/ext/couchbase/test/test_unit_json_transcoder.cxx +4 -0
  328. data/ext/couchbase/test/test_unit_query.cxx +75 -0
  329. data/ext/couchbase/test/test_unit_search.cxx +427 -0
  330. data/ext/couchbase/test/test_unit_transaction_utils.cxx +10 -1
  331. data/ext/couchbase/test/test_unit_utils.cxx +8 -4
  332. data/ext/couchbase.cxx +641 -45
  333. data/ext/revisions.rb +3 -3
  334. data/lib/couchbase/authenticator.rb +0 -1
  335. data/lib/couchbase/cluster.rb +1 -5
  336. data/lib/couchbase/collection.rb +108 -0
  337. data/lib/couchbase/collection_options.rb +100 -0
  338. data/lib/couchbase/config_profiles.rb +1 -1
  339. data/lib/couchbase/errors.rb +5 -0
  340. data/lib/couchbase/json_transcoder.rb +12 -5
  341. data/lib/couchbase/key_value_scan.rb +125 -0
  342. data/lib/couchbase/management/collection_query_index_manager.rb +54 -15
  343. data/lib/couchbase/management/query_index_manager.rb +70 -5
  344. data/lib/couchbase/options.rb +151 -0
  345. data/lib/couchbase/raw_binary_transcoder.rb +37 -0
  346. data/lib/couchbase/raw_json_transcoder.rb +38 -0
  347. data/lib/couchbase/raw_string_transcoder.rb +40 -0
  348. data/lib/couchbase/scope.rb +1 -1
  349. data/lib/couchbase/search_options.rb +5 -0
  350. data/lib/couchbase/transcoder_flags.rb +62 -0
  351. data/lib/couchbase/utils/time.rb +14 -1
  352. data/lib/couchbase/version.rb +1 -1
  353. metadata +175 -13
  354. data/ext/couchbase/core/config_profile.cxx +0 -47
  355. data/ext/couchbase/core/impl/collection_query_index_manager.cxx +0 -93
@@ -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
@@ -0,0 +1,135 @@
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/create_bucket_options.hxx>
21
+ #include <couchbase/drop_bucket_options.hxx>
22
+ #include <couchbase/flush_bucket_options.hxx>
23
+ #include <couchbase/get_all_buckets_options.hxx>
24
+ #include <couchbase/get_bucket_options.hxx>
25
+ #include <couchbase/update_bucket_options.hxx>
26
+
27
+ #include <future>
28
+ #include <memory>
29
+
30
+ #ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
31
+ namespace couchbase::core
32
+ {
33
+ class cluster;
34
+ } // namespace couchbase::core
35
+ #endif
36
+
37
+ namespace couchbase
38
+ {
39
+ class cluster;
40
+
41
+ class bucket_manager
42
+ {
43
+ public:
44
+ /**
45
+ * Get specific bucket within the cluster
46
+ *
47
+ * @param bucket_name the name of the bucket to get
48
+ * @param options optional parameters
49
+ * @param handler handler that implements @ref get_bucket_handler
50
+ *
51
+ * @since 1.0.0
52
+ * @committed
53
+ */
54
+ void get_bucket(std::string bucket_name, const get_bucket_options& options, get_bucket_handler&& handler) const;
55
+
56
+ [[nodiscard]] auto get_bucket(std::string bucket_name, const get_bucket_options& options = {}) const
57
+ -> std::future<std::pair<manager_error_context, management::cluster::bucket_settings>>;
58
+
59
+ /**
60
+ * Get all buckets on the cluster
61
+ *
62
+ * @param options optional parameters
63
+ * @param handler handler that implements @ref get_all_buckets_handler
64
+ *
65
+ * @since 1.0.0
66
+ * @committed
67
+ */
68
+ void get_all_buckets(const get_all_buckets_options& options, get_all_buckets_handler&& handler) const;
69
+
70
+ [[nodiscard]] auto get_all_buckets(const get_all_buckets_options& options = {}) const
71
+ -> std::future<std::pair<manager_error_context, std::vector<management::cluster::bucket_settings>>>;
72
+
73
+ /**
74
+ * Create a bucket on the cluster
75
+ *
76
+ * @param bucket_settings the settings for the bucket
77
+ * @param options optional parameters
78
+ * @param handler handler that implements @ref create_bucket_handler
79
+ */
80
+ void create_bucket(const management::cluster::bucket_settings& bucket_settings,
81
+ const create_bucket_options& options,
82
+ create_bucket_handler&& handler) const;
83
+
84
+ [[nodiscard]] auto create_bucket(const management::cluster::bucket_settings& bucket_settings,
85
+ const create_bucket_options& options = {}) const -> std::future<manager_error_context>;
86
+
87
+ /**
88
+ * Update an existing bucket
89
+ *
90
+ * @param bucket_settings the settings for the bucket
91
+ * @param options optional parameters
92
+ * @param handler handler that implements @ref update_bucket_handler
93
+ */
94
+ void update_bucket(const management::cluster::bucket_settings& bucket_settings,
95
+ const update_bucket_options& options,
96
+ update_bucket_handler&& handler) const;
97
+
98
+ [[nodiscard]] auto update_bucket(const management::cluster::bucket_settings& bucket_settings,
99
+ const update_bucket_options& options = {}) const -> std::future<manager_error_context>;
100
+
101
+ /**
102
+ * Drop an existing bucket
103
+ *
104
+ * @param bucket_name the name of the bucket to drop
105
+ * @param options optional parameters
106
+ * @param handler handler that implements @ref drop_bucket_handler
107
+ */
108
+ void drop_bucket(std::string bucket_name, const drop_bucket_options& options, drop_bucket_handler&& handler) const;
109
+
110
+ [[nodiscard]] auto drop_bucket(std::string bucket_name, const drop_bucket_options& options = {}) const
111
+ -> std::future<manager_error_context>;
112
+
113
+ /**
114
+ * Flush an existing bucket
115
+ *
116
+ * @param bucket_name the name of the bucket to flush
117
+ * @param options optional parameters
118
+ * @param handler handler that implements @ref flush_bucket_handler
119
+ */
120
+ void flush_bucket(std::string bucket_name, const flush_bucket_options& options, flush_bucket_handler&& handler) const;
121
+
122
+ [[nodiscard]] auto flush_bucket(std::string bucket_name, const flush_bucket_options& options = {}) const
123
+ -> std::future<manager_error_context>;
124
+
125
+ private:
126
+ friend class cluster;
127
+
128
+ explicit bucket_manager(std::shared_ptr<couchbase::core::cluster> core)
129
+ : core_(std::move(core))
130
+ {
131
+ }
132
+
133
+ std::shared_ptr<couchbase::core::cluster> core_;
134
+ };
135
+ } // namespace couchbase
@@ -66,34 +66,4 @@ class build_query_index_options : public common_options<build_query_index_option
66
66
  * @uncommitted
67
67
  */
68
68
  using build_deferred_query_indexes_handler = std::function<void(couchbase::manager_error_context)>;
69
-
70
- #ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
71
- namespace core
72
- {
73
- class cluster;
74
- class query_context;
75
- namespace impl
76
- {
77
-
78
- /**
79
- * @since 1.0.0
80
- * @internal
81
- */
82
- void
83
- initiate_build_deferred_indexes(std::shared_ptr<couchbase::core::cluster> resp1,
84
- std::string bucket_name,
85
- build_query_index_options::built options,
86
- query_context query_ctx,
87
- std::string collection_name,
88
- build_deferred_query_indexes_handler&& handler);
89
-
90
- void
91
- initiate_build_deferred_indexes(std::shared_ptr<couchbase::core::cluster> resp1,
92
- std::string bucket_name,
93
- build_query_index_options::built options,
94
- build_deferred_query_indexes_handler&& handler);
95
-
96
- #endif
97
- } // namespace impl
98
- } // namespace core
99
69
  } // namespace couchbase
@@ -19,9 +19,12 @@
19
19
 
20
20
  #include <couchbase/analytics_options.hxx>
21
21
  #include <couchbase/bucket.hxx>
22
+ #include <couchbase/bucket_manager.hxx>
22
23
  #include <couchbase/cluster_options.hxx>
23
24
  #include <couchbase/query_index_manager.hxx>
24
25
  #include <couchbase/query_options.hxx>
26
+ #include <couchbase/search_options.hxx>
27
+ #include <couchbase/search_query.hxx>
25
28
  #include <couchbase/transactions.hxx>
26
29
 
27
30
  #include <memory>
@@ -166,6 +169,43 @@ class cluster
166
169
  return future;
167
170
  }
168
171
 
172
+ /**
173
+ * Performs a query against the full text search services.
174
+ *
175
+ * @param index_name name of the search index
176
+ * @param query query object, see hierarchy of @ref search_query for more details.
177
+ * @param options options to customize the query request.
178
+ * @param handler the handler that implements @ref search_handler
179
+ *
180
+ * @exception errc::common::ambiguous_timeout
181
+ * @exception errc::common::unambiguous_timeout
182
+ *
183
+ * @see https://docs.couchbase.com/server/current/fts/fts-introduction.html
184
+ *
185
+ * @since 1.0.0
186
+ * @committed
187
+ */
188
+ void search_query(std::string index_name, const search_query& query, const search_options& options, search_handler&& handler) const;
189
+
190
+ /**
191
+ * Performs a query against the full text search services.
192
+ *
193
+ * @param index_name name of the search index
194
+ * @param query query object, see hierarchy of @ref search_query for more details.
195
+ * @param options options to customize the query request.
196
+ * @return future object that carries result of the operation
197
+ *
198
+ * @exception errc::common::ambiguous_timeout
199
+ * @exception errc::common::unambiguous_timeout
200
+ *
201
+ * @see https://docs.couchbase.com/server/current/fts/fts-introduction.html
202
+ *
203
+ * @since 1.0.0
204
+ * @committed
205
+ */
206
+ [[nodiscard]] auto search_query(std::string index_name, const class search_query& query, const search_options& options = {}) const
207
+ -> std::future<std::pair<search_error_context, search_result>>;
208
+
169
209
  /**
170
210
  * Performs a query against the analytics services.
171
211
  *
@@ -211,10 +251,25 @@ class cluster
211
251
  return query_index_manager{ core_ };
212
252
  }
213
253
 
254
+ /**
255
+ * Provides access to the bucket management services.
256
+ *
257
+ * @return a manager instance
258
+ *
259
+ * @since 1.0.0
260
+ * @committed
261
+ */
262
+ [[nodiscard]] auto buckets() const -> bucket_manager
263
+ {
264
+ return bucket_manager{ core_ };
265
+ }
266
+
214
267
  /**
215
268
  * Provides access to transaction services.
216
269
  *
217
- * @return
270
+ * See {@link transactions} for details on using the transactions object.
271
+ *
272
+ * @return an {@link transactions} object
218
273
  *
219
274
  * @since 1.0.0
220
275
  * @committed
@@ -28,6 +28,8 @@
28
28
  #include <couchbase/get_any_replica_options.hxx>
29
29
  #include <couchbase/get_options.hxx>
30
30
  #include <couchbase/insert_options.hxx>
31
+ #include <couchbase/lookup_in_all_replicas_options.hxx>
32
+ #include <couchbase/lookup_in_any_replica_options.hxx>
31
33
  #include <couchbase/lookup_in_options.hxx>
32
34
  #include <couchbase/lookup_in_specs.hxx>
33
35
  #include <couchbase/mutate_in_options.hxx>
@@ -856,6 +858,115 @@ class collection
856
858
  return future;
857
859
  }
858
860
 
861
+ /**
862
+ * Performs lookups to document fragments with default options from all replicas and the active node and returns the result as a vector.
863
+ *
864
+ * @tparam Handler type of the handler that implements @ref lookup_in_all_replicas_handler
865
+ *
866
+ * @param document_id the outer document ID
867
+ * @param specs an object that specifies the types of lookups to perform
868
+ * @param options custom options to modify the lookup options
869
+ * @param handler callable that implements @ref lookup_in_all_replicas_handler
870
+ *
871
+ * @exception errc::key_value::document_not_found the given document id is not found in the collection.
872
+ * @exception errc::common::ambiguous_timeout
873
+ * @exception errc::common::unambiguous_timeout
874
+ *
875
+ * @since 1.0.0
876
+ * @committed
877
+ */
878
+ template<typename Handler>
879
+ void lookup_in_all_replicas(std::string document_id,
880
+ lookup_in_specs specs,
881
+ const lookup_in_all_replicas_options& options,
882
+ Handler&& handler) const
883
+ {
884
+ return core::impl::initiate_lookup_in_all_replicas_operation(
885
+ core_, bucket_name_, scope_name_, name_, std::move(document_id), specs.specs(), options.build(), std::forward<Handler>(handler));
886
+ }
887
+
888
+ /**
889
+ * Performs lookups to document fragments with default options from all replicas and the active node and returns the result as a vector.
890
+ *
891
+ * @param document_id the outer document ID
892
+ * @param specs an object that specifies the types of lookups to perform
893
+ * @param options custom options to modify the lookup options
894
+ * @return future object that carries result of the operation
895
+ *
896
+ * @exception errc::key_value::document_not_found the given document id is not found in the collection.
897
+ * @exception errc::common::ambiguous_timeout
898
+ * @exception errc::common::unambiguous_timeout
899
+ *
900
+ * @since 1.0.0
901
+ * @committed
902
+ */
903
+ [[nodiscard]] auto lookup_in_all_replicas(std::string document_id,
904
+ lookup_in_specs specs,
905
+ const lookup_in_all_replicas_options& options = {}) const
906
+ -> std::future<std::pair<subdocument_error_context, lookup_in_all_replicas_result>>
907
+ {
908
+ auto barrier = std::make_shared<std::promise<std::pair<subdocument_error_context, lookup_in_all_replicas_result>>>();
909
+ auto future = barrier->get_future();
910
+ lookup_in_all_replicas(std::move(document_id), std::move(specs), options, [barrier](auto ctx, auto result) {
911
+ barrier->set_value({ std::move(ctx), std::move(result) });
912
+ });
913
+ return future;
914
+ }
915
+
916
+ /**
917
+ * Performs lookups to document fragments with default options from all replicas and returns the first found.
918
+ *
919
+ * @tparam Handler type of the handler that implements @ref lookup_in_any_replica_handler
920
+ *
921
+ * @param document_id the outer document ID
922
+ * @param specs an object that specifies the types of lookups to perform
923
+ * @param options custom options to modify the lookup options
924
+ *
925
+ * @exception errc::key_value::document_not_found the given document id is not found in the collection.
926
+ * @exception errc::common::ambiguous_timeout
927
+ * @exception errc::common::unambiguous_timeout
928
+ *
929
+ * @since 1.0.0
930
+ * @committed
931
+ */
932
+ template<typename Handler>
933
+ void lookup_in_any_replica(std::string document_id,
934
+ lookup_in_specs specs,
935
+ const lookup_in_any_replica_options& options,
936
+ Handler&& handler) const
937
+ {
938
+ return core::impl::initiate_lookup_in_any_replica_operation(
939
+ core_, bucket_name_, scope_name_, name_, std::move(document_id), specs.specs(), options.build(), std::forward<Handler>(handler));
940
+ }
941
+
942
+ /**
943
+ * Performs lookups to document fragments with default options from all replicas and returns the first found.
944
+ *
945
+ * @param document_id the outer document ID
946
+ * @param specs an object that specifies the types of lookups to perform
947
+ * @param options custom options to modify the lookup options
948
+ * @return future object that carries result of the operation
949
+ *
950
+ * @exception errc::key_value::document_not_found the given document id is not found in the collection.
951
+ * @exception errc::common::ambiguous_timeout
952
+ * @exception errc::common::unambiguous_timeout
953
+ *
954
+ * @since 1.0.0
955
+ * @committed
956
+ */
957
+ [[nodiscard]] auto lookup_in_any_replica(std::string document_id,
958
+ lookup_in_specs specs,
959
+ const lookup_in_any_replica_options& options = {}) const
960
+ -> std::future<std::pair<subdocument_error_context, lookup_in_replica_result>>
961
+ {
962
+ auto barrier = std::make_shared<std::promise<std::pair<subdocument_error_context, lookup_in_replica_result>>>();
963
+ auto future = barrier->get_future();
964
+ lookup_in_any_replica(std::move(document_id), std::move(specs), options, [barrier](auto ctx, auto result) {
965
+ barrier->set_value({ std::move(ctx), std::move(result) });
966
+ });
967
+ return future;
968
+ }
969
+
859
970
  /**
860
971
  * Gets a document for a given id and places a pessimistic lock on it for mutations
861
972
  *