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,82 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2023-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include <couchbase/search_query.hxx>
21
+
22
+ #include <optional>
23
+ #include <string>
24
+
25
+ namespace couchbase
26
+ {
27
+ /**
28
+ * Finds documents containing terms that match the specified regular expression.
29
+ *
30
+ * Match documents where field `reviews.content` contains words starting with `"inter"`:
31
+ * @snippet test_unit_search.cxx search-regexp
32
+ *
33
+ * @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-regexp.html server documentation
34
+ *
35
+ * @since 1.0.0
36
+ * @committed
37
+ */
38
+ class regexp_query : public search_query
39
+ {
40
+ public:
41
+ /**
42
+ * Create a new regexp query.
43
+ *
44
+ * @param regexp the input string to be matched against
45
+ *
46
+ * @since 1.0.0
47
+ * @committed
48
+ */
49
+ explicit regexp_query(std::string regexp)
50
+ : regexp_{ std::move(regexp) }
51
+ {
52
+ }
53
+
54
+ /**
55
+ * If a field is specified, only terms in that field will be matched.
56
+ *
57
+ * @param field_name name of the field to be matched
58
+ *
59
+ * @return this query for chaining purposes.
60
+ *
61
+ * @since 1.0.0
62
+ * @committed
63
+ */
64
+ auto field(std::string field_name) -> regexp_query&
65
+ {
66
+ field_ = std::move(field_name);
67
+ return *this;
68
+ }
69
+
70
+ /**
71
+ * @return encoded representation of the query.
72
+ *
73
+ * @since 1.0.0
74
+ * @internal
75
+ */
76
+ [[nodiscard]] auto encode() const -> encoded_search_query override;
77
+
78
+ private:
79
+ std::string regexp_;
80
+ std::optional<std::string> field_{};
81
+ };
82
+ } // namespace couchbase
@@ -115,8 +115,8 @@ initiate_remove_operation(std::shared_ptr<couchbase::core::cluster> core,
115
115
  std::string scope_name,
116
116
  std::string collection_name,
117
117
  std::string document_key,
118
- remove_options::built options,
119
- remove_handler&& handler);
118
+ couchbase::remove_options::built options,
119
+ couchbase::remove_handler&& handler);
120
120
  #endif
121
121
  } // namespace impl
122
122
  } // namespace core
@@ -175,9 +175,9 @@ initiate_replace_operation(std::shared_ptr<couchbase::core::cluster> core,
175
175
  std::string scope_name,
176
176
  std::string collection_name,
177
177
  std::string document_key,
178
- codec::encoded_value encoded,
179
- replace_options::built options,
180
- replace_handler&& handler);
178
+ couchbase::codec::encoded_value encoded,
179
+ couchbase::replace_options::built options,
180
+ couchbase::replace_handler&& handler);
181
181
  #endif
182
182
  } // namespace impl
183
183
  } // namespace core
@@ -18,7 +18,10 @@
18
18
  #pragma once
19
19
 
20
20
  #include <couchbase/analytics_options.hxx>
21
+ #include <couchbase/collection.hxx>
21
22
  #include <couchbase/query_options.hxx>
23
+ #include <couchbase/search_options.hxx>
24
+ #include <couchbase/search_query.hxx>
22
25
 
23
26
  #include <memory>
24
27
 
@@ -133,6 +136,43 @@ class scope
133
136
  return future;
134
137
  }
135
138
 
139
+ /**
140
+ * Performs a query against the full text search services.
141
+ *
142
+ * @param index_name name of the search index
143
+ * @param query query object, see hierarchy of @ref search_query for more details.
144
+ * @param options options to customize the query request.
145
+ * @param handler the handler that implements @ref search_handler
146
+ *
147
+ * @exception errc::common::ambiguous_timeout
148
+ * @exception errc::common::unambiguous_timeout
149
+ *
150
+ * @see https://docs.couchbase.com/server/current/fts/fts-introduction.html
151
+ *
152
+ * @since 1.0.0
153
+ * @committed
154
+ */
155
+ void search_query(std::string index_name, const search_query& query, const search_options& options, search_handler&& handler) const;
156
+
157
+ /**
158
+ * Performs a query against the full text search services.
159
+ *
160
+ * @param index_name name of the search index
161
+ * @param query query object, see hierarchy of @ref search_query for more details.
162
+ * @param options options to customize the query request.
163
+ * @return future object that carries result of the operation
164
+ *
165
+ * @exception errc::common::ambiguous_timeout
166
+ * @exception errc::common::unambiguous_timeout
167
+ *
168
+ * @see https://docs.couchbase.com/server/current/fts/fts-introduction.html
169
+ *
170
+ * @since 1.0.0
171
+ * @committed
172
+ */
173
+ [[nodiscard]] auto search_query(std::string index_name, const class search_query& query, const search_options& options = {}) const
174
+ -> std::future<std::pair<search_error_context, search_result>>;
175
+
136
176
  /**
137
177
  * Performs a query against the analytics services.
138
178
  *
@@ -0,0 +1,68 @@
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 <chrono>
21
+ #include <cinttypes>
22
+ #include <optional>
23
+ #include <string>
24
+
25
+ namespace couchbase
26
+ {
27
+ /**
28
+ * @since 1.0.0
29
+ * @committed
30
+ */
31
+ class search_date_range
32
+ {
33
+ public:
34
+ search_date_range(std::string name, std::optional<std::string> start, std::optional<std::string> end, std::uint64_t count)
35
+ : name_{ std::move(name) }
36
+ , start_{ std::move(start) }
37
+ , end_{ std::move(end) }
38
+ , count_{ count }
39
+ {
40
+ }
41
+
42
+ [[nodiscard]] auto name() const -> const std::string&
43
+ {
44
+ return name_;
45
+ }
46
+
47
+ [[nodiscard]] auto start() const -> const std::optional<std::string>&
48
+ {
49
+ return start_;
50
+ }
51
+
52
+ [[nodiscard]] auto end() const -> const std::optional<std::string>&
53
+ {
54
+ return end_;
55
+ }
56
+
57
+ [[nodiscard]] auto count() const -> std::uint64_t
58
+ {
59
+ return count_;
60
+ }
61
+
62
+ private:
63
+ std::string name_;
64
+ std::optional<std::string> start_;
65
+ std::optional<std::string> end_;
66
+ std::uint64_t count_;
67
+ };
68
+ } // namespace couchbase
@@ -0,0 +1,138 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2020-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include <couchbase/error_context.hxx>
21
+
22
+ #include <cstdint>
23
+ #include <memory>
24
+
25
+ namespace couchbase
26
+ {
27
+ #ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
28
+ class internal_search_error_context;
29
+ #endif
30
+
31
+ /**
32
+ * The error context returned with Search operations.
33
+ *
34
+ * @since 1.0.0
35
+ * @committed
36
+ */
37
+ class search_error_context : public error_context
38
+ {
39
+ public:
40
+ search_error_context();
41
+ explicit search_error_context(internal_search_error_context ctx);
42
+ search_error_context(search_error_context&& other);
43
+ search_error_context& operator=(search_error_context&& other);
44
+ search_error_context(const search_error_context& other) = delete;
45
+ search_error_context& operator=(const search_error_context& other) = delete;
46
+ ~search_error_context() override;
47
+
48
+ /**
49
+ * Returns status of the operation.
50
+ *
51
+ * @see couchbase::errc error codes that might be generated by the library
52
+ *
53
+ * @return error code or false-like value for success
54
+ *
55
+ * @since 1.0.0
56
+ * @committed
57
+ */
58
+ [[nodiscard]] auto ec() const -> std::error_code override;
59
+
60
+ /**
61
+ * The hostname/ip where this request got last dispatched to.
62
+ *
63
+ * @return address encoded as a string
64
+ *
65
+ * @since 1.0.0
66
+ * @committed
67
+ */
68
+ [[nodiscard]] auto last_dispatched_to() const -> const std::optional<std::string>& override;
69
+
70
+ /**
71
+ * The hostname/ip where this request got last dispatched from.
72
+ *
73
+ * @return address encoded as a string
74
+ *
75
+ * @since 1.0.0
76
+ * @committed
77
+ */
78
+ [[nodiscard]] auto last_dispatched_from() const -> const std::optional<std::string>& override;
79
+
80
+ /**
81
+ * The number of times the attached request has been retried.
82
+ *
83
+ * @return number of retries.
84
+ *
85
+ * @since 1.0.0
86
+ * @committed
87
+ */
88
+ [[nodiscard]] auto retry_attempts() const -> std::size_t override;
89
+
90
+ /**
91
+ * Set of reasons recorded during retrying the operation.
92
+ *
93
+ * @return set of reasons (empty if the operation was not retried)
94
+ *
95
+ * @since 1.0.0
96
+ * @committed
97
+ */
98
+ [[nodiscard]] auto retry_reasons() const -> const std::set<retry_reason>& override;
99
+
100
+ /**
101
+ * Check if the operation was retried because of given reason.
102
+ *
103
+ * @param reason reason to check
104
+ * @return true if the reason exists in set of recorded reasons.
105
+ *
106
+ * @since 1.0.0
107
+ * @uncommitted
108
+ */
109
+ [[nodiscard]] auto retried_because_of(retry_reason reason) const -> bool override;
110
+
111
+ [[nodiscard]] auto index_name() const -> const std::string&;
112
+
113
+ [[nodiscard]] auto client_context_id() const -> const std::string&;
114
+
115
+ [[nodiscard]] auto query() const -> const std::string&;
116
+
117
+ [[nodiscard]] auto parameters() const -> const std::optional<std::string>&;
118
+
119
+ [[nodiscard]] auto method() const -> const std::string&;
120
+
121
+ [[nodiscard]] auto path() const -> const std::string&;
122
+
123
+ [[nodiscard]] auto http_status() const -> std::uint32_t;
124
+
125
+ [[nodiscard]] auto http_body() const -> const std::string&;
126
+
127
+ [[nodiscard]] auto hostname() const -> const std::string&;
128
+
129
+ [[nodiscard]] auto port() const -> std::uint16_t;
130
+
131
+ [[nodiscard]] auto error() const -> const std::string&;
132
+
133
+ [[nodiscard]] auto status() const -> const std::string&;
134
+
135
+ private:
136
+ std::unique_ptr<internal_search_error_context> internal_;
137
+ };
138
+ } // namespace couchbase
@@ -0,0 +1,60 @@
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 <cstdint>
21
+ #include <string>
22
+
23
+ namespace couchbase
24
+ {
25
+ #ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
26
+ struct encoded_search_facet;
27
+ #endif
28
+
29
+ /**
30
+ * Base class for full text facets of search queries.
31
+ */
32
+ class search_facet
33
+ {
34
+ public:
35
+ virtual ~search_facet() = default;
36
+
37
+ /**
38
+ * @return encoded representation of the search facet.
39
+ *
40
+ * @since 1.0.0
41
+ * @internal
42
+ */
43
+ [[nodiscard]] virtual auto encode() const -> encoded_search_facet = 0;
44
+
45
+ protected:
46
+ search_facet(std::string field, std::uint32_t size)
47
+ : field_{ std::move(field) }
48
+ , size_{ size }
49
+ {
50
+ }
51
+
52
+ search_facet(std::string field)
53
+ : field_{ std::move(field) }
54
+ {
55
+ }
56
+
57
+ std::string field_;
58
+ std::optional<std::uint32_t> size_{};
59
+ };
60
+ } // namespace couchbase
@@ -0,0 +1,50 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2020-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include <couchbase/codec/tao_json_serializer.hxx>
21
+ #include <couchbase/search_meta_data.hxx>
22
+
23
+ #include "search_row.hxx"
24
+ #include <chrono>
25
+ #include <cinttypes>
26
+ #include <optional>
27
+ #include <vector>
28
+
29
+ namespace couchbase
30
+ {
31
+ /**
32
+ * @since 1.0.0
33
+ * @committed
34
+ */
35
+ class search_facet_result
36
+ {
37
+ public:
38
+ virtual ~search_facet_result() = default;
39
+
40
+ /**
41
+ * @since 1.0.0
42
+ * @internal
43
+ */
44
+ [[nodiscard]] virtual auto name() const -> const std::string& = 0;
45
+ [[nodiscard]] virtual auto field() const -> const std::string& = 0;
46
+ [[nodiscard]] virtual auto total() const -> std::uint64_t = 0;
47
+ [[nodiscard]] virtual auto missing() const -> std::uint64_t = 0;
48
+ [[nodiscard]] virtual auto other() const -> std::uint64_t = 0;
49
+ };
50
+ } // namespace couchbase
@@ -0,0 +1,85 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2020-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include <couchbase/codec/json_transcoder.hxx>
21
+ #include <couchbase/search_metrics.hxx>
22
+
23
+ #include <cinttypes>
24
+ #include <map>
25
+ #include <memory>
26
+ #include <optional>
27
+ #include <vector>
28
+
29
+ namespace couchbase
30
+ {
31
+ #ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
32
+ class internal_search_meta_data;
33
+ #endif
34
+
35
+ /**
36
+ * Stores any non-rows results related to the execution of a particular N1QL search.
37
+ *
38
+ * @since 1.0.0
39
+ * @committed
40
+ */
41
+ class search_meta_data
42
+ {
43
+ public:
44
+ /**
45
+ * @since 1.0.0
46
+ * @volatile
47
+ */
48
+ explicit search_meta_data(internal_search_meta_data internal);
49
+
50
+ /**
51
+ * Returns the client context identifier string set on the search request.
52
+ *
53
+ * @return client context identifier
54
+ *
55
+ * @since 1.0.0
56
+ * @committed
57
+ */
58
+ [[nodiscard]] auto client_context_id() const -> const std::string&;
59
+ /**
60
+ * Returns any warnings returned by the search engine.
61
+ *
62
+ * It returns an empty vector if no warnings were returned.
63
+ *
64
+ * @return vector of the reported warnings.
65
+ *
66
+ * @since 1.0.0
67
+ * @committed
68
+ */
69
+ [[nodiscard]] auto errors() const -> const std::map<std::string, std::string>&;
70
+
71
+ /**
72
+ * Returns the {@link search_metrics} as returned by the search engine if enabled.
73
+ *
74
+ * @return metrics
75
+ *
76
+ * @since 1.0.0
77
+ * @committed
78
+ */
79
+ [[nodiscard]] auto metrics() const -> const search_metrics&;
80
+
81
+ private:
82
+ std::unique_ptr<internal_search_meta_data> internal_;
83
+ };
84
+
85
+ } // namespace couchbase
@@ -0,0 +1,127 @@
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 <chrono>
21
+ #include <cinttypes>
22
+
23
+ namespace couchbase
24
+ {
25
+
26
+ /**
27
+ * Search Metrics contains the search result metrics containing counts and timings
28
+ *
29
+ * @since 1.0.0
30
+ * @committed
31
+ */
32
+ class search_metrics
33
+ {
34
+ public:
35
+ /**
36
+ * @since 1.0.0
37
+ * @internal
38
+ */
39
+ search_metrics() = default;
40
+
41
+ /**
42
+ * @since 1.0.0
43
+ * @volatile
44
+ */
45
+ search_metrics(std::chrono::nanoseconds took,
46
+ std::uint64_t total_rows,
47
+ std::uint64_t success_partition_count,
48
+ std::uint64_t error_partition_count,
49
+ std::uint64_t total_partition_count,
50
+ double max_score)
51
+ : took_{ took }
52
+ , total_rows_{ total_rows }
53
+ , success_partition_count_{ success_partition_count }
54
+ , error_partition_count_{ error_partition_count }
55
+ , total_partition_count_{ total_partition_count }
56
+ , max_score_{ max_score }
57
+ {
58
+ }
59
+
60
+ /**
61
+ * The total time taken for the request, that is the time from when the request was received until the results were returned.
62
+ *
63
+ * @return total time duration
64
+ *
65
+ * @since 1.0.0
66
+ * @committed
67
+ */
68
+ [[nodiscard]] auto took() const -> std::chrono::nanoseconds
69
+ {
70
+ return took_;
71
+ }
72
+
73
+ /**
74
+ * @since 1.0.0
75
+ * @committed
76
+ */
77
+ [[nodiscard]] auto total_rows() const -> std::uint64_t
78
+ {
79
+ return total_rows_;
80
+ }
81
+
82
+ /**
83
+ * @since 1.0.0
84
+ * @committed
85
+ */
86
+ [[nodiscard]] auto success_partition_count() const -> std::uint64_t
87
+ {
88
+ return success_partition_count_;
89
+ }
90
+
91
+ /**
92
+ * @since 1.0.0
93
+ * @committed
94
+ */
95
+ [[nodiscard]] auto error_partition_count() const -> std::uint64_t
96
+ {
97
+ return error_partition_count_;
98
+ }
99
+
100
+ /**
101
+ * @since 1.0.0
102
+ * @committed
103
+ */
104
+ [[nodiscard]] auto total_partition_count() const -> std::uint64_t
105
+ {
106
+ return total_partition_count_;
107
+ }
108
+
109
+ /**
110
+ * @since 1.0.0
111
+ * @committed
112
+ */
113
+ [[nodiscard]] auto max_score() const -> double
114
+ {
115
+ return max_score_;
116
+ }
117
+
118
+ private:
119
+ std::chrono::nanoseconds took_{};
120
+ std::uint64_t total_rows_{};
121
+ std::uint64_t success_partition_count_{};
122
+ std::uint64_t error_partition_count_{};
123
+ std::uint64_t total_partition_count_{};
124
+ double max_score_{};
125
+ };
126
+
127
+ } // namespace couchbase