couchbase 3.5.1 → 3.5.2

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 (1166) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/ext/0001-fix-build-for-mingw-w64-ucrt-x86_64-toolchain.patch +40 -0
  4. data/ext/CMakeLists.txt +22 -2
  5. data/ext/cache/extconf_include.rb +3 -3
  6. data/ext/cache/mozilla-ca-bundle.crt +19 -32
  7. data/ext/cache/mozilla-ca-bundle.sha256 +1 -1
  8. data/ext/couchbase/CMakeLists.txt +16 -9
  9. data/ext/couchbase/cmake/0001-fix-build-for-mingw-w64-ucrt-x86_64-toolchain.patch +3 -4
  10. data/ext/couchbase/cmake/CompilerWarnings.cmake +2 -1
  11. data/ext/couchbase/cmake/Packaging.cmake +41 -0
  12. data/ext/couchbase/cmake/Sanitizers.cmake +1 -0
  13. data/ext/couchbase/cmake/VersionInfo.cmake +5 -5
  14. data/ext/couchbase/cmake/build_version.hxx.in +1 -0
  15. data/ext/couchbase/cmake/couchbase-cxx-client.pc.in +10 -0
  16. data/ext/couchbase/cmake/test_boringssl.cxx +1 -1
  17. data/ext/couchbase/cmake/test_openssl.cxx +1 -1
  18. data/ext/couchbase/core/agent.cxx +353 -304
  19. data/ext/couchbase/core/agent.hxx +94 -76
  20. data/ext/couchbase/core/agent_config.cxx +9 -8
  21. data/ext/couchbase/core/agent_config.hxx +7 -7
  22. data/ext/couchbase/core/agent_group.cxx +132 -120
  23. data/ext/couchbase/core/agent_group.hxx +26 -22
  24. data/ext/couchbase/core/agent_group_config.cxx +8 -7
  25. data/ext/couchbase/core/agent_group_config.hxx +6 -6
  26. data/ext/couchbase/core/agent_unit_test_api.hxx +6 -6
  27. data/ext/couchbase/core/analytics_query_options.cxx +21 -21
  28. data/ext/couchbase/core/analytics_query_options.hxx +19 -18
  29. data/ext/couchbase/core/analytics_scan_consistency.hxx +2 -2
  30. data/ext/couchbase/core/bucket.cxx +848 -776
  31. data/ext/couchbase/core/bucket.hxx +151 -139
  32. data/ext/couchbase/core/capella_ca.hxx +20 -19
  33. data/ext/couchbase/core/cluster.cxx +1240 -927
  34. data/ext/couchbase/core/cluster.hxx +254 -167
  35. data/ext/couchbase/core/cluster_agent.cxx +7 -7
  36. data/ext/couchbase/core/cluster_agent.hxx +4 -4
  37. data/ext/couchbase/core/cluster_agent_config.cxx +8 -7
  38. data/ext/couchbase/core/cluster_agent_config.hxx +6 -6
  39. data/ext/couchbase/core/cluster_options.cxx +17 -17
  40. data/ext/couchbase/core/cluster_options.hxx +50 -47
  41. data/ext/couchbase/core/cluster_state.hxx +3 -3
  42. data/ext/couchbase/core/collection_id_cache_entry.hxx +5 -4
  43. data/ext/couchbase/core/collections_component.cxx +372 -329
  44. data/ext/couchbase/core/collections_component.hxx +17 -13
  45. data/ext/couchbase/core/collections_component_unit_test_api.hxx +6 -6
  46. data/ext/couchbase/core/collections_options.hxx +29 -27
  47. data/ext/couchbase/core/config_listener.hxx +3 -3
  48. data/ext/couchbase/core/config_profile.hxx +3 -3
  49. data/ext/couchbase/core/config_profiles.cxx +31 -31
  50. data/ext/couchbase/core/config_profiles.hxx +19 -19
  51. data/ext/couchbase/core/core_sdk_shim.cxx +2 -1
  52. data/ext/couchbase/core/core_sdk_shim.hxx +2 -2
  53. data/ext/couchbase/core/crud_component.cxx +310 -276
  54. data/ext/couchbase/core/crud_component.hxx +21 -15
  55. data/ext/couchbase/core/crud_options.hxx +361 -354
  56. data/ext/couchbase/core/crypto/cbcrypto.cc +732 -627
  57. data/ext/couchbase/core/crypto/cbcrypto.h +12 -3
  58. data/ext/couchbase/core/design_document_namespace.hxx +2 -2
  59. data/ext/couchbase/core/design_document_namespace_fmt.hxx +18 -18
  60. data/ext/couchbase/core/diagnostics.hxx +44 -44
  61. data/ext/couchbase/core/diagnostics_fmt.hxx +76 -76
  62. data/ext/couchbase/core/diagnostics_json.hxx +61 -60
  63. data/ext/couchbase/core/diagntostics_options.hxx +14 -14
  64. data/ext/couchbase/core/dispatcher.cxx +4 -3
  65. data/ext/couchbase/core/dispatcher.hxx +8 -7
  66. data/ext/couchbase/core/document_id.cxx +37 -34
  67. data/ext/couchbase/core/document_id.hxx +87 -86
  68. data/ext/couchbase/core/document_id_fmt.hxx +10 -10
  69. data/ext/couchbase/core/durability_options.hxx +50 -49
  70. data/ext/couchbase/core/error_context/analytics.hxx +18 -18
  71. data/ext/couchbase/core/error_context/analytics_json.hxx +115 -0
  72. data/ext/couchbase/core/error_context/base_error_context.hxx +184 -0
  73. data/ext/couchbase/core/error_context/http.hxx +14 -14
  74. data/ext/couchbase/core/error_context/http_json.hxx +90 -0
  75. data/ext/couchbase/core/error_context/internal_tof_metadata_json.hxx +36 -0
  76. data/ext/couchbase/core/error_context/key_value.cxx +27 -27
  77. data/ext/couchbase/core/error_context/key_value.hxx +41 -38
  78. data/ext/couchbase/core/error_context/key_value_error_context.hxx +235 -0
  79. data/ext/couchbase/core/error_context/key_value_error_map_attribute.hxx +142 -0
  80. data/ext/couchbase/core/error_context/key_value_error_map_info.hxx +139 -0
  81. data/ext/couchbase/core/error_context/key_value_extended_error_info.hxx +86 -0
  82. data/ext/couchbase/core/error_context/key_value_json.hxx +83 -0
  83. data/ext/couchbase/core/error_context/key_value_status_code.hxx +109 -0
  84. data/ext/couchbase/core/error_context/query.hxx +18 -18
  85. data/ext/couchbase/core/error_context/query_error_context.hxx +150 -0
  86. data/ext/couchbase/core/error_context/query_json.hxx +114 -0
  87. data/ext/couchbase/core/error_context/query_public_json.hxx +84 -0
  88. data/ext/couchbase/core/error_context/search.hxx +17 -17
  89. data/ext/couchbase/core/error_context/search_json.hxx +101 -0
  90. data/ext/couchbase/core/error_context/subdocument_error_context.hxx +147 -0
  91. data/ext/couchbase/core/error_context/subdocument_json.hxx +48 -0
  92. data/ext/couchbase/{couchbase → core/error_context}/transaction_error_context.hxx +22 -22
  93. data/ext/couchbase/core/error_context/transaction_op_error_context.hxx +79 -0
  94. data/ext/couchbase/core/error_context/view.hxx +17 -17
  95. data/ext/couchbase/core/fmt/key_value_error_map_attribute.hxx +100 -0
  96. data/ext/couchbase/{couchbase → core}/fmt/key_value_extended_error_info.hxx +20 -20
  97. data/ext/couchbase/core/fmt/key_value_status_code.hxx +269 -0
  98. data/ext/couchbase/core/free_form_http_request.cxx +26 -26
  99. data/ext/couchbase/core/free_form_http_request.hxx +34 -33
  100. data/ext/couchbase/core/impl/analytics.cxx +111 -131
  101. data/ext/couchbase/core/impl/analytics.hxx +5 -7
  102. data/ext/couchbase/core/impl/analytics_error_category.cxx +29 -28
  103. data/ext/couchbase/core/impl/analytics_index_manager.cxx +615 -516
  104. data/ext/couchbase/core/impl/best_effort_retry_strategy.cxx +53 -50
  105. data/ext/couchbase/core/impl/binary_collection.cxx +346 -285
  106. data/ext/couchbase/core/impl/boolean_field_query.cxx +10 -10
  107. data/ext/couchbase/core/impl/boolean_query.cxx +27 -27
  108. data/ext/couchbase/core/impl/bootstrap_state_listener.hxx +6 -6
  109. data/ext/couchbase/core/impl/bucket.cxx +39 -34
  110. data/ext/couchbase/core/impl/bucket_manager.cxx +354 -313
  111. data/ext/couchbase/core/impl/cluster.cxx +430 -325
  112. data/ext/couchbase/core/impl/collection.cxx +1033 -1187
  113. data/ext/couchbase/core/impl/collection_manager.cxx +201 -170
  114. data/ext/couchbase/core/impl/common_error_category.cxx +58 -55
  115. data/ext/couchbase/core/impl/configuration_profiles_registry.cxx +46 -32
  116. data/ext/couchbase/core/impl/conjunction_query.cxx +17 -17
  117. data/ext/couchbase/core/impl/date_range.cxx +24 -20
  118. data/ext/couchbase/core/impl/date_range_facet.cxx +22 -22
  119. data/ext/couchbase/core/impl/date_range_facet_result.cxx +6 -6
  120. data/ext/couchbase/core/impl/date_range_query.cxx +50 -48
  121. data/ext/couchbase/core/impl/diagnostics.cxx +211 -198
  122. data/ext/couchbase/core/impl/diagnostics.hxx +7 -6
  123. data/ext/couchbase/core/impl/disjunction_query.cxx +18 -17
  124. data/ext/couchbase/core/impl/dns_srv_tracker.cxx +92 -75
  125. data/ext/couchbase/core/impl/dns_srv_tracker.hxx +24 -20
  126. data/ext/couchbase/core/impl/doc_id_query.cxx +9 -9
  127. data/ext/couchbase/core/impl/encoded_search_facet.hxx +2 -2
  128. data/ext/couchbase/core/impl/encoded_search_query.hxx +2 -2
  129. data/ext/couchbase/core/impl/encoded_search_sort.hxx +2 -2
  130. data/ext/couchbase/core/impl/error.cxx +171 -0
  131. data/ext/couchbase/core/impl/error.hxx +64 -0
  132. data/ext/couchbase/core/impl/error_context.cxx +56 -0
  133. data/ext/couchbase/core/impl/expiry.cxx +66 -53
  134. data/ext/couchbase/core/impl/fail_fast_retry_strategy.cxx +5 -4
  135. data/ext/couchbase/core/impl/field_level_encryption_error_category.cxx +30 -28
  136. data/ext/couchbase/core/impl/geo_bounding_box_query.cxx +17 -17
  137. data/ext/couchbase/core/impl/geo_distance_query.cxx +14 -14
  138. data/ext/couchbase/core/impl/geo_polygon_query.cxx +17 -17
  139. data/ext/couchbase/core/impl/get_all_replicas.hxx +26 -22
  140. data/ext/couchbase/core/impl/get_any_replica.hxx +25 -23
  141. data/ext/couchbase/core/impl/get_replica.cxx +18 -15
  142. data/ext/couchbase/core/impl/get_replica.hxx +23 -18
  143. data/ext/couchbase/core/impl/internal_date_range_facet_result.cxx +16 -14
  144. data/ext/couchbase/core/impl/internal_date_range_facet_result.hxx +16 -15
  145. data/ext/couchbase/core/impl/internal_error_context.cxx +79 -0
  146. data/ext/couchbase/core/impl/internal_error_context.hxx +52 -0
  147. data/ext/couchbase/core/impl/internal_numeric_range_facet_result.cxx +18 -15
  148. data/ext/couchbase/core/impl/internal_numeric_range_facet_result.hxx +16 -15
  149. data/ext/couchbase/core/impl/internal_scan_result.hxx +7 -7
  150. data/ext/couchbase/core/impl/internal_search_error_context.cxx +25 -22
  151. data/ext/couchbase/core/impl/internal_search_error_context.hxx +32 -31
  152. data/ext/couchbase/core/impl/internal_search_meta_data.cxx +15 -13
  153. data/ext/couchbase/core/impl/internal_search_meta_data.hxx +10 -9
  154. data/ext/couchbase/core/impl/internal_search_result.cxx +30 -22
  155. data/ext/couchbase/core/impl/internal_search_result.hxx +10 -9
  156. data/ext/couchbase/core/impl/internal_search_row.cxx +10 -10
  157. data/ext/couchbase/core/impl/internal_search_row.hxx +16 -16
  158. data/ext/couchbase/core/impl/internal_search_row_location.hxx +2 -2
  159. data/ext/couchbase/core/impl/internal_search_row_locations.cxx +68 -65
  160. data/ext/couchbase/core/impl/internal_search_row_locations.hxx +16 -13
  161. data/ext/couchbase/core/impl/internal_term_facet_result.cxx +16 -14
  162. data/ext/couchbase/core/impl/internal_term_facet_result.hxx +15 -15
  163. data/ext/couchbase/core/impl/key_value_error_category.cxx +73 -72
  164. data/ext/couchbase/core/impl/key_value_error_context.cxx +65 -65
  165. data/ext/couchbase/core/impl/logger.cxx +91 -0
  166. data/ext/couchbase/core/impl/lookup_in_all_replicas.hxx +32 -29
  167. data/ext/couchbase/core/impl/lookup_in_any_replica.hxx +33 -29
  168. data/ext/couchbase/core/impl/lookup_in_replica.cxx +75 -68
  169. data/ext/couchbase/core/impl/lookup_in_replica.hxx +30 -26
  170. data/ext/couchbase/core/impl/management_error_category.cxx +41 -40
  171. data/ext/couchbase/core/impl/match_all_query.cxx +6 -6
  172. data/ext/couchbase/core/impl/match_none_query.cxx +6 -6
  173. data/ext/couchbase/core/impl/match_phrase_query.cxx +13 -13
  174. data/ext/couchbase/core/impl/match_query.cxx +28 -28
  175. data/ext/couchbase/core/impl/network_error_category.cxx +39 -38
  176. data/ext/couchbase/core/impl/numeric_range.cxx +6 -6
  177. data/ext/couchbase/core/impl/numeric_range_facet.cxx +22 -22
  178. data/ext/couchbase/core/impl/numeric_range_facet_result.cxx +6 -6
  179. data/ext/couchbase/core/impl/numeric_range_query.cxx +22 -22
  180. data/ext/couchbase/core/impl/observe_poll.cxx +294 -277
  181. data/ext/couchbase/core/impl/observe_poll.hxx +1 -1
  182. data/ext/couchbase/core/impl/observe_seqno.cxx +21 -18
  183. data/ext/couchbase/core/impl/observe_seqno.hxx +31 -26
  184. data/ext/couchbase/core/impl/phrase_query.cxx +10 -10
  185. data/ext/couchbase/core/impl/prefix_query.cxx +10 -10
  186. data/ext/couchbase/core/impl/query.cxx +163 -154
  187. data/ext/couchbase/core/impl/query.hxx +6 -7
  188. data/ext/couchbase/core/impl/query_error_category.cxx +22 -21
  189. data/ext/couchbase/core/impl/query_error_context.cxx +45 -45
  190. data/ext/couchbase/core/impl/query_index_manager.cxx +488 -408
  191. data/ext/couchbase/core/impl/query_string_query.cxx +7 -7
  192. data/ext/couchbase/core/impl/regexp_query.cxx +10 -10
  193. data/ext/couchbase/core/impl/replica_utils.cxx +66 -0
  194. data/ext/couchbase/core/impl/replica_utils.hxx +48 -0
  195. data/ext/couchbase/core/impl/retry_action.cxx +3 -3
  196. data/ext/couchbase/core/impl/retry_reason.cxx +129 -56
  197. data/ext/couchbase/core/impl/retry_reason.hxx +28 -0
  198. data/ext/couchbase/core/impl/scan_result.cxx +53 -49
  199. data/ext/couchbase/core/impl/scope.cxx +103 -94
  200. data/ext/couchbase/core/impl/search.cxx +139 -130
  201. data/ext/couchbase/core/impl/search.hxx +4 -4
  202. data/ext/couchbase/core/impl/search_error_category.cxx +18 -17
  203. data/ext/couchbase/core/impl/search_index_manager.cxx +492 -390
  204. data/ext/couchbase/core/impl/search_meta_data.cxx +3 -3
  205. data/ext/couchbase/core/impl/search_request.cxx +78 -78
  206. data/ext/couchbase/core/impl/search_result.cxx +5 -5
  207. data/ext/couchbase/core/impl/search_row.cxx +7 -7
  208. data/ext/couchbase/core/impl/search_row_location.cxx +9 -8
  209. data/ext/couchbase/core/impl/search_row_locations.cxx +8 -7
  210. data/ext/couchbase/core/impl/search_sort_field.cxx +53 -53
  211. data/ext/couchbase/core/impl/search_sort_geo_distance.cxx +49 -48
  212. data/ext/couchbase/core/impl/search_sort_id.cxx +10 -10
  213. data/ext/couchbase/core/impl/search_sort_score.cxx +10 -10
  214. data/ext/couchbase/core/impl/streaming_json_lexer_error_category.cxx +70 -68
  215. data/ext/couchbase/core/impl/subdoc/array_add_unique.cxx +6 -6
  216. data/ext/couchbase/core/impl/subdoc/array_append.cxx +6 -6
  217. data/ext/couchbase/core/impl/subdoc/array_insert.cxx +6 -6
  218. data/ext/couchbase/core/impl/subdoc/array_prepend.cxx +6 -6
  219. data/ext/couchbase/core/impl/subdoc/command.hxx +5 -5
  220. data/ext/couchbase/core/impl/subdoc/command_bundle.hxx +11 -11
  221. data/ext/couchbase/core/impl/subdoc/count.cxx +6 -6
  222. data/ext/couchbase/core/impl/subdoc/counter.cxx +6 -6
  223. data/ext/couchbase/core/impl/subdoc/exists.cxx +6 -6
  224. data/ext/couchbase/core/impl/subdoc/get.cxx +6 -6
  225. data/ext/couchbase/core/impl/subdoc/insert.cxx +6 -6
  226. data/ext/couchbase/core/impl/subdoc/join_values.cxx +25 -25
  227. data/ext/couchbase/core/impl/subdoc/lookup_in_macro.cxx +61 -60
  228. data/ext/couchbase/core/impl/subdoc/lookup_in_specs.cxx +9 -9
  229. data/ext/couchbase/core/impl/subdoc/mutate_in_macro.cxx +48 -39
  230. data/ext/couchbase/core/impl/subdoc/mutate_in_specs.cxx +9 -9
  231. data/ext/couchbase/core/impl/subdoc/opcode.hxx +16 -16
  232. data/ext/couchbase/core/impl/subdoc/path_flags.hxx +40 -17
  233. data/ext/couchbase/core/impl/subdoc/remove.cxx +6 -6
  234. data/ext/couchbase/core/impl/subdoc/replace.cxx +6 -6
  235. data/ext/couchbase/core/impl/subdoc/upsert.cxx +6 -6
  236. data/ext/couchbase/core/impl/term_facet.cxx +8 -8
  237. data/ext/couchbase/core/impl/term_facet_result.cxx +6 -6
  238. data/ext/couchbase/core/impl/term_query.cxx +25 -25
  239. data/ext/couchbase/core/impl/term_range_query.cxx +22 -22
  240. data/ext/couchbase/core/impl/transaction_error_category.cxx +21 -20
  241. data/ext/couchbase/core/impl/transaction_get_result.cxx +41 -30
  242. data/ext/couchbase/core/impl/transaction_op_error_category.cxx +55 -56
  243. data/ext/couchbase/core/impl/vector_query.cxx +15 -10
  244. data/ext/couchbase/core/impl/vector_search.cxx +9 -9
  245. data/ext/couchbase/core/impl/view_error_category.cxx +17 -16
  246. data/ext/couchbase/core/impl/wildcard_query.cxx +10 -10
  247. data/ext/couchbase/core/impl/with_legacy_durability.hxx +30 -29
  248. data/ext/couchbase/core/io/dns_client.cxx +257 -232
  249. data/ext/couchbase/core/io/dns_client.hxx +19 -18
  250. data/ext/couchbase/core/io/dns_codec.hxx +156 -154
  251. data/ext/couchbase/core/io/dns_config.cxx +114 -109
  252. data/ext/couchbase/core/io/dns_config.hxx +15 -13
  253. data/ext/couchbase/core/io/dns_message.hxx +365 -342
  254. data/ext/couchbase/core/io/http_command.hxx +155 -134
  255. data/ext/couchbase/core/io/http_context.hxx +5 -5
  256. data/ext/couchbase/core/io/http_message.hxx +75 -71
  257. data/ext/couchbase/core/io/http_parser.cxx +70 -67
  258. data/ext/couchbase/core/io/http_parser.hxx +18 -18
  259. data/ext/couchbase/core/io/http_session.hxx +620 -520
  260. data/ext/couchbase/core/io/http_session_manager.hxx +406 -315
  261. data/ext/couchbase/core/io/http_traits.hxx +7 -0
  262. data/ext/couchbase/core/io/ip_protocol.hxx +3 -3
  263. data/ext/couchbase/core/io/mcbp_command.hxx +298 -278
  264. data/ext/couchbase/core/io/mcbp_context.hxx +7 -6
  265. data/ext/couchbase/core/io/mcbp_message.cxx +8 -8
  266. data/ext/couchbase/core/io/mcbp_message.hxx +19 -19
  267. data/ext/couchbase/core/io/mcbp_parser.cxx +60 -51
  268. data/ext/couchbase/core/io/mcbp_parser.hxx +21 -17
  269. data/ext/couchbase/core/io/mcbp_session.cxx +1769 -1616
  270. data/ext/couchbase/core/io/mcbp_session.hxx +63 -57
  271. data/ext/couchbase/core/io/query_cache.hxx +34 -34
  272. data/ext/couchbase/core/io/retry_context.hxx +45 -45
  273. data/ext/couchbase/core/io/retry_orchestrator.hxx +52 -42
  274. data/ext/couchbase/core/io/streams.hxx +210 -193
  275. data/ext/couchbase/core/json_string.hxx +47 -47
  276. data/ext/couchbase/core/key_value_config.cxx +8 -8
  277. data/ext/couchbase/core/key_value_config.hxx +12 -11
  278. data/ext/couchbase/core/logger/configuration.hxx +35 -35
  279. data/ext/couchbase/core/logger/custom_rotating_file_sink.cxx +73 -72
  280. data/ext/couchbase/core/logger/custom_rotating_file_sink.hxx +20 -18
  281. data/ext/couchbase/core/logger/level.hxx +9 -1
  282. data/ext/couchbase/core/logger/logger.cxx +279 -252
  283. data/ext/couchbase/core/logger/logger.hxx +110 -58
  284. data/ext/couchbase/core/management/analytics_dataset.hxx +4 -4
  285. data/ext/couchbase/core/management/analytics_index.hxx +4 -4
  286. data/ext/couchbase/core/management/analytics_link_azure_blob_external.cxx +35 -33
  287. data/ext/couchbase/core/management/analytics_link_azure_blob_external.hxx +36 -35
  288. data/ext/couchbase/core/management/analytics_link_azure_blob_external_json.hxx +24 -20
  289. data/ext/couchbase/core/management/analytics_link_couchbase_remote.cxx +66 -65
  290. data/ext/couchbase/core/management/analytics_link_couchbase_remote.hxx +77 -70
  291. data/ext/couchbase/core/management/analytics_link_couchbase_remote_json.hxx +38 -32
  292. data/ext/couchbase/core/management/analytics_link_s3_external.cxx +26 -25
  293. data/ext/couchbase/core/management/analytics_link_s3_external.hxx +30 -30
  294. data/ext/couchbase/core/management/analytics_link_s3_external_json.hxx +18 -16
  295. data/ext/couchbase/core/management/bucket_settings.hxx +109 -91
  296. data/ext/couchbase/core/management/bucket_settings_json.hxx +112 -94
  297. data/ext/couchbase/core/management/design_document.hxx +9 -9
  298. data/ext/couchbase/core/management/eventing_function.hxx +124 -121
  299. data/ext/couchbase/core/management/eventing_function_json.hxx +228 -184
  300. data/ext/couchbase/core/management/eventing_status.hxx +41 -41
  301. data/ext/couchbase/core/management/eventing_status_json.hxx +53 -45
  302. data/ext/couchbase/core/management/rbac.hxx +33 -28
  303. data/ext/couchbase/core/management/rbac_fmt.hxx +21 -21
  304. data/ext/couchbase/core/management/rbac_json.hxx +132 -125
  305. data/ext/couchbase/core/management/search_index.cxx +79 -0
  306. data/ext/couchbase/core/management/search_index.hxx +11 -10
  307. data/ext/couchbase/core/management/search_index_json.hxx +27 -26
  308. data/ext/couchbase/core/mcbp/barrier_frame.hxx +4 -3
  309. data/ext/couchbase/core/mcbp/big_endian.cxx +22 -22
  310. data/ext/couchbase/core/mcbp/buffer_writer.cxx +22 -19
  311. data/ext/couchbase/core/mcbp/buffer_writer.hxx +9 -9
  312. data/ext/couchbase/core/mcbp/codec.cxx +419 -397
  313. data/ext/couchbase/core/mcbp/codec.hxx +14 -12
  314. data/ext/couchbase/core/mcbp/command_code.cxx +48 -48
  315. data/ext/couchbase/core/mcbp/completion_token.hxx +33 -33
  316. data/ext/couchbase/core/mcbp/datatype.hxx +3 -3
  317. data/ext/couchbase/core/mcbp/durability_level.hxx +8 -7
  318. data/ext/couchbase/core/mcbp/durability_level_frame.hxx +3 -2
  319. data/ext/couchbase/core/mcbp/durability_timeout_frame.hxx +4 -3
  320. data/ext/couchbase/core/mcbp/open_tracing_frame.hxx +3 -2
  321. data/ext/couchbase/core/mcbp/operation_consumer.cxx +3 -3
  322. data/ext/couchbase/core/mcbp/operation_consumer.hxx +9 -9
  323. data/ext/couchbase/core/mcbp/operation_queue.cxx +76 -70
  324. data/ext/couchbase/core/mcbp/operation_queue.hxx +18 -17
  325. data/ext/couchbase/core/mcbp/packet.cxx +65 -51
  326. data/ext/couchbase/core/mcbp/packet.hxx +25 -25
  327. data/ext/couchbase/core/mcbp/preserve_expiry_frame.hxx +4 -2
  328. data/ext/couchbase/core/mcbp/queue_callback.hxx +3 -2
  329. data/ext/couchbase/core/mcbp/queue_request.cxx +65 -62
  330. data/ext/couchbase/core/mcbp/queue_request.hxx +54 -52
  331. data/ext/couchbase/core/mcbp/queue_request_connection_info.hxx +3 -3
  332. data/ext/couchbase/core/mcbp/queue_response.hxx +7 -7
  333. data/ext/couchbase/core/mcbp/read_units_frame.hxx +3 -2
  334. data/ext/couchbase/core/mcbp/server_duration.cxx +7 -7
  335. data/ext/couchbase/core/mcbp/server_duration_frame.hxx +3 -2
  336. data/ext/couchbase/core/mcbp/stream_id_frame.hxx +3 -2
  337. data/ext/couchbase/core/mcbp/unsupported_frame.hxx +4 -3
  338. data/ext/couchbase/core/mcbp/user_impersonation_frame.hxx +1 -1
  339. data/ext/couchbase/core/mcbp/write_units_frame.hxx +3 -2
  340. data/ext/couchbase/core/meta/features.hxx +58 -0
  341. data/ext/couchbase/core/meta/version.cxx +255 -204
  342. data/ext/couchbase/core/meta/version.hxx +31 -20
  343. data/ext/couchbase/core/metrics/logging_meter.cxx +160 -154
  344. data/ext/couchbase/core/metrics/logging_meter.hxx +16 -15
  345. data/ext/couchbase/core/metrics/logging_meter_options.hxx +1 -1
  346. data/ext/couchbase/core/metrics/noop_meter.hxx +14 -13
  347. data/ext/couchbase/core/mozilla_ca_bundle.hxx +2 -2
  348. data/ext/couchbase/core/n1ql_query_options.cxx +31 -31
  349. data/ext/couchbase/core/n1ql_query_options.hxx +22 -21
  350. data/ext/couchbase/core/operation_map.hxx +3 -3
  351. data/ext/couchbase/core/operations/document_analytics.cxx +187 -176
  352. data/ext/couchbase/core/operations/document_analytics.hxx +79 -71
  353. data/ext/couchbase/core/operations/document_append.cxx +18 -15
  354. data/ext/couchbase/core/operations/document_append.hxx +18 -16
  355. data/ext/couchbase/core/operations/document_decrement.cxx +26 -23
  356. data/ext/couchbase/core/operations/document_decrement.hxx +24 -20
  357. data/ext/couchbase/core/operations/document_exists.cxx +23 -21
  358. data/ext/couchbase/core/operations/document_exists.hxx +25 -23
  359. data/ext/couchbase/core/operations/document_get.cxx +17 -15
  360. data/ext/couchbase/core/operations/document_get.hxx +17 -15
  361. data/ext/couchbase/core/operations/document_get_all_replicas.hxx +121 -92
  362. data/ext/couchbase/core/operations/document_get_and_lock.cxx +19 -16
  363. data/ext/couchbase/core/operations/document_get_and_lock.hxx +21 -17
  364. data/ext/couchbase/core/operations/document_get_and_touch.cxx +19 -16
  365. data/ext/couchbase/core/operations/document_get_and_touch.hxx +22 -18
  366. data/ext/couchbase/core/operations/document_get_any_replica.hxx +111 -82
  367. data/ext/couchbase/core/operations/document_get_projected.cxx +193 -184
  368. data/ext/couchbase/core/operations/document_get_projected.hxx +25 -21
  369. data/ext/couchbase/core/operations/document_increment.cxx +26 -23
  370. data/ext/couchbase/core/operations/document_increment.hxx +24 -20
  371. data/ext/couchbase/core/operations/document_insert.cxx +23 -20
  372. data/ext/couchbase/core/operations/document_insert.hxx +20 -18
  373. data/ext/couchbase/core/operations/document_lookup_in.cxx +80 -67
  374. data/ext/couchbase/core/operations/document_lookup_in.hxx +31 -27
  375. data/ext/couchbase/core/operations/document_lookup_in_all_replicas.hxx +187 -149
  376. data/ext/couchbase/core/operations/document_lookup_in_any_replica.hxx +190 -145
  377. data/ext/couchbase/core/operations/document_mutate_in.cxx +98 -80
  378. data/ext/couchbase/core/operations/document_mutate_in.hxx +38 -33
  379. data/ext/couchbase/core/operations/document_prepend.cxx +18 -15
  380. data/ext/couchbase/core/operations/document_prepend.hxx +18 -16
  381. data/ext/couchbase/core/operations/document_query.cxx +367 -356
  382. data/ext/couchbase/core/operations/document_query.hxx +83 -79
  383. data/ext/couchbase/core/operations/document_remove.cxx +18 -15
  384. data/ext/couchbase/core/operations/document_remove.hxx +18 -16
  385. data/ext/couchbase/core/operations/document_replace.cxx +27 -24
  386. data/ext/couchbase/core/operations/document_replace.hxx +22 -20
  387. data/ext/couchbase/core/operations/document_search.cxx +322 -308
  388. data/ext/couchbase/core/operations/document_search.hxx +125 -121
  389. data/ext/couchbase/core/operations/document_touch.cxx +16 -14
  390. data/ext/couchbase/core/operations/document_touch.hxx +19 -17
  391. data/ext/couchbase/core/operations/document_unlock.cxx +16 -14
  392. data/ext/couchbase/core/operations/document_unlock.hxx +19 -17
  393. data/ext/couchbase/core/operations/document_upsert.cxx +26 -23
  394. data/ext/couchbase/core/operations/document_upsert.hxx +21 -19
  395. data/ext/couchbase/core/operations/document_view.cxx +169 -159
  396. data/ext/couchbase/core/operations/document_view.hxx +68 -65
  397. data/ext/couchbase/core/operations/http_noop.cxx +38 -35
  398. data/ext/couchbase/core/operations/http_noop.hxx +12 -10
  399. data/ext/couchbase/core/operations/management/analytics_dataset_create.cxx +58 -56
  400. data/ext/couchbase/core/operations/management/analytics_dataset_create.hxx +20 -17
  401. data/ext/couchbase/core/operations/management/analytics_dataset_drop.cxx +49 -44
  402. data/ext/couchbase/core/operations/management/analytics_dataset_drop.hxx +18 -15
  403. data/ext/couchbase/core/operations/management/analytics_dataset_get_all.cxx +46 -43
  404. data/ext/couchbase/core/operations/management/analytics_dataset_get_all.hxx +16 -13
  405. data/ext/couchbase/core/operations/management/analytics_dataverse_create.cxx +48 -43
  406. data/ext/couchbase/core/operations/management/analytics_dataverse_create.hxx +17 -14
  407. data/ext/couchbase/core/operations/management/analytics_dataverse_drop.cxx +48 -43
  408. data/ext/couchbase/core/operations/management/analytics_dataverse_drop.hxx +17 -14
  409. data/ext/couchbase/core/operations/management/analytics_get_pending_mutations.cxx +38 -35
  410. data/ext/couchbase/core/operations/management/analytics_get_pending_mutations.hxx +16 -14
  411. data/ext/couchbase/core/operations/management/analytics_index_create.cxx +68 -66
  412. data/ext/couchbase/core/operations/management/analytics_index_create.hxx +20 -17
  413. data/ext/couchbase/core/operations/management/analytics_index_drop.cxx +56 -51
  414. data/ext/couchbase/core/operations/management/analytics_index_drop.hxx +19 -16
  415. data/ext/couchbase/core/operations/management/analytics_index_get_all.cxx +44 -42
  416. data/ext/couchbase/core/operations/management/analytics_index_get_all.hxx +16 -13
  417. data/ext/couchbase/core/operations/management/analytics_link_connect.cxx +49 -43
  418. data/ext/couchbase/core/operations/management/analytics_link_connect.hxx +23 -20
  419. data/ext/couchbase/core/operations/management/analytics_link_create.cxx +52 -51
  420. data/ext/couchbase/core/operations/management/analytics_link_create.hxx +33 -30
  421. data/ext/couchbase/core/operations/management/analytics_link_disconnect.cxx +46 -42
  422. data/ext/couchbase/core/operations/management/analytics_link_disconnect.hxx +22 -19
  423. data/ext/couchbase/core/operations/management/analytics_link_drop.cxx +70 -67
  424. data/ext/couchbase/core/operations/management/analytics_link_drop.hxx +22 -19
  425. data/ext/couchbase/core/operations/management/analytics_link_get_all.cxx +92 -85
  426. data/ext/couchbase/core/operations/management/analytics_link_get_all.hxx +27 -24
  427. data/ext/couchbase/core/operations/management/analytics_link_replace.cxx +52 -51
  428. data/ext/couchbase/core/operations/management/analytics_link_replace.hxx +33 -30
  429. data/ext/couchbase/core/operations/management/analytics_link_utils.hxx +6 -4
  430. data/ext/couchbase/core/operations/management/analytics_problem.hxx +2 -2
  431. data/ext/couchbase/core/operations/management/bucket_create.cxx +158 -149
  432. data/ext/couchbase/core/operations/management/bucket_create.hxx +14 -12
  433. data/ext/couchbase/core/operations/management/bucket_describe.cxx +118 -42
  434. data/ext/couchbase/core/operations/management/bucket_describe.hxx +47 -22
  435. data/ext/couchbase/core/operations/management/bucket_drop.cxx +19 -18
  436. data/ext/couchbase/core/operations/management/bucket_drop.hxx +13 -11
  437. data/ext/couchbase/core/operations/management/bucket_flush.cxx +25 -24
  438. data/ext/couchbase/core/operations/management/bucket_flush.hxx +13 -11
  439. data/ext/couchbase/core/operations/management/bucket_get.cxx +24 -22
  440. data/ext/couchbase/core/operations/management/bucket_get.hxx +14 -12
  441. data/ext/couchbase/core/operations/management/bucket_get_all.cxx +25 -23
  442. data/ext/couchbase/core/operations/management/bucket_get_all.hxx +13 -11
  443. data/ext/couchbase/core/operations/management/bucket_update.cxx +112 -107
  444. data/ext/couchbase/core/operations/management/bucket_update.hxx +15 -13
  445. data/ext/couchbase/core/operations/management/change_password.cxx +22 -20
  446. data/ext/couchbase/core/operations/management/change_password.hxx +13 -11
  447. data/ext/couchbase/core/operations/management/cluster_describe.cxx +52 -50
  448. data/ext/couchbase/core/operations/management/cluster_describe.hxx +31 -29
  449. data/ext/couchbase/core/operations/management/cluster_developer_preview_enable.cxx +14 -12
  450. data/ext/couchbase/core/operations/management/cluster_developer_preview_enable.hxx +13 -11
  451. data/ext/couchbase/core/operations/management/collection_create.cxx +48 -46
  452. data/ext/couchbase/core/operations/management/collection_create.hxx +19 -16
  453. data/ext/couchbase/core/operations/management/collection_drop.cxx +37 -35
  454. data/ext/couchbase/core/operations/management/collection_drop.hxx +16 -14
  455. data/ext/couchbase/core/operations/management/collection_update.cxx +49 -47
  456. data/ext/couchbase/core/operations/management/collection_update.hxx +19 -16
  457. data/ext/couchbase/core/operations/management/collections_manifest_get.cxx +11 -9
  458. data/ext/couchbase/core/operations/management/collections_manifest_get.hxx +17 -13
  459. data/ext/couchbase/core/operations/management/error_utils.cxx +210 -198
  460. data/ext/couchbase/core/operations/management/error_utils.hxx +3 -1
  461. data/ext/couchbase/core/operations/management/eventing_deploy_function.cxx +30 -28
  462. data/ext/couchbase/core/operations/management/eventing_deploy_function.hxx +17 -14
  463. data/ext/couchbase/core/operations/management/eventing_drop_function.cxx +31 -29
  464. data/ext/couchbase/core/operations/management/eventing_drop_function.hxx +17 -14
  465. data/ext/couchbase/core/operations/management/eventing_get_all_functions.cxx +49 -43
  466. data/ext/couchbase/core/operations/management/eventing_get_all_functions.hxx +17 -14
  467. data/ext/couchbase/core/operations/management/eventing_get_function.cxx +29 -27
  468. data/ext/couchbase/core/operations/management/eventing_get_function.hxx +18 -15
  469. data/ext/couchbase/core/operations/management/eventing_get_status.cxx +45 -39
  470. data/ext/couchbase/core/operations/management/eventing_get_status.hxx +17 -14
  471. data/ext/couchbase/core/operations/management/eventing_pause_function.cxx +30 -28
  472. data/ext/couchbase/core/operations/management/eventing_pause_function.hxx +17 -14
  473. data/ext/couchbase/core/operations/management/eventing_problem.hxx +3 -3
  474. data/ext/couchbase/core/operations/management/eventing_resume_function.cxx +30 -28
  475. data/ext/couchbase/core/operations/management/eventing_resume_function.hxx +17 -14
  476. data/ext/couchbase/core/operations/management/eventing_undeploy_function.cxx +30 -28
  477. data/ext/couchbase/core/operations/management/eventing_undeploy_function.hxx +17 -14
  478. data/ext/couchbase/core/operations/management/eventing_upsert_function.cxx +328 -318
  479. data/ext/couchbase/core/operations/management/eventing_upsert_function.hxx +17 -14
  480. data/ext/couchbase/core/operations/management/freeform.cxx +23 -22
  481. data/ext/couchbase/core/operations/management/freeform.hxx +19 -17
  482. data/ext/couchbase/core/operations/management/group_drop.cxx +18 -17
  483. data/ext/couchbase/core/operations/management/group_drop.hxx +13 -11
  484. data/ext/couchbase/core/operations/management/group_get.cxx +25 -23
  485. data/ext/couchbase/core/operations/management/group_get.hxx +14 -12
  486. data/ext/couchbase/core/operations/management/group_get_all.cxx +23 -22
  487. data/ext/couchbase/core/operations/management/group_get_all.hxx +13 -11
  488. data/ext/couchbase/core/operations/management/group_upsert.cxx +58 -55
  489. data/ext/couchbase/core/operations/management/group_upsert.hxx +14 -12
  490. data/ext/couchbase/core/operations/management/query_index_build.cxx +53 -48
  491. data/ext/couchbase/core/operations/management/query_index_build.hxx +25 -22
  492. data/ext/couchbase/core/operations/management/query_index_build_deferred.hxx +75 -67
  493. data/ext/couchbase/core/operations/management/query_index_create.cxx +128 -122
  494. data/ext/couchbase/core/operations/management/query_index_create.hxx +31 -28
  495. data/ext/couchbase/core/operations/management/query_index_drop.cxx +95 -93
  496. data/ext/couchbase/core/operations/management/query_index_drop.hxx +26 -24
  497. data/ext/couchbase/core/operations/management/query_index_get_all.cxx +97 -93
  498. data/ext/couchbase/core/operations/management/query_index_get_all.hxx +24 -21
  499. data/ext/couchbase/core/operations/management/query_index_get_all_deferred.cxx +66 -62
  500. data/ext/couchbase/core/operations/management/query_index_get_all_deferred.hxx +24 -22
  501. data/ext/couchbase/core/operations/management/role_get_all.cxx +24 -22
  502. data/ext/couchbase/core/operations/management/role_get_all.hxx +13 -11
  503. data/ext/couchbase/core/operations/management/scope_create.cxx +38 -36
  504. data/ext/couchbase/core/operations/management/scope_create.hxx +15 -13
  505. data/ext/couchbase/core/operations/management/scope_drop.cxx +33 -32
  506. data/ext/couchbase/core/operations/management/scope_drop.hxx +15 -13
  507. data/ext/couchbase/core/operations/management/scope_get_all.cxx +27 -25
  508. data/ext/couchbase/core/operations/management/scope_get_all.hxx +14 -12
  509. data/ext/couchbase/core/operations/management/search_get_stats.cxx +12 -10
  510. data/ext/couchbase/core/operations/management/search_get_stats.hxx +13 -11
  511. data/ext/couchbase/core/operations/management/search_index_analyze_document.cxx +72 -67
  512. data/ext/couchbase/core/operations/management/search_index_analyze_document.hxx +20 -18
  513. data/ext/couchbase/core/operations/management/search_index_control_ingest.cxx +62 -59
  514. data/ext/couchbase/core/operations/management/search_index_control_ingest.hxx +19 -16
  515. data/ext/couchbase/core/operations/management/search_index_control_plan_freeze.cxx +62 -59
  516. data/ext/couchbase/core/operations/management/search_index_control_plan_freeze.hxx +19 -17
  517. data/ext/couchbase/core/operations/management/search_index_control_query.cxx +62 -59
  518. data/ext/couchbase/core/operations/management/search_index_control_query.hxx +19 -16
  519. data/ext/couchbase/core/operations/management/search_index_drop.cxx +58 -55
  520. data/ext/couchbase/core/operations/management/search_index_drop.hxx +18 -15
  521. data/ext/couchbase/core/operations/management/search_index_get.cxx +59 -56
  522. data/ext/couchbase/core/operations/management/search_index_get.hxx +18 -16
  523. data/ext/couchbase/core/operations/management/search_index_get_all.cxx +51 -46
  524. data/ext/couchbase/core/operations/management/search_index_get_all.hxx +18 -15
  525. data/ext/couchbase/core/operations/management/search_index_get_documents_count.cxx +66 -61
  526. data/ext/couchbase/core/operations/management/search_index_get_documents_count.hxx +19 -17
  527. data/ext/couchbase/core/operations/management/search_index_get_stats.cxx +38 -36
  528. data/ext/couchbase/core/operations/management/search_index_get_stats.hxx +17 -14
  529. data/ext/couchbase/core/operations/management/search_index_upsert.cxx +98 -95
  530. data/ext/couchbase/core/operations/management/search_index_upsert.hxx +20 -17
  531. data/ext/couchbase/core/operations/management/user_drop.cxx +18 -17
  532. data/ext/couchbase/core/operations/management/user_drop.hxx +16 -12
  533. data/ext/couchbase/core/operations/management/user_get.cxx +25 -23
  534. data/ext/couchbase/core/operations/management/user_get.hxx +17 -13
  535. data/ext/couchbase/core/operations/management/user_get_all.cxx +24 -22
  536. data/ext/couchbase/core/operations/management/user_get_all.hxx +16 -12
  537. data/ext/couchbase/core/operations/management/user_upsert.cxx +63 -60
  538. data/ext/couchbase/core/operations/management/user_upsert.hxx +17 -13
  539. data/ext/couchbase/core/operations/management/view_index_drop.cxx +16 -12
  540. data/ext/couchbase/core/operations/management/view_index_drop.hxx +15 -13
  541. data/ext/couchbase/core/operations/management/view_index_get.cxx +40 -35
  542. data/ext/couchbase/core/operations/management/view_index_get.hxx +16 -14
  543. data/ext/couchbase/core/operations/management/view_index_get_all.cxx +73 -69
  544. data/ext/couchbase/core/operations/management/view_index_get_all.hxx +16 -13
  545. data/ext/couchbase/core/operations/management/view_index_upsert.cxx +39 -35
  546. data/ext/couchbase/core/operations/management/view_index_upsert.hxx +15 -12
  547. data/ext/couchbase/core/origin.cxx +259 -249
  548. data/ext/couchbase/core/origin.hxx +55 -49
  549. data/ext/couchbase/core/pending_operation.hxx +3 -3
  550. data/ext/couchbase/core/ping_collector.hxx +3 -3
  551. data/ext/couchbase/core/ping_options.hxx +30 -30
  552. data/ext/couchbase/core/ping_reporter.hxx +3 -3
  553. data/ext/couchbase/core/platform/backtrace.c +100 -91
  554. data/ext/couchbase/core/platform/base64.cc +135 -134
  555. data/ext/couchbase/core/platform/dirutils.cc +66 -63
  556. data/ext/couchbase/core/platform/random.cc +43 -42
  557. data/ext/couchbase/core/platform/random.h +4 -4
  558. data/ext/couchbase/core/platform/string_hex.cc +42 -40
  559. data/ext/couchbase/core/platform/terminate_handler.cc +54 -52
  560. data/ext/couchbase/core/platform/uuid.cc +47 -47
  561. data/ext/couchbase/core/protocol/client_opcode.hxx +336 -327
  562. data/ext/couchbase/core/protocol/client_opcode_fmt.hxx +291 -291
  563. data/ext/couchbase/core/protocol/client_request.cxx +13 -10
  564. data/ext/couchbase/core/protocol/client_request.hxx +133 -130
  565. data/ext/couchbase/core/protocol/client_response.cxx +40 -40
  566. data/ext/couchbase/core/protocol/client_response.hxx +153 -150
  567. data/ext/couchbase/core/protocol/cmd_append.cxx +24 -23
  568. data/ext/couchbase/core/protocol/cmd_append.hxx +65 -65
  569. data/ext/couchbase/core/protocol/cmd_cluster_map_change_notification.cxx +25 -21
  570. data/ext/couchbase/core/protocol/cmd_cluster_map_change_notification.hxx +33 -25
  571. data/ext/couchbase/core/protocol/cmd_decrement.cxx +38 -38
  572. data/ext/couchbase/core/protocol/cmd_decrement.hxx +87 -87
  573. data/ext/couchbase/core/protocol/cmd_get.cxx +17 -17
  574. data/ext/couchbase/core/protocol/cmd_get.hxx +59 -59
  575. data/ext/couchbase/core/protocol/cmd_get_and_lock.cxx +20 -20
  576. data/ext/couchbase/core/protocol/cmd_get_and_lock.hxx +72 -72
  577. data/ext/couchbase/core/protocol/cmd_get_and_touch.cxx +20 -20
  578. data/ext/couchbase/core/protocol/cmd_get_and_touch.hxx +72 -72
  579. data/ext/couchbase/core/protocol/cmd_get_cluster_config.cxx +46 -39
  580. data/ext/couchbase/core/protocol/cmd_get_cluster_config.hxx +57 -49
  581. data/ext/couchbase/core/protocol/cmd_get_collection_id.cxx +17 -17
  582. data/ext/couchbase/core/protocol/cmd_get_collection_id.hxx +59 -59
  583. data/ext/couchbase/core/protocol/cmd_get_collections_manifest.cxx +16 -14
  584. data/ext/couchbase/core/protocol/cmd_get_collections_manifest.hxx +39 -39
  585. data/ext/couchbase/core/protocol/cmd_get_error_map.cxx +18 -17
  586. data/ext/couchbase/core/protocol/cmd_get_error_map.hxx +62 -62
  587. data/ext/couchbase/core/protocol/cmd_get_meta.cxx +24 -23
  588. data/ext/couchbase/core/protocol/cmd_get_meta.hxx +81 -79
  589. data/ext/couchbase/core/protocol/cmd_get_replica.cxx +23 -23
  590. data/ext/couchbase/core/protocol/cmd_get_replica.hxx +44 -44
  591. data/ext/couchbase/core/protocol/cmd_hello.cxx +28 -27
  592. data/ext/couchbase/core/protocol/cmd_hello.hxx +106 -105
  593. data/ext/couchbase/core/protocol/cmd_increment.cxx +38 -38
  594. data/ext/couchbase/core/protocol/cmd_increment.hxx +87 -87
  595. data/ext/couchbase/core/protocol/cmd_info.hxx +3 -3
  596. data/ext/couchbase/core/protocol/cmd_insert.cxx +27 -27
  597. data/ext/couchbase/core/protocol/cmd_insert.hxx +81 -81
  598. data/ext/couchbase/core/protocol/cmd_lookup_in.cxx +54 -51
  599. data/ext/couchbase/core/protocol/cmd_lookup_in.hxx +90 -90
  600. data/ext/couchbase/core/protocol/cmd_lookup_in_replica.cxx +54 -51
  601. data/ext/couchbase/core/protocol/cmd_lookup_in_replica.hxx +88 -88
  602. data/ext/couchbase/core/protocol/cmd_mutate_in.cxx +105 -97
  603. data/ext/couchbase/core/protocol/cmd_mutate_in.hxx +161 -153
  604. data/ext/couchbase/core/protocol/cmd_noop.cxx +4 -4
  605. data/ext/couchbase/core/protocol/cmd_noop.hxx +32 -32
  606. data/ext/couchbase/core/protocol/cmd_observe_seqno.cxx +36 -34
  607. data/ext/couchbase/core/protocol/cmd_observe_seqno.hxx +89 -89
  608. data/ext/couchbase/core/protocol/cmd_prepend.cxx +22 -22
  609. data/ext/couchbase/core/protocol/cmd_prepend.hxx +63 -63
  610. data/ext/couchbase/core/protocol/cmd_remove.cxx +23 -23
  611. data/ext/couchbase/core/protocol/cmd_remove.hxx +54 -54
  612. data/ext/couchbase/core/protocol/cmd_replace.cxx +28 -28
  613. data/ext/couchbase/core/protocol/cmd_replace.hxx +88 -88
  614. data/ext/couchbase/core/protocol/cmd_sasl_auth.cxx +17 -15
  615. data/ext/couchbase/core/protocol/cmd_sasl_auth.hxx +56 -56
  616. data/ext/couchbase/core/protocol/cmd_sasl_list_mechs.cxx +24 -19
  617. data/ext/couchbase/core/protocol/cmd_sasl_list_mechs.hxx +39 -39
  618. data/ext/couchbase/core/protocol/cmd_sasl_step.cxx +17 -15
  619. data/ext/couchbase/core/protocol/cmd_sasl_step.hxx +56 -56
  620. data/ext/couchbase/core/protocol/cmd_select_bucket.cxx +6 -6
  621. data/ext/couchbase/core/protocol/cmd_select_bucket.hxx +36 -36
  622. data/ext/couchbase/core/protocol/cmd_touch.cxx +8 -8
  623. data/ext/couchbase/core/protocol/cmd_touch.hxx +38 -38
  624. data/ext/couchbase/core/protocol/cmd_unlock.cxx +5 -5
  625. data/ext/couchbase/core/protocol/cmd_unlock.hxx +36 -36
  626. data/ext/couchbase/core/protocol/cmd_upsert.cxx +28 -28
  627. data/ext/couchbase/core/protocol/cmd_upsert.hxx +83 -83
  628. data/ext/couchbase/core/protocol/datatype.hxx +19 -18
  629. data/ext/couchbase/core/protocol/frame_info_id.hxx +108 -103
  630. data/ext/couchbase/core/protocol/frame_info_id_fmt.hxx +45 -45
  631. data/ext/couchbase/core/protocol/frame_info_utils.cxx +24 -21
  632. data/ext/couchbase/core/protocol/frame_info_utils.hxx +3 -1
  633. data/ext/couchbase/core/protocol/hello_feature.hxx +211 -175
  634. data/ext/couchbase/core/protocol/hello_feature_fmt.hxx +93 -90
  635. data/ext/couchbase/core/protocol/magic.hxx +24 -24
  636. data/ext/couchbase/core/protocol/magic_fmt.hxx +30 -30
  637. data/ext/couchbase/core/protocol/server_opcode.hxx +11 -11
  638. data/ext/couchbase/core/protocol/server_opcode_fmt.hxx +18 -18
  639. data/ext/couchbase/core/protocol/server_request.hxx +90 -86
  640. data/ext/couchbase/core/protocol/status.cxx +138 -138
  641. data/ext/couchbase/core/protocol/status.hxx +86 -86
  642. data/ext/couchbase/core/query_context.hxx +44 -43
  643. data/ext/couchbase/core/range_scan_load_balancer.cxx +51 -50
  644. data/ext/couchbase/core/range_scan_load_balancer.hxx +26 -25
  645. data/ext/couchbase/core/range_scan_options.cxx +2 -2
  646. data/ext/couchbase/core/range_scan_options.hxx +62 -59
  647. data/ext/couchbase/core/range_scan_orchestrator.cxx +515 -470
  648. data/ext/couchbase/core/range_scan_orchestrator.hxx +23 -18
  649. data/ext/couchbase/core/range_scan_orchestrator_options.hxx +10 -10
  650. data/ext/couchbase/core/resource_units.hxx +2 -2
  651. data/ext/couchbase/core/response_handler.hxx +8 -8
  652. data/ext/couchbase/core/retry_orchestrator.cxx +27 -19
  653. data/ext/couchbase/core/retry_orchestrator.hxx +3 -2
  654. data/ext/couchbase/core/sasl/client.cc +22 -18
  655. data/ext/couchbase/core/sasl/client.h +66 -62
  656. data/ext/couchbase/core/sasl/context.cc +4 -4
  657. data/ext/couchbase/core/sasl/context.h +19 -19
  658. data/ext/couchbase/core/sasl/error.h +12 -1
  659. data/ext/couchbase/core/sasl/error_fmt.h +42 -42
  660. data/ext/couchbase/core/sasl/mechanism.cc +13 -10
  661. data/ext/couchbase/core/sasl/mechanism.h +8 -3
  662. data/ext/couchbase/core/sasl/plain/plain.cc +8 -8
  663. data/ext/couchbase/core/sasl/plain/plain.h +25 -24
  664. data/ext/couchbase/core/sasl/scram-sha/scram-sha.cc +225 -218
  665. data/ext/couchbase/core/sasl/scram-sha/scram-sha.h +133 -115
  666. data/ext/couchbase/core/sasl/scram-sha/stringutils.cc +20 -20
  667. data/ext/couchbase/core/scan_result.cxx +38 -38
  668. data/ext/couchbase/core/scan_result.hxx +16 -16
  669. data/ext/couchbase/core/search_highlight_style.hxx +4 -1
  670. data/ext/couchbase/core/search_query_options.cxx +21 -21
  671. data/ext/couchbase/core/search_query_options.hxx +19 -18
  672. data/ext/couchbase/core/search_scan_consistency.hxx +3 -1
  673. data/ext/couchbase/core/seed_config.cxx +10 -7
  674. data/ext/couchbase/core/seed_config.hxx +8 -8
  675. data/ext/couchbase/core/service_type.hxx +7 -7
  676. data/ext/couchbase/core/service_type_fmt.hxx +33 -33
  677. data/ext/couchbase/core/stats_options.hxx +13 -13
  678. data/ext/couchbase/core/subdoc_options.hxx +60 -58
  679. data/ext/couchbase/core/tls_verify_mode.hxx +2 -2
  680. data/ext/couchbase/core/topology/capabilities.hxx +83 -83
  681. data/ext/couchbase/core/topology/capabilities_fmt.hxx +111 -111
  682. data/ext/couchbase/core/topology/collections_manifest.hxx +14 -14
  683. data/ext/couchbase/core/topology/collections_manifest_fmt.hxx +23 -21
  684. data/ext/couchbase/core/topology/collections_manifest_json.hxx +26 -25
  685. data/ext/couchbase/core/topology/configuration.cxx +213 -192
  686. data/ext/couchbase/core/topology/configuration.hxx +104 -91
  687. data/ext/couchbase/core/topology/configuration_fmt.hxx +131 -128
  688. data/ext/couchbase/core/topology/configuration_json.hxx +276 -242
  689. data/ext/couchbase/core/topology/error_map.hxx +5 -5
  690. data/ext/couchbase/core/topology/error_map_json.hxx +65 -60
  691. data/ext/couchbase/core/tracing/constants.hxx +153 -153
  692. data/ext/couchbase/core/tracing/noop_tracer.hxx +29 -28
  693. data/ext/couchbase/core/tracing/threshold_logging_options.hxx +30 -30
  694. data/ext/couchbase/core/tracing/threshold_logging_tracer.cxx +354 -344
  695. data/ext/couchbase/core/tracing/threshold_logging_tracer.hxx +12 -12
  696. data/ext/couchbase/core/transactions/active_transaction_record.cxx +153 -33
  697. data/ext/couchbase/core/transactions/active_transaction_record.hxx +30 -118
  698. data/ext/couchbase/core/transactions/async_attempt_context.cxx +8 -2
  699. data/ext/couchbase/core/transactions/async_attempt_context.hxx +163 -127
  700. data/ext/couchbase/core/transactions/atr_cleanup_entry.cxx +358 -334
  701. data/ext/couchbase/core/transactions/atr_ids.cxx +270 -185
  702. data/ext/couchbase/core/transactions/atr_ids.hxx +4 -4
  703. data/ext/couchbase/core/transactions/attempt_context.cxx +9 -5
  704. data/ext/couchbase/core/transactions/attempt_context.hxx +194 -154
  705. data/ext/couchbase/core/transactions/attempt_context_impl.cxx +3278 -2159
  706. data/ext/couchbase/core/transactions/attempt_context_impl.hxx +446 -573
  707. data/ext/couchbase/core/transactions/attempt_context_testing_hooks.cxx +15 -10
  708. data/ext/couchbase/core/transactions/attempt_context_testing_hooks.hxx +58 -49
  709. data/ext/couchbase/core/transactions/attempt_state.hxx +72 -72
  710. data/ext/couchbase/core/transactions/binary.cxx +3 -3
  711. data/ext/couchbase/core/transactions/cleanup_testing_hooks.cxx +2 -2
  712. data/ext/couchbase/core/transactions/cleanup_testing_hooks.hxx +28 -24
  713. data/ext/couchbase/core/transactions/document_metadata.hxx +68 -68
  714. data/ext/couchbase/core/transactions/durability_level.hxx +53 -53
  715. data/ext/couchbase/core/transactions/error_class.hxx +12 -12
  716. data/ext/couchbase/core/transactions/error_list.hxx +22 -22
  717. data/ext/couchbase/core/transactions/exceptions.cxx +167 -114
  718. data/ext/couchbase/core/transactions/exceptions.hxx +170 -139
  719. data/ext/couchbase/core/transactions/exceptions_fmt.hxx +105 -0
  720. data/ext/couchbase/core/transactions/forward_compat.cxx +220 -0
  721. data/ext/couchbase/core/transactions/forward_compat.hxx +63 -207
  722. data/ext/couchbase/core/transactions/internal/atr_cleanup_entry.hxx +110 -102
  723. data/ext/couchbase/core/transactions/internal/atr_entry.hxx +144 -144
  724. data/ext/couchbase/core/transactions/internal/client_record.hxx +53 -50
  725. data/ext/couchbase/core/transactions/internal/doc_record.cxx +5 -5
  726. data/ext/couchbase/core/transactions/internal/doc_record.hxx +38 -35
  727. data/ext/couchbase/core/transactions/internal/doc_record_fmt.hxx +17 -16
  728. data/ext/couchbase/core/transactions/internal/exceptions_internal.hxx +238 -281
  729. data/ext/couchbase/core/transactions/internal/exceptions_internal_fmt.hxx +103 -0
  730. data/ext/couchbase/core/transactions/internal/logging.hxx +52 -29
  731. data/ext/couchbase/core/transactions/internal/transaction_attempt.hxx +3 -3
  732. data/ext/couchbase/core/transactions/internal/transaction_context.hxx +136 -120
  733. data/ext/couchbase/core/transactions/internal/transaction_fields.hxx +2 -1
  734. data/ext/couchbase/core/transactions/internal/transactions_cleanup.hxx +127 -122
  735. data/ext/couchbase/core/transactions/internal/utils.hxx +244 -219
  736. data/ext/couchbase/core/transactions/result.cxx +41 -40
  737. data/ext/couchbase/core/transactions/result.hxx +143 -141
  738. data/ext/couchbase/core/transactions/result_fmt.hxx +21 -20
  739. data/ext/couchbase/core/transactions/staged_mutation.cxx +759 -627
  740. data/ext/couchbase/core/transactions/staged_mutation.hxx +175 -156
  741. data/ext/couchbase/core/transactions/transaction_context.cxx +231 -179
  742. data/ext/couchbase/core/transactions/transaction_get_result.cxx +185 -198
  743. data/ext/couchbase/core/transactions/transaction_get_result.hxx +207 -222
  744. data/ext/couchbase/core/transactions/transaction_keyspace.cxx +15 -11
  745. data/ext/couchbase/core/transactions/transaction_links.cxx +11 -7
  746. data/ext/couchbase/core/transactions/transaction_links.hxx +222 -201
  747. data/ext/couchbase/core/transactions/transaction_options.cxx +44 -41
  748. data/ext/couchbase/core/transactions/transactions.cxx +167 -125
  749. data/ext/couchbase/core/transactions/transactions_cleanup.cxx +491 -424
  750. data/ext/couchbase/core/transactions/transactions_config.cxx +25 -19
  751. data/ext/couchbase/core/transactions/uid_generator.cxx +3 -3
  752. data/ext/couchbase/core/transactions/uid_generator.hxx +2 -2
  753. data/ext/couchbase/core/transactions/utils.cxx +82 -69
  754. data/ext/couchbase/core/transactions/waitable_op_list.hxx +154 -140
  755. data/ext/couchbase/core/transactions.hxx +184 -180
  756. data/ext/couchbase/core/utils/binary.cxx +3 -3
  757. data/ext/couchbase/core/utils/binary.hxx +19 -15
  758. data/ext/couchbase/core/utils/byteswap.hxx +17 -17
  759. data/ext/couchbase/core/utils/connection_string.cxx +395 -328
  760. data/ext/couchbase/core/utils/connection_string.hxx +37 -36
  761. data/ext/couchbase/core/utils/crc32.hxx +42 -34
  762. data/ext/couchbase/core/utils/duration_parser.cxx +142 -133
  763. data/ext/couchbase/core/utils/duration_parser.hxx +9 -9
  764. data/ext/couchbase/core/utils/join_strings.hxx +24 -24
  765. data/ext/couchbase/core/utils/json.cxx +234 -228
  766. data/ext/couchbase/core/utils/json.hxx +12 -12
  767. data/ext/couchbase/core/utils/json_stream_control.hxx +8 -8
  768. data/ext/couchbase/core/utils/json_streaming_lexer.cxx +288 -263
  769. data/ext/couchbase/core/utils/json_streaming_lexer.hxx +20 -17
  770. data/ext/couchbase/core/utils/keyspace.hxx +22 -21
  771. data/ext/couchbase/core/utils/movable_function.hxx +78 -76
  772. data/ext/couchbase/core/utils/mutation_token.cxx +7 -3
  773. data/ext/couchbase/core/utils/mutation_token.hxx +3 -1
  774. data/ext/couchbase/core/utils/name_codec.hxx +13 -13
  775. data/ext/couchbase/core/utils/split_string.cxx +9 -9
  776. data/ext/couchbase/core/utils/split_string.hxx +2 -2
  777. data/ext/couchbase/core/utils/unsigned_leb128.hxx +92 -88
  778. data/ext/couchbase/core/utils/url_codec.cxx +301 -297
  779. data/ext/couchbase/core/utils/url_codec.hxx +35 -35
  780. data/ext/couchbase/core/vector_query_combination.hxx +4 -1
  781. data/ext/couchbase/core/view_on_error.hxx +4 -3
  782. data/ext/couchbase/core/view_query_options.cxx +21 -21
  783. data/ext/couchbase/core/view_query_options.hxx +23 -22
  784. data/ext/couchbase/core/view_scan_consistency.hxx +3 -3
  785. data/ext/couchbase/core/view_sort_order.hxx +4 -1
  786. data/ext/couchbase/core/wait_until_ready_options.hxx +11 -10
  787. data/ext/couchbase/couchbase/allow_querying_search_index_options.hxx +11 -11
  788. data/ext/couchbase/couchbase/analytics_index_manager.hxx +423 -405
  789. data/ext/couchbase/couchbase/analytics_meta_data.hxx +105 -105
  790. data/ext/couchbase/couchbase/analytics_metrics.hxx +120 -118
  791. data/ext/couchbase/couchbase/analytics_options.hxx +318 -292
  792. data/ext/couchbase/couchbase/analytics_result.hxx +56 -55
  793. data/ext/couchbase/couchbase/analytics_scan_consistency.hxx +24 -21
  794. data/ext/couchbase/couchbase/analytics_status.hxx +10 -10
  795. data/ext/couchbase/couchbase/analytics_warning.hxx +44 -43
  796. data/ext/couchbase/couchbase/analyze_document_options.hxx +9 -9
  797. data/ext/couchbase/couchbase/append_options.hxx +51 -47
  798. data/ext/couchbase/couchbase/behavior_options.hxx +75 -69
  799. data/ext/couchbase/couchbase/best_effort_retry_strategy.hxx +12 -10
  800. data/ext/couchbase/couchbase/binary_collection.hxx +213 -183
  801. data/ext/couchbase/couchbase/boolean_field_query.hxx +38 -38
  802. data/ext/couchbase/couchbase/boolean_query.hxx +166 -157
  803. data/ext/couchbase/couchbase/bucket.hxx +69 -68
  804. data/ext/couchbase/couchbase/bucket_manager.hxx +97 -88
  805. data/ext/couchbase/couchbase/build_query_index_options.hxx +22 -21
  806. data/ext/couchbase/couchbase/cas.hxx +74 -73
  807. data/ext/couchbase/couchbase/certificate_authenticator.hxx +10 -10
  808. data/ext/couchbase/couchbase/cluster.hxx +266 -310
  809. data/ext/couchbase/couchbase/cluster_options.hxx +235 -241
  810. data/ext/couchbase/couchbase/codec/binary_noop_serializer.hxx +11 -11
  811. data/ext/couchbase/couchbase/codec/codec_flags.hxx +39 -35
  812. data/ext/couchbase/couchbase/codec/encoded_value.hxx +15 -2
  813. data/ext/couchbase/couchbase/codec/json_transcoder.hxx +17 -15
  814. data/ext/couchbase/couchbase/codec/raw_binary_transcoder.hxx +19 -17
  815. data/ext/couchbase/couchbase/codec/raw_json_transcoder.hxx +31 -24
  816. data/ext/couchbase/couchbase/codec/raw_string_transcoder.hxx +20 -18
  817. data/ext/couchbase/couchbase/codec/tao_json_serializer.hxx +38 -30
  818. data/ext/couchbase/couchbase/collection.hxx +1007 -902
  819. data/ext/couchbase/couchbase/collection_manager.hxx +115 -107
  820. data/ext/couchbase/couchbase/collection_query_index_manager.hxx +200 -188
  821. data/ext/couchbase/couchbase/common_durability_options.hxx +68 -62
  822. data/ext/couchbase/couchbase/common_options.hxx +67 -67
  823. data/ext/couchbase/couchbase/compression_options.hxx +33 -33
  824. data/ext/couchbase/couchbase/configuration_profile.hxx +12 -11
  825. data/ext/couchbase/couchbase/configuration_profiles_registry.hxx +24 -22
  826. data/ext/couchbase/couchbase/conjunction_query.hxx +47 -45
  827. data/ext/couchbase/couchbase/connect_link_analytics_options.hxx +74 -72
  828. data/ext/couchbase/couchbase/counter_result.hxx +32 -32
  829. data/ext/couchbase/couchbase/create_bucket_options.hxx +9 -10
  830. data/ext/couchbase/couchbase/create_collection_options.hxx +35 -34
  831. data/ext/couchbase/couchbase/create_dataset_analytics_options.hxx +76 -76
  832. data/ext/couchbase/couchbase/create_dataverse_analytics_options.hxx +44 -44
  833. data/ext/couchbase/couchbase/create_index_analytics_options.hxx +60 -60
  834. data/ext/couchbase/couchbase/create_link_analytics_options.hxx +25 -25
  835. data/ext/couchbase/couchbase/create_primary_query_index_options.hxx +95 -94
  836. data/ext/couchbase/couchbase/create_query_index_options.hxx +97 -96
  837. data/ext/couchbase/couchbase/create_scope_options.hxx +9 -9
  838. data/ext/couchbase/couchbase/date_range.hxx +29 -27
  839. data/ext/couchbase/couchbase/date_range_facet.hxx +20 -20
  840. data/ext/couchbase/couchbase/date_range_facet_result.hxx +14 -14
  841. data/ext/couchbase/couchbase/date_range_query.hxx +219 -205
  842. data/ext/couchbase/couchbase/decrement_options.hxx +93 -91
  843. data/ext/couchbase/couchbase/diagnostics_options.hxx +42 -41
  844. data/ext/couchbase/couchbase/diagnostics_result.hxx +82 -83
  845. data/ext/couchbase/couchbase/disallow_querying_search_index_options.hxx +11 -10
  846. data/ext/couchbase/couchbase/disconnect_link_analytics_options.hxx +62 -62
  847. data/ext/couchbase/couchbase/disjunction_query.hxx +61 -60
  848. data/ext/couchbase/couchbase/dns_options.hxx +30 -30
  849. data/ext/couchbase/couchbase/doc_id_query.hxx +69 -69
  850. data/ext/couchbase/couchbase/drop_bucket_options.hxx +9 -9
  851. data/ext/couchbase/couchbase/drop_collection_options.hxx +9 -9
  852. data/ext/couchbase/couchbase/drop_dataset_analytics_options.hxx +60 -60
  853. data/ext/couchbase/couchbase/drop_dataverse_analytics_options.hxx +44 -44
  854. data/ext/couchbase/couchbase/drop_index_analytics_options.hxx +60 -60
  855. data/ext/couchbase/couchbase/drop_link_analytics_options.hxx +25 -25
  856. data/ext/couchbase/couchbase/drop_primary_query_index_options.hxx +58 -58
  857. data/ext/couchbase/couchbase/drop_query_index_options.hxx +44 -44
  858. data/ext/couchbase/couchbase/drop_scope_options.hxx +9 -9
  859. data/ext/couchbase/couchbase/drop_search_index_options.hxx +9 -9
  860. data/ext/couchbase/couchbase/durability_level.hxx +32 -29
  861. data/ext/couchbase/couchbase/endpoint_diagnostics.hxx +171 -171
  862. data/ext/couchbase/couchbase/endpoint_ping_report.hxx +166 -169
  863. data/ext/couchbase/couchbase/error.hxx +51 -0
  864. data/ext/couchbase/couchbase/error_codes.hxx +975 -940
  865. data/ext/couchbase/couchbase/error_context.hxx +19 -152
  866. data/ext/couchbase/couchbase/exists_options.hxx +25 -24
  867. data/ext/couchbase/couchbase/exists_result.hxx +32 -32
  868. data/ext/couchbase/couchbase/fail_fast_retry_strategy.hxx +4 -4
  869. data/ext/couchbase/couchbase/flush_bucket_options.hxx +9 -9
  870. data/ext/couchbase/couchbase/fmt/analytics_scan_consistency.hxx +18 -18
  871. data/ext/couchbase/couchbase/fmt/analytics_status.hxx +42 -42
  872. data/ext/couchbase/couchbase/fmt/cas.hxx +10 -10
  873. data/ext/couchbase/couchbase/fmt/durability_level.hxx +24 -24
  874. data/ext/couchbase/couchbase/fmt/error.hxx +53 -0
  875. data/ext/couchbase/couchbase/fmt/error_context.hxx +43 -0
  876. data/ext/couchbase/couchbase/fmt/mutation_token.hxx +15 -11
  877. data/ext/couchbase/couchbase/fmt/query_profile.hxx +21 -21
  878. data/ext/couchbase/couchbase/fmt/query_scan_consistency.hxx +18 -18
  879. data/ext/couchbase/couchbase/fmt/query_status.hxx +42 -42
  880. data/ext/couchbase/couchbase/fmt/retry_reason.hxx +75 -75
  881. data/ext/couchbase/couchbase/fmt/search_scan_consistency.hxx +15 -15
  882. data/ext/couchbase/couchbase/fmt/tls_verify_mode.hxx +18 -18
  883. data/ext/couchbase/couchbase/fmt/transaction_keyspace.hxx +15 -11
  884. data/ext/couchbase/couchbase/fork_event.hxx +12 -12
  885. data/ext/couchbase/couchbase/freeze_plan_search_index_options.hxx +9 -9
  886. data/ext/couchbase/couchbase/geo_bounding_box_query.hxx +71 -64
  887. data/ext/couchbase/couchbase/geo_distance_query.hxx +73 -66
  888. data/ext/couchbase/couchbase/geo_point.hxx +2 -2
  889. data/ext/couchbase/couchbase/geo_polygon_query.hxx +40 -39
  890. data/ext/couchbase/couchbase/get_all_buckets_options.hxx +9 -9
  891. data/ext/couchbase/couchbase/get_all_datasets_analytics_options.hxx +25 -25
  892. data/ext/couchbase/couchbase/get_all_indexes_analytics_options.hxx +26 -25
  893. data/ext/couchbase/couchbase/get_all_query_indexes_options.hxx +27 -25
  894. data/ext/couchbase/couchbase/get_all_replicas_options.hxx +49 -26
  895. data/ext/couchbase/couchbase/get_all_scopes_options.hxx +9 -9
  896. data/ext/couchbase/couchbase/get_all_search_indexes_options.hxx +9 -9
  897. data/ext/couchbase/couchbase/get_and_lock_options.hxx +25 -24
  898. data/ext/couchbase/couchbase/get_and_touch_options.hxx +25 -24
  899. data/ext/couchbase/couchbase/get_any_replica_options.hxx +49 -26
  900. data/ext/couchbase/couchbase/get_bucket_options.hxx +9 -9
  901. data/ext/couchbase/couchbase/get_indexed_search_index_options.hxx +9 -9
  902. data/ext/couchbase/couchbase/get_links_analytics_options.hxx +74 -74
  903. data/ext/couchbase/couchbase/get_options.hxx +63 -60
  904. data/ext/couchbase/couchbase/get_pending_mutations_analytics_options.hxx +30 -28
  905. data/ext/couchbase/couchbase/get_replica_result.hxx +79 -75
  906. data/ext/couchbase/couchbase/get_result.hxx +86 -80
  907. data/ext/couchbase/couchbase/get_search_index_options.hxx +9 -9
  908. data/ext/couchbase/couchbase/highlight_style.hxx +14 -14
  909. data/ext/couchbase/couchbase/increment_options.hxx +94 -91
  910. data/ext/couchbase/couchbase/insert_options.hxx +62 -59
  911. data/ext/couchbase/couchbase/ip_protocol.hxx +3 -3
  912. data/ext/couchbase/couchbase/logger.hxx +51 -0
  913. data/ext/couchbase/couchbase/lookup_in_all_replicas_options.hxx +54 -43
  914. data/ext/couchbase/couchbase/lookup_in_any_replica_options.hxx +54 -44
  915. data/ext/couchbase/couchbase/lookup_in_options.hxx +40 -40
  916. data/ext/couchbase/couchbase/lookup_in_replica_result.hxx +38 -35
  917. data/ext/couchbase/couchbase/lookup_in_result.hxx +222 -216
  918. data/ext/couchbase/couchbase/lookup_in_specs.hxx +101 -101
  919. data/ext/couchbase/couchbase/management/analytics_dataset.hxx +16 -16
  920. data/ext/couchbase/couchbase/management/analytics_index.hxx +16 -16
  921. data/ext/couchbase/couchbase/management/analytics_link.hxx +193 -189
  922. data/ext/couchbase/couchbase/management/bucket_settings.hxx +91 -75
  923. data/ext/couchbase/couchbase/management/collection_spec.hxx +4 -4
  924. data/ext/couchbase/couchbase/management/query_index.hxx +10 -10
  925. data/ext/couchbase/couchbase/management/scope_spec.hxx +2 -2
  926. data/ext/couchbase/couchbase/management/search_index.hxx +9 -9
  927. data/ext/couchbase/couchbase/match_all_query.hxx +10 -9
  928. data/ext/couchbase/couchbase/match_none_query.hxx +10 -9
  929. data/ext/couchbase/couchbase/match_operator.hxx +15 -14
  930. data/ext/couchbase/couchbase/match_phrase_query.hxx +70 -65
  931. data/ext/couchbase/couchbase/match_query.hxx +115 -114
  932. data/ext/couchbase/couchbase/metrics/meter.hxx +33 -30
  933. data/ext/couchbase/couchbase/metrics/otel_meter.hxx +86 -74
  934. data/ext/couchbase/couchbase/metrics_options.hxx +34 -34
  935. data/ext/couchbase/couchbase/mutate_in_options.hxx +160 -149
  936. data/ext/couchbase/couchbase/mutate_in_result.hxx +130 -123
  937. data/ext/couchbase/couchbase/mutate_in_specs.hxx +473 -454
  938. data/ext/couchbase/couchbase/mutation_result.hxx +32 -32
  939. data/ext/couchbase/couchbase/mutation_state.hxx +35 -34
  940. data/ext/couchbase/couchbase/mutation_token.hxx +78 -78
  941. data/ext/couchbase/couchbase/network_options.hxx +101 -72
  942. data/ext/couchbase/couchbase/numeric_range.hxx +26 -26
  943. data/ext/couchbase/couchbase/numeric_range_facet.hxx +20 -20
  944. data/ext/couchbase/couchbase/numeric_range_facet_result.hxx +14 -14
  945. data/ext/couchbase/couchbase/numeric_range_query.hxx +97 -95
  946. data/ext/couchbase/couchbase/password_authenticator.hxx +17 -17
  947. data/ext/couchbase/couchbase/pause_ingest_search_index_options.hxx +11 -10
  948. data/ext/couchbase/couchbase/persist_to.hxx +45 -44
  949. data/ext/couchbase/couchbase/phrase_query.hxx +69 -65
  950. data/ext/couchbase/couchbase/ping_options.hxx +55 -54
  951. data/ext/couchbase/couchbase/ping_result.hxx +79 -77
  952. data/ext/couchbase/couchbase/prefix_query.hxx +43 -40
  953. data/ext/couchbase/couchbase/prepend_options.hxx +51 -47
  954. data/ext/couchbase/couchbase/query_index_manager.hxx +207 -199
  955. data/ext/couchbase/couchbase/query_meta_data.hxx +120 -120
  956. data/ext/couchbase/couchbase/query_metrics.hxx +135 -133
  957. data/ext/couchbase/couchbase/query_options.hxx +518 -493
  958. data/ext/couchbase/couchbase/query_profile.hxx +29 -26
  959. data/ext/couchbase/couchbase/query_result.hxx +56 -55
  960. data/ext/couchbase/couchbase/query_scan_consistency.hxx +24 -21
  961. data/ext/couchbase/couchbase/query_status.hxx +10 -10
  962. data/ext/couchbase/couchbase/query_string_query.hxx +34 -29
  963. data/ext/couchbase/couchbase/query_warning.hxx +75 -71
  964. data/ext/couchbase/couchbase/read_preference.hxx +58 -0
  965. data/ext/couchbase/couchbase/regexp_query.hxx +40 -39
  966. data/ext/couchbase/couchbase/remove_options.hxx +51 -47
  967. data/ext/couchbase/couchbase/replace_link_analytics_options.hxx +25 -25
  968. data/ext/couchbase/couchbase/replace_options.hxx +112 -104
  969. data/ext/couchbase/couchbase/replicate_to.hxx +28 -28
  970. data/ext/couchbase/couchbase/result.hxx +28 -28
  971. data/ext/couchbase/couchbase/resume_ingest_search_index_options.hxx +11 -10
  972. data/ext/couchbase/couchbase/retry_action.hxx +10 -10
  973. data/ext/couchbase/couchbase/retry_reason.hxx +53 -51
  974. data/ext/couchbase/couchbase/retry_request.hxx +7 -7
  975. data/ext/couchbase/couchbase/retry_strategy.hxx +4 -4
  976. data/ext/couchbase/couchbase/scan_options.hxx +114 -108
  977. data/ext/couchbase/couchbase/scan_result.hxx +97 -96
  978. data/ext/couchbase/couchbase/scan_result_item.hxx +120 -118
  979. data/ext/couchbase/couchbase/scan_type.hxx +237 -232
  980. data/ext/couchbase/couchbase/scope.hxx +164 -157
  981. data/ext/couchbase/couchbase/scope_search_index_manager.hxx +263 -238
  982. data/ext/couchbase/couchbase/search_date_range.hxx +32 -29
  983. data/ext/couchbase/couchbase/search_facet.hxx +25 -25
  984. data/ext/couchbase/couchbase/search_facet_result.hxx +11 -11
  985. data/ext/couchbase/couchbase/search_geo_distance_units.hxx +11 -1
  986. data/ext/couchbase/couchbase/search_index_manager.hxx +261 -238
  987. data/ext/couchbase/couchbase/search_meta_data.hxx +37 -37
  988. data/ext/couchbase/couchbase/search_metrics.hxx +84 -83
  989. data/ext/couchbase/couchbase/search_numeric_range.hxx +32 -32
  990. data/ext/couchbase/couchbase/search_options.hxx +449 -435
  991. data/ext/couchbase/couchbase/search_query.hxx +32 -30
  992. data/ext/couchbase/couchbase/search_request.hxx +69 -68
  993. data/ext/couchbase/couchbase/search_result.hxx +29 -26
  994. data/ext/couchbase/couchbase/search_row.hxx +52 -52
  995. data/ext/couchbase/couchbase/search_row_location.hxx +20 -20
  996. data/ext/couchbase/couchbase/search_row_locations.hxx +39 -38
  997. data/ext/couchbase/couchbase/search_scan_consistency.hxx +11 -10
  998. data/ext/couchbase/couchbase/search_sort.hxx +20 -20
  999. data/ext/couchbase/couchbase/search_sort_field.hxx +77 -71
  1000. data/ext/couchbase/couchbase/search_sort_field_missing.hxx +2 -2
  1001. data/ext/couchbase/couchbase/search_sort_field_mode.hxx +3 -3
  1002. data/ext/couchbase/couchbase/search_sort_field_type.hxx +4 -4
  1003. data/ext/couchbase/couchbase/search_sort_geo_distance.hxx +41 -41
  1004. data/ext/couchbase/couchbase/search_sort_id.hxx +23 -23
  1005. data/ext/couchbase/couchbase/search_sort_score.hxx +23 -23
  1006. data/ext/couchbase/couchbase/search_term_range.hxx +17 -17
  1007. data/ext/couchbase/couchbase/security_options.hxx +50 -50
  1008. data/ext/couchbase/couchbase/service_type.hxx +34 -34
  1009. data/ext/couchbase/couchbase/store_semantics.hxx +28 -28
  1010. data/ext/couchbase/couchbase/subdoc/array_add_unique.hxx +54 -54
  1011. data/ext/couchbase/couchbase/subdoc/array_append.hxx +40 -40
  1012. data/ext/couchbase/couchbase/subdoc/array_insert.hxx +41 -41
  1013. data/ext/couchbase/couchbase/subdoc/array_prepend.hxx +41 -41
  1014. data/ext/couchbase/couchbase/subdoc/count.hxx +24 -24
  1015. data/ext/couchbase/couchbase/subdoc/counter.hxx +41 -41
  1016. data/ext/couchbase/couchbase/subdoc/exists.hxx +24 -24
  1017. data/ext/couchbase/couchbase/subdoc/get.hxx +45 -29
  1018. data/ext/couchbase/couchbase/subdoc/insert.hxx +70 -54
  1019. data/ext/couchbase/couchbase/subdoc/lookup_in_macro.hxx +13 -12
  1020. data/ext/couchbase/couchbase/subdoc/mutate_in_macro.hxx +7 -2
  1021. data/ext/couchbase/couchbase/subdoc/remove.hxx +24 -24
  1022. data/ext/couchbase/couchbase/subdoc/replace.hxx +55 -39
  1023. data/ext/couchbase/couchbase/subdoc/upsert.hxx +70 -54
  1024. data/ext/couchbase/couchbase/term_facet.hxx +16 -16
  1025. data/ext/couchbase/couchbase/term_facet_result.hxx +14 -14
  1026. data/ext/couchbase/couchbase/term_query.hxx +107 -104
  1027. data/ext/couchbase/couchbase/term_range_query.hxx +99 -96
  1028. data/ext/couchbase/couchbase/timeout_options.hxx +118 -112
  1029. data/ext/couchbase/couchbase/tls_verify_mode.hxx +2 -2
  1030. data/ext/couchbase/couchbase/touch_options.hxx +25 -24
  1031. data/ext/couchbase/couchbase/tracing/otel_tracer.hxx +45 -44
  1032. data/ext/couchbase/couchbase/tracing/request_span.hxx +34 -34
  1033. data/ext/couchbase/couchbase/tracing/request_tracer.hxx +27 -25
  1034. data/ext/couchbase/couchbase/tracing_options.hxx +147 -142
  1035. data/ext/couchbase/couchbase/transactions/async_attempt_context.hxx +149 -115
  1036. data/ext/couchbase/couchbase/transactions/attempt_context.hxx +146 -95
  1037. data/ext/couchbase/couchbase/transactions/transaction_get_result.hxx +52 -80
  1038. data/ext/couchbase/couchbase/transactions/transaction_keyspace.hxx +33 -29
  1039. data/ext/couchbase/couchbase/transactions/transaction_options.hxx +101 -96
  1040. data/ext/couchbase/couchbase/transactions/transaction_query_options.hxx +228 -223
  1041. data/ext/couchbase/couchbase/transactions/transaction_query_result.hxx +11 -12
  1042. data/ext/couchbase/couchbase/transactions/transaction_result.hxx +2 -3
  1043. data/ext/couchbase/couchbase/transactions/transactions_cleanup_config.hxx +105 -104
  1044. data/ext/couchbase/couchbase/transactions/transactions_config.hxx +191 -187
  1045. data/ext/couchbase/couchbase/transactions/transactions_query_config.hxx +32 -32
  1046. data/ext/couchbase/couchbase/transactions.hxx +56 -37
  1047. data/ext/couchbase/couchbase/unfreeze_plan_search_index_options.hxx +11 -10
  1048. data/ext/couchbase/couchbase/unlock_options.hxx +25 -24
  1049. data/ext/couchbase/couchbase/update_bucket_options.hxx +9 -9
  1050. data/ext/couchbase/couchbase/update_collection_options.hxx +35 -34
  1051. data/ext/couchbase/couchbase/upsert_options.hxx +85 -80
  1052. data/ext/couchbase/couchbase/upsert_search_index_options.hxx +9 -9
  1053. data/ext/couchbase/couchbase/vector_query.hxx +82 -62
  1054. data/ext/couchbase/couchbase/vector_search.hxx +51 -47
  1055. data/ext/couchbase/couchbase/vector_search_options.hxx +45 -41
  1056. data/ext/couchbase/couchbase/wan_development_configuration_profile.hxx +13 -13
  1057. data/ext/couchbase/couchbase/watch_query_indexes_options.hxx +41 -41
  1058. data/ext/couchbase/couchbase/wildcard_query.hxx +42 -41
  1059. data/ext/couchbase/third_party/expected/include/tl/expected.hpp +1746 -1584
  1060. data/ext/couchbase/third_party/jsonsl/jsonsl.c +2664 -2638
  1061. data/ext/couchbase/third_party/jsonsl/jsonsl.h +359 -342
  1062. data/ext/couchbase.cxx +43 -9568
  1063. data/ext/extconf.rb +5 -0
  1064. data/ext/rcb_analytics.cxx +1195 -0
  1065. data/ext/rcb_analytics.hxx +29 -0
  1066. data/ext/rcb_backend.cxx +530 -0
  1067. data/ext/rcb_backend.hxx +46 -0
  1068. data/ext/rcb_buckets.cxx +624 -0
  1069. data/ext/rcb_buckets.hxx +29 -0
  1070. data/ext/rcb_collections.cxx +377 -0
  1071. data/ext/rcb_collections.hxx +29 -0
  1072. data/ext/rcb_crud.cxx +1544 -0
  1073. data/ext/rcb_crud.hxx +29 -0
  1074. data/ext/rcb_diagnostics.cxx +264 -0
  1075. data/ext/rcb_diagnostics.hxx +29 -0
  1076. data/ext/rcb_exceptions.cxx +963 -0
  1077. data/ext/rcb_exceptions.hxx +111 -0
  1078. data/ext/rcb_extras.cxx +394 -0
  1079. data/ext/rcb_extras.hxx +29 -0
  1080. data/ext/rcb_logger.cxx +319 -0
  1081. data/ext/rcb_logger.hxx +36 -0
  1082. data/ext/rcb_multi.cxx +343 -0
  1083. data/ext/rcb_multi.hxx +29 -0
  1084. data/ext/rcb_query.cxx +1316 -0
  1085. data/ext/rcb_query.hxx +29 -0
  1086. data/ext/rcb_range_scan.cxx +358 -0
  1087. data/ext/rcb_range_scan.hxx +29 -0
  1088. data/ext/rcb_search.cxx +1216 -0
  1089. data/ext/rcb_search.hxx +29 -0
  1090. data/ext/rcb_users.cxx +636 -0
  1091. data/ext/rcb_users.hxx +29 -0
  1092. data/ext/rcb_utils.cxx +590 -0
  1093. data/ext/rcb_utils.hxx +564 -0
  1094. data/ext/rcb_version.cxx +137 -0
  1095. data/ext/rcb_version.hxx +34 -0
  1096. data/ext/rcb_views.cxx +485 -0
  1097. data/ext/rcb_views.hxx +29 -0
  1098. data/lib/active_support/cache/couchbase_store.rb +4 -1
  1099. data/lib/couchbase/analytics_options.rb +2 -0
  1100. data/lib/couchbase/authenticator.rb +2 -0
  1101. data/lib/couchbase/binary_collection.rb +2 -0
  1102. data/lib/couchbase/binary_collection_options.rb +2 -0
  1103. data/lib/couchbase/bucket.rb +2 -0
  1104. data/lib/couchbase/cluster.rb +2 -0
  1105. data/lib/couchbase/collection.rb +3 -1
  1106. data/lib/couchbase/collection_options.rb +2 -0
  1107. data/lib/couchbase/config_profiles.rb +2 -0
  1108. data/lib/couchbase/configuration.rb +2 -0
  1109. data/lib/couchbase/datastructures/couchbase_list.rb +4 -4
  1110. data/lib/couchbase/datastructures/couchbase_map.rb +4 -4
  1111. data/lib/couchbase/datastructures/couchbase_queue.rb +4 -4
  1112. data/lib/couchbase/datastructures/couchbase_set.rb +4 -4
  1113. data/lib/couchbase/datastructures.rb +2 -0
  1114. data/lib/couchbase/diagnostics.rb +2 -0
  1115. data/lib/couchbase/errors.rb +46 -8
  1116. data/lib/couchbase/json_transcoder.rb +2 -0
  1117. data/lib/couchbase/key_value_scan.rb +2 -0
  1118. data/lib/couchbase/logger.rb +2 -0
  1119. data/lib/couchbase/management/analytics_index_manager.rb +2 -0
  1120. data/lib/couchbase/management/bucket_manager.rb +2 -0
  1121. data/lib/couchbase/management/collection_manager.rb +2 -0
  1122. data/lib/couchbase/management/collection_query_index_manager.rb +2 -0
  1123. data/lib/couchbase/management/query_index_manager.rb +2 -0
  1124. data/lib/couchbase/management/scope_search_index_manager.rb +2 -0
  1125. data/lib/couchbase/management/search_index_manager.rb +2 -0
  1126. data/lib/couchbase/management/user_manager.rb +2 -0
  1127. data/lib/couchbase/management/view_index_manager.rb +2 -0
  1128. data/lib/couchbase/management.rb +2 -0
  1129. data/lib/couchbase/mutation_state.rb +2 -0
  1130. data/lib/couchbase/options.rb +2 -0
  1131. data/lib/couchbase/protostellar/request_generator/kv.rb +1 -1
  1132. data/lib/couchbase/query_options.rb +2 -0
  1133. data/lib/couchbase/railtie.rb +2 -0
  1134. data/lib/couchbase/raw_binary_transcoder.rb +2 -0
  1135. data/lib/couchbase/raw_json_transcoder.rb +2 -0
  1136. data/lib/couchbase/raw_string_transcoder.rb +2 -0
  1137. data/lib/couchbase/scope.rb +2 -0
  1138. data/lib/couchbase/search_options.rb +91 -63
  1139. data/lib/couchbase/subdoc.rb +5 -3
  1140. data/lib/couchbase/transcoder_flags.rb +2 -0
  1141. data/lib/couchbase/utils/generic_logger_adapter.rb +3 -1
  1142. data/lib/couchbase/utils/stdlib_logger_adapter.rb +2 -0
  1143. data/lib/couchbase/utils/time.rb +3 -1
  1144. data/lib/couchbase/utils.rb +2 -0
  1145. data/lib/couchbase/version.rb +3 -1
  1146. data/lib/couchbase/view_options.rb +2 -0
  1147. data/lib/couchbase.rb +2 -0
  1148. data/lib/rails/generators/couchbase/config/config_generator.rb +2 -0
  1149. metadata +83 -26
  1150. data/ext/couchbase/core/impl/internal_manager_error_context.cxx +0 -113
  1151. data/ext/couchbase/core/impl/internal_manager_error_context.hxx +0 -60
  1152. data/ext/couchbase/core/impl/manager_error_context.cxx +0 -100
  1153. data/ext/couchbase/core/impl/search_error_context.cxx +0 -147
  1154. data/ext/couchbase/couchbase/analytics_error_context.hxx +0 -143
  1155. data/ext/couchbase/couchbase/fmt/key_value_error_map_attribute.hxx +0 -100
  1156. data/ext/couchbase/couchbase/fmt/key_value_status_code.hxx +0 -269
  1157. data/ext/couchbase/couchbase/key_value_error_context.hxx +0 -229
  1158. data/ext/couchbase/couchbase/key_value_error_map_attribute.hxx +0 -136
  1159. data/ext/couchbase/couchbase/key_value_error_map_info.hxx +0 -138
  1160. data/ext/couchbase/couchbase/key_value_extended_error_info.hxx +0 -86
  1161. data/ext/couchbase/couchbase/key_value_status_code.hxx +0 -109
  1162. data/ext/couchbase/couchbase/manager_error_context.hxx +0 -111
  1163. data/ext/couchbase/couchbase/query_error_context.hxx +0 -145
  1164. data/ext/couchbase/couchbase/search_error_context.hxx +0 -138
  1165. data/ext/couchbase/couchbase/subdocument_error_context.hxx +0 -147
  1166. data/ext/couchbase/couchbase/transaction_op_error_context.hxx +0 -76
@@ -22,12 +22,16 @@
22
22
  #include "core/operations/document_decrement.hxx"
23
23
  #include "core/operations/document_exists.hxx"
24
24
  #include "core/operations/document_get.hxx"
25
+ #include "core/operations/document_get_all_replicas.hxx"
25
26
  #include "core/operations/document_get_and_lock.hxx"
26
27
  #include "core/operations/document_get_and_touch.hxx"
28
+ #include "core/operations/document_get_any_replica.hxx"
27
29
  #include "core/operations/document_get_projected.hxx"
28
30
  #include "core/operations/document_increment.hxx"
29
31
  #include "core/operations/document_insert.hxx"
30
32
  #include "core/operations/document_lookup_in.hxx"
33
+ #include "core/operations/document_lookup_in_all_replicas.hxx"
34
+ #include "core/operations/document_lookup_in_any_replica.hxx"
31
35
  #include "core/operations/document_mutate_in.hxx"
32
36
  #include "core/operations/document_prepend.hxx"
33
37
  #include "core/operations/document_remove.hxx"
@@ -37,6 +41,7 @@
37
41
  #include "core/operations/document_upsert.hxx"
38
42
  #include "core/range_scan_options.hxx"
39
43
  #include "core/range_scan_orchestrator.hxx"
44
+ #include "error.hxx"
40
45
  #include "get_all_replicas.hxx"
41
46
  #include "get_any_replica.hxx"
42
47
  #include "get_replica.hxx"
@@ -54,1059 +59,827 @@ namespace couchbase
54
59
  {
55
60
  class collection_impl : public std::enable_shared_from_this<collection_impl>
56
61
  {
57
- public:
58
- collection_impl(core::cluster core, std::string_view bucket_name, std::string_view scope_name, std::string_view name)
59
- : core_{ std::move(core) }
60
- , bucket_name_{ bucket_name }
61
- , scope_name_{ scope_name }
62
- , name_{ name }
63
- {
62
+ public:
63
+ collection_impl(core::cluster core,
64
+ std::string_view bucket_name,
65
+ std::string_view scope_name,
66
+ std::string_view name)
67
+ : core_{ std::move(core) }
68
+ , bucket_name_{ bucket_name }
69
+ , scope_name_{ scope_name }
70
+ , name_{ name }
71
+ {
72
+ }
73
+
74
+ [[nodiscard]] auto bucket_name() const -> const std::string&
75
+ {
76
+ return bucket_name_;
77
+ }
78
+
79
+ [[nodiscard]] auto scope_name() const -> const std::string&
80
+ {
81
+ return scope_name_;
82
+ }
83
+
84
+ [[nodiscard]] auto name() const -> const std::string&
85
+ {
86
+ return name_;
87
+ }
88
+
89
+ [[nodiscard]] auto core() const -> const core::cluster&
90
+ {
91
+ return core_;
92
+ }
93
+
94
+ void get(std::string document_key, get_options::built options, get_handler&& handler) const
95
+ {
96
+ if (!options.with_expiry && options.projections.empty()) {
97
+ return core_.execute(
98
+ core::operations::get_request{
99
+ core::document_id{ bucket_name_, scope_name_, name_, std::move(document_key) },
100
+ {},
101
+ {},
102
+ options.timeout,
103
+ { options.retry_strategy },
104
+ },
105
+ [handler = std::move(handler)](auto resp) mutable {
106
+ return handler(core::impl::make_error(std::move(resp.ctx)),
107
+ get_result{ resp.cas, { std::move(resp.value), resp.flags }, {} });
108
+ });
64
109
  }
65
-
66
- [[nodiscard]] auto bucket_name() const -> const std::string&
67
- {
68
- return bucket_name_;
69
- }
70
-
71
- [[nodiscard]] auto scope_name() const -> const std::string&
72
- {
73
- return scope_name_;
74
- }
75
-
76
- [[nodiscard]] auto name() const -> const std::string&
77
- {
78
- return name_;
79
- }
80
-
81
- [[nodiscard]] auto core() const -> const core::cluster&
82
- {
83
- return core_;
84
- }
85
-
86
- void get(std::string document_key, get_options::built options, get_handler&& handler) const
87
- {
88
- if (!options.with_expiry && options.projections.empty()) {
89
- return core_.execute(
90
- core::operations::get_request{
91
- core::document_id{ bucket_name_, scope_name_, name_, std::move(document_key) },
92
- {},
93
- {},
94
- options.timeout,
95
- { options.retry_strategy },
96
- },
97
- [handler = std::move(handler)](auto resp) mutable {
98
- return handler(std::move(resp.ctx), get_result{ resp.cas, { std::move(resp.value), resp.flags }, {} });
99
- });
110
+ return core_.execute(
111
+ core::operations::get_projected_request{
112
+ core::document_id{ bucket_name_, scope_name_, name_, std::move(document_key) },
113
+ {},
114
+ {},
115
+ options.projections,
116
+ options.with_expiry,
117
+ {},
118
+ false,
119
+ options.timeout,
120
+ { options.retry_strategy },
121
+ },
122
+ [handler = std::move(handler)](auto resp) mutable {
123
+ std::optional<std::chrono::system_clock::time_point> expiry_time{};
124
+ if (resp.expiry && resp.expiry.value() > 0) {
125
+ expiry_time.emplace(std::chrono::seconds{ resp.expiry.value() });
100
126
  }
101
- return core_.execute(
102
- core::operations::get_projected_request{
103
- core::document_id{ bucket_name_, scope_name_, name_, std::move(document_key) },
104
- {},
105
- {},
106
- options.projections,
107
- options.with_expiry,
108
- {},
109
- false,
110
- options.timeout,
111
- { options.retry_strategy },
112
- },
113
- [handler = std::move(handler)](auto resp) mutable {
114
- std::optional<std::chrono::system_clock::time_point> expiry_time{};
115
- if (resp.expiry && resp.expiry.value() > 0) {
116
- expiry_time.emplace(std::chrono::seconds{ resp.expiry.value() });
117
- }
118
- return handler(std::move(resp.ctx), get_result{ resp.cas, { std::move(resp.value), resp.flags }, expiry_time });
119
- });
120
- }
121
-
122
- void get_and_touch(std::string document_key,
123
- std::uint32_t expiry,
124
- get_and_touch_options::built options,
125
- get_and_touch_handler&& handler) const
126
- {
127
- return core_.execute(
128
- core::operations::get_and_touch_request{
129
- core::document_id{ bucket_name_, scope_name_, name_, std::move(document_key) },
130
- {},
131
- {},
132
- expiry,
133
- options.timeout,
134
- { options.retry_strategy },
135
- },
136
- [handler = std::move(handler)](auto resp) mutable {
137
- return handler(std::move(resp.ctx), get_result{ resp.cas, { std::move(resp.value), resp.flags }, {} });
138
- });
139
- }
140
-
141
- void touch(std::string document_key, std::uint32_t expiry, touch_options::built options, touch_handler&& handler) const
142
- {
143
- return core_.execute(
144
- core::operations::touch_request{
145
- core::document_id{ bucket_name_, scope_name_, name_, std::move(document_key) },
146
- {},
147
- {},
148
- expiry,
149
- options.timeout,
150
- { options.retry_strategy },
151
- },
152
- [handler = std::move(handler)](auto resp) mutable { return handler(std::move(resp.ctx), result{ resp.cas }); });
153
- }
154
-
155
- void get_any_replica(std::string document_key,
156
- const get_any_replica_options::built& options,
157
- core::impl::movable_get_any_replica_handler&& handler) const
158
- {
159
- auto request =
160
- std::make_shared<core::impl::get_any_replica_request>(bucket_name_, scope_name_, name_, std::move(document_key), options.timeout);
161
- core_.with_bucket_configuration(
162
- bucket_name_,
163
- [core = core_, r = std::move(request), h = std::move(handler)](std::error_code ec,
164
- const core::topology::configuration& config) mutable {
165
- if (ec) {
166
- return h(make_key_value_error_context(ec, r->id()), get_replica_result{});
167
- }
168
- struct replica_context {
169
- replica_context(core::impl::movable_get_any_replica_handler&& handler, std::uint32_t expected_responses)
170
- : handler_(std::move(handler))
171
- , expected_responses_(expected_responses)
172
- {
173
- }
174
-
175
- core::impl::movable_get_any_replica_handler handler_;
176
- std::uint32_t expected_responses_;
177
- bool done_{ false };
178
- std::mutex mutex_{};
179
- };
180
- auto ctx = std::make_shared<replica_context>(std::move(h), config.num_replicas.value_or(0U) + 1U);
181
-
182
- for (std::size_t idx = 1U; idx <= config.num_replicas.value_or(0U); ++idx) {
183
- core::document_id replica_id{ r->id() };
184
- replica_id.node_index(idx);
185
- core.execute(core::impl::get_replica_request{ std::move(replica_id), r->timeout() }, [ctx](auto&& resp) {
186
- core::impl::movable_get_any_replica_handler local_handler;
187
- {
188
- const std::scoped_lock lock(ctx->mutex_);
189
- if (ctx->done_) {
190
- return;
191
- }
192
- --ctx->expected_responses_;
193
- if (resp.ctx.ec()) {
194
- if (ctx->expected_responses_ > 0) {
195
- // just ignore the response
196
- return;
197
- }
198
- // consider document irretrievable and give up
199
- resp.ctx.override_ec(errc::key_value::document_irretrievable);
200
- }
201
- ctx->done_ = true;
202
- std::swap(local_handler, ctx->handler_);
203
- }
204
- if (local_handler) {
205
- return local_handler(std::move(resp.ctx),
206
- get_replica_result{ resp.cas, true /* replica */, { std::move(resp.value), resp.flags } });
207
- }
208
- });
209
- }
210
-
211
- core::operations::get_request active{ core::document_id{ r->id() } };
212
- active.timeout = r->timeout();
213
- core.execute(active, [ctx](auto resp) {
214
- core::impl::movable_get_any_replica_handler local_handler{};
215
- {
216
- const std::scoped_lock lock(ctx->mutex_);
217
- if (ctx->done_) {
218
- return;
219
- }
220
- --ctx->expected_responses_;
221
- if (resp.ctx.ec()) {
222
- if (ctx->expected_responses_ > 0) {
223
- // just ignore the response
224
- return;
225
- }
226
- // consider document irretrievable and give up
227
- resp.ctx.override_ec(errc::key_value::document_irretrievable);
228
- }
229
- ctx->done_ = true;
230
- std::swap(local_handler, ctx->handler_);
231
- }
232
- if (local_handler) {
233
- return local_handler(std::move(resp.ctx),
234
- get_replica_result{ resp.cas, false /* active */, { std::move(resp.value), resp.flags } });
235
- }
236
- });
127
+ return handler(core::impl::make_error(std::move(resp.ctx)),
128
+ get_result{ resp.cas, { std::move(resp.value), resp.flags }, expiry_time });
129
+ });
130
+ }
131
+
132
+ void get_and_touch(std::string document_key,
133
+ std::uint32_t expiry,
134
+ get_and_touch_options::built options,
135
+ get_and_touch_handler&& handler) const
136
+ {
137
+ return core_.execute(
138
+ core::operations::get_and_touch_request{
139
+ core::document_id{ bucket_name_, scope_name_, name_, std::move(document_key) },
140
+ {},
141
+ {},
142
+ expiry,
143
+ options.timeout,
144
+ { options.retry_strategy },
145
+ },
146
+ [handler = std::move(handler)](auto resp) mutable {
147
+ return handler(core::impl::make_error(std::move(resp.ctx)),
148
+ get_result{ resp.cas, { std::move(resp.value), resp.flags }, {} });
149
+ });
150
+ }
151
+
152
+ void touch(std::string document_key,
153
+ std::uint32_t expiry,
154
+ touch_options::built options,
155
+ touch_handler&& handler) const
156
+ {
157
+ return core_.execute(
158
+ core::operations::touch_request{
159
+ core::document_id{ bucket_name_, scope_name_, name_, std::move(document_key) },
160
+ {},
161
+ {},
162
+ expiry,
163
+ options.timeout,
164
+ { options.retry_strategy },
165
+ },
166
+ [handler = std::move(handler)](auto resp) mutable {
167
+ return handler(core::impl::make_error(std::move(resp.ctx)), result{ resp.cas });
168
+ });
169
+ }
170
+
171
+ void get_any_replica(std::string document_key,
172
+ const get_any_replica_options::built& options,
173
+ core::impl::movable_get_any_replica_handler&& handler) const
174
+ {
175
+ return core_.execute(
176
+ core::operations::get_any_replica_request{
177
+ core::document_id{ bucket_name_, scope_name_, name_, std::move(document_key) },
178
+ options.timeout,
179
+ options.read_preference,
180
+ },
181
+ [handler = std::move(handler)](auto resp) mutable {
182
+ return handler(core::impl::make_error(std::move(resp.ctx)),
183
+ get_replica_result{
184
+ resp.cas,
185
+ resp.replica,
186
+ { std::move(resp.value), resp.flags },
187
+ });
188
+ });
189
+ }
190
+
191
+ void get_all_replicas(std::string document_key,
192
+ const get_all_replicas_options::built& options,
193
+ core::impl::movable_get_all_replicas_handler&& handler) const
194
+ {
195
+ return core_.execute(
196
+ core::operations::get_all_replicas_request{
197
+ core::document_id{ bucket_name_, scope_name_, name_, std::move(document_key) },
198
+ options.timeout,
199
+ options.read_preference,
200
+ },
201
+ [handler = std::move(handler)](auto resp) mutable {
202
+ get_all_replicas_result result{};
203
+ for (auto& entry : resp.entries) {
204
+ result.emplace_back(get_replica_result{
205
+ entry.cas,
206
+ entry.replica,
207
+ { std::move(entry.value), entry.flags },
237
208
  });
209
+ }
210
+ return handler(core::impl::make_error(std::move(resp.ctx)), std::move(result));
211
+ });
212
+ }
213
+
214
+ void remove(std::string document_key,
215
+ remove_options::built options,
216
+ remove_handler&& handler) const
217
+ {
218
+ auto id = core::document_id{
219
+ bucket_name_,
220
+ scope_name_,
221
+ name_,
222
+ std::move(document_key),
223
+ };
224
+ if (options.persist_to == persist_to::none && options.replicate_to == replicate_to::none) {
225
+ return core_.execute(
226
+ core::operations::remove_request{
227
+ std::move(id),
228
+ {},
229
+ {},
230
+ options.cas,
231
+ options.durability_level,
232
+ options.timeout,
233
+ { options.retry_strategy },
234
+ },
235
+ [handler = std::move(handler)](auto resp) mutable {
236
+ if (resp.ctx.ec()) {
237
+ return handler(core::impl::make_error(std::move(resp.ctx)), mutation_result{});
238
+ }
239
+ return handler(core::impl::make_error(std::move(resp.ctx)),
240
+ mutation_result{ resp.cas, std::move(resp.token) });
241
+ });
238
242
  }
239
243
 
240
- void get_all_replicas(std::string document_key,
241
- const get_all_replicas_options::built& options,
242
- core::impl::movable_get_all_replicas_handler&& handler) const
243
- {
244
- auto request = std::make_shared<core::impl::get_all_replicas_request>(
245
- bucket_name_, scope_name_, name_, std::move(document_key), options.timeout);
246
- core_.with_bucket_configuration(
244
+ core::operations::remove_request request{
245
+ id, {}, {}, options.cas, durability_level::none, options.timeout, { options.retry_strategy },
246
+ };
247
+ return core_.execute(std::move(request),
248
+ [core = core_, id = std::move(id), options, handler = std::move(handler)](
249
+ auto&& resp) mutable {
250
+ if (resp.ctx.ec()) {
251
+ return handler(core::impl::make_error(std::move(resp.ctx)),
252
+ mutation_result{ resp.cas, std::move(resp.token) });
253
+ }
254
+ auto token = resp.token;
255
+ core::impl::initiate_observe_poll(
256
+ core,
257
+ std::move(id),
258
+ token,
259
+ options.timeout,
260
+ options.persist_to,
261
+ options.replicate_to,
262
+ [resp, handler = std::move(handler)](std::error_code ec) mutable {
263
+ if (ec) {
264
+ resp.ctx.override_ec(ec);
265
+ return handler(core::impl::make_error(std::move(resp.ctx)),
266
+ mutation_result{});
267
+ }
268
+ return handler(core::impl::make_error(std::move(resp.ctx)),
269
+ mutation_result{ resp.cas, std::move(resp.token) });
270
+ });
271
+ });
272
+ }
273
+
274
+ void get_and_lock(std::string document_key,
275
+ std::chrono::seconds lock_duration,
276
+ get_and_lock_options::built options,
277
+ get_and_lock_handler&& handler) const
278
+ {
279
+ core_.execute(
280
+ core::operations::get_and_lock_request{
281
+ core::document_id{ bucket_name_, scope_name_, name_, std::move(document_key) },
282
+ {},
283
+ {},
284
+ static_cast<uint32_t>(lock_duration.count()),
285
+ options.timeout,
286
+ { options.retry_strategy },
287
+ },
288
+ [handler = std::move(handler)](auto&& resp) mutable {
289
+ return handler(core::impl::make_error(std::move(resp.ctx)),
290
+ get_result{ resp.cas, { std::move(resp.value), resp.flags }, {} });
291
+ });
292
+ }
293
+
294
+ void unlock(std::string document_key,
295
+ couchbase::cas cas,
296
+ unlock_options::built options,
297
+ unlock_handler&& handler) const
298
+ {
299
+ core_.execute(
300
+ core::operations::unlock_request{
301
+ core::document_id{ bucket_name_, scope_name_, name_, std::move(document_key) },
302
+ {},
303
+ {},
304
+ cas,
305
+ options.timeout,
306
+ { options.retry_strategy },
307
+ },
308
+ [handler = std::move(handler)](auto&& resp) mutable {
309
+ return handler(core::impl::make_error(std::move(resp.ctx)));
310
+ });
311
+ }
312
+
313
+ void exists(std::string document_key,
314
+ exists_options::built options,
315
+ exists_handler&& handler) const
316
+ {
317
+ core_.execute(
318
+ core::operations::exists_request{
319
+ core::document_id{ bucket_name_, scope_name_, name_, std::move(document_key) },
320
+ {},
321
+ {},
322
+ options.timeout,
323
+ { options.retry_strategy },
324
+ },
325
+ [handler = std::move(handler)](auto&& resp) mutable {
326
+ return handler(core::impl::make_error(std::move(resp.ctx)),
327
+ exists_result{ resp.cas, resp.exists() });
328
+ });
329
+ }
330
+
331
+ void lookup_in(std::string document_key,
332
+ const std::vector<core::impl::subdoc::command>& specs,
333
+ lookup_in_options::built options,
334
+ lookup_in_handler&& handler) const
335
+ {
336
+ return core_.execute(
337
+ core::operations::lookup_in_request{
338
+ core::document_id{
247
339
  bucket_name_,
248
- [core = core_, r = std::move(request), h = std::move(handler)](std::error_code ec,
249
- const core::topology::configuration& config) mutable {
250
- if (ec) {
251
- return h(make_key_value_error_context(ec, r->id()), get_all_replicas_result{});
252
- }
253
- struct replica_context {
254
- replica_context(core::impl::movable_get_all_replicas_handler handler, std::uint32_t expected_responses)
255
- : handler_(std::move(handler))
256
- , expected_responses_(expected_responses)
257
- {
258
- }
259
-
260
- core::impl::movable_get_all_replicas_handler handler_;
261
- std::uint32_t expected_responses_;
262
- bool done_{ false };
263
- std::mutex mutex_{};
264
- get_all_replicas_result result_{};
265
- };
266
- auto ctx = std::make_shared<replica_context>(std::move(h), config.num_replicas.value_or(0U) + 1U);
267
-
268
- for (std::size_t idx = 1U; idx <= config.num_replicas.value_or(0U); ++idx) {
269
- core::document_id replica_id{ r->id() };
270
- replica_id.node_index(idx);
271
- core.execute(core::impl::get_replica_request{ std::move(replica_id), r->timeout() }, [ctx](auto resp) {
272
- core::impl::movable_get_all_replicas_handler local_handler{};
273
- {
274
- const std::scoped_lock lock(ctx->mutex_);
275
- if (ctx->done_) {
276
- return;
277
- }
278
- --ctx->expected_responses_;
279
- if (resp.ctx.ec()) {
280
- if (ctx->expected_responses_ > 0) {
281
- // just ignore the response
282
- return;
283
- }
284
- } else {
285
- ctx->result_.emplace_back(
286
- get_replica_result{ resp.cas, true /* replica */, { std::move(resp.value), resp.flags } });
287
- }
288
- if (ctx->expected_responses_ == 0) {
289
- ctx->done_ = true;
290
- std::swap(local_handler, ctx->handler_);
291
- }
292
- }
293
- if (local_handler) {
294
- if (!ctx->result_.empty()) {
295
- resp.ctx.override_ec({});
296
- }
297
- return local_handler(std::move(resp.ctx), std::move(ctx->result_));
298
- }
299
- });
300
- }
301
-
302
- core::operations::get_request active{ core::document_id{ r->id() } };
303
- active.timeout = r->timeout();
304
- core.execute(active, [ctx](auto resp) {
305
- core::impl::movable_get_all_replicas_handler local_handler{};
306
- {
307
- const std::scoped_lock lock(ctx->mutex_);
308
- if (ctx->done_) {
309
- return;
310
- }
311
- --ctx->expected_responses_;
312
- if (resp.ctx.ec()) {
313
- if (ctx->expected_responses_ > 0) {
314
- // just ignore the response
315
- return;
316
- }
317
- } else {
318
- ctx->result_.emplace_back(
319
- get_replica_result{ resp.cas, false /* active */, { std::move(resp.value), resp.flags } });
320
- }
321
- if (ctx->expected_responses_ == 0) {
322
- ctx->done_ = true;
323
- std::swap(local_handler, ctx->handler_);
324
- }
325
- }
326
- if (local_handler) {
327
- if (!ctx->result_.empty()) {
328
- resp.ctx.override_ec({});
329
- }
330
- return local_handler(std::move(resp.ctx), std::move(ctx->result_));
331
- }
332
- });
333
- });
334
- }
335
-
336
- void remove(std::string document_key, remove_options::built options, remove_handler&& handler) const
337
- {
338
- auto id = core::document_id{
339
- bucket_name_,
340
- scope_name_,
341
- name_,
342
- std::move(document_key),
343
- };
344
- if (options.persist_to == persist_to::none && options.replicate_to == replicate_to::none) {
345
- return core_.execute(
346
- core::operations::remove_request{
347
- std::move(id),
348
- {},
349
- {},
350
- options.cas,
351
- options.durability_level,
352
- options.timeout,
353
- { options.retry_strategy },
354
- },
355
- [handler = std::move(handler)](auto resp) mutable {
356
- if (resp.ctx.ec()) {
357
- return handler(std::move(resp.ctx), mutation_result{});
358
- }
359
- return handler(std::move(resp.ctx), mutation_result{ resp.cas, std::move(resp.token) });
360
- });
340
+ scope_name_,
341
+ name_,
342
+ std::move(document_key),
343
+ },
344
+ {},
345
+ {},
346
+ options.access_deleted,
347
+ specs,
348
+ options.timeout,
349
+ { options.retry_strategy },
350
+ },
351
+ [handler = std::move(handler)](auto resp) mutable {
352
+ if (resp.ctx.ec()) {
353
+ return handler(core::impl::make_error(std::move(resp.ctx)), lookup_in_result{});
361
354
  }
362
355
 
363
- core::operations::remove_request request{
364
- id, {}, {}, options.cas, durability_level::none, options.timeout, { options.retry_strategy },
365
- };
366
- return core_.execute(
367
- std::move(request), [core = core_, id = std::move(id), options, handler = std::move(handler)](auto&& resp) mutable {
368
- if (resp.ctx.ec()) {
369
- return handler(std::move(resp.ctx), mutation_result{ resp.cas, std::move(resp.token) });
370
- }
371
- auto token = resp.token;
372
- core::impl::initiate_observe_poll(core,
373
- std::move(id),
374
- token,
375
- options.timeout,
376
- options.persist_to,
377
- options.replicate_to,
378
- [resp, handler = std::move(handler)](std::error_code ec) mutable {
379
- if (ec) {
380
- resp.ctx.override_ec(ec);
381
- return handler(std::move(resp.ctx), mutation_result{});
382
- }
383
- return handler(std::move(resp.ctx), mutation_result{ resp.cas, std::move(resp.token) });
384
- });
385
- });
386
- }
387
-
388
- void get_and_lock(std::string document_key,
389
- std::chrono::seconds lock_duration,
390
- get_and_lock_options::built options,
391
- get_and_lock_handler&& handler) const
392
- {
393
- core_.execute(
394
- core::operations::get_and_lock_request{
395
- core::document_id{ bucket_name_, scope_name_, name_, std::move(document_key) },
396
- {},
397
- {},
398
- static_cast<uint32_t>(lock_duration.count()),
399
- options.timeout,
400
- { options.retry_strategy },
401
- },
402
- [handler = std::move(handler)](auto&& resp) mutable {
403
- return handler(std::move(resp.ctx), get_result{ resp.cas, { std::move(resp.value), resp.flags }, {} });
356
+ std::vector<lookup_in_result::entry> entries{};
357
+ entries.reserve(resp.fields.size());
358
+ for (auto& entry : resp.fields) {
359
+ entries.emplace_back(lookup_in_result::entry{
360
+ std::move(entry.path),
361
+ std::move(entry.value),
362
+ entry.original_index,
363
+ entry.exists,
364
+ entry.ec,
404
365
  });
405
- }
406
-
407
- void unlock(std::string document_key, couchbase::cas cas, unlock_options::built options, unlock_handler&& handler) const
408
- {
409
- core_.execute(
410
- core::operations::unlock_request{
411
- core::document_id{ bucket_name_, scope_name_, name_, std::move(document_key) },
412
- {},
413
- {},
414
- cas,
415
- options.timeout,
416
- { options.retry_strategy },
417
- },
418
- [handler = std::move(handler)](auto&& resp) mutable { return handler(std::move(resp.ctx)); });
419
- }
420
-
421
- void exists(std::string document_key, exists_options::built options, exists_handler&& handler) const
422
- {
423
- core_.execute(
424
- core::operations::exists_request{
425
- core::document_id{ bucket_name_, scope_name_, name_, std::move(document_key) },
426
- {},
427
- {},
428
- options.timeout,
429
- { options.retry_strategy },
430
- },
431
- [handler = std::move(handler)](auto&& resp) mutable {
432
- return handler(std::move(resp.ctx), exists_result{ resp.cas, resp.exists() });
366
+ }
367
+ return handler(core::impl::make_error(std::move(resp.ctx)),
368
+ lookup_in_result{ resp.cas, std::move(entries), resp.deleted });
369
+ });
370
+ }
371
+
372
+ void lookup_in_all_replicas(std::string document_key,
373
+ const std::vector<core::impl::subdoc::command>& specs,
374
+ const lookup_in_all_replicas_options::built& options,
375
+ lookup_in_all_replicas_handler&& handler) const
376
+ {
377
+ return core_.execute(
378
+ core::operations::lookup_in_all_replicas_request{
379
+ core::document_id{ bucket_name_, scope_name_, name_, std::move(document_key) },
380
+ specs,
381
+ options.timeout,
382
+ {},
383
+ options.read_preference,
384
+ },
385
+ [handler = std::move(handler)](auto resp) mutable {
386
+ lookup_in_all_replicas_result result{};
387
+ for (auto& res : resp.entries) {
388
+ std::vector<lookup_in_result::entry> entries;
389
+ entries.reserve(res.fields.size());
390
+ for (auto& field : res.fields) {
391
+ entries.emplace_back(lookup_in_result::entry{
392
+ std::move(field.path),
393
+ std::move(field.value),
394
+ field.original_index,
395
+ field.exists,
396
+ field.ec,
397
+ });
398
+ }
399
+ result.emplace_back(lookup_in_replica_result{
400
+ res.cas,
401
+ std::move(entries),
402
+ res.deleted,
403
+ res.is_replica,
433
404
  });
434
- }
435
-
436
- void lookup_in(std::string document_key,
437
- const std::vector<core::impl::subdoc::command>& specs,
438
- lookup_in_options::built options,
439
- lookup_in_handler&& handler) const
440
- {
441
- return core_.execute(
442
- core::operations::lookup_in_request{
443
- core::document_id{
444
- bucket_name_,
445
- scope_name_,
446
- name_,
447
- std::move(document_key),
448
- },
449
- {},
450
- {},
451
- options.access_deleted,
452
- specs,
453
- options.timeout,
454
- { options.retry_strategy },
455
- },
456
- [handler = std::move(handler)](auto resp) mutable {
457
- if (resp.ctx.ec()) {
458
- return handler(std::move(resp.ctx), lookup_in_result{});
459
- }
460
-
461
- std::vector<lookup_in_result::entry> entries{};
462
- entries.reserve(resp.fields.size());
463
- for (auto& entry : resp.fields) {
464
- entries.emplace_back(lookup_in_result::entry{
465
- std::move(entry.path),
466
- std::move(entry.value),
467
- entry.original_index,
468
- entry.exists,
469
- entry.ec,
470
- });
471
- }
472
- return handler(std::move(resp.ctx), lookup_in_result{ resp.cas, std::move(entries), resp.deleted });
405
+ }
406
+ return handler(core::impl::make_error(std::move(resp.ctx)), result);
407
+ });
408
+ }
409
+
410
+ void lookup_in_any_replica(std::string document_key,
411
+ const std::vector<core::impl::subdoc::command>& specs,
412
+ const lookup_in_any_replica_options::built& options,
413
+ lookup_in_any_replica_handler&& handler) const
414
+ {
415
+ return core_.execute(
416
+ core::operations::lookup_in_any_replica_request{
417
+ core::document_id{ bucket_name_, scope_name_, name_, std::move(document_key) },
418
+ specs,
419
+ options.timeout,
420
+ {},
421
+ options.read_preference,
422
+ },
423
+ [handler = std::move(handler)](auto resp) mutable {
424
+ std::vector<lookup_in_result::entry> entries;
425
+ for (auto& field : resp.fields) {
426
+ entries.emplace_back(lookup_in_result::entry{
427
+ std::move(field.path),
428
+ std::move(field.value),
429
+ field.original_index,
430
+ field.exists,
431
+ field.ec,
473
432
  });
433
+ }
434
+ entries.reserve(resp.fields.size());
435
+ return handler(
436
+ core::impl::make_error(std::move(resp.ctx)),
437
+ lookup_in_replica_result{ resp.cas, std::move(entries), resp.deleted, resp.is_replica });
438
+ });
439
+ }
440
+
441
+ void mutate_in(std::string document_key,
442
+ const std::vector<core::impl::subdoc::command>& specs,
443
+ mutate_in_options::built options,
444
+ mutate_in_handler&& handler) const
445
+ {
446
+ auto id = core::document_id{
447
+ bucket_name_,
448
+ scope_name_,
449
+ name_,
450
+ std::move(document_key),
451
+ };
452
+ if (options.persist_to == persist_to::none && options.replicate_to == replicate_to::none) {
453
+ return core_.execute(
454
+ core::operations::mutate_in_request{
455
+ std::move(id),
456
+ {},
457
+ {},
458
+ options.cas,
459
+ options.access_deleted,
460
+ options.create_as_deleted,
461
+ options.expiry,
462
+ options.store_semantics,
463
+ specs,
464
+ options.durability_level,
465
+ options.timeout,
466
+ { options.retry_strategy },
467
+ options.preserve_expiry,
468
+ },
469
+ [handler = std::move(handler)](auto resp) mutable {
470
+ if (resp.ctx.ec()) {
471
+ return handler(core::impl::make_error(std::move(resp.ctx)), mutate_in_result{});
472
+ }
473
+ std::vector<mutate_in_result::entry> entries{};
474
+ entries.reserve(resp.fields.size());
475
+ for (auto& entry : resp.fields) {
476
+ entries.emplace_back(mutate_in_result::entry{
477
+ std::move(entry.path),
478
+ std::move(entry.value),
479
+ entry.original_index,
480
+ });
481
+ }
482
+ return handler(
483
+ core::impl::make_error(std::move(resp.ctx)),
484
+ mutate_in_result{ resp.cas, std::move(resp.token), std::move(entries), resp.deleted });
485
+ });
474
486
  }
475
487
 
476
- void lookup_in_all_replicas(std::string document_key,
477
- const std::vector<core::impl::subdoc::command>& specs,
478
- const lookup_in_all_replicas_options::built& options,
479
- lookup_in_all_replicas_handler&& handler) const
480
- {
481
- auto request = std::make_shared<couchbase::core::impl::lookup_in_all_replicas_request>(
482
- bucket_name_, scope_name_, name_, std::move(document_key), specs, options.timeout);
483
- core_.open_bucket(
484
- bucket_name_,
485
- [core = core_, bucket_name = bucket_name_, r = std::move(request), h = std::move(handler)](std::error_code ec) mutable {
486
- if (ec) {
487
- h(core::make_subdocument_error_context(make_key_value_error_context(ec, r->id()), ec, {}, {}, false),
488
- lookup_in_all_replicas_result{});
489
- return;
490
- }
491
-
492
- return core.with_bucket_configuration(
493
- bucket_name,
494
- [core = core, r = std::move(r), h = std::move(h)](std::error_code ec, const core::topology::configuration& config) mutable {
495
- if (!config.capabilities.supports_subdoc_read_replica()) {
496
- ec = errc::common::feature_not_available;
497
- }
498
-
499
- if (ec) {
500
- return h(core::make_subdocument_error_context(make_key_value_error_context(ec, r->id()), ec, {}, {}, false),
501
- lookup_in_all_replicas_result{});
502
- }
503
- struct replica_context {
504
- replica_context(core::impl::movable_lookup_in_all_replicas_handler handler, std::uint32_t expected_responses)
505
- : handler_(std::move(handler))
506
- , expected_responses_(expected_responses)
507
- {
508
- }
509
-
510
- core::impl::movable_lookup_in_all_replicas_handler handler_;
511
- std::uint32_t expected_responses_;
512
- bool done_{ false };
513
- std::mutex mutex_{};
514
- lookup_in_all_replicas_result result_{};
515
- };
516
- auto ctx = std::make_shared<replica_context>(std::move(h), config.num_replicas.value_or(0U) + 1U);
517
-
518
- for (std::size_t idx = 1U; idx <= config.num_replicas.value_or(0U); ++idx) {
519
- core::document_id replica_id{ r->id() };
520
- replica_id.node_index(idx);
521
- core.execute(core::impl::lookup_in_replica_request{ std::move(replica_id), r->specs(), r->timeout() },
522
- [ctx](core::impl::lookup_in_replica_response&& resp) {
523
- core::impl::movable_lookup_in_all_replicas_handler local_handler{};
524
- {
525
- const std::scoped_lock lock(ctx->mutex_);
526
- if (ctx->done_) {
527
- return;
528
- }
529
- --ctx->expected_responses_;
530
- if (resp.ctx.ec()) {
531
- if (ctx->expected_responses_ > 0) {
532
- // just ignore the response
533
- return;
534
- }
535
- } else {
536
- std::vector<lookup_in_replica_result::entry> entries{};
537
- for (const auto& field : resp.fields) {
538
- lookup_in_replica_result::entry lookup_in_entry{};
539
- lookup_in_entry.path = field.path;
540
- lookup_in_entry.value = field.value;
541
- lookup_in_entry.exists = field.exists;
542
- lookup_in_entry.original_index = field.original_index;
543
- lookup_in_entry.ec = field.ec;
544
- entries.emplace_back(lookup_in_entry);
545
- }
546
- ctx->result_.emplace_back(resp.cas, entries, resp.deleted, true /* replica */);
547
- }
548
- if (ctx->expected_responses_ == 0) {
549
- ctx->done_ = true;
550
- std::swap(local_handler, ctx->handler_);
551
- }
552
- }
553
- if (local_handler) {
554
- if (!ctx->result_.empty()) {
555
- resp.ctx.override_ec({});
556
- }
557
- return local_handler(std::move(resp.ctx), std::move(ctx->result_));
558
- }
559
- });
560
- }
561
-
562
- core::operations::lookup_in_request active{ core::document_id{ r->id() } };
563
- active.specs = r->specs();
564
- active.timeout = r->timeout();
565
- core.execute(active, [ctx](core::operations::lookup_in_response&& resp) {
566
- core::impl::movable_lookup_in_all_replicas_handler local_handler{};
567
- {
568
- const std::scoped_lock lock(ctx->mutex_);
569
- if (ctx->done_) {
570
- return;
571
- }
572
- --ctx->expected_responses_;
573
- if (resp.ctx.ec()) {
574
- if (ctx->expected_responses_ > 0) {
575
- // just ignore the response
576
- return;
577
- }
578
- } else {
579
- std::vector<lookup_in_replica_result::entry> entries{};
580
- for (const auto& field : resp.fields) {
581
- lookup_in_replica_result::entry lookup_in_entry{};
582
- lookup_in_entry.path = field.path;
583
- lookup_in_entry.value = field.value;
584
- lookup_in_entry.exists = field.exists;
585
- lookup_in_entry.original_index = field.original_index;
586
- lookup_in_entry.ec = field.ec;
587
- entries.emplace_back(lookup_in_entry);
588
- }
589
- ctx->result_.emplace_back(resp.cas, entries, resp.deleted, false /* active */);
590
- }
591
- if (ctx->expected_responses_ == 0) {
592
- ctx->done_ = true;
593
- std::swap(local_handler, ctx->handler_);
594
- }
595
- }
596
- if (local_handler) {
597
- if (!ctx->result_.empty()) {
598
- resp.ctx.override_ec({});
599
- }
600
- return local_handler(std::move(resp.ctx), std::move(ctx->result_));
601
- }
602
- });
603
- });
604
- });
488
+ core::operations::mutate_in_request request{
489
+ id,
490
+ {},
491
+ {},
492
+ options.cas,
493
+ options.access_deleted,
494
+ options.create_as_deleted,
495
+ options.expiry,
496
+ options.store_semantics,
497
+ specs,
498
+ durability_level::none,
499
+ options.timeout,
500
+ { options.retry_strategy },
501
+ options.preserve_expiry,
605
502
  };
503
+ return core_.execute(
504
+ std::move(request),
505
+ [core = core_, id = std::move(id), options, handler = std::move(handler)](
506
+ auto&& resp) mutable {
507
+ if (resp.ctx.ec()) {
508
+ return handler(core::impl::make_error(std::move(resp.ctx)), mutate_in_result{});
509
+ }
606
510
 
607
- void lookup_in_any_replica(std::string document_key,
608
- const std::vector<core::impl::subdoc::command>& specs,
609
- const lookup_in_any_replica_options::built& options,
610
- lookup_in_any_replica_handler&& handler) const
611
- {
612
- auto request = std::make_shared<couchbase::core::impl::lookup_in_any_replica_request>(
613
- bucket_name_, scope_name_, name_, std::move(document_key), specs, options.timeout);
614
- core_.open_bucket(
615
- bucket_name_,
616
- [core = core_, bucket_name = bucket_name_, r = std::move(request), h = std::move(handler)](std::error_code ec) mutable {
617
- if (ec) {
618
- h(core::make_subdocument_error_context(make_key_value_error_context(ec, r->id()), ec, {}, {}, false),
619
- lookup_in_replica_result{});
620
- return;
621
- }
622
-
623
- return core.with_bucket_configuration(
624
- bucket_name,
625
- [core = core, r = std::move(r), h = std::move(h)](std::error_code ec, const core::topology::configuration& config) mutable {
626
- if (!config.capabilities.supports_subdoc_read_replica()) {
627
- ec = errc::common::feature_not_available;
628
- }
629
- if (ec) {
630
- return h(core::make_subdocument_error_context(make_key_value_error_context(ec, r->id()), ec, {}, {}, false),
631
- lookup_in_replica_result{});
632
- }
633
- struct replica_context {
634
- replica_context(core::impl::movable_lookup_in_any_replica_handler handler, std::uint32_t expected_responses)
635
- : handler_(std::move(handler))
636
- , expected_responses_(expected_responses)
637
- {
638
- }
639
-
640
- core::impl::movable_lookup_in_any_replica_handler handler_;
641
- std::uint32_t expected_responses_;
642
- bool done_{ false };
643
- std::mutex mutex_{};
644
- };
645
- auto ctx = std::make_shared<replica_context>(std::move(h), config.num_replicas.value_or(0U) + 1U);
646
-
647
- for (std::size_t idx = 1U; idx <= config.num_replicas.value_or(0U); ++idx) {
648
- core::document_id replica_id{ r->id() };
649
- replica_id.node_index(idx);
650
- core.execute(core::impl::lookup_in_replica_request{ std::move(replica_id), r->specs(), r->timeout() },
651
- [ctx](core::impl::lookup_in_replica_response&& resp) {
652
- core::impl::movable_lookup_in_any_replica_handler local_handler;
653
- {
654
- const std::scoped_lock lock(ctx->mutex_);
655
- if (ctx->done_) {
656
- return;
657
- }
658
- --ctx->expected_responses_;
659
- if (resp.ctx.ec()) {
660
- if (ctx->expected_responses_ > 0) {
661
- // just ignore the response
662
- return;
663
- }
664
- // consider document irretrievable and give up
665
- resp.ctx.override_ec(errc::key_value::document_irretrievable);
666
- }
667
- ctx->done_ = true;
668
- std::swap(local_handler, ctx->handler_);
669
- }
670
- if (local_handler) {
671
- std::vector<lookup_in_replica_result::entry> entries;
672
- for (const auto& field : resp.fields) {
673
- lookup_in_replica_result::entry entry{};
674
- entry.path = field.path;
675
- entry.original_index = field.original_index;
676
- entry.exists = field.exists;
677
- entry.value = field.value;
678
- entry.ec = field.ec;
679
- entries.emplace_back(entry);
680
- }
681
- return local_handler(
682
- std::move(resp.ctx),
683
- lookup_in_replica_result{ resp.cas, entries, resp.deleted, true /* replica */ });
684
- }
685
- });
686
- }
687
-
688
- core::operations::lookup_in_request active{ core::document_id{ r->id() } };
689
- active.specs = r->specs();
690
- active.timeout = r->timeout();
691
- core.execute(active, [ctx](core::operations::lookup_in_response&& resp) {
692
- core::impl::movable_lookup_in_any_replica_handler local_handler{};
693
- {
694
- const std::scoped_lock lock(ctx->mutex_);
695
- if (ctx->done_) {
696
- return;
697
- }
698
- --ctx->expected_responses_;
699
- if (resp.ctx.ec()) {
700
- if (ctx->expected_responses_ > 0) {
701
- // just ignore the response
702
- return;
703
- }
704
- // consider document irretrievable and give up
705
- resp.ctx.override_ec(errc::key_value::document_irretrievable);
706
- }
707
- ctx->done_ = true;
708
- std::swap(local_handler, ctx->handler_);
709
- }
710
- if (local_handler) {
711
- std::vector<lookup_in_replica_result::entry> entries;
712
- for (const auto& field : resp.fields) {
713
- lookup_in_replica_result::entry entry{};
714
- entry.path = field.path;
715
- entry.original_index = field.original_index;
716
- entry.exists = field.exists;
717
- entry.value = field.value;
718
- entry.ec = field.ec;
719
- entries.emplace_back(entry);
720
- }
721
- return local_handler(std::move(resp.ctx),
722
- lookup_in_replica_result{ resp.cas, entries, resp.deleted, false /* active */ });
723
- }
724
- });
725
- });
511
+ auto token = resp.token;
512
+ core::impl::initiate_observe_poll(
513
+ core,
514
+ std::move(id),
515
+ token,
516
+ options.timeout,
517
+ options.persist_to,
518
+ options.replicate_to,
519
+ [resp, handler = std::move(handler)](std::error_code ec) mutable {
520
+ if (ec) {
521
+ resp.ctx.override_ec(ec);
522
+ return handler(core::impl::make_error(std::move(resp.ctx)), mutate_in_result{});
523
+ }
524
+ std::vector<mutate_in_result::entry> entries{};
525
+ entries.reserve(resp.fields.size());
526
+ for (auto& entry : resp.fields) {
527
+ entries.emplace_back(mutate_in_result::entry{
528
+ std::move(entry.path),
529
+ std::move(entry.value),
530
+ entry.original_index,
531
+ });
532
+ }
533
+ return handler(core::impl::make_error(std::move(resp.ctx)),
534
+ mutate_in_result{
535
+ resp.cas, std::move(resp.token), std::move(entries), resp.deleted });
726
536
  });
537
+ });
538
+ }
539
+
540
+ void upsert(std::string document_key,
541
+ codec::encoded_value encoded,
542
+ upsert_options::built options,
543
+ upsert_handler&& handler) const
544
+ {
545
+ auto value = std::move(encoded);
546
+ auto id = core::document_id{
547
+ bucket_name_,
548
+ scope_name_,
549
+ name_,
550
+ std::move(document_key),
727
551
  };
552
+ if (options.persist_to == persist_to::none && options.replicate_to == replicate_to::none) {
553
+ return core_.execute(
554
+ core::operations::upsert_request{
555
+ std::move(id),
556
+ std::move(value.data),
557
+ {},
558
+ {},
559
+ value.flags,
560
+ options.expiry,
561
+ options.durability_level,
562
+ options.timeout,
563
+ { options.retry_strategy },
564
+ options.preserve_expiry,
565
+ },
566
+ [handler = std::move(handler)](auto resp) mutable {
567
+ return handler(core::impl::make_error(std::move(resp.ctx)),
568
+ mutation_result{ resp.cas, std::move(resp.token) });
569
+ });
570
+ }
728
571
 
729
- void mutate_in(std::string document_key,
730
- const std::vector<core::impl::subdoc::command>& specs,
731
- mutate_in_options::built options,
732
- mutate_in_handler&& handler) const
733
- {
734
- auto id = core::document_id{
735
- bucket_name_,
736
- scope_name_,
737
- name_,
738
- std::move(document_key),
739
- };
740
- if (options.persist_to == persist_to::none && options.replicate_to == replicate_to::none) {
741
- return core_.execute(
742
- core::operations::mutate_in_request{
743
- std::move(id),
744
- {},
745
- {},
746
- options.cas,
747
- options.access_deleted,
748
- options.create_as_deleted,
749
- options.expiry,
750
- options.store_semantics,
751
- specs,
752
- options.durability_level,
753
- options.timeout,
754
- { options.retry_strategy },
755
- options.preserve_expiry,
756
- },
757
- [handler = std::move(handler)](auto resp) mutable {
758
- if (resp.ctx.ec()) {
759
- return handler(std::move(resp.ctx), mutate_in_result{});
760
- }
761
- std::vector<mutate_in_result::entry> entries{};
762
- entries.reserve(resp.fields.size());
763
- for (auto& entry : resp.fields) {
764
- entries.emplace_back(mutate_in_result::entry{
765
- std::move(entry.path),
766
- std::move(entry.value),
767
- entry.original_index,
768
- });
769
- }
770
- return handler(std::move(resp.ctx),
771
- mutate_in_result{ resp.cas, std::move(resp.token), std::move(entries), resp.deleted });
772
- });
572
+ core::operations::upsert_request request{
573
+ id,
574
+ std::move(value.data),
575
+ {},
576
+ {},
577
+ value.flags,
578
+ options.expiry,
579
+ durability_level::none,
580
+ options.timeout,
581
+ { options.retry_strategy },
582
+ options.preserve_expiry,
583
+ };
584
+ return core_.execute(
585
+ std::move(request),
586
+ [core = core_, id = std::move(id), options, handler = std::move(handler)](auto resp) mutable {
587
+ if (resp.ctx.ec()) {
588
+ return handler(core::impl::make_error(std::move(resp.ctx)),
589
+ mutation_result{ resp.cas, std::move(resp.token) });
773
590
  }
774
591
 
775
- core::operations::mutate_in_request request{
776
- id,
777
- {},
778
- {},
779
- options.cas,
780
- options.access_deleted,
781
- options.create_as_deleted,
782
- options.expiry,
783
- options.store_semantics,
784
- specs,
785
- durability_level::none,
786
- options.timeout,
787
- { options.retry_strategy },
788
- options.preserve_expiry,
789
- };
790
- return core_.execute(
791
- std::move(request), [core = core_, id = std::move(id), options, handler = std::move(handler)](auto&& resp) mutable {
792
- if (resp.ctx.ec()) {
793
- return handler(std::move(resp.ctx), mutate_in_result{});
794
- }
795
-
796
- auto token = resp.token;
797
- core::impl::initiate_observe_poll(
798
- core,
799
- std::move(id),
800
- token,
801
- options.timeout,
802
- options.persist_to,
803
- options.replicate_to,
804
- [resp, handler = std::move(handler)](std::error_code ec) mutable {
805
- if (ec) {
806
- resp.ctx.override_ec(ec);
807
- return handler(std::move(resp.ctx), mutate_in_result{});
808
- }
809
- std::vector<mutate_in_result::entry> entries{};
810
- entries.reserve(resp.fields.size());
811
- for (auto& entry : resp.fields) {
812
- entries.emplace_back(mutate_in_result::entry{
813
- std::move(entry.path),
814
- std::move(entry.value),
815
- entry.original_index,
816
- });
817
- }
818
- return handler(std::move(resp.ctx),
819
- mutate_in_result{ resp.cas, std::move(resp.token), std::move(entries), resp.deleted });
820
- });
592
+ auto token = resp.token;
593
+ core::impl::initiate_observe_poll(
594
+ core,
595
+ std::move(id),
596
+ token,
597
+ options.timeout,
598
+ options.persist_to,
599
+ options.replicate_to,
600
+ [resp, handler = std::move(handler)](std::error_code ec) mutable {
601
+ if (ec) {
602
+ resp.ctx.override_ec(ec);
603
+ return handler(core::impl::make_error(std::move(resp.ctx)), mutation_result{});
604
+ }
605
+ return handler(core::impl::make_error(std::move(resp.ctx)),
606
+ mutation_result{ resp.cas, std::move(resp.token) });
821
607
  });
608
+ });
609
+ }
610
+
611
+ void insert(std::string document_key,
612
+ codec::encoded_value encoded,
613
+ insert_options::built options,
614
+ insert_handler&& handler) const
615
+ {
616
+ auto value = std::move(encoded);
617
+ auto id = core::document_id{
618
+ bucket_name_,
619
+ scope_name_,
620
+ name_,
621
+ std::move(document_key),
622
+ };
623
+ if (options.persist_to == persist_to::none && options.replicate_to == replicate_to::none) {
624
+ return core_.execute(
625
+ core::operations::insert_request{
626
+ std::move(id),
627
+ std::move(value.data),
628
+ {},
629
+ {},
630
+ value.flags,
631
+ options.expiry,
632
+ options.durability_level,
633
+ options.timeout,
634
+ { options.retry_strategy },
635
+ },
636
+ [handler = std::move(handler)](auto&& resp) mutable {
637
+ if (resp.ctx.ec()) {
638
+ return handler(core::impl::make_error(std::move(resp.ctx)), mutation_result{});
639
+ }
640
+ return handler(core::impl::make_error(std::move(resp.ctx)),
641
+ mutation_result{ resp.cas, std::move(resp.token) });
642
+ });
822
643
  }
823
644
 
824
- void upsert(std::string document_key, codec::encoded_value encoded, upsert_options::built options, upsert_handler&& handler) const
825
- {
826
- auto value = std::move(encoded);
827
- auto id = core::document_id{
828
- bucket_name_,
829
- scope_name_,
830
- name_,
831
- std::move(document_key),
832
- };
833
- if (options.persist_to == persist_to::none && options.replicate_to == replicate_to::none) {
834
- return core_.execute(
835
- core::operations::upsert_request{
836
- std::move(id),
837
- std::move(value.data),
838
- {},
839
- {},
840
- value.flags,
841
- options.expiry,
842
- options.durability_level,
843
- options.timeout,
844
- { options.retry_strategy },
845
- options.preserve_expiry,
846
- },
847
- [handler = std::move(handler)](auto resp) mutable {
848
- return handler(std::move(resp.ctx), mutation_result{ resp.cas, std::move(resp.token) });
849
- });
645
+ core::operations::insert_request request{
646
+ id,
647
+ std::move(value.data),
648
+ {},
649
+ {},
650
+ value.flags,
651
+ options.expiry,
652
+ durability_level::none,
653
+ options.timeout,
654
+ { options.retry_strategy },
655
+ };
656
+ return core_.execute(
657
+ std::move(request),
658
+ [core = core_, id = std::move(id), options, handler = std::move(handler)](auto resp) mutable {
659
+ if (resp.ctx.ec()) {
660
+ return handler(core::impl::make_error(std::move(resp.ctx)),
661
+ mutation_result{ resp.cas, std::move(resp.token) });
850
662
  }
851
663
 
852
- core::operations::upsert_request request{
853
- id,
854
- std::move(value.data),
855
- {},
856
- {},
857
- value.flags,
858
- options.expiry,
859
- durability_level::none,
860
- options.timeout,
861
- { options.retry_strategy },
862
- options.preserve_expiry,
863
- };
864
- return core_.execute(
865
- std::move(request), [core = core_, id = std::move(id), options, handler = std::move(handler)](auto resp) mutable {
866
- if (resp.ctx.ec()) {
867
- return handler(std::move(resp.ctx), mutation_result{ resp.cas, std::move(resp.token) });
868
- }
869
-
870
- auto token = resp.token;
871
- core::impl::initiate_observe_poll(core,
872
- std::move(id),
873
- token,
874
- options.timeout,
875
- options.persist_to,
876
- options.replicate_to,
877
- [resp, handler = std::move(handler)](std::error_code ec) mutable {
878
- if (ec) {
879
- resp.ctx.override_ec(ec);
880
- return handler(std::move(resp.ctx), mutation_result{});
881
- }
882
- return handler(std::move(resp.ctx), mutation_result{ resp.cas, std::move(resp.token) });
883
- });
664
+ auto token = resp.token;
665
+ core::impl::initiate_observe_poll(
666
+ core,
667
+ std::move(id),
668
+ token,
669
+ options.timeout,
670
+ options.persist_to,
671
+ options.replicate_to,
672
+ [resp, handler = std::move(handler)](std::error_code ec) mutable {
673
+ if (ec) {
674
+ resp.ctx.override_ec(ec);
675
+ return handler(core::impl::make_error(std::move(resp.ctx)), mutation_result{});
676
+ }
677
+ return handler(core::impl::make_error(std::move(resp.ctx)),
678
+ mutation_result{ resp.cas, std::move(resp.token) });
884
679
  });
680
+ });
681
+ }
682
+ void replace(std::string document_key,
683
+ codec::encoded_value encoded,
684
+ replace_options::built options,
685
+ replace_handler&& handler) const
686
+ {
687
+ auto value = std::move(encoded);
688
+ auto id = core::document_id{
689
+ bucket_name_,
690
+ scope_name_,
691
+ name_,
692
+ std::move(document_key),
693
+ };
694
+ if (options.persist_to == persist_to::none && options.replicate_to == replicate_to::none) {
695
+ return core_.execute(
696
+ core::operations::replace_request{
697
+ std::move(id),
698
+ std::move(value.data),
699
+ {},
700
+ {},
701
+ value.flags,
702
+ options.expiry,
703
+ options.cas,
704
+ options.durability_level,
705
+ options.timeout,
706
+ { options.retry_strategy },
707
+ options.preserve_expiry,
708
+ },
709
+ [handler = std::move(handler)](auto resp) mutable {
710
+ if (resp.ctx.ec()) {
711
+ return handler(core::impl::make_error(std::move(resp.ctx)), mutation_result{});
712
+ }
713
+ return handler(core::impl::make_error(std::move(resp.ctx)),
714
+ mutation_result{ resp.cas, std::move(resp.token) });
715
+ });
885
716
  }
886
717
 
887
- void insert(std::string document_key, codec::encoded_value encoded, insert_options::built options, insert_handler&& handler) const
888
- {
889
- auto value = std::move(encoded);
890
- auto id = core::document_id{
891
- bucket_name_,
892
- scope_name_,
893
- name_,
894
- std::move(document_key),
895
- };
896
- if (options.persist_to == persist_to::none && options.replicate_to == replicate_to::none) {
897
- return core_.execute(
898
- core::operations::insert_request{
899
- std::move(id),
900
- std::move(value.data),
901
- {},
902
- {},
903
- value.flags,
904
- options.expiry,
905
- options.durability_level,
906
- options.timeout,
907
- { options.retry_strategy },
908
- },
909
- [handler = std::move(handler)](auto&& resp) mutable {
910
- if (resp.ctx.ec()) {
911
- return handler(std::move(resp.ctx), mutation_result{});
912
- }
913
- return handler(std::move(resp.ctx), mutation_result{ resp.cas, std::move(resp.token) });
914
- });
915
- }
718
+ core::operations::replace_request request{
719
+ id,
720
+ std::move(value.data),
721
+ {},
722
+ {},
723
+ value.flags,
724
+ options.expiry,
725
+ options.cas,
726
+ durability_level::none,
727
+ options.timeout,
728
+ { options.retry_strategy },
729
+ options.preserve_expiry,
730
+ };
731
+ return core_.execute(std::move(request),
732
+ [core = core_, id = std::move(id), options, handler = std::move(handler)](
733
+ auto&& resp) mutable {
734
+ if (resp.ctx.ec()) {
735
+ return handler(core::impl::make_error(std::move(resp.ctx)),
736
+ mutation_result{ resp.cas, std::move(resp.token) });
737
+ }
738
+
739
+ auto token = resp.token;
740
+ core::impl::initiate_observe_poll(
741
+ core,
742
+ std::move(id),
743
+ token,
744
+ options.timeout,
745
+ options.persist_to,
746
+ options.replicate_to,
747
+ [resp, handler = std::move(handler)](std::error_code ec) mutable {
748
+ if (ec) {
749
+ resp.ctx.override_ec(ec);
750
+ return handler(core::impl::make_error(std::move(resp.ctx)),
751
+ mutation_result{});
752
+ }
753
+ return handler(core::impl::make_error(std::move(resp.ctx)),
754
+ mutation_result{ resp.cas, std::move(resp.token) });
755
+ });
756
+ });
757
+ }
758
+
759
+ void scan(scan_type::built scan_type, scan_options::built options, scan_handler&& handler) const
760
+ {
761
+ core::range_scan_orchestrator_options orchestrator_opts{ options.ids_only };
762
+ if (!options.mutation_state.empty()) {
763
+ orchestrator_opts.consistent_with = core::mutation_state{ options.mutation_state };
764
+ }
765
+ if (options.batch_item_limit.has_value()) {
766
+ orchestrator_opts.batch_item_limit = options.batch_item_limit.value();
767
+ }
768
+ if (options.batch_byte_limit.has_value()) {
769
+ orchestrator_opts.batch_byte_limit = options.batch_byte_limit.value();
770
+ }
771
+ if (options.concurrency.has_value()) {
772
+ orchestrator_opts.concurrency = options.concurrency.value();
773
+ }
774
+ if (options.timeout.has_value()) {
775
+ orchestrator_opts.timeout = options.timeout.value();
776
+ }
916
777
 
917
- core::operations::insert_request request{
918
- id,
919
- std::move(value.data),
920
- {},
921
- {},
922
- value.flags,
923
- options.expiry,
924
- durability_level::none,
925
- options.timeout,
926
- { options.retry_strategy },
778
+ std::variant<std::monostate, core::range_scan, core::prefix_scan, core::sampling_scan>
779
+ core_scan_type{};
780
+ switch (scan_type.type) {
781
+ case scan_type::built::prefix_scan:
782
+ core_scan_type = core::prefix_scan{
783
+ scan_type.prefix,
927
784
  };
928
- return core_.execute(
929
- std::move(request), [core = core_, id = std::move(id), options, handler = std::move(handler)](auto resp) mutable {
930
- if (resp.ctx.ec()) {
931
- return handler(std::move(resp.ctx), mutation_result{ resp.cas, std::move(resp.token) });
932
- }
933
-
934
- auto token = resp.token;
935
- core::impl::initiate_observe_poll(core,
936
- std::move(id),
937
- token,
938
- options.timeout,
939
- options.persist_to,
940
- options.replicate_to,
941
- [resp, handler = std::move(handler)](std::error_code ec) mutable {
942
- if (ec) {
943
- resp.ctx.override_ec(ec);
944
- return handler(std::move(resp.ctx), mutation_result{});
945
- }
946
- return handler(std::move(resp.ctx), mutation_result{ resp.cas, std::move(resp.token) });
947
- });
948
- });
949
- }
950
- void replace(std::string document_key, codec::encoded_value encoded, replace_options::built options, replace_handler&& handler) const
951
- {
952
- auto value = std::move(encoded);
953
- auto id = core::document_id{
954
- bucket_name_,
955
- scope_name_,
956
- name_,
957
- std::move(document_key),
785
+ break;
786
+ case scan_type::built::range_scan:
787
+ core_scan_type = core::range_scan{
788
+ (scan_type.from)
789
+ ? std::make_optional(core::scan_term{ scan_type.from->term, scan_type.from->exclusive })
790
+ : std::nullopt,
791
+ (scan_type.to)
792
+ ? std::make_optional(core::scan_term{ scan_type.to->term, scan_type.to->exclusive })
793
+ : std::nullopt,
958
794
  };
959
- if (options.persist_to == persist_to::none && options.replicate_to == replicate_to::none) {
960
- return core_.execute(
961
- core::operations::replace_request{
962
- std::move(id),
963
- std::move(value.data),
964
- {},
965
- {},
966
- value.flags,
967
- options.expiry,
968
- options.cas,
969
- options.durability_level,
970
- options.timeout,
971
- { options.retry_strategy },
972
- options.preserve_expiry,
973
- },
974
- [handler = std::move(handler)](auto resp) mutable {
975
- if (resp.ctx.ec()) {
976
- return handler(std::move(resp.ctx), mutation_result{});
977
- }
978
- return handler(std::move(resp.ctx), mutation_result{ resp.cas, std::move(resp.token) });
979
- });
980
- }
981
-
982
- core::operations::replace_request request{
983
- id,
984
- std::move(value.data),
985
- {},
986
- {},
987
- value.flags,
988
- options.expiry,
989
- options.cas,
990
- durability_level::none,
991
- options.timeout,
992
- { options.retry_strategy },
993
- options.preserve_expiry,
795
+ break;
796
+ case scan_type::built::sampling_scan:
797
+ core_scan_type = core::sampling_scan{
798
+ scan_type.limit,
799
+ scan_type.seed,
994
800
  };
995
- return core_.execute(
996
- std::move(request), [core = core_, id = std::move(id), options, handler = std::move(handler)](auto&& resp) mutable {
997
- if (resp.ctx.ec()) {
998
- return handler(std::move(resp.ctx), mutation_result{ resp.cas, std::move(resp.token) });
999
- }
1000
-
1001
- auto token = resp.token;
1002
- core::impl::initiate_observe_poll(core,
1003
- std::move(id),
1004
- token,
1005
- options.timeout,
1006
- options.persist_to,
1007
- options.replicate_to,
1008
- [resp, handler = std::move(handler)](std::error_code ec) mutable {
1009
- if (ec) {
1010
- resp.ctx.override_ec(ec);
1011
- return handler(std::move(resp.ctx), mutation_result{});
1012
- }
1013
- return handler(std::move(resp.ctx), mutation_result{ resp.cas, std::move(resp.token) });
1014
- });
1015
- });
801
+ break;
1016
802
  }
1017
803
 
1018
- void scan(scan_type::built scan_type, scan_options::built options, scan_handler&& handler) const
1019
- {
1020
- core::range_scan_orchestrator_options orchestrator_opts{ options.ids_only };
1021
- if (!options.mutation_state.empty()) {
1022
- orchestrator_opts.consistent_with = core::mutation_state{ options.mutation_state };
1023
- }
1024
- if (options.batch_item_limit.has_value()) {
1025
- orchestrator_opts.batch_item_limit = options.batch_item_limit.value();
1026
- }
1027
- if (options.batch_byte_limit.has_value()) {
1028
- orchestrator_opts.batch_byte_limit = options.batch_byte_limit.value();
1029
- }
1030
- if (options.concurrency.has_value()) {
1031
- orchestrator_opts.concurrency = options.concurrency.value();
1032
- }
1033
- if (options.timeout.has_value()) {
1034
- orchestrator_opts.timeout = options.timeout.value();
1035
- }
1036
-
1037
- std::variant<std::monostate, core::range_scan, core::prefix_scan, core::sampling_scan> core_scan_type{};
1038
- switch (scan_type.type) {
1039
- case scan_type::built::prefix_scan:
1040
- core_scan_type = core::prefix_scan{
1041
- scan_type.prefix,
1042
- };
1043
- break;
1044
- case scan_type::built::range_scan:
1045
- core_scan_type = core::range_scan{
1046
- (scan_type.from) ? std::make_optional(core::scan_term{ scan_type.from->term, scan_type.from->exclusive })
1047
- : std::nullopt,
1048
- (scan_type.to) ? std::make_optional(core::scan_term{ scan_type.to->term, scan_type.to->exclusive }) : std::nullopt,
1049
- };
1050
- break;
1051
- case scan_type::built::sampling_scan:
1052
- core_scan_type = core::sampling_scan{
1053
- scan_type.limit,
1054
- scan_type.seed,
1055
- };
1056
- break;
804
+ return core_.open_bucket(
805
+ bucket_name_,
806
+ [this, handler = std::move(handler), orchestrator_opts, core_scan_type](
807
+ std::error_code ec) mutable {
808
+ if (ec) {
809
+ return handler(error(ec), {});
1057
810
  }
1058
-
1059
- return core_.open_bucket(
1060
- bucket_name_, [this, handler = std::move(handler), orchestrator_opts, core_scan_type](std::error_code ec) mutable {
1061
- if (ec) {
1062
- return handler(ec, {});
1063
- }
1064
- return core_.with_bucket_configuration(
1065
- bucket_name_,
1066
- [this, handler = std::move(handler), orchestrator_opts, core_scan_type](
1067
- std::error_code ec, const core::topology::configuration& config) mutable {
1068
- if (ec) {
1069
- return handler(ec, {});
1070
- }
1071
- if (!config.capabilities.supports_range_scan()) {
1072
- return handler(errc::common::feature_not_available, {});
1073
- }
1074
- auto agent_group = core::agent_group(core_.io_context(), core::agent_group_config{ { core_ } });
1075
- ec = agent_group.open_bucket(bucket_name_);
1076
- if (ec) {
1077
- return handler(ec, {});
1078
- }
1079
- auto agent = agent_group.get_agent(bucket_name_);
1080
- if (!agent.has_value()) {
1081
- return handler(agent.error(), {});
1082
- }
1083
- if (!config.vbmap.has_value() || config.vbmap->empty()) {
1084
- CB_LOG_WARNING("Unable to get vbucket map for `{}` - cannot perform scan operation", bucket_name_);
1085
- return handler(errc::common::request_canceled, {});
1086
- }
1087
-
1088
- auto orchestrator = core::range_scan_orchestrator(
1089
- core_.io_context(), agent.value(), config.vbmap.value(), scope_name_, name_, core_scan_type, orchestrator_opts);
1090
- return orchestrator.scan([handler = std::move(handler)](auto ec, auto core_scan_result) mutable {
1091
- if (ec) {
1092
- return handler(ec, {});
1093
- }
1094
- auto internal_result = std::make_shared<internal_scan_result>(std::move(core_scan_result));
1095
- scan_result result{ internal_result };
1096
- return handler({}, result);
1097
- });
1098
- });
811
+ return core_.with_bucket_configuration(
812
+ bucket_name_,
813
+ [this, handler = std::move(handler), orchestrator_opts, core_scan_type](
814
+ std::error_code ec, const core::topology::configuration& config) mutable {
815
+ if (ec) {
816
+ return handler(
817
+ error(ec, "An error occurred when attempting to fetch the bucket configuration."),
818
+ {});
819
+ }
820
+ if (!config.capabilities.supports_range_scan()) {
821
+ return handler(error(errc::common::feature_not_available,
822
+ "This bucket does not support range scan."),
823
+ {});
824
+ }
825
+ auto agent_group =
826
+ core::agent_group(core_.io_context(), core::agent_group_config{ { core_ } });
827
+ ec = agent_group.open_bucket(bucket_name_);
828
+ if (ec) {
829
+ return handler(error(ec,
830
+ fmt::format("An error occurred while opening the `{}` bucket.",
831
+ bucket_name_)),
832
+ {});
833
+ }
834
+ auto agent = agent_group.get_agent(bucket_name_);
835
+ if (!agent.has_value()) {
836
+ return handler(
837
+ error(agent.error(),
838
+ fmt::format(
839
+ "An error occurred while getting an operation agent for the `{}` bucket",
840
+ bucket_name_)),
841
+ {});
842
+ }
843
+ if (!config.vbmap.has_value() || config.vbmap->empty()) {
844
+ CB_LOG_WARNING("Unable to get vbucket map for `{}` - cannot perform scan operation",
845
+ bucket_name_);
846
+ return handler(error(errc::common::request_canceled,
847
+ "No vbucket map included with the bucket config"),
848
+ {});
849
+ }
850
+
851
+ auto orchestrator = core::range_scan_orchestrator(core_.io_context(),
852
+ agent.value(),
853
+ config.vbmap.value(),
854
+ scope_name_,
855
+ name_,
856
+ core_scan_type,
857
+ orchestrator_opts);
858
+ return orchestrator.scan(
859
+ [handler = std::move(handler)](auto ec, auto core_scan_result) mutable {
860
+ if (ec) {
861
+ return handler(error(ec, "Error while starting the range scan"), {});
862
+ }
863
+ auto internal_result =
864
+ std::make_shared<internal_scan_result>(std::move(core_scan_result));
865
+ scan_result result{ internal_result };
866
+ return handler({}, result);
867
+ });
1099
868
  });
1100
- }
1101
-
1102
- private:
1103
- core::cluster core_;
1104
- std::string bucket_name_;
1105
- std::string scope_name_;
1106
- std::string name_;
869
+ });
870
+ }
871
+
872
+ private:
873
+ core::cluster core_;
874
+ std::string bucket_name_;
875
+ std::string scope_name_;
876
+ std::string name_;
1107
877
  };
1108
878
 
1109
- collection::collection(core::cluster core, std::string_view bucket_name, std::string_view scope_name, std::string_view name)
879
+ collection::collection(core::cluster core,
880
+ std::string_view bucket_name,
881
+ std::string_view scope_name,
882
+ std::string_view name)
1110
883
  : impl_(std::make_shared<collection_impl>(std::move(core), bucket_name, scope_name, name))
1111
884
  {
1112
885
  }
@@ -1114,46 +887,49 @@ collection::collection(core::cluster core, std::string_view bucket_name, std::st
1114
887
  auto
1115
888
  collection::bucket_name() const -> const std::string&
1116
889
  {
1117
- return impl_->bucket_name();
890
+ return impl_->bucket_name();
1118
891
  }
1119
892
 
1120
893
  auto
1121
894
  collection::scope_name() const -> const std::string&
1122
895
  {
1123
- return impl_->scope_name();
896
+ return impl_->scope_name();
1124
897
  }
1125
898
 
1126
899
  auto
1127
900
  collection::name() const -> const std::string&
1128
901
  {
1129
- return impl_->name();
902
+ return impl_->name();
1130
903
  }
1131
904
 
1132
905
  auto
1133
906
  collection::query_indexes() const -> collection_query_index_manager
1134
907
  {
1135
- return { impl_->core(), impl_->bucket_name(), impl_->scope_name(), impl_->name() };
908
+ return { impl_->core(), impl_->bucket_name(), impl_->scope_name(), impl_->name() };
1136
909
  }
1137
910
 
1138
911
  auto
1139
912
  collection::binary() const -> binary_collection
1140
913
  {
1141
- return { impl_->core(), impl_->bucket_name(), impl_->scope_name(), impl_->name() };
914
+ return { impl_->core(), impl_->bucket_name(), impl_->scope_name(), impl_->name() };
1142
915
  }
1143
916
 
1144
917
  void
1145
918
  collection::get(std::string document_id, const get_options& options, get_handler&& handler) const
1146
919
  {
1147
- return impl_->get(std::move(document_id), options.build(), std::move(handler));
920
+ return impl_->get(std::move(document_id), options.build(), std::move(handler));
1148
921
  }
1149
922
 
1150
923
  auto
1151
- collection::get(std::string document_id, const get_options& options) const -> std::future<std::pair<key_value_error_context, get_result>>
924
+ collection::get(std::string document_id,
925
+ const get_options& options) const -> std::future<std::pair<error, get_result>>
1152
926
  {
1153
- auto barrier = std::make_shared<std::promise<std::pair<key_value_error_context, get_result>>>();
1154
- auto future = barrier->get_future();
1155
- get(std::move(document_id), options, [barrier](auto ctx, auto result) { barrier->set_value({ std::move(ctx), std::move(result) }); });
1156
- return future;
927
+ auto barrier = std::make_shared<std::promise<std::pair<error, get_result>>>();
928
+ auto future = barrier->get_future();
929
+ get(std::move(document_id), options, [barrier](auto err, auto result) {
930
+ barrier->set_value({ std::move(err), std::move(result) });
931
+ });
932
+ return future;
1157
933
  }
1158
934
 
1159
935
  void
@@ -1162,19 +938,24 @@ collection::get_and_touch(std::string document_id,
1162
938
  const get_and_touch_options& options,
1163
939
  get_and_touch_handler&& handler) const
1164
940
  {
1165
- return impl_->get_and_touch(std::move(document_id), core::impl::expiry_relative(duration), options.build(), std::move(handler));
941
+ return impl_->get_and_touch(std::move(document_id),
942
+ core::impl::expiry_relative(duration),
943
+ options.build(),
944
+ std::move(handler));
1166
945
  }
1167
946
 
1168
947
  auto
1169
- collection::get_and_touch(std::string document_id, std::chrono::seconds duration, const get_and_touch_options& options) const
1170
- -> std::future<std::pair<key_value_error_context, get_result>>
948
+ collection::get_and_touch(std::string document_id,
949
+ std::chrono::seconds duration,
950
+ const get_and_touch_options& options) const
951
+ -> std::future<std::pair<error, get_result>>
1171
952
  {
1172
- auto barrier = std::make_shared<std::promise<std::pair<key_value_error_context, get_result>>>();
1173
- auto future = barrier->get_future();
1174
- get_and_touch(std::move(document_id), duration, options, [barrier](auto ctx, auto result) {
1175
- barrier->set_value({ std::move(ctx), std::move(result) });
1176
- });
1177
- return future;
953
+ auto barrier = std::make_shared<std::promise<std::pair<error, get_result>>>();
954
+ auto future = barrier->get_future();
955
+ get_and_touch(std::move(document_id), duration, options, [barrier](auto err, auto result) {
956
+ barrier->set_value({ std::move(err), std::move(result) });
957
+ });
958
+ return future;
1178
959
  }
1179
960
 
1180
961
  void
@@ -1183,38 +964,49 @@ collection::get_and_touch(std::string document_id,
1183
964
  const get_and_touch_options& options,
1184
965
  get_and_touch_handler&& handler) const
1185
966
  {
1186
- return impl_->get_and_touch(std::move(document_id), core::impl::expiry_absolute(time_point), options.build(), std::move(handler));
967
+ return impl_->get_and_touch(std::move(document_id),
968
+ core::impl::expiry_absolute(time_point),
969
+ options.build(),
970
+ std::move(handler));
1187
971
  }
1188
972
 
1189
973
  auto
1190
974
  collection::get_and_touch(std::string document_id,
1191
975
  std::chrono::system_clock::time_point time_point,
1192
- const get_and_touch_options& options) const -> std::future<std::pair<key_value_error_context, get_result>>
976
+ const get_and_touch_options& options) const
977
+ -> std::future<std::pair<error, get_result>>
1193
978
  {
1194
- auto barrier = std::make_shared<std::promise<std::pair<key_value_error_context, get_result>>>();
1195
- auto future = barrier->get_future();
1196
- get_and_touch(std::move(document_id), time_point, options, [barrier](auto ctx, auto result) {
1197
- barrier->set_value({ std::move(ctx), std::move(result) });
1198
- });
1199
- return future;
979
+ auto barrier = std::make_shared<std::promise<std::pair<error, get_result>>>();
980
+ auto future = barrier->get_future();
981
+ get_and_touch(std::move(document_id), time_point, options, [barrier](auto err, auto result) {
982
+ barrier->set_value({ std::move(err), std::move(result) });
983
+ });
984
+ return future;
1200
985
  }
1201
986
 
1202
987
  void
1203
- collection::touch(std::string document_id, std::chrono::seconds duration, const touch_options& options, touch_handler&& handler) const
988
+ collection::touch(std::string document_id,
989
+ std::chrono::seconds duration,
990
+ const touch_options& options,
991
+ touch_handler&& handler) const
1204
992
  {
1205
- return impl_->touch(std::move(document_id), core::impl::expiry_relative(duration), options.build(), std::move(handler));
993
+ return impl_->touch(std::move(document_id),
994
+ core::impl::expiry_relative(duration),
995
+ options.build(),
996
+ std::move(handler));
1206
997
  }
1207
998
 
1208
999
  auto
1209
- collection::touch(std::string document_id, std::chrono::seconds duration, const touch_options& options) const
1210
- -> std::future<std::pair<key_value_error_context, result>>
1000
+ collection::touch(std::string document_id,
1001
+ std::chrono::seconds duration,
1002
+ const touch_options& options) const -> std::future<std::pair<error, result>>
1211
1003
  {
1212
- auto barrier = std::make_shared<std::promise<std::pair<key_value_error_context, result>>>();
1213
- auto future = barrier->get_future();
1214
- touch(std::move(document_id), duration, options, [barrier](auto ctx, auto result) {
1215
- barrier->set_value({ std::move(ctx), std::move(result) });
1216
- });
1217
- return future;
1004
+ auto barrier = std::make_shared<std::promise<std::pair<error, result>>>();
1005
+ auto future = barrier->get_future();
1006
+ touch(std::move(document_id), duration, options, [barrier](auto err, auto result) {
1007
+ barrier->set_value({ std::move(err), std::move(result) });
1008
+ });
1009
+ return future;
1218
1010
  }
1219
1011
 
1220
1012
  void
@@ -1223,73 +1015,83 @@ collection::touch(std::string document_id,
1223
1015
  const touch_options& options,
1224
1016
  touch_handler&& handler) const
1225
1017
  {
1226
- return impl_->touch(std::move(document_id), core::impl::expiry_absolute(time_point), options.build(), std::move(handler));
1018
+ return impl_->touch(std::move(document_id),
1019
+ core::impl::expiry_absolute(time_point),
1020
+ options.build(),
1021
+ std::move(handler));
1227
1022
  }
1228
1023
 
1229
1024
  auto
1230
- collection::touch(std::string document_id, std::chrono::system_clock::time_point time_point, const touch_options& options) const
1231
- -> std::future<std::pair<key_value_error_context, result>>
1025
+ collection::touch(std::string document_id,
1026
+ std::chrono::system_clock::time_point time_point,
1027
+ const touch_options& options) const -> std::future<std::pair<error, result>>
1232
1028
  {
1233
- auto barrier = std::make_shared<std::promise<std::pair<key_value_error_context, result>>>();
1234
- auto future = barrier->get_future();
1235
- touch(std::move(document_id), time_point, options, [barrier](auto ctx, auto result) {
1236
- barrier->set_value({ std::move(ctx), std::move(result) });
1237
- });
1238
- return future;
1029
+ auto barrier = std::make_shared<std::promise<std::pair<error, result>>>();
1030
+ auto future = barrier->get_future();
1031
+ touch(std::move(document_id), time_point, options, [barrier](auto err, auto result) {
1032
+ barrier->set_value({ std::move(err), std::move(result) });
1033
+ });
1034
+ return future;
1239
1035
  }
1240
1036
 
1241
1037
  void
1242
- collection::get_any_replica(std::string document_id, const get_any_replica_options& options, get_any_replica_handler&& handler) const
1038
+ collection::get_any_replica(std::string document_id,
1039
+ const get_any_replica_options& options,
1040
+ get_any_replica_handler&& handler) const
1243
1041
  {
1244
- return impl_->get_any_replica(std::move(document_id), options.build(), std::move(handler));
1042
+ return impl_->get_any_replica(std::move(document_id), options.build(), std::move(handler));
1245
1043
  }
1246
1044
 
1247
1045
  auto
1248
1046
  collection::get_any_replica(std::string document_id, const get_any_replica_options& options) const
1249
- -> std::future<std::pair<key_value_error_context, get_replica_result>>
1047
+ -> std::future<std::pair<error, get_replica_result>>
1250
1048
  {
1251
- auto barrier = std::make_shared<std::promise<std::pair<key_value_error_context, get_replica_result>>>();
1252
- auto future = barrier->get_future();
1253
- get_any_replica(std::move(document_id), options, [barrier](auto ctx, auto result) {
1254
- barrier->set_value({ std::move(ctx), std::move(result) });
1255
- });
1256
- return future;
1049
+ auto barrier = std::make_shared<std::promise<std::pair<error, get_replica_result>>>();
1050
+ auto future = barrier->get_future();
1051
+ get_any_replica(std::move(document_id), options, [barrier](auto err, auto result) {
1052
+ barrier->set_value({ std::move(err), std::move(result) });
1053
+ });
1054
+ return future;
1257
1055
  }
1258
1056
 
1259
1057
  void
1260
- collection::get_all_replicas(std::string document_id, const get_all_replicas_options& options, get_all_replicas_handler&& handler) const
1058
+ collection::get_all_replicas(std::string document_id,
1059
+ const get_all_replicas_options& options,
1060
+ get_all_replicas_handler&& handler) const
1261
1061
  {
1262
- return impl_->get_all_replicas(std::move(document_id), options.build(), std::move(handler));
1062
+ return impl_->get_all_replicas(std::move(document_id), options.build(), std::move(handler));
1263
1063
  }
1264
1064
 
1265
1065
  auto
1266
1066
  collection::get_all_replicas(std::string document_id, const get_all_replicas_options& options) const
1267
- -> std::future<std::pair<key_value_error_context, get_all_replicas_result>>
1067
+ -> std::future<std::pair<error, get_all_replicas_result>>
1268
1068
  {
1269
- auto barrier = std::make_shared<std::promise<std::pair<key_value_error_context, get_all_replicas_result>>>();
1270
- auto future = barrier->get_future();
1271
- get_all_replicas(std::move(document_id), options, [barrier](auto ctx, auto result) {
1272
- barrier->set_value({ std::move(ctx), std::move(result) });
1273
- });
1274
- return future;
1069
+ auto barrier = std::make_shared<std::promise<std::pair<error, get_all_replicas_result>>>();
1070
+ auto future = barrier->get_future();
1071
+ get_all_replicas(std::move(document_id), options, [barrier](auto err, auto result) {
1072
+ barrier->set_value({ std::move(err), std::move(result) });
1073
+ });
1074
+ return future;
1275
1075
  }
1276
1076
 
1277
1077
  void
1278
- collection::remove(std::string document_id, const remove_options& options, remove_handler&& handler) const
1078
+ collection::remove(std::string document_id,
1079
+ const remove_options& options,
1080
+ remove_handler&& handler) const
1279
1081
  {
1280
- return impl_->remove(std::move(document_id), options.build(), std::move(handler));
1082
+ return impl_->remove(std::move(document_id), options.build(), std::move(handler));
1281
1083
  }
1282
1084
 
1283
1085
  auto
1284
1086
  collection::remove(std::string document_id, const remove_options& options) const
1285
- -> std::future<std::pair<key_value_error_context, mutation_result>>
1087
+ -> std::future<std::pair<error, mutation_result>>
1286
1088
  {
1287
- auto barrier = std::make_shared<std::promise<std::pair<key_value_error_context, mutation_result>>>();
1288
- auto future = barrier->get_future();
1289
- remove(std::move(document_id), options, [barrier](auto ctx, auto result) {
1290
- barrier->set_value({ std::move(ctx), std::move(result) });
1291
- });
1292
- return future;
1089
+ auto barrier = std::make_shared<std::promise<std::pair<error, mutation_result>>>();
1090
+ auto future = barrier->get_future();
1091
+ remove(std::move(document_id), options, [barrier](auto err, auto result) {
1092
+ barrier->set_value({ std::move(err), std::move(result) });
1093
+ });
1094
+ return future;
1293
1095
  }
1294
1096
 
1295
1097
  void
@@ -1298,19 +1100,22 @@ collection::mutate_in(std::string document_id,
1298
1100
  const mutate_in_options& options,
1299
1101
  mutate_in_handler&& handler) const
1300
1102
  {
1301
- return impl_->mutate_in(std::move(document_id), specs.specs(), options.build(), std::move(handler));
1103
+ return impl_->mutate_in(
1104
+ std::move(document_id), specs.specs(), options.build(), std::move(handler));
1302
1105
  }
1303
1106
 
1304
1107
  auto
1305
- collection::mutate_in(std::string document_id, const mutate_in_specs& specs, const mutate_in_options& options) const
1306
- -> std::future<std::pair<subdocument_error_context, mutate_in_result>>
1108
+ collection::mutate_in(std::string document_id,
1109
+ const mutate_in_specs& specs,
1110
+ const mutate_in_options& options) const
1111
+ -> std::future<std::pair<error, mutate_in_result>>
1307
1112
  {
1308
- auto barrier = std::make_shared<std::promise<std::pair<subdocument_error_context, mutate_in_result>>>();
1309
- auto future = barrier->get_future();
1310
- mutate_in(std::move(document_id), specs, options, [barrier](auto ctx, auto result) {
1311
- barrier->set_value({ std::move(ctx), std::move(result) });
1312
- });
1313
- return future;
1113
+ auto barrier = std::make_shared<std::promise<std::pair<error, mutate_in_result>>>();
1114
+ auto future = barrier->get_future();
1115
+ mutate_in(std::move(document_id), specs, options, [barrier](auto err, auto result) {
1116
+ barrier->set_value({ std::move(err), std::move(result) });
1117
+ });
1118
+ return future;
1314
1119
  }
1315
1120
 
1316
1121
  void
@@ -1319,19 +1124,22 @@ collection::lookup_in(std::string document_id,
1319
1124
  const lookup_in_options& options,
1320
1125
  lookup_in_handler&& handler) const
1321
1126
  {
1322
- return impl_->lookup_in(std::move(document_id), specs.specs(), options.build(), std::move(handler));
1127
+ return impl_->lookup_in(
1128
+ std::move(document_id), specs.specs(), options.build(), std::move(handler));
1323
1129
  }
1324
1130
 
1325
1131
  auto
1326
- collection::lookup_in(std::string document_id, const lookup_in_specs& specs, const lookup_in_options& options) const
1327
- -> std::future<std::pair<subdocument_error_context, lookup_in_result>>
1132
+ collection::lookup_in(std::string document_id,
1133
+ const lookup_in_specs& specs,
1134
+ const lookup_in_options& options) const
1135
+ -> std::future<std::pair<error, lookup_in_result>>
1328
1136
  {
1329
- auto barrier = std::make_shared<std::promise<std::pair<subdocument_error_context, lookup_in_result>>>();
1330
- auto future = barrier->get_future();
1331
- lookup_in(std::move(document_id), specs, options, [barrier](auto ctx, auto result) {
1332
- barrier->set_value({ std::move(ctx), std::move(result) });
1333
- });
1334
- return future;
1137
+ auto barrier = std::make_shared<std::promise<std::pair<error, lookup_in_result>>>();
1138
+ auto future = barrier->get_future();
1139
+ lookup_in(std::move(document_id), specs, options, [barrier](auto err, auto result) {
1140
+ barrier->set_value({ std::move(err), std::move(result) });
1141
+ });
1142
+ return future;
1335
1143
  }
1336
1144
 
1337
1145
  void
@@ -1340,21 +1148,22 @@ collection::lookup_in_all_replicas(std::string document_id,
1340
1148
  const lookup_in_all_replicas_options& options,
1341
1149
  lookup_in_all_replicas_handler&& handler) const
1342
1150
  {
1343
- return impl_->lookup_in_all_replicas(std::move(document_id), specs.specs(), options.build(), std::move(handler));
1151
+ return impl_->lookup_in_all_replicas(
1152
+ std::move(document_id), specs.specs(), options.build(), std::move(handler));
1344
1153
  }
1345
1154
 
1346
1155
  auto
1347
1156
  collection::lookup_in_all_replicas(std::string document_id,
1348
1157
  const lookup_in_specs& specs,
1349
1158
  const lookup_in_all_replicas_options& options) const
1350
- -> std::future<std::pair<subdocument_error_context, lookup_in_all_replicas_result>>
1159
+ -> std::future<std::pair<error, lookup_in_all_replicas_result>>
1351
1160
  {
1352
- auto barrier = std::make_shared<std::promise<std::pair<subdocument_error_context, lookup_in_all_replicas_result>>>();
1353
- auto future = barrier->get_future();
1354
- lookup_in_all_replicas(std::move(document_id), specs, options, [barrier](auto ctx, auto result) {
1355
- barrier->set_value({ std::move(ctx), std::move(result) });
1356
- });
1357
- return future;
1161
+ auto barrier = std::make_shared<std::promise<std::pair<error, lookup_in_all_replicas_result>>>();
1162
+ auto future = barrier->get_future();
1163
+ lookup_in_all_replicas(std::move(document_id), specs, options, [barrier](auto err, auto result) {
1164
+ barrier->set_value({ std::move(err), std::move(result) });
1165
+ });
1166
+ return future;
1358
1167
  }
1359
1168
 
1360
1169
  void
@@ -1363,19 +1172,22 @@ collection::lookup_in_any_replica(std::string document_id,
1363
1172
  const lookup_in_any_replica_options& options,
1364
1173
  lookup_in_any_replica_handler&& handler) const
1365
1174
  {
1366
- return impl_->lookup_in_any_replica(std::move(document_id), specs.specs(), options.build(), std::move(handler));
1175
+ return impl_->lookup_in_any_replica(
1176
+ std::move(document_id), specs.specs(), options.build(), std::move(handler));
1367
1177
  }
1368
1178
 
1369
1179
  auto
1370
- collection::lookup_in_any_replica(std::string document_id, const lookup_in_specs& specs, const lookup_in_any_replica_options& options) const
1371
- -> std::future<std::pair<subdocument_error_context, lookup_in_replica_result>>
1180
+ collection::lookup_in_any_replica(std::string document_id,
1181
+ const lookup_in_specs& specs,
1182
+ const lookup_in_any_replica_options& options) const
1183
+ -> std::future<std::pair<error, lookup_in_replica_result>>
1372
1184
  {
1373
- auto barrier = std::make_shared<std::promise<std::pair<subdocument_error_context, lookup_in_replica_result>>>();
1374
- auto future = barrier->get_future();
1375
- lookup_in_any_replica(std::move(document_id), specs, options, [barrier](auto ctx, auto result) {
1376
- barrier->set_value({ std::move(ctx), std::move(result) });
1377
- });
1378
- return future;
1185
+ auto barrier = std::make_shared<std::promise<std::pair<error, lookup_in_replica_result>>>();
1186
+ auto future = barrier->get_future();
1187
+ lookup_in_any_replica(std::move(document_id), specs, options, [barrier](auto err, auto result) {
1188
+ barrier->set_value({ std::move(err), std::move(result) });
1189
+ });
1190
+ return future;
1379
1191
  }
1380
1192
 
1381
1193
  void
@@ -1384,121 +1196,155 @@ collection::get_and_lock(std::string document_id,
1384
1196
  const get_and_lock_options& options,
1385
1197
  get_and_lock_handler&& handler) const
1386
1198
  {
1387
- return impl_->get_and_lock(std::move(document_id), lock_duration, options.build(), std::move(handler));
1199
+ return impl_->get_and_lock(
1200
+ std::move(document_id), lock_duration, options.build(), std::move(handler));
1388
1201
  }
1389
1202
 
1390
1203
  auto
1391
- collection::get_and_lock(std::string document_id, std::chrono::seconds lock_duration, const get_and_lock_options& options) const
1392
- -> std::future<std::pair<key_value_error_context, get_result>>
1204
+ collection::get_and_lock(std::string document_id,
1205
+ std::chrono::seconds lock_duration,
1206
+ const get_and_lock_options& options) const
1207
+ -> std::future<std::pair<error, get_result>>
1393
1208
  {
1394
- auto barrier = std::make_shared<std::promise<std::pair<key_value_error_context, get_result>>>();
1395
- auto future = barrier->get_future();
1396
- get_and_lock(std::move(document_id), lock_duration, options, [barrier](auto ctx, auto result) {
1397
- barrier->set_value({ std::move(ctx), std::move(result) });
1398
- });
1399
- return future;
1209
+ auto barrier = std::make_shared<std::promise<std::pair<error, get_result>>>();
1210
+ auto future = barrier->get_future();
1211
+ get_and_lock(std::move(document_id), lock_duration, options, [barrier](auto err, auto result) {
1212
+ barrier->set_value({ std::move(err), std::move(result) });
1213
+ });
1214
+ return future;
1400
1215
  }
1401
1216
 
1402
1217
  void
1403
- collection::unlock(std::string document_id, couchbase::cas cas, const unlock_options& options, unlock_handler&& handler) const
1218
+ collection::unlock(std::string document_id,
1219
+ couchbase::cas cas,
1220
+ const unlock_options& options,
1221
+ unlock_handler&& handler) const
1404
1222
  {
1405
- return impl_->unlock(std::move(document_id), cas, options.build(), std::move(handler));
1223
+ return impl_->unlock(std::move(document_id), cas, options.build(), std::move(handler));
1406
1224
  }
1407
1225
 
1408
1226
  auto
1409
- collection::unlock(std::string document_id, couchbase::cas cas, const unlock_options& options) const -> std::future<key_value_error_context>
1227
+ collection::unlock(std::string document_id,
1228
+ couchbase::cas cas,
1229
+ const unlock_options& options) const -> std::future<error>
1410
1230
  {
1411
- auto barrier = std::make_shared<std::promise<key_value_error_context>>();
1412
- auto future = barrier->get_future();
1413
- unlock(std::move(document_id), cas, options, [barrier](auto ctx) { barrier->set_value({ std::move(ctx) }); });
1414
- return future;
1231
+ auto barrier = std::make_shared<std::promise<error>>();
1232
+ auto future = barrier->get_future();
1233
+ unlock(std::move(document_id), cas, options, [barrier](auto err) {
1234
+ barrier->set_value({ std::move(err) });
1235
+ });
1236
+ return future;
1415
1237
  }
1416
1238
 
1417
1239
  void
1418
- collection::exists(std::string document_id, const exists_options& options, exists_handler&& handler) const
1240
+ collection::exists(std::string document_id,
1241
+ const exists_options& options,
1242
+ exists_handler&& handler) const
1419
1243
  {
1420
- return impl_->exists(std::move(document_id), options.build(), std::move(handler));
1244
+ return impl_->exists(std::move(document_id), options.build(), std::move(handler));
1421
1245
  }
1422
1246
 
1423
1247
  auto
1424
1248
  collection::exists(std::string document_id, const exists_options& options) const
1425
- -> std::future<std::pair<key_value_error_context, exists_result>>
1249
+ -> std::future<std::pair<error, exists_result>>
1426
1250
  {
1427
- auto barrier = std::make_shared<std::promise<std::pair<key_value_error_context, exists_result>>>();
1428
- auto future = barrier->get_future();
1429
- exists(std::move(document_id), options, [barrier](auto ctx, auto result) {
1430
- barrier->set_value({ std::move(ctx), std::move(result) });
1431
- });
1432
- return future;
1251
+ auto barrier = std::make_shared<std::promise<std::pair<error, exists_result>>>();
1252
+ auto future = barrier->get_future();
1253
+ exists(std::move(document_id), options, [barrier](auto err, auto result) {
1254
+ barrier->set_value({ std::move(err), std::move(result) });
1255
+ });
1256
+ return future;
1433
1257
  }
1434
1258
 
1435
1259
  void
1436
- collection::upsert(std::string document_id, codec::encoded_value document, const upsert_options& options, upsert_handler&& handler) const
1260
+ collection::upsert(std::string document_id,
1261
+ codec::encoded_value document,
1262
+ const upsert_options& options,
1263
+ upsert_handler&& handler) const
1437
1264
  {
1438
- return impl_->upsert(std::move(document_id), std::move(document), options.build(), std::move(handler));
1265
+ return impl_->upsert(
1266
+ std::move(document_id), std::move(document), options.build(), std::move(handler));
1439
1267
  }
1440
1268
 
1441
1269
  auto
1442
- collection::upsert(std::string document_id, codec::encoded_value document, const upsert_options& options) const
1443
- -> std::future<std::pair<key_value_error_context, mutation_result>>
1270
+ collection::upsert(std::string document_id,
1271
+ codec::encoded_value document,
1272
+ const upsert_options& options) const
1273
+ -> std::future<std::pair<error, mutation_result>>
1444
1274
  {
1445
- auto barrier = std::make_shared<std::promise<std::pair<key_value_error_context, mutation_result>>>();
1446
- auto future = barrier->get_future();
1447
- upsert(std::move(document_id), std::move(document), options, [barrier](auto ctx, auto result) {
1448
- barrier->set_value({ std::move(ctx), std::move(result) });
1449
- });
1450
- return future;
1275
+ auto barrier = std::make_shared<std::promise<std::pair<error, mutation_result>>>();
1276
+ auto future = barrier->get_future();
1277
+ upsert(std::move(document_id), std::move(document), options, [barrier](auto err, auto result) {
1278
+ barrier->set_value({ std::move(err), std::move(result) });
1279
+ });
1280
+ return future;
1451
1281
  }
1452
1282
 
1453
1283
  void
1454
- collection::insert(std::string document_id, codec::encoded_value document, const insert_options& options, insert_handler&& handler) const
1284
+ collection::insert(std::string document_id,
1285
+ codec::encoded_value document,
1286
+ const insert_options& options,
1287
+ insert_handler&& handler) const
1455
1288
  {
1456
- return impl_->insert(std::move(document_id), std::move(document), options.build(), std::move(handler));
1289
+ return impl_->insert(
1290
+ std::move(document_id), std::move(document), options.build(), std::move(handler));
1457
1291
  }
1458
1292
 
1459
1293
  auto
1460
- collection::insert(std::string document_id, codec::encoded_value document, const insert_options& options) const
1461
- -> std::future<std::pair<key_value_error_context, mutation_result>>
1294
+ collection::insert(std::string document_id,
1295
+ codec::encoded_value document,
1296
+ const insert_options& options) const
1297
+ -> std::future<std::pair<error, mutation_result>>
1462
1298
  {
1463
- auto barrier = std::make_shared<std::promise<std::pair<key_value_error_context, mutation_result>>>();
1464
- auto future = barrier->get_future();
1465
- insert(std::move(document_id), std::move(document), options, [barrier](auto ctx, auto result) {
1466
- barrier->set_value({ std::move(ctx), std::move(result) });
1467
- });
1468
- return future;
1299
+ auto barrier = std::make_shared<std::promise<std::pair<error, mutation_result>>>();
1300
+ auto future = barrier->get_future();
1301
+ insert(std::move(document_id), std::move(document), options, [barrier](auto err, auto result) {
1302
+ barrier->set_value({ std::move(err), std::move(result) });
1303
+ });
1304
+ return future;
1469
1305
  }
1470
1306
 
1471
1307
  void
1472
- collection::replace(std::string document_id, codec::encoded_value document, const replace_options& options, replace_handler&& handler) const
1308
+ collection::replace(std::string document_id,
1309
+ codec::encoded_value document,
1310
+ const replace_options& options,
1311
+ replace_handler&& handler) const
1473
1312
  {
1474
- return impl_->replace(std::move(document_id), std::move(document), options.build(), std::move(handler));
1313
+ return impl_->replace(
1314
+ std::move(document_id), std::move(document), options.build(), std::move(handler));
1475
1315
  }
1476
1316
 
1477
1317
  auto
1478
- collection::replace(std::string document_id, codec::encoded_value document, const replace_options& options) const
1479
- -> std::future<std::pair<key_value_error_context, mutation_result>>
1318
+ collection::replace(std::string document_id,
1319
+ codec::encoded_value document,
1320
+ const replace_options& options) const
1321
+ -> std::future<std::pair<error, mutation_result>>
1480
1322
  {
1481
- auto barrier = std::make_shared<std::promise<std::pair<key_value_error_context, mutation_result>>>();
1482
- auto future = barrier->get_future();
1483
- replace(std::move(document_id), std::move(document), options, [barrier](auto ctx, auto result) {
1484
- barrier->set_value({ std::move(ctx), std::move(result) });
1485
- });
1486
- return future;
1323
+ auto barrier = std::make_shared<std::promise<std::pair<error, mutation_result>>>();
1324
+ auto future = barrier->get_future();
1325
+ replace(std::move(document_id), std::move(document), options, [barrier](auto err, auto result) {
1326
+ barrier->set_value({ std::move(err), std::move(result) });
1327
+ });
1328
+ return future;
1487
1329
  }
1488
1330
 
1489
1331
  void
1490
- collection::scan(const couchbase::scan_type& scan_type, const couchbase::scan_options& options, couchbase::scan_handler&& handler) const
1332
+ collection::scan(const couchbase::scan_type& scan_type,
1333
+ const couchbase::scan_options& options,
1334
+ couchbase::scan_handler&& handler) const
1491
1335
  {
1492
- return impl_->scan(scan_type.build(), options.build(), std::move(handler));
1336
+ return impl_->scan(scan_type.build(), options.build(), std::move(handler));
1493
1337
  }
1494
1338
 
1495
1339
  auto
1496
- collection::scan(const couchbase::scan_type& scan_type, const couchbase::scan_options& options) const
1497
- -> std::future<std::pair<std::error_code, scan_result>>
1340
+ collection::scan(const couchbase::scan_type& scan_type, const couchbase::scan_options& options)
1341
+ const -> std::future<std::pair<error, scan_result>>
1498
1342
  {
1499
- auto barrier = std::make_shared<std::promise<std::pair<std::error_code, scan_result>>>();
1500
- auto future = barrier->get_future();
1501
- scan(scan_type, options, [barrier](auto ec, auto result) { barrier->set_value({ ec, std::move(result) }); });
1502
- return future;
1343
+ auto barrier = std::make_shared<std::promise<std::pair<error, scan_result>>>();
1344
+ auto future = barrier->get_future();
1345
+ scan(scan_type, options, [barrier](auto err, auto result) {
1346
+ barrier->set_value({ err, std::move(result) });
1347
+ });
1348
+ return future;
1503
1349
  }
1504
1350
  } // namespace couchbase