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
@@ -15,6 +15,7 @@
15
15
  */
16
16
  #pragma once
17
17
 
18
+ #include <couchbase/scope.hxx>
18
19
  #include <couchbase/transactions/transaction_get_result.hxx>
19
20
  #include <couchbase/transactions/transaction_query_options.hxx>
20
21
  #include <couchbase/transactions/transaction_query_result.hxx>
@@ -24,52 +25,130 @@ namespace couchbase::transactions
24
25
  using async_result_handler = std::function<void(transaction_op_error_context, transaction_get_result)>;
25
26
  using async_query_handler = std::function<void(transaction_op_error_context, transaction_query_result)>;
26
27
  using async_err_handler = std::function<void(transaction_op_error_context)>;
28
+
29
+ /**
30
+ * The async_attempt_context is used for all asynchronous transaction operations
31
+ *
32
+ * In the example below, we get 3 documents in parallel, and update each when the get returns the document:
33
+ *
34
+ * @snippet test/test_transaction_examples.cxx simple-async-txn
35
+ */
27
36
  class async_attempt_context
28
37
  {
29
38
 
30
39
  public:
40
+ /**
41
+ * Get document from a collection.
42
+ *
43
+ * Fetch the document contents, in the form of a @ref transaction_get_result. This can be used in subsequent calls
44
+ * to @ref async_attempt_context::replace or @ref async_attempt_context::remove
45
+ *
46
+ * @param coll The collection which contains the document.
47
+ * @param id The document id which is used to uniquely identify it.
48
+ * @param handler The handler which implements @ref async_result_handler
49
+ */
31
50
  virtual void get(const collection& coll, std::string id, async_result_handler&& handler) = 0;
51
+ /**
52
+ * Remove a document from a collection.
53
+ *
54
+ * Removes a document from a collection, where the document was gotten from a previous call to @ref async_attempt_context::get
55
+ *
56
+ * @param doc The document to remove.
57
+ * @param handler The handler which implements @ref async_err_handler
58
+ */
32
59
  virtual void remove(transaction_get_result doc, async_err_handler&& handler) = 0;
33
60
 
61
+ /**
62
+ * Insert a document into a collection.
63
+ *
64
+ * Given an id and the content, this inserts a new document into a collection. Note that currently this content can be either a
65
+ * <std::vector<std::byte>> or an object which can be serialized with the @ref codec::tao_json_serializer.
66
+ *
67
+ * @tparam Content type of the document.
68
+ * @param coll Collection to insert the document into.
69
+ * @param id The document id.
70
+ * @param content The content of the document.
71
+ * @param handler The handler which implements @ref async_result_handler
72
+ */
34
73
  template<typename Content>
35
74
  void insert(const collection& coll, std::string id, Content&& content, async_result_handler&& handler)
36
75
  {
37
76
  if constexpr (std::is_same_v<Content, std::vector<std::byte>>) {
38
77
  return insert_raw(std::forward<std::vector<std::byte>>(content), std::move(id), content, std::move(handler));
39
78
  } else {
79
+ // TODO: transcoder support
40
80
  return insert_raw(coll, std::move(id), codec::tao_json_serializer::serialize(content), std::move(handler));
41
81
  }
42
82
  }
43
-
83
+ /**
84
+ * Replace the contents of a document in a collection.
85
+ *
86
+ * Replaces the contents of an existing document. Note that currently this content can be either a
87
+ * <std::vector<std::byte>> or an object which can be serialized with the @ref codec::tao_json_serializer.
88
+ *
89
+ * @tparam Content type of the document
90
+ * @param doc Document whose content will be replaced. This is gotten from a call to @ref async_attempt_context::get
91
+ * @param content New content of the document
92
+ * @param handler The handler which implements @ref async_result_handler
93
+ */
44
94
  template<typename Content>
45
95
  void replace(transaction_get_result doc, Content&& content, async_result_handler&& handler)
46
96
  {
47
97
  if constexpr (std::is_same_v<Content, std::vector<std::byte>>) {
48
98
  return replace_raw(std::move(doc), std::forward<std::vector<std::byte>>(content), std::move(handler));
49
99
  } else {
100
+ // TODO: transcoder support
50
101
  return replace_raw(std::move(doc), codec::tao_json_serializer::serialize(content), std::move(handler));
51
102
  }
52
103
  }
53
-
104
+ /**
105
+ * Perform a query, within a scope.
106
+ *
107
+ * Performs a query given a specific scope. Note that all subsequent transaction operations will be handled by the query service.
108
+ *
109
+ * @param scope Scope for the query.
110
+ * @param statement The query statement
111
+ * @param opts Options for the query
112
+ * @param handler Handler which implements @ref async_query_handler.
113
+ */
54
114
  void query(const scope& scope, std::string statement, transaction_query_options opts, async_query_handler&& handler)
55
115
  {
56
116
  return query(std::move(statement), std::move(opts), fmt::format("{}.{}", scope.bucket_name(), scope.name()), std::move(handler));
57
117
  }
58
-
118
+ /**
119
+ * Perform a query.
120
+ *
121
+ * Performs an unscoped query.
122
+ *
123
+ * @param statement The query statement.
124
+ * @param opts Options for the query.
125
+ * @param handler Handler which implements @ref async_query_handler.
126
+ */
59
127
  void query(std::string statement, transaction_query_options opts, async_query_handler&& handler)
60
128
  {
61
129
  return query(statement, opts, {}, std::move(handler));
62
130
  };
63
-
131
+ /**
132
+ * Perform a query.
133
+ *
134
+ * Performs an unscoped query.
135
+ *
136
+ * @param statement The query statement.
137
+ * @param handler Handler which implements @ref async_query_handler
138
+ */
64
139
  void query(std::string statement, async_query_handler&& handler)
65
140
  {
66
141
  return query(std::move(statement), {}, std::move(handler));
67
142
  }
143
+
68
144
  virtual ~async_attempt_context() = default;
69
145
 
70
146
  protected:
147
+ /** @private */
71
148
  virtual void insert_raw(const collection& coll, std::string id, std::vector<std::byte> content, async_result_handler&& handler) = 0;
149
+ /** @private */
72
150
  virtual void replace_raw(transaction_get_result doc, std::vector<std::byte> content, async_result_handler&& handler) = 0;
151
+ /** @private */
73
152
  virtual void query(std::string statement,
74
153
  transaction_query_options opts,
75
154
  std::optional<std::string> query_context,
@@ -21,12 +21,42 @@
21
21
 
22
22
  namespace couchbase::transactions
23
23
  {
24
+ /**
25
+ * The attempt_context is used for all synchronous transaction operations
26
+ *
27
+ * In the example below, we get a document then replace its content:
28
+ *
29
+ * @snippet test/test_transaction_examples.cxx simple-blocking-txn
30
+ */
31
+
24
32
  class attempt_context
25
33
  {
26
34
  public:
35
+ /**
36
+ * Get a document from a collection.
37
+ *
38
+ * Fetch the document contents, in the form of a @ref transaction_get_result. This can be used in subsequent calls
39
+ * to @ref attempt_context::replace or @ref attempt_context::remove
40
+ *
41
+ * @param coll The collection which contains the document.
42
+ * @param id The unique id of the document.
43
+ * @return The result of the operation, which is an @ref transaction_op_error_context and a @ref transaction_get_result.
44
+ */
27
45
  virtual std::pair<transaction_op_error_context, transaction_get_result> get(const couchbase::collection& coll,
28
46
  const std::string& id) = 0;
29
47
 
48
+ /**
49
+ * Insert a document into a collection.
50
+ *
51
+ * Given an id and the content, this inserts a new document into a collection. Note that currently this content can be either a
52
+ * <std::vector<std::byte>> or an object which can be serialized with the @ref codec::tao_json_serializer.
53
+ *
54
+ * @tparam Content Type of the contents of the document.
55
+ * @param coll Collection in which to insert document.
56
+ * @param id The unique id of the document.
57
+ * @param content The content of the document.
58
+ * @return The result of the operation, which is an @ref transaction_op_error_context and a @ref transaction_get_result.
59
+ */
30
60
  template<typename Content>
31
61
  std::pair<transaction_op_error_context, transaction_get_result> insert(const couchbase::collection& coll,
32
62
  const std::string& id,
@@ -39,6 +69,17 @@ class attempt_context
39
69
  }
40
70
  }
41
71
 
72
+ /**
73
+ * Replace the contents of a document in a collection.
74
+ *
75
+ * Replaces the contents of an existing document. Note that currently this content can be either a
76
+ * <std::vector<std::byte>> or an object which can be serialized with the @ref codec::tao_json_serializer.
77
+
78
+ * @tparam Content Type of the contents of the document.
79
+ * @param doc Document whose content will be replaced. This is gotten from a call to @ref attempt_context::get
80
+ * @param content New content of the document.
81
+ * @return The result of the operation, which is an @ref transaction_op_error_context and a @ref transaction_get_result.
82
+ */
42
83
  template<typename Content>
43
84
  std::pair<transaction_op_error_context, transaction_get_result> replace(const transaction_get_result& doc, const Content& content)
44
85
  {
@@ -49,14 +90,37 @@ class attempt_context
49
90
  }
50
91
  }
51
92
 
93
+ /**
94
+ * Remove a document.
95
+ *
96
+ * Removes a document from a collection, where the document was gotten from a previous call to @ref attempt_context::get
97
+ *
98
+ * @param doc The document to remove.
99
+ * @return The result of the operation.
100
+ */
52
101
  virtual transaction_op_error_context remove(const transaction_get_result& doc) = 0;
53
102
 
103
+ /**
104
+ * Perform an unscoped query.
105
+ *
106
+ * @param statement The query statement.
107
+ * @param options Options for the query.
108
+ * @return The result of the operation, with is an @ref transaction_op_error_context and a @ref transaction_query_result.
109
+ */
54
110
  std::pair<transaction_op_error_context, transaction_query_result> query(const std::string& statement,
55
111
  const transaction_query_options& options = {})
56
112
  {
57
113
  return do_public_query(statement, options, {});
58
114
  }
59
115
 
116
+ /**
117
+ * Perform a scoped query.
118
+ *
119
+ * @param scope Scope for the query.
120
+ * @param statement The query statement.
121
+ * @param opts Options for the query.
122
+ * @return The result of the operation, with is an @ref transaction_op_error_context and a @ref transaction_query_result.
123
+ */
60
124
  std::pair<transaction_op_error_context, transaction_query_result> query(const scope& scope,
61
125
  const std::string& statement,
62
126
  const transaction_query_options& opts = {})
@@ -67,11 +131,14 @@ class attempt_context
67
131
  virtual ~attempt_context() = default;
68
132
 
69
133
  protected:
134
+ /** @private */
70
135
  virtual std::pair<transaction_op_error_context, transaction_get_result> replace_raw(const transaction_get_result& doc,
71
136
  std::vector<std::byte> content) = 0;
137
+ /** @private */
72
138
  virtual std::pair<transaction_op_error_context, transaction_get_result> insert_raw(const couchbase::collection& coll,
73
139
  const std::string& id,
74
140
  std::vector<std::byte> content) = 0;
141
+ /** @private */
75
142
  virtual std::pair<transaction_op_error_context, transaction_query_result> do_public_query(const std::string& statement,
76
143
  const transaction_query_options& options,
77
144
  std::optional<std::string> query_context) = 0;
@@ -48,6 +48,8 @@ class transaction_get_result
48
48
  }
49
49
 
50
50
  public:
51
+ /** @private */
52
+
51
53
  transaction_get_result();
52
54
  /**
53
55
  * Content of the document.
@@ -66,12 +66,20 @@ struct transaction_keyspace {
66
66
  : transaction_keyspace{ bucket_name, couchbase::scope::default_name, couchbase::collection::default_name }
67
67
  {
68
68
  }
69
-
69
+ /**
70
+ * Check if a keyspace is valid.
71
+ *
72
+ * A valid transaction_keyspace must have the bucket, scope, and collection all set. Note that both the scope and collection default
73
+ * to _default, but there is no default for the bucket so it must be set.
74
+ *
75
+ * @return true if valid.
76
+ */
70
77
  bool valid()
71
78
  {
72
79
  return !bucket.empty() && !scope.empty() && !collection.empty();
73
80
  }
74
81
 
82
+ /** @private */
75
83
  template<typename OStream>
76
84
  friend OStream& operator<<(OStream& os, const transaction_keyspace& keyspace)
77
85
  {
@@ -84,6 +92,8 @@ struct transaction_keyspace {
84
92
  }
85
93
  };
86
94
  } // namespace couchbase::transactions
95
+
96
+ /** @private */
87
97
  template<>
88
98
  struct fmt::formatter<couchbase::transactions::transaction_keyspace> {
89
99
  public:
@@ -24,44 +24,91 @@
24
24
 
25
25
  namespace couchbase::transactions
26
26
  {
27
+ /**
28
+ * The transaction_options can be passed in to override some elements of the global @ref transactions_config.
29
+ */
27
30
  class transaction_options
28
31
  {
29
32
  public:
30
33
  transaction_options() = default;
31
34
 
35
+ /**
36
+ * Set durability for this transaction.
37
+ *
38
+ * @see couchbase::durability_level for details.
39
+ *
40
+ * @param level Durability level for this transaction.
41
+ * @return reference to this object, convenient for chaining operations.
42
+ */
32
43
  transaction_options& durability_level(durability_level level)
33
44
  {
34
45
  durability_ = level;
35
46
  return *this;
36
47
  }
37
-
48
+ /**
49
+ * Get the durability if it has been set.
50
+ *
51
+ * @see couchbase::durability_level for details.
52
+ *
53
+ * @return durability if set.
54
+ */
38
55
  std::optional<couchbase::durability_level> durability_level()
39
56
  {
40
57
  return durability_;
41
58
  }
42
-
59
+ /**
60
+ * Set the @ref query_scan_consistency for this transaction.
61
+ *
62
+ * @see query_options::scan_consistency for details.
63
+ *
64
+ * @param scan_consistency The desired @ref query_scan_consistency for this transaction.
65
+ * @return reference to this object, convenient for chaining operations.
66
+ */
43
67
  transaction_options& scan_consistency(query_scan_consistency scan_consistency)
44
68
  {
45
69
  scan_consistency_ = scan_consistency;
46
70
  return *this;
47
71
  }
48
-
72
+ /**
73
+ * Get the scan_consistency if it has been set.
74
+ *
75
+ * @see query_options::scan_consistency for details.
76
+ *
77
+ * @return The scan_consistency, if set.
78
+ */
49
79
  std::optional<query_scan_consistency> scan_consistency()
50
80
  {
51
81
  return scan_consistency_;
52
82
  }
53
-
83
+ /**
84
+ * Set the timeout for key-value operations for this transaction.
85
+ *
86
+ * @param kv_timeout Desired key-value timeout.
87
+ * @return reference to this object, convenient for chaining operations.
88
+ */
54
89
  transaction_options& kv_timeout(std::chrono::milliseconds kv_timeout)
55
90
  {
56
91
  kv_timeout_ = kv_timeout;
57
92
  return *this;
58
93
  }
59
94
 
95
+ /**
96
+ * Get the key-value timeout if it has been set.
97
+ *
98
+ * @return The key-value timeout, if set.
99
+ */
60
100
  std::optional<std::chrono::milliseconds> kv_timeout()
61
101
  {
62
102
  return kv_timeout_;
63
103
  }
64
104
 
105
+ /**
106
+ * Set the expiration time for this transaction.
107
+ *
108
+ * @tparam T expiration time type, e.g. @ref std::chrono::milliseconds, or similar
109
+ * @param expiration_time Desired expiration time.
110
+ * @return reference to this object, convenient for chaining operations.
111
+ */
65
112
  template<typename T>
66
113
  transaction_options& expiration_time(T expiration_time)
67
114
  {
@@ -69,29 +116,53 @@ class transaction_options
69
116
  return *this;
70
117
  }
71
118
 
119
+ /**
120
+ * Get the expiration time, if set.
121
+ *
122
+ * @return the expiration time, if set.
123
+ */
72
124
  std::optional<std::chrono::nanoseconds> expiration_time()
73
125
  {
74
126
  return expiration_time_;
75
127
  }
76
128
 
129
+ /**
130
+ * Set the metadata collection to use for this transaction
131
+ *
132
+ * Transactions involve a the creation and use of some metadata documents, which by default are placed in the default collection of
133
+ * scope which the first document in the that has a mutating operation performed on it. However, you can set this to a specific
134
+ * collection to isolate these documents from your documents, if desired.
135
+ *
136
+ * @param coll The desired collection to use.
137
+ * @return reference to this object, convenient for chaining operations.
138
+ */
77
139
  transaction_options& metadata_collection(const couchbase::collection& coll)
78
140
  {
79
141
  metadata_collection_.emplace(coll.bucket_name(), coll.scope_name(), coll.name());
80
142
  return *this;
81
143
  }
82
-
144
+ /**
145
+ * Set metadata collection to use for this transaction
146
+ *
147
+ * @param keyspace The desired collection to use
148
+ * @return reference to this object, convenient for chaining operations.
149
+ */
83
150
  transaction_options& metadata_collection(const couchbase::transactions::transaction_keyspace& keyspace)
84
151
  {
85
152
  metadata_collection_.emplace(keyspace);
86
153
  return *this;
87
154
  }
88
-
155
+ /**
156
+ * Get the metadata collection, if set.
157
+ *
158
+ * @return the metadata collection, as a @ref transaction_keyspace, if set.
159
+ */
89
160
  std::optional<transaction_keyspace> metadata_collection()
90
161
  {
91
162
  return metadata_collection_;
92
163
  }
93
164
 
94
- /** @internal */
165
+ /** @private */
95
166
  transaction_options& test_factories(std::shared_ptr<core::transactions::attempt_context_testing_hooks> hooks,
96
167
  std::shared_ptr<core::transactions::cleanup_testing_hooks> cleanup_hooks)
97
168
  {
@@ -99,7 +170,7 @@ class transaction_options
99
170
  cleanup_hooks_ = cleanup_hooks;
100
171
  return *this;
101
172
  }
102
-
173
+ /** @private */
103
174
  [[nodiscard]] transactions_config::built apply(const transactions_config::built& conf) const;
104
175
 
105
176
  private: