couchbase 3.4.2 → 3.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (355) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/ext/couchbase/CMakeLists.txt +71 -7
  4. data/ext/couchbase/cmake/Documentation.cmake +0 -1
  5. data/ext/couchbase/cmake/OpenSSL.cmake +98 -3
  6. data/ext/couchbase/cmake/Testing.cmake +12 -4
  7. data/ext/couchbase/cmake/build_config.hxx.in +3 -0
  8. data/ext/couchbase/core/bucket.cxx +183 -151
  9. data/ext/couchbase/core/bucket.hxx +23 -1
  10. data/ext/couchbase/core/cluster.hxx +51 -13
  11. data/ext/couchbase/core/cluster_options.cxx +2 -2
  12. data/ext/couchbase/core/cluster_options.hxx +7 -6
  13. data/ext/couchbase/core/cluster_options_fwd.hxx +26 -0
  14. data/ext/couchbase/core/config_profile.hxx +1 -54
  15. data/ext/couchbase/core/config_profiles.cxx +79 -0
  16. data/ext/couchbase/core/config_profiles.hxx +56 -0
  17. data/ext/couchbase/core/crud_component.cxx +51 -22
  18. data/ext/couchbase/core/error_context/key_value.cxx +2 -1
  19. data/ext/couchbase/core/error_context/key_value.hxx +10 -12
  20. data/ext/couchbase/core/error_context/search.hxx +1 -1
  21. data/ext/couchbase/core/impl/analytics.cxx +1 -0
  22. data/ext/couchbase/core/impl/boolean_field_query.cxx +40 -0
  23. data/ext/couchbase/core/impl/boolean_query.cxx +62 -0
  24. data/ext/couchbase/core/impl/build_deferred_query_indexes.cxx +115 -50
  25. data/ext/couchbase/core/impl/cluster.cxx +8 -0
  26. data/ext/couchbase/core/impl/conjunction_query.cxx +51 -0
  27. data/ext/couchbase/core/impl/create_bucket.cxx +155 -0
  28. data/ext/couchbase/core/impl/create_query_index.cxx +172 -59
  29. data/ext/couchbase/core/impl/date_range.cxx +89 -0
  30. data/ext/couchbase/core/impl/date_range_facet.cxx +54 -0
  31. data/ext/couchbase/core/impl/date_range_facet_result.cxx +64 -0
  32. data/ext/couchbase/core/impl/date_range_query.cxx +125 -0
  33. data/ext/couchbase/core/impl/disjunction_query.cxx +51 -0
  34. data/ext/couchbase/core/impl/dns_srv_tracker.cxx +2 -1
  35. data/ext/couchbase/core/impl/drop_bucket.cxx +66 -0
  36. data/ext/couchbase/core/impl/drop_query_index.cxx +138 -59
  37. data/ext/couchbase/core/impl/encoded_search_facet.hxx +29 -0
  38. data/ext/couchbase/core/impl/encoded_search_query.hxx +29 -0
  39. data/ext/couchbase/core/impl/encoded_search_sort.hxx +29 -0
  40. data/ext/couchbase/core/impl/flush_bucket.cxx +66 -0
  41. data/ext/couchbase/core/impl/geo_bounding_box_query.cxx +46 -0
  42. data/ext/couchbase/core/impl/geo_distance_query.cxx +43 -0
  43. data/ext/couchbase/core/impl/geo_polygon_query.cxx +46 -0
  44. data/ext/couchbase/core/impl/get_all_buckets.cxx +163 -0
  45. data/ext/couchbase/core/impl/get_all_query_indexes.cxx +67 -37
  46. data/ext/couchbase/core/impl/get_bucket.cxx +153 -0
  47. data/ext/couchbase/core/impl/internal_date_range_facet_result.cxx +80 -0
  48. data/ext/couchbase/core/impl/internal_date_range_facet_result.hxx +48 -0
  49. data/ext/couchbase/core/impl/internal_manager_error_context.cxx +113 -0
  50. data/ext/couchbase/core/impl/internal_manager_error_context.hxx +60 -0
  51. data/ext/couchbase/core/impl/internal_numeric_range_facet_result.cxx +80 -0
  52. data/ext/couchbase/core/impl/internal_numeric_range_facet_result.hxx +48 -0
  53. data/ext/couchbase/core/impl/internal_search_error_context.cxx +141 -0
  54. data/ext/couchbase/core/impl/internal_search_error_context.hxx +61 -0
  55. data/ext/couchbase/core/impl/internal_search_meta_data.cxx +60 -0
  56. data/ext/couchbase/core/impl/internal_search_meta_data.hxx +41 -0
  57. data/ext/couchbase/core/impl/internal_search_result.cxx +84 -0
  58. data/ext/couchbase/core/impl/internal_search_result.hxx +43 -0
  59. data/ext/couchbase/core/impl/internal_search_row.cxx +82 -0
  60. data/ext/couchbase/core/impl/internal_search_row.hxx +56 -0
  61. data/ext/couchbase/core/impl/internal_search_row_location.hxx +32 -0
  62. data/ext/couchbase/core/impl/internal_search_row_locations.cxx +137 -0
  63. data/ext/couchbase/core/impl/internal_search_row_locations.hxx +45 -0
  64. data/ext/couchbase/core/impl/internal_term_facet_result.cxx +80 -0
  65. data/ext/couchbase/core/impl/internal_term_facet_result.hxx +48 -0
  66. data/ext/couchbase/core/impl/key_value_error_category.cxx +2 -4
  67. data/ext/couchbase/core/impl/key_value_error_context.cxx +98 -0
  68. data/ext/couchbase/core/impl/lookup_in.cxx +1 -0
  69. data/ext/couchbase/core/impl/lookup_in_all_replicas.cxx +176 -0
  70. data/ext/couchbase/core/impl/lookup_in_all_replicas.hxx +80 -0
  71. data/ext/couchbase/core/impl/lookup_in_any_replica.cxx +167 -0
  72. data/ext/couchbase/core/impl/lookup_in_any_replica.hxx +75 -0
  73. data/ext/couchbase/core/impl/lookup_in_replica.cxx +97 -0
  74. data/ext/couchbase/core/impl/lookup_in_replica.hxx +67 -0
  75. data/ext/couchbase/core/impl/manager_error_context.cxx +100 -0
  76. data/ext/couchbase/core/impl/match_all_query.cxx +35 -0
  77. data/ext/couchbase/core/impl/match_none_query.cxx +35 -0
  78. data/ext/couchbase/core/impl/match_phrase_query.cxx +43 -0
  79. data/ext/couchbase/core/impl/match_query.cxx +59 -0
  80. data/ext/couchbase/core/impl/numeric_range.cxx +49 -0
  81. data/ext/couchbase/core/impl/numeric_range_facet.cxx +54 -0
  82. data/ext/couchbase/core/impl/numeric_range_facet_result.cxx +64 -0
  83. data/ext/couchbase/core/impl/numeric_range_query.cxx +56 -0
  84. data/ext/couchbase/core/impl/phrase_query.cxx +42 -0
  85. data/ext/couchbase/core/impl/prefix_query.cxx +40 -0
  86. data/ext/couchbase/core/impl/query.cxx +1 -0
  87. data/ext/couchbase/core/impl/query_error_context.cxx +75 -0
  88. data/ext/couchbase/core/impl/query_string_query.cxx +37 -0
  89. data/ext/couchbase/core/impl/regexp_query.cxx +40 -0
  90. data/ext/couchbase/core/impl/search.cxx +191 -0
  91. data/ext/couchbase/core/impl/search_error_context.cxx +147 -0
  92. data/ext/couchbase/core/impl/search_meta_data.cxx +46 -0
  93. data/ext/couchbase/core/impl/search_result.cxx +66 -0
  94. data/ext/couchbase/core/impl/search_row.cxx +74 -0
  95. data/ext/couchbase/core/impl/search_row_location.cxx +64 -0
  96. data/ext/couchbase/core/impl/search_row_locations.cxx +66 -0
  97. data/ext/couchbase/core/impl/search_sort_field.cxx +104 -0
  98. data/ext/couchbase/core/impl/search_sort_id.cxx +43 -0
  99. data/ext/couchbase/core/impl/search_sort_score.cxx +43 -0
  100. data/ext/couchbase/core/impl/term_facet.cxx +36 -0
  101. data/ext/couchbase/core/impl/term_facet_result.cxx +64 -0
  102. data/ext/couchbase/core/impl/term_query.cxx +56 -0
  103. data/ext/couchbase/core/impl/term_range_query.cxx +57 -0
  104. data/ext/couchbase/core/impl/update_bucket.cxx +130 -0
  105. data/ext/couchbase/core/impl/watch_query_indexes.cxx +53 -29
  106. data/ext/couchbase/core/impl/wildcard_query.cxx +40 -0
  107. data/ext/couchbase/core/io/dns_client.cxx +111 -40
  108. data/ext/couchbase/core/io/dns_config.cxx +5 -4
  109. data/ext/couchbase/core/io/http_context.hxx +1 -1
  110. data/ext/couchbase/core/io/http_session.hxx +34 -1
  111. data/ext/couchbase/core/io/http_session_manager.hxx +5 -3
  112. data/ext/couchbase/core/io/mcbp_command.hxx +9 -2
  113. data/ext/couchbase/core/io/mcbp_session.cxx +106 -42
  114. data/ext/couchbase/core/io/mcbp_session.hxx +4 -3
  115. data/ext/couchbase/core/io/retry_orchestrator.hxx +3 -2
  116. data/ext/couchbase/core/json_string.hxx +5 -0
  117. data/ext/couchbase/core/logger/custom_rotating_file_sink.cxx +1 -1
  118. data/ext/couchbase/core/logger/logger.cxx +80 -20
  119. data/ext/couchbase/core/logger/logger.hxx +31 -0
  120. data/ext/couchbase/core/meta/features.hxx +25 -0
  121. data/ext/couchbase/core/meta/version.cxx +18 -4
  122. data/ext/couchbase/core/mozilla_ca_bundle.hxx +39 -0
  123. data/ext/couchbase/core/operations/document_analytics.cxx +1 -0
  124. data/ext/couchbase/core/operations/document_analytics.hxx +1 -0
  125. data/ext/couchbase/core/operations/document_append.hxx +1 -1
  126. data/ext/couchbase/core/operations/document_decrement.hxx +1 -1
  127. data/ext/couchbase/core/operations/document_exists.hxx +1 -1
  128. data/ext/couchbase/core/operations/document_get.hxx +1 -1
  129. data/ext/couchbase/core/operations/document_get_and_lock.hxx +1 -1
  130. data/ext/couchbase/core/operations/document_get_and_touch.hxx +1 -1
  131. data/ext/couchbase/core/operations/document_get_projected.hxx +1 -1
  132. data/ext/couchbase/core/operations/document_increment.hxx +1 -1
  133. data/ext/couchbase/core/operations/document_insert.hxx +1 -1
  134. data/ext/couchbase/core/operations/document_lookup_in.hxx +1 -1
  135. data/ext/couchbase/core/operations/document_lookup_in_all_replicas.hxx +192 -0
  136. data/ext/couchbase/core/operations/document_lookup_in_any_replica.hxx +188 -0
  137. data/ext/couchbase/core/operations/document_mutate_in.hxx +1 -1
  138. data/ext/couchbase/core/operations/document_prepend.hxx +1 -1
  139. data/ext/couchbase/core/operations/document_query.cxx +13 -0
  140. data/ext/couchbase/core/operations/document_query.hxx +7 -0
  141. data/ext/couchbase/core/operations/document_remove.hxx +1 -1
  142. data/ext/couchbase/core/operations/document_replace.hxx +1 -1
  143. data/ext/couchbase/core/operations/document_search.cxx +4 -1
  144. data/ext/couchbase/core/operations/document_search.hxx +2 -1
  145. data/ext/couchbase/core/operations/document_touch.hxx +1 -1
  146. data/ext/couchbase/core/operations/document_unlock.hxx +1 -1
  147. data/ext/couchbase/core/operations/document_upsert.hxx +1 -1
  148. data/ext/couchbase/core/operations/document_view.hxx +1 -0
  149. data/ext/couchbase/core/operations.hxx +2 -0
  150. data/ext/couchbase/core/origin.cxx +270 -0
  151. data/ext/couchbase/core/origin.hxx +2 -0
  152. data/ext/couchbase/core/protocol/client_request.hxx +11 -2
  153. data/ext/couchbase/core/protocol/client_response.hxx +1 -0
  154. data/ext/couchbase/core/protocol/cmd_hello.hxx +1 -0
  155. data/ext/couchbase/core/protocol/cmd_lookup_in_replica.cxx +107 -0
  156. data/ext/couchbase/core/protocol/cmd_lookup_in_replica.hxx +137 -0
  157. data/ext/couchbase/core/protocol/hello_feature.hxx +6 -0
  158. data/ext/couchbase/core/protocol/hello_feature_fmt.hxx +3 -0
  159. data/ext/couchbase/core/protocol/status.cxx +2 -2
  160. data/ext/couchbase/core/public_fwd.hxx +21 -0
  161. data/ext/couchbase/core/range_scan_options.cxx +3 -27
  162. data/ext/couchbase/core/range_scan_options.hxx +13 -17
  163. data/ext/couchbase/core/range_scan_orchestrator.cxx +388 -170
  164. data/ext/couchbase/core/range_scan_orchestrator.hxx +13 -2
  165. data/ext/couchbase/core/range_scan_orchestrator_options.hxx +5 -3
  166. data/ext/couchbase/core/scan_options.hxx +0 -19
  167. data/ext/couchbase/core/scan_result.cxx +19 -5
  168. data/ext/couchbase/core/scan_result.hxx +5 -2
  169. data/ext/couchbase/core/timeout_defaults.hxx +2 -3
  170. data/ext/couchbase/core/tls_verify_mode.hxx +26 -0
  171. data/ext/couchbase/core/topology/capabilities.hxx +3 -0
  172. data/ext/couchbase/core/topology/capabilities_fmt.hxx +8 -0
  173. data/ext/couchbase/core/topology/collections_manifest_fmt.hxx +1 -1
  174. data/ext/couchbase/core/topology/configuration.cxx +15 -2
  175. data/ext/couchbase/core/topology/configuration.hxx +20 -1
  176. data/ext/couchbase/core/topology/configuration_json.hxx +6 -1
  177. data/ext/couchbase/core/transactions/attempt_context_testing_hooks.cxx +93 -0
  178. data/ext/couchbase/core/transactions/attempt_context_testing_hooks.hxx +48 -75
  179. data/ext/couchbase/core/transactions/cleanup_testing_hooks.cxx +52 -0
  180. data/ext/couchbase/core/transactions/cleanup_testing_hooks.hxx +17 -31
  181. data/ext/couchbase/core/transactions/exceptions.hxx +12 -9
  182. data/ext/couchbase/core/utils/connection_string.cxx +75 -43
  183. data/ext/couchbase/core/utils/connection_string.hxx +1 -0
  184. data/ext/couchbase/core/utils/json.cxx +4 -1
  185. data/ext/couchbase/couchbase/analytics_error_context.hxx +1 -1
  186. data/ext/couchbase/couchbase/behavior_options.hxx +27 -1
  187. data/ext/couchbase/couchbase/boolean_field_query.hxx +77 -0
  188. data/ext/couchbase/couchbase/boolean_query.hxx +223 -0
  189. data/ext/couchbase/couchbase/bucket_manager.hxx +135 -0
  190. data/ext/couchbase/couchbase/build_query_index_options.hxx +0 -30
  191. data/ext/couchbase/couchbase/cluster.hxx +56 -1
  192. data/ext/couchbase/couchbase/collection.hxx +111 -0
  193. data/ext/couchbase/couchbase/collection_query_index_manager.hxx +7 -48
  194. data/ext/couchbase/couchbase/conjunction_query.hxx +88 -0
  195. data/ext/couchbase/couchbase/create_bucket_options.hxx +41 -0
  196. data/ext/couchbase/couchbase/create_primary_query_index_options.hxx +0 -29
  197. data/ext/couchbase/couchbase/create_query_index_options.hxx +0 -33
  198. data/ext/couchbase/couchbase/date_range.hxx +69 -0
  199. data/ext/couchbase/couchbase/date_range_facet.hxx +56 -0
  200. data/ext/couchbase/couchbase/date_range_facet_result.hxx +55 -0
  201. data/ext/couchbase/couchbase/date_range_query.hxx +265 -0
  202. data/ext/couchbase/couchbase/disjunction_query.hxx +109 -0
  203. data/ext/couchbase/couchbase/doc_id_query.hxx +111 -0
  204. data/ext/couchbase/couchbase/drop_bucket_options.hxx +41 -0
  205. data/ext/couchbase/couchbase/drop_primary_query_index_options.hxx +0 -30
  206. data/ext/couchbase/couchbase/drop_query_index_options.hxx +0 -31
  207. data/ext/couchbase/couchbase/error_codes.hxx +1 -2
  208. data/ext/couchbase/couchbase/error_context.hxx +17 -8
  209. data/ext/couchbase/couchbase/flush_bucket_options.hxx +41 -0
  210. data/ext/couchbase/couchbase/fmt/analytics_scan_consistency.hxx +52 -0
  211. data/ext/couchbase/{core/topology/error_map_fmt.hxx → couchbase/fmt/key_value_error_map_attribute.hxx} +21 -21
  212. data/ext/couchbase/couchbase/fmt/search_scan_consistency.hxx +49 -0
  213. data/ext/couchbase/couchbase/geo_bounding_box_query.hxx +107 -0
  214. data/ext/couchbase/couchbase/geo_distance_query.hxx +109 -0
  215. data/ext/couchbase/couchbase/geo_point.hxx +32 -0
  216. data/ext/couchbase/couchbase/geo_polygon_query.hxx +85 -0
  217. data/ext/couchbase/couchbase/get_all_buckets_options.hxx +44 -0
  218. data/ext/couchbase/couchbase/get_all_query_indexes_options.hxx +0 -30
  219. data/ext/couchbase/couchbase/get_and_lock_options.hxx +2 -2
  220. data/ext/couchbase/couchbase/get_and_touch_options.hxx +2 -2
  221. data/ext/couchbase/couchbase/get_bucket_options.hxx +43 -0
  222. data/ext/couchbase/couchbase/get_options.hxx +2 -2
  223. data/ext/couchbase/couchbase/highlight_style.hxx +45 -0
  224. data/ext/couchbase/couchbase/insert_options.hxx +3 -3
  225. data/ext/couchbase/couchbase/key_value_error_context.hxx +7 -2
  226. data/ext/couchbase/couchbase/lookup_in_all_replicas_options.hxx +109 -0
  227. data/ext/couchbase/couchbase/lookup_in_any_replica_options.hxx +101 -0
  228. data/ext/couchbase/couchbase/lookup_in_options.hxx +2 -2
  229. data/ext/couchbase/couchbase/lookup_in_replica_result.hxx +74 -0
  230. data/ext/couchbase/couchbase/lookup_in_result.hxx +26 -0
  231. data/ext/couchbase/couchbase/management/bucket_settings.hxx +116 -0
  232. data/ext/couchbase/couchbase/manager_error_context.hxx +29 -53
  233. data/ext/couchbase/couchbase/match_all_query.hxx +43 -0
  234. data/ext/couchbase/couchbase/match_none_query.hxx +43 -0
  235. data/ext/couchbase/couchbase/match_operator.hxx +45 -0
  236. data/ext/couchbase/couchbase/match_phrase_query.hxx +108 -0
  237. data/ext/couchbase/couchbase/match_query.hxx +163 -0
  238. data/ext/couchbase/couchbase/mutate_in_options.hxx +2 -2
  239. data/ext/couchbase/couchbase/numeric_range.hxx +58 -0
  240. data/ext/couchbase/couchbase/numeric_range_facet.hxx +56 -0
  241. data/ext/couchbase/couchbase/numeric_range_facet_result.hxx +55 -0
  242. data/ext/couchbase/couchbase/numeric_range_query.hxx +143 -0
  243. data/ext/couchbase/couchbase/phrase_query.hxx +93 -0
  244. data/ext/couchbase/couchbase/prefix_query.hxx +82 -0
  245. data/ext/couchbase/couchbase/query_error_context.hxx +3 -1
  246. data/ext/couchbase/couchbase/query_index_manager.hxx +16 -83
  247. data/ext/couchbase/couchbase/query_options.hxx +18 -0
  248. data/ext/couchbase/couchbase/query_string_query.hxx +72 -0
  249. data/ext/couchbase/couchbase/regexp_query.hxx +82 -0
  250. data/ext/couchbase/couchbase/remove_options.hxx +2 -2
  251. data/ext/couchbase/couchbase/replace_options.hxx +3 -3
  252. data/ext/couchbase/couchbase/scope.hxx +40 -0
  253. data/ext/couchbase/couchbase/search_date_range.hxx +68 -0
  254. data/ext/couchbase/couchbase/search_error_context.hxx +138 -0
  255. data/ext/couchbase/couchbase/search_facet.hxx +60 -0
  256. data/ext/couchbase/couchbase/search_facet_result.hxx +50 -0
  257. data/ext/couchbase/couchbase/search_meta_data.hxx +85 -0
  258. data/ext/couchbase/couchbase/search_metrics.hxx +127 -0
  259. data/ext/couchbase/couchbase/search_numeric_range.hxx +69 -0
  260. data/ext/couchbase/couchbase/search_options.hxx +509 -0
  261. data/ext/couchbase/couchbase/search_query.hxx +69 -0
  262. data/ext/couchbase/couchbase/search_result.hxx +77 -0
  263. data/ext/couchbase/couchbase/search_row.hxx +104 -0
  264. data/ext/couchbase/couchbase/search_row_location.hxx +55 -0
  265. data/ext/couchbase/couchbase/search_row_locations.hxx +86 -0
  266. data/ext/couchbase/couchbase/search_scan_consistency.hxx +34 -0
  267. data/ext/couchbase/couchbase/search_sort.hxx +58 -0
  268. data/ext/couchbase/couchbase/search_sort_field.hxx +117 -0
  269. data/ext/couchbase/couchbase/search_sort_field_missing.hxx +26 -0
  270. data/ext/couchbase/couchbase/search_sort_field_mode.hxx +27 -0
  271. data/ext/couchbase/couchbase/search_sort_field_type.hxx +28 -0
  272. data/ext/couchbase/couchbase/search_sort_id.hxx +60 -0
  273. data/ext/couchbase/couchbase/search_sort_score.hxx +60 -0
  274. data/ext/couchbase/couchbase/search_term_range.hxx +51 -0
  275. data/ext/couchbase/couchbase/security_options.hxx +18 -0
  276. data/ext/couchbase/couchbase/subdocument_error_context.hxx +4 -2
  277. data/ext/couchbase/couchbase/term_facet.hxx +48 -0
  278. data/ext/couchbase/couchbase/term_facet_result.hxx +55 -0
  279. data/ext/couchbase/couchbase/term_query.hxx +151 -0
  280. data/ext/couchbase/couchbase/term_range_query.hxx +142 -0
  281. data/ext/couchbase/couchbase/touch_options.hxx +2 -2
  282. data/ext/couchbase/couchbase/tracing/request_span.hxx +63 -0
  283. data/ext/couchbase/couchbase/tracing/request_tracer.hxx +2 -40
  284. data/ext/couchbase/couchbase/transactions/async_attempt_context.hxx +83 -4
  285. data/ext/couchbase/couchbase/transactions/attempt_context.hxx +67 -0
  286. data/ext/couchbase/couchbase/transactions/transaction_get_result.hxx +2 -0
  287. data/ext/couchbase/couchbase/transactions/transaction_keyspace.hxx +11 -1
  288. data/ext/couchbase/couchbase/transactions/transaction_options.hxx +79 -8
  289. data/ext/couchbase/couchbase/transactions/transaction_query_options.hxx +128 -15
  290. data/ext/couchbase/couchbase/transactions/transaction_query_result.hxx +4 -0
  291. data/ext/couchbase/couchbase/transactions/transaction_result.hxx +1 -1
  292. data/ext/couchbase/couchbase/transactions/transactions_cleanup_config.hxx +5 -3
  293. data/ext/couchbase/couchbase/transactions/transactions_config.hxx +9 -5
  294. data/ext/couchbase/couchbase/transactions/transactions_query_config.hxx +6 -3
  295. data/ext/couchbase/couchbase/transactions.hxx +34 -1
  296. data/ext/couchbase/couchbase/unlock_options.hxx +2 -2
  297. data/ext/couchbase/couchbase/update_bucket_options.hxx +41 -0
  298. data/ext/couchbase/couchbase/upsert_options.hxx +3 -3
  299. data/ext/couchbase/couchbase/watch_query_indexes_options.hxx +0 -31
  300. data/ext/couchbase/couchbase/wildcard_query.hxx +83 -0
  301. data/ext/couchbase/test/CMakeLists.txt +8 -5
  302. data/ext/couchbase/test/benchmark_helper_integration.hxx +2 -2
  303. data/ext/couchbase/test/test_helper.hxx +5 -5
  304. data/ext/couchbase/test/test_integration_analytics.cxx +28 -6
  305. data/ext/couchbase/test/test_integration_collections.cxx +13 -3
  306. data/ext/couchbase/test/test_integration_connect.cxx +7 -3
  307. data/ext/couchbase/test/test_integration_crud.cxx +18 -3
  308. data/ext/couchbase/test/test_integration_diagnostics.cxx +11 -5
  309. data/ext/couchbase/test/test_integration_durability.cxx +12 -7
  310. data/ext/couchbase/test/test_integration_examples.cxx +419 -11
  311. data/ext/couchbase/test/test_integration_management.cxx +867 -368
  312. data/ext/couchbase/test/test_integration_query.cxx +87 -17
  313. data/ext/couchbase/test/test_integration_range_scan.cxx +363 -124
  314. data/ext/couchbase/test/test_integration_read_replica.cxx +48 -11
  315. data/ext/couchbase/test/test_integration_search.cxx +32 -3
  316. data/ext/couchbase/test/test_integration_subdoc.cxx +717 -11
  317. data/ext/couchbase/test/test_integration_tracer.cxx +5 -0
  318. data/ext/couchbase/test/test_integration_transcoders.cxx +13 -5
  319. data/ext/couchbase/test/{test_transaction_transaction_context.cxx → test_transaction_context.cxx} +1 -1
  320. data/ext/couchbase/test/test_transaction_examples.cxx +195 -0
  321. data/ext/couchbase/test/{test_transaction_transaction_public_async_api.cxx → test_transaction_public_async_api.cxx} +13 -12
  322. data/ext/couchbase/test/{test_transaction_transaction_public_blocking_api.cxx → test_transaction_public_blocking_api.cxx} +27 -21
  323. data/ext/couchbase/test/{test_transaction_transaction_simple.cxx → test_transaction_simple.cxx} +17 -5
  324. data/ext/couchbase/test/{test_transaction_transaction_simple_async.cxx → test_transaction_simple_async.cxx} +19 -21
  325. data/ext/couchbase/test/test_unit_config_profiles.cxx +1 -1
  326. data/ext/couchbase/test/test_unit_connection_string.cxx +29 -0
  327. data/ext/couchbase/test/test_unit_json_transcoder.cxx +4 -0
  328. data/ext/couchbase/test/test_unit_query.cxx +75 -0
  329. data/ext/couchbase/test/test_unit_search.cxx +427 -0
  330. data/ext/couchbase/test/test_unit_transaction_utils.cxx +10 -1
  331. data/ext/couchbase/test/test_unit_utils.cxx +8 -4
  332. data/ext/couchbase.cxx +641 -45
  333. data/ext/revisions.rb +3 -3
  334. data/lib/couchbase/authenticator.rb +0 -1
  335. data/lib/couchbase/cluster.rb +1 -5
  336. data/lib/couchbase/collection.rb +108 -0
  337. data/lib/couchbase/collection_options.rb +100 -0
  338. data/lib/couchbase/config_profiles.rb +1 -1
  339. data/lib/couchbase/errors.rb +5 -0
  340. data/lib/couchbase/json_transcoder.rb +12 -5
  341. data/lib/couchbase/key_value_scan.rb +125 -0
  342. data/lib/couchbase/management/collection_query_index_manager.rb +54 -15
  343. data/lib/couchbase/management/query_index_manager.rb +70 -5
  344. data/lib/couchbase/options.rb +151 -0
  345. data/lib/couchbase/raw_binary_transcoder.rb +37 -0
  346. data/lib/couchbase/raw_json_transcoder.rb +38 -0
  347. data/lib/couchbase/raw_string_transcoder.rb +40 -0
  348. data/lib/couchbase/scope.rb +1 -1
  349. data/lib/couchbase/search_options.rb +5 -0
  350. data/lib/couchbase/transcoder_flags.rb +62 -0
  351. data/lib/couchbase/utils/time.rb +14 -1
  352. data/lib/couchbase/version.rb +1 -1
  353. metadata +175 -13
  354. data/ext/couchbase/core/config_profile.cxx +0 -47
  355. data/ext/couchbase/core/impl/collection_query_index_manager.cxx +0 -93
@@ -0,0 +1,265 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2023-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include <couchbase/match_operator.hxx>
21
+ #include <couchbase/search_query.hxx>
22
+
23
+ #include <chrono>
24
+ #include <cstdint>
25
+ #include <ctime>
26
+ #include <optional>
27
+ #include <string>
28
+
29
+ namespace couchbase
30
+ {
31
+ /**
32
+ * The date range query finds documents containing a date value in the specified field within the specified range. Either start or end can
33
+ * be omitted, but not both.
34
+ *
35
+ * Match documents where field `review_date` falls within the range ("2001-10-09T10:20:30-08:00", "2016-10-31")
36
+ * @snippet test_unit_search.cxx search-date-range
37
+ *
38
+ * It also works with `std::tm` and `std::chrono::system_clock::time_point`.
39
+ * @snippet test_unit_search.cxx search-date-range-tm
40
+ *
41
+ * @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-date-range.html server documentation.
42
+ *
43
+ * @since 1.0.0
44
+ * @committed
45
+ */
46
+ class date_range_query : public search_query
47
+ {
48
+ public:
49
+ /**
50
+ * Set lower limit and automatically format so that default date_time parser will be able to parse it on the server.
51
+ *
52
+ * @param value start limit time point
53
+ *
54
+ * @return this query for chaining purposes.
55
+ *
56
+ * @since 1.0.0
57
+ * @committed
58
+ */
59
+ auto start(std::chrono::system_clock::time_point value) -> date_range_query&;
60
+
61
+ /**
62
+ * Set lower limit and automatically format so that default date_time parser will be able to parse it on the server.
63
+ *
64
+ * @param value start limit as a `tm` (broken down timestamp)
65
+ *
66
+ * @return this query for chaining purposes.
67
+ *
68
+ * @since 1.0.0
69
+ * @committed
70
+ */
71
+ auto start(std::tm value) -> date_range_query&;
72
+
73
+ /**
74
+ * Set lower limit and automatically format so that default date_time parser will be able to parse it on the server.
75
+ *
76
+ * @param value start limit time point
77
+ * @param inclusive whether to include limit value into the interval.
78
+ *
79
+ * @return this query for chaining purposes.
80
+ *
81
+ * @since 1.0.0
82
+ * @committed
83
+ */
84
+ auto start(std::chrono::system_clock::time_point value, bool inclusive) -> date_range_query&;
85
+
86
+ /**
87
+ * Set lower limit and automatically format so that default date_time parser will be able to parse it on the server.
88
+ *
89
+ * @param value start limit as a `tm` (broken down timestamp)
90
+ * @param inclusive whether to include limit value into the interval.
91
+ *
92
+ * @return this query for chaining purposes.
93
+ *
94
+ * @since 1.0.0
95
+ * @committed
96
+ */
97
+ auto start(std::tm value, bool inclusive) -> date_range_query&;
98
+
99
+ /**
100
+ * Set preformatted date as lower limit.
101
+ *
102
+ * @param value start limit formatted as a string, use @ref date_time_parser() for non-standard formats
103
+ *
104
+ * @return this query for chaining purposes.
105
+ *
106
+ * @since 1.0.0
107
+ * @committed
108
+ */
109
+ auto start(std::string value) -> date_range_query&
110
+ {
111
+ start_ = std::move(value);
112
+ return *this;
113
+ }
114
+
115
+ /**
116
+ * Set preformatted date as lower limit.
117
+ *
118
+ * @param value start limit formatted as a string, use @ref date_time_parser() for non-standard formats
119
+ * @param inclusive whether to include limit value into the interval.
120
+ *
121
+ * @return this query for chaining purposes.
122
+ *
123
+ * @since 1.0.0
124
+ * @committed
125
+ */
126
+ auto start(std::string value, bool inclusive) -> date_range_query&
127
+ {
128
+ start_ = std::move(value);
129
+ inclusive_start_ = inclusive;
130
+ return *this;
131
+ }
132
+
133
+ /**
134
+ * Set upper limit and automatically format so that default date_time parser will be able to parse it on the server.
135
+ *
136
+ * @param value end limit time point
137
+ *
138
+ * @return this query for chaining purposes.
139
+ *
140
+ * @since 1.0.0
141
+ * @committed
142
+ */
143
+ auto end(std::chrono::system_clock::time_point value) -> date_range_query&;
144
+
145
+ /**
146
+ * Set upper limit and automatically format so that default date_time parser will be able to parse it on the server.
147
+ *
148
+ * @param value end limit as a `tm` (broken down timestamp)
149
+ *
150
+ * @return this query for chaining purposes.
151
+ *
152
+ * @since 1.0.0
153
+ * @committed
154
+ */
155
+ auto end(std::tm value) -> date_range_query&;
156
+
157
+ /**
158
+ * Set upper limit and automatically format so that default date_time parser will be able to parse it on the server.
159
+ *
160
+ * @param value end limit time point
161
+ * @param inclusive whether to include limit value into the interval.
162
+ *
163
+ * @return this query for chaining purposes.
164
+ *
165
+ * @since 1.0.0
166
+ * @committed
167
+ */
168
+ auto end(std::chrono::system_clock::time_point value, bool inclusive) -> date_range_query&;
169
+
170
+ /**
171
+ * Set upper limit and automatically format so that default date_time parser will be able to parse it on the server.
172
+ *
173
+ * @param value end limit as a `tm` (broken down timestamp)
174
+ * @param inclusive whether to include limit value into the interval.
175
+ *
176
+ * @return this query for chaining purposes.
177
+ *
178
+ * @since 1.0.0
179
+ * @committed
180
+ */
181
+ auto end(std::tm value, bool inclusive) -> date_range_query&;
182
+
183
+ /**
184
+ * Set preformatted date as upper limit.
185
+ *
186
+ * @param value end limit formatted as a string, use @ref date_time_parser() for non-standard formats
187
+ *
188
+ * @return this query for chaining purposes.
189
+ *
190
+ * @since 1.0.0
191
+ * @committed
192
+ */
193
+ auto end(std::string value)
194
+ {
195
+ end_ = std::move(value);
196
+ return *this;
197
+ }
198
+
199
+ /**
200
+ * Set preformatted date as upper limit.
201
+ *
202
+ * @param value end limit formatted as a string, use @ref date_time_parser() for non-standard formats
203
+ * @param inclusive whether to include limit value into the interval.
204
+ *
205
+ * @return this query for chaining purposes.
206
+ *
207
+ * @since 1.0.0
208
+ * @committed
209
+ */
210
+ auto end(std::string value, bool inclusive) -> date_range_query&
211
+ {
212
+ end_ = std::move(value);
213
+ inclusive_end_ = inclusive;
214
+ return *this;
215
+ }
216
+
217
+ /**
218
+ * Enable custom date parser.
219
+ *
220
+ * @param parser_name name of the custom date parser
221
+ *
222
+ * @return this query for chaining purposes.
223
+ *
224
+ * @since 1.0.0
225
+ * @committed
226
+ */
227
+ auto date_time_parser(std::string parser_name) -> date_range_query&
228
+ {
229
+ date_time_parser_ = std::move(parser_name);
230
+ return *this;
231
+ }
232
+
233
+ /**
234
+ * If a field is specified, only terms in that field will be matched.
235
+ *
236
+ * @param field_name name of the field to be matched
237
+ *
238
+ * @return this query for chaining purposes.
239
+ *
240
+ * @since 1.0.0
241
+ * @committed
242
+ */
243
+ auto field(std::string field_name) -> date_range_query&
244
+ {
245
+ field_ = std::move(field_name);
246
+ return *this;
247
+ }
248
+
249
+ /**
250
+ * @return encoded representation of the query.
251
+ *
252
+ * @since 1.0.0
253
+ * @internal
254
+ */
255
+ [[nodiscard]] auto encode() const -> encoded_search_query override;
256
+
257
+ private:
258
+ std::optional<std::string> start_{};
259
+ std::optional<std::string> end_{};
260
+ std::optional<bool> inclusive_start_{};
261
+ std::optional<bool> inclusive_end_{};
262
+ std::optional<std::string> date_time_parser_{};
263
+ std::optional<std::string> field_{};
264
+ };
265
+ } // namespace couchbase
@@ -0,0 +1,109 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2023-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include <couchbase/search_query.hxx>
21
+
22
+ #include <cstdint>
23
+ #include <memory>
24
+ #include <vector>
25
+
26
+ namespace couchbase
27
+ {
28
+ /**
29
+ * The disjunction query is a compound query. The result documents must satisfy a configurable minimal (@ref min) number of child queries.
30
+ * By default this min is set to 1.
31
+ *
32
+ * At execution, a conjunction query that has no child queries is not allowed and will fail fast.
33
+ *
34
+ * Match documents with at least one (see @ref min) of the following conditions is satisfied:
35
+ * * `"location"` in the field `reviews.content`
36
+ * * `true` in the field `free_breakfast`.
37
+ *
38
+ * @snippet test_unit_search.cxx search-disjunction
39
+ *
40
+ * @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-conjuncts-disjuncts.html server documentation
41
+ *
42
+ * @since 1.0.0
43
+ * @committed
44
+ */
45
+ class disjunction_query : public search_query
46
+ {
47
+ public:
48
+ /**
49
+ * Create a disjunction query.
50
+ *
51
+ * @tparam SearchQuery any subclass of @ref search_query
52
+ * @param queries sequence of query arguments
53
+ *
54
+ * @since 1.0.0
55
+ * @committed
56
+ */
57
+ template<typename... SearchQuery>
58
+ explicit disjunction_query(SearchQuery&&... queries)
59
+ {
60
+ or_else(std::forward<SearchQuery>(queries)...);
61
+ }
62
+
63
+ /**
64
+ * Add one or more queries to add to the disjunction.
65
+ *
66
+ * @tparam SearchQuery any subclass of @ref search_query
67
+ * @param queries sequence of query arguments
68
+ *
69
+ * @return this query for chaining purposes.
70
+ *
71
+ * @since 1.0.0
72
+ * @committed
73
+ */
74
+ template<typename... SearchQuery>
75
+ auto or_else(SearchQuery... queries) -> disjunction_query&
76
+ {
77
+ (disjuncts_.emplace_back(std::make_shared<SearchQuery>(std::move(queries))), ...);
78
+ return *this;
79
+ }
80
+
81
+ /**
82
+ * Set the minimum number of child queries that must be satisfied for the disjunction query.
83
+ *
84
+ * @param number_of_queries minimum number of child queries.
85
+ *
86
+ * @return this query for chaining purposes.
87
+ *
88
+ * @since 1.0.0
89
+ * @committed
90
+ */
91
+ auto min(std::uint32_t number_of_queries) -> disjunction_query&
92
+ {
93
+ min_ = number_of_queries;
94
+ return *this;
95
+ }
96
+
97
+ /**
98
+ * @return encoded representation of the query.
99
+ *
100
+ * @since 1.0.0
101
+ * @internal
102
+ */
103
+ [[nodiscard]] auto encode() const -> encoded_search_query override;
104
+
105
+ private:
106
+ std::vector<std::shared_ptr<search_query>> disjuncts_{};
107
+ std::uint32_t min_{ 1 };
108
+ };
109
+ } // namespace couchbase
@@ -0,0 +1,111 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2023-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include <couchbase/search_query.hxx>
21
+
22
+ #include <string>
23
+ #include <vector>
24
+
25
+ namespace couchbase
26
+ {
27
+ /**
28
+ * A doc_id query is a query that directly matches the documents whose ID have been provided. It can be combined within a conjunction_query
29
+ * to restrict matches on the set of documents.
30
+ *
31
+ * @since 1.0.0
32
+ * @committed
33
+ */
34
+ class doc_id_query : public search_query
35
+ {
36
+ public:
37
+ doc_id_query() = default;
38
+
39
+ /**
40
+ * Create a new doc_id query.
41
+ *
42
+ * @param ids the list of document IDs to be restricted against.
43
+ *
44
+ * @since 1.0.0
45
+ * @committed
46
+ */
47
+ explicit doc_id_query(std::vector<std::string> ids)
48
+ : ids_{ std::move(ids) }
49
+ {
50
+ }
51
+
52
+ /**
53
+ * Create a new doc_id query.
54
+ *
55
+ * @param ids the list of document IDs to be restricted against.
56
+ *
57
+ * @since 1.0.0
58
+ * @committed
59
+ */
60
+ doc_id_query(std::initializer_list<std::string> ids)
61
+ {
62
+ ids_.reserve(ids.size());
63
+ doc_ids(ids);
64
+ }
65
+
66
+ /**
67
+ * Add IDs to the query.
68
+ *
69
+ * @param ids the list of document identifiers to add
70
+ *
71
+ * @return this query for chaining purposes.
72
+ *
73
+ * @since 1.0.0
74
+ * @committed
75
+ */
76
+ auto doc_ids(const std::vector<std::string>& ids) -> doc_id_query&
77
+ {
78
+ for (const auto& id : ids) {
79
+ ids_.push_back(id);
80
+ }
81
+ return *this;
82
+ }
83
+
84
+ /**
85
+ * Add ID to the query.
86
+ *
87
+ * @param id the document identifier to add
88
+ *
89
+ * @return this query for chaining purposes.
90
+ *
91
+ * @since 1.0.0
92
+ * @committed
93
+ */
94
+ auto doc_id(const std::string& id) -> doc_id_query&
95
+ {
96
+ ids_.push_back(id);
97
+ return *this;
98
+ }
99
+
100
+ /**
101
+ * @return encoded representation of the query.
102
+ *
103
+ * @since 1.0.0
104
+ * @internal
105
+ */
106
+ [[nodiscard]] auto encode() const -> encoded_search_query override;
107
+
108
+ private:
109
+ std::vector<std::string> ids_{};
110
+ };
111
+ } // namespace couchbase
@@ -0,0 +1,41 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2020-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include <functional>
21
+ #include <memory>
22
+ #include <optional>
23
+ #include <string>
24
+
25
+ namespace couchbase
26
+ {
27
+ struct drop_bucket_options : public common_options<drop_bucket_options> {
28
+ public:
29
+ struct built : public common_options<drop_bucket_options>::built {
30
+ };
31
+
32
+ [[nodiscard]] auto build() const -> built
33
+ {
34
+ return { build_common_options() };
35
+ }
36
+
37
+ private:
38
+ };
39
+
40
+ using drop_bucket_handler = std::function<void(couchbase::manager_error_context)>;
41
+ } // namespace couchbase
@@ -96,34 +96,4 @@ class drop_primary_query_index_options : public common_options<drop_primary_quer
96
96
  */
97
97
 
98
98
  using drop_primary_query_index_handler = std::function<void(couchbase::manager_error_context)>;
99
-
100
- #ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
101
- namespace core
102
- {
103
- class cluster;
104
- class query_context;
105
- namespace impl
106
- {
107
-
108
- /**
109
- * @since 1.0.0
110
- * @internal
111
- */
112
- void
113
- initiate_drop_primary_query_index(std::shared_ptr<couchbase::core::cluster> core,
114
- std::string bucket_name,
115
- couchbase::drop_primary_query_index_options::built options,
116
- query_context query_ctx,
117
- std::string collection_name,
118
- drop_primary_query_index_handler&& handler);
119
-
120
- void
121
- initiate_drop_primary_query_index(std::shared_ptr<couchbase::core::cluster> core,
122
- std::string bucket_name,
123
- couchbase::drop_primary_query_index_options::built options,
124
- drop_primary_query_index_handler&& handler);
125
-
126
- #endif
127
- } // namespace impl
128
- } // namespace core
129
99
  } // namespace couchbase
@@ -82,35 +82,4 @@ class drop_query_index_options : public common_options<drop_query_index_options>
82
82
  */
83
83
 
84
84
  using drop_query_index_handler = std::function<void(couchbase::manager_error_context)>;
85
-
86
- #ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
87
- namespace core
88
- {
89
- class cluster;
90
- class query_context;
91
- namespace impl
92
- {
93
-
94
- /**
95
- * @since 1.0.0
96
- * @internal
97
- */
98
- void
99
- initiate_drop_query_index(std::shared_ptr<couchbase::core::cluster> core,
100
- std::string bucket_name,
101
- std::string index_name,
102
- couchbase::drop_query_index_options::built options,
103
- query_context query_ctx,
104
- std::string collection_name,
105
- drop_query_index_handler&& handler);
106
- void
107
- initiate_drop_query_index(std::shared_ptr<couchbase::core::cluster> core,
108
- std::string bucket_name,
109
- std::string index_name,
110
- couchbase::drop_query_index_options::built options,
111
- drop_query_index_handler&& handler);
112
-
113
- #endif
114
- } // namespace impl
115
- } // namespace core
116
85
  } // namespace couchbase
@@ -599,8 +599,7 @@ enum class key_value {
599
599
  // KV Code: 0xd6
600
600
  cannot_revive_living_document = 131,
601
601
 
602
- range_scan_cancelled = 132,
603
- range_scan_vb_uuid_not_equal = 133,
602
+ mutation_token_outdated = 133,
604
603
  range_scan_completed = 134,
605
604
  };
606
605
 
@@ -43,6 +43,7 @@ class error_context
43
43
  * @committed
44
44
  */
45
45
  error_context() = default;
46
+ virtual ~error_context() = default;
46
47
 
47
48
  /**
48
49
  * Creates and initializes error context with given parameters.
@@ -56,12 +57,14 @@ class error_context
56
57
  * @since 1.0.0
57
58
  * @internal
58
59
  */
59
- error_context(std::error_code ec,
60
+ error_context(std::string operation_id,
61
+ std::error_code ec,
60
62
  std::optional<std::string> last_dispatched_to,
61
63
  std::optional<std::string> last_dispatched_from,
62
64
  std::size_t retry_attempts,
63
65
  std::set<retry_reason> retry_reasons)
64
- : ec_{ ec }
66
+ : operation_id_{ std::move(operation_id) }
67
+ , ec_{ ec }
65
68
  , last_dispatched_to_{ std::move(last_dispatched_to) }
66
69
  , last_dispatched_from_{ std::move(last_dispatched_from) }
67
70
  , retry_attempts_{ retry_attempts }
@@ -69,6 +72,11 @@ class error_context
69
72
  {
70
73
  }
71
74
 
75
+ [[nodiscard]] virtual auto operation_id() const -> const std::string&
76
+ {
77
+ return operation_id_;
78
+ }
79
+
72
80
  /**
73
81
  * Returns status of the operation.
74
82
  *
@@ -79,7 +87,7 @@ class error_context
79
87
  * @since 1.0.0
80
88
  * @committed
81
89
  */
82
- [[nodiscard]] auto ec() const -> std::error_code
90
+ [[nodiscard]] virtual auto ec() const -> std::error_code
83
91
  {
84
92
  return ec_;
85
93
  }
@@ -105,7 +113,7 @@ class error_context
105
113
  * @since 1.0.0
106
114
  * @committed
107
115
  */
108
- [[nodiscard]] auto last_dispatched_to() const -> const std::optional<std::string>&
116
+ [[nodiscard]] virtual auto last_dispatched_to() const -> const std::optional<std::string>&
109
117
  {
110
118
  return last_dispatched_to_;
111
119
  }
@@ -118,7 +126,7 @@ class error_context
118
126
  * @since 1.0.0
119
127
  * @committed
120
128
  */
121
- [[nodiscard]] auto last_dispatched_from() const -> const std::optional<std::string>&
129
+ [[nodiscard]] virtual auto last_dispatched_from() const -> const std::optional<std::string>&
122
130
  {
123
131
  return last_dispatched_from_;
124
132
  }
@@ -131,7 +139,7 @@ class error_context
131
139
  * @since 1.0.0
132
140
  * @committed
133
141
  */
134
- [[nodiscard]] auto retry_attempts() const -> std::size_t
142
+ [[nodiscard]] virtual auto retry_attempts() const -> std::size_t
135
143
  {
136
144
  return retry_attempts_;
137
145
  }
@@ -144,7 +152,7 @@ class error_context
144
152
  * @since 1.0.0
145
153
  * @committed
146
154
  */
147
- [[nodiscard]] auto retry_reasons() const -> const std::set<retry_reason>&
155
+ [[nodiscard]] virtual auto retry_reasons() const -> const std::set<retry_reason>&
148
156
  {
149
157
  return retry_reasons_;
150
158
  }
@@ -158,12 +166,13 @@ class error_context
158
166
  * @since 1.0.0
159
167
  * @uncommitted
160
168
  */
161
- [[nodiscard]] auto retried_because_of(retry_reason reason) const -> bool
169
+ [[nodiscard]] virtual auto retried_because_of(retry_reason reason) const -> bool
162
170
  {
163
171
  return retry_reasons_.count(reason) > 0;
164
172
  }
165
173
 
166
174
  private:
175
+ std::string operation_id_{};
167
176
  std::error_code ec_{};
168
177
  std::optional<std::string> last_dispatched_to_{};
169
178
  std::optional<std::string> last_dispatched_from_{};