couchbase 3.5.1 → 3.5.2

Sign up to get free protection for your applications and to get access to all the features.
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