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
@@ -26,6 +26,12 @@ namespace couchbase::transactions
26
26
  {
27
27
  class transaction_context;
28
28
 
29
+ /**
30
+ * The transaction_query_options are options specific to a query.
31
+ *
32
+ * Some of the options will override the corresponding elements in the @ref transactions_query_config section of the
33
+ * @ref transactions_config.
34
+ */
29
35
  class transaction_query_options
30
36
  {
31
37
  public:
@@ -34,120 +40,227 @@ class transaction_query_options
34
40
  // set defaults specific to query in transactions.
35
41
  opts_.metrics(true);
36
42
  }
37
- /*transaction_query_options(const core::operations::query_request& req)
38
- : query_req_(req)
39
- {
40
- }*/
41
43
 
44
+ /**
45
+ * Set an option which isn't exposed explicitly in transaction_query_options.
46
+ *
47
+ * @see query_options::raw for details.
48
+ *
49
+ * @tparam Value type of the value.
50
+ * @param key The name of the option.
51
+ * @param value The value of this option.
52
+ * @return reference to this object, convenient for chaining calls.
53
+ */
42
54
  template<typename Value>
43
55
  transaction_query_options& raw(const std::string& key, const Value& value)
44
56
  {
45
57
  opts_.raw(key, value);
46
58
  return *this;
47
59
  }
48
-
60
+ /**
61
+ * Set ad_hoc.
62
+ *
63
+ * Inform query service that this query is, or is not, a prepared statement query. @see query_options::adhoc for
64
+ * detailed discussion.
65
+ *
66
+ * @param value if set to false this query will be turned into a prepared statement query.
67
+ * @return reference to this object, convenient for chaining calls.
68
+ */
49
69
  transaction_query_options& ad_hoc(bool value)
50
70
  {
51
71
  opts_.adhoc(value);
52
72
  return *this;
53
73
  }
54
-
74
+ /**
75
+ * Set the query_scan_consistency for this query.
76
+ *
77
+ * @see query_options::scan_consistency for details.
78
+ *
79
+ * @param scan_consistency Desired scan consistency.
80
+ * @return reference to this object, convenient for chaining calls.
81
+ */
55
82
  transaction_query_options& scan_consistency(query_scan_consistency scan_consistency)
56
83
  {
57
84
  opts_.scan_consistency(scan_consistency);
58
85
  return *this;
59
86
  }
60
87
 
88
+ /**
89
+ * Set the profile mode for this query.
90
+ *
91
+ * @see query_options::profile for details.
92
+ *
93
+ * @param mode desired profile mode.
94
+ * @return reference to this object, convenient for chaining calls.
95
+ */
61
96
  transaction_query_options& profile(query_profile mode)
62
97
  {
63
98
  opts_.profile(mode);
64
99
  return *this;
65
100
  }
66
-
101
+ /**
102
+ * Set a client id for this query.
103
+ *
104
+ * @see query_options::client_context_id for details.
105
+ *
106
+ * @param id Desired id
107
+ * @return reference to this object, convenient for chaining calls.
108
+ */
67
109
  transaction_query_options& client_context_id(const std::string& id)
68
110
  {
69
111
  opts_.client_context_id(id);
70
112
  return *this;
71
113
  }
72
114
 
115
+ /**
116
+ * Set the scan_wait time
117
+ *
118
+ * @see query_options::scan_wait for details.
119
+ *
120
+ * @param scan_wait Desired time for scan_wait.
121
+ * @return reference to this object, convenient for chaining calls.
122
+ */
73
123
  transaction_query_options& scan_wait(std::chrono::milliseconds scan_wait)
74
124
  {
75
125
  opts_.scan_wait(scan_wait);
76
126
  return *this;
77
127
  }
78
128
 
129
+ /**
130
+ * Set the readonly hint for this query.
131
+ *
132
+ * @see query_options::readonly
133
+ *
134
+ * @param readonly True if query doesn't mutate documents.
135
+ * @return reference to this object, convenient for chaining calls.
136
+ */
79
137
  transaction_query_options& readonly(bool readonly)
80
138
  {
81
139
  opts_.readonly(readonly);
82
140
  return *this;
83
141
  }
84
-
142
+ /**
143
+ * Set the scan cap for this query.
144
+ *
145
+ * @see query_options::scan_cap for details.
146
+ *
147
+ * @param cap Desired cap.
148
+ * @return reference to this object, convenient for chaining calls.
149
+ */
85
150
  transaction_query_options& scan_cap(std::uint64_t cap)
86
151
  {
87
152
  opts_.scan_cap(cap);
88
153
  return *this;
89
154
  }
90
-
155
+ /**
156
+ * Set pipeline_batch size for this query.
157
+ *
158
+ * @see query_options::pipeline_batch for details.
159
+ *
160
+ * @param batch desired batch size.
161
+ * @return reference to this object, convenient for chaining calls.
162
+ */
91
163
  transaction_query_options& pipeline_batch(std::uint64_t batch)
92
164
  {
93
165
  opts_.pipeline_batch(batch);
94
166
  return *this;
95
167
  }
96
168
 
169
+ /**
170
+ * Set pipeline cap for this query.
171
+ *
172
+ * @see query_options::pipeline_cap for details.
173
+ *
174
+ * @param cap desired cap.
175
+ * @return reference to this object, convenient for chaining calls.
176
+ */
97
177
  transaction_query_options& pipeline_cap(std::uint64_t cap)
98
178
  {
99
179
  opts_.pipeline_cap(cap);
100
180
  return *this;
101
181
  }
102
182
 
183
+ /**
184
+ * Set positional parameters for this query.
185
+ *
186
+ * @see query_options::positional_parameters for details.
187
+ *
188
+ * @tparam Parameters Types of the parameters
189
+ * @param parameters the sequence of positional parameters for this query.
190
+ * @return reference to this object, convenient for chaining calls.
191
+ */
103
192
  template<typename... Parameters>
104
193
  auto positional_parameters(const Parameters&... parameters)
105
194
  {
106
195
  opts_.positional_parameters(parameters...);
107
196
  return *this;
108
197
  }
109
-
198
+ /**
199
+ * Set named parameters for this query.
200
+ *
201
+ * @see query_options::named_parameters for details.
202
+ *
203
+ * @tparam Parameters Types of the parameter pairs.
204
+ * @param parameters the sequence of name-value pairs. Each value will be encoded into JSON.
205
+ * @return reference to this object, convenient for chaining calls.
206
+ */
110
207
  template<typename... Parameters>
111
208
  transaction_query_options& named_parameters(const Parameters&... parameters)
112
209
  {
113
210
  opts_.named_parameters(parameters...);
114
211
  return *this;
115
212
  }
116
-
213
+ /**
214
+ * Set metrics for this query.
215
+ *
216
+ * If true, the query results will contain metrics. This is true by default for transactional queries.
217
+ * @see query_options::metrics for details.
218
+ *
219
+ * @param metrics True if metrics are desired.
220
+ * @return reference to this object, convenient for chaining calls.
221
+ */
117
222
  transaction_query_options& metrics(bool metrics)
118
223
  {
119
224
  opts_.metrics(metrics);
120
225
  return *this;
121
226
  }
122
227
 
228
+ /**
229
+ * Set max parallelism for this query.
230
+ *
231
+ * @see query_options::max_parallelism for details.
232
+ *
233
+ * @param max Desired max parallelism
234
+ * @return reference to this object, convenient for chaining calls.
235
+ */
123
236
  transaction_query_options& max_parallelism(std::uint64_t max)
124
237
  {
125
238
  opts_.max_parallelism(max);
126
239
  return *this;
127
240
  }
128
241
 
129
- /** @internal */
242
+ /** @private */
130
243
  transaction_query_options& encoded_raw_options(std::map<std::string, codec::binary, std::less<>> options)
131
244
  {
132
245
  opts_.encoded_raw_options(options);
133
246
  return *this;
134
247
  }
135
248
 
136
- /** @internal */
249
+ /** @private */
137
250
  transaction_query_options& encoded_positional_parameters(std::vector<codec::binary> parameters)
138
251
  {
139
252
  opts_.encoded_positional_parameters(parameters);
140
253
  return *this;
141
254
  }
142
255
 
143
- /** @internal */
256
+ /** @private */
144
257
  transaction_query_options& encoded_named_parameters(std::map<std::string, codec::binary, std::less<>> parameters)
145
258
  {
146
259
  opts_.encoded_named_parameters(parameters);
147
260
  return *this;
148
261
  }
149
262
 
150
- /** @internal */
263
+ /** @private */
151
264
  const query_options& get_query_options() const
152
265
  {
153
266
  return opts_;
@@ -20,6 +20,10 @@
20
20
 
21
21
  namespace couchbase::transactions
22
22
  {
23
+ /**
24
+ * Transactional queries will return a transaction_query_result. Note that this is currently identical
25
+ * to a @ref query_result. See @ref query_result for details.
26
+ */
23
27
  class transaction_query_result : public query_result
24
28
  {
25
29
  public:
@@ -25,7 +25,7 @@ namespace couchbase::transactions
25
25
  * @volatile
26
26
  *
27
27
  * Contains internal information on a transaction,
28
- * returned by @ref core::transactions::run()
28
+ * returned by @ref couchbase::transactions::transactions::run()
29
29
  */
30
30
  struct transaction_result {
31
31
  std::string transaction_id;
@@ -21,7 +21,9 @@
21
21
  #include <couchbase/transactions/transaction_keyspace.hxx>
22
22
  namespace couchbase::transactions
23
23
  {
24
-
24
+ /**
25
+ * Configuration parameters for the background transaction cleanup threads.
26
+ */
25
27
  class transactions_cleanup_config
26
28
  {
27
29
  public:
@@ -117,7 +119,7 @@ class transactions_cleanup_config
117
119
  return *this;
118
120
  }
119
121
 
120
- /** @internal */
122
+ /** @private */
121
123
  struct built {
122
124
  bool cleanup_lost_attempts;
123
125
  bool cleanup_client_attempts;
@@ -125,7 +127,7 @@ class transactions_cleanup_config
125
127
  std::list<couchbase::transactions::transaction_keyspace> collections;
126
128
  };
127
129
 
128
- /** @internal */
130
+ /** @private */
129
131
  [[nodiscard]] auto build() const -> built
130
132
  {
131
133
  return { cleanup_lost_attempts_, cleanup_client_attempts_, cleanup_window_, collections_ };
@@ -53,6 +53,8 @@ class transactions_config
53
53
  /**
54
54
  * @brief Get the default durability level for all transaction operations
55
55
  *
56
+ * @see couchbase::durability_level for details.
57
+ *
56
58
  * @return The default durability level used for write operations.
57
59
  */
58
60
  [[nodiscard]] couchbase::durability_level durability_level() const
@@ -63,6 +65,8 @@ class transactions_config
63
65
  /**
64
66
  * @brief Set the default durability level for all transaction operations
65
67
  *
68
+ * @see couchbase::durability_level for details.
69
+ *
66
70
  * @param level The default durability level desired for write operations.
67
71
  * @return reference to this, so calls can be chained.
68
72
  */
@@ -115,7 +119,7 @@ class transactions_config
115
119
  /**
116
120
  * @brief Set the expiration time for transactions.
117
121
  *
118
- * @param duration desired expiration for transactions. see @ref expiration_time().
122
+ * @param duration desired expiration for transactions.
119
123
  * @return reference to this, so calls can be chained.
120
124
  */
121
125
  template<typename T>
@@ -206,7 +210,7 @@ class transactions_config
206
210
  return *this;
207
211
  }
208
212
 
209
- /** @internal */
213
+ /** @private */
210
214
  transactions_config& test_factories(std::shared_ptr<core::transactions::attempt_context_testing_hooks> hooks,
211
215
  std::shared_ptr<core::transactions::cleanup_testing_hooks> cleanup_hooks)
212
216
  {
@@ -215,19 +219,19 @@ class transactions_config
215
219
  return *this;
216
220
  }
217
221
 
218
- /** @internal */
222
+ /** @private */
219
223
  [[nodiscard]] core::transactions::attempt_context_testing_hooks& attempt_context_hooks() const
220
224
  {
221
225
  return *attempt_context_hooks_;
222
226
  }
223
227
 
224
- /** @internal */
228
+ /** @private */
225
229
  [[nodiscard]] core::transactions::cleanup_testing_hooks& cleanup_hooks() const
226
230
  {
227
231
  return *cleanup_hooks_;
228
232
  }
229
233
 
230
- /** @internal */
234
+ /** @private */
231
235
  struct built {
232
236
  couchbase::durability_level level;
233
237
  std::chrono::nanoseconds expiration_time;
@@ -19,11 +19,14 @@
19
19
 
20
20
  namespace couchbase::transactions
21
21
  {
22
+ /**
23
+ * The transactions_query_config sets the defaults for all queries in the transactions.
24
+ */
22
25
  class transactions_query_config
23
26
  {
24
27
  public:
25
28
  /**
26
- * Set scan consistency for transactions.
29
+ * Set scan consistency for transactions. @see query_options::scan_consistency for details.
27
30
  *
28
31
  * @param consistency the query_scan_consistency to use.
29
32
  * @return reference to this, so calls can be chained.
@@ -44,12 +47,12 @@ class transactions_query_config
44
47
  return scan_consistency_;
45
48
  }
46
49
 
47
- /** @internal */
50
+ /** @private */
48
51
  struct built {
49
52
  query_scan_consistency scan_consistency;
50
53
  };
51
54
 
52
- /** @internal */
55
+ /** @private */
53
56
  [[nodiscard]] auto build() const -> built
54
57
  {
55
58
  return { scan_consistency_ };
@@ -30,14 +30,47 @@ using txn_logic = std::function<void(attempt_context&)>;
30
30
  using async_txn_logic = std::function<void(async_attempt_context&)>;
31
31
  using async_txn_complete_logic = std::function<void(couchbase::transaction_error_context, transaction_result)>;
32
32
 
33
+ /**
34
+ * The transactions object is used to initiate a transaction.
35
+ *
36
+ *
37
+ */
33
38
  class transactions
34
39
  {
35
40
  public:
36
41
  virtual ~transactions() = default;
42
+
43
+ /**
44
+ * Run a blocking transaction.
45
+ *
46
+ * You can supply a lambda or function which uses a yielded {@link attempt_context} to perform a transaction, where each transaction
47
+ * operation is blocking. A simple usage would be to get a document and replace the contents:
48
+ *
49
+ * @snippet{trimleft} test/test_transaction_examples.cxx simple-blocking-txn
50
+ *
51
+ * @param logic a lambda or function which uses the yielded {@link attempt_context} to perform the desired transactional operations.
52
+ * @param cfg if passed in, these options override the defaults, or those set in the {@link cluster_options}.
53
+ * @return an {@link transaction_error_context}, and a {@link transaction_result} representing the results of the transaction.
54
+ */
37
55
  virtual std::pair<transaction_error_context, transaction_result> run(txn_logic&& logic,
38
56
  const transaction_options& cfg = transaction_options()) = 0;
57
+ /**
58
+ * Run an asynchronous transaction.
59
+ *
60
+ * You can supply a lambda or function which uses a yielded {@link async_attempt_context} to perform a transaction, where each
61
+ * transaction operation is asynchronous. A simple usage would be to get 3 document and replace the contents of each. In the example
62
+ * below, we get the 3 documents in parallel, and update each when the get returns the document. This can be significantly faster than
63
+ * getting each document in serial, and updating it using the blocking api:
64
+ *
65
+ * @snippet{trimleft} test/test_transaction_examples.cxx simple-async-txn
66
+ *
67
+ * @param logic a lambda or function which uses the yielded {@link async_attempt_context} to perform the desired transactional
68
+ * operations.
69
+ * @param complete_callback a lambda or function to which is yielded a {transaction_error_context} and {transaction_result}.
70
+ * @param cfg if passed in, these options override the defaults, or those set in the {@link cluster_options}.
71
+ */
39
72
  virtual void run(async_txn_logic&& logic,
40
73
  async_txn_complete_logic&& complete_callback,
41
74
  const transaction_options& cfg = transaction_options()) = 0;
42
75
  };
43
- } // namespace couchbase::transactions
76
+ } // namespace couchbase::transactions
@@ -89,8 +89,8 @@ initiate_unlock_operation(std::shared_ptr<couchbase::core::cluster> core,
89
89
  std::string collection_name,
90
90
  std::string document_key,
91
91
  couchbase::cas cas,
92
- unlock_options::built options,
93
- unlock_handler&& handler);
92
+ couchbase::unlock_options::built options,
93
+ couchbase::unlock_handler&& handler);
94
94
  #endif
95
95
  } // namespace impl
96
96
  } // namespace core
@@ -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 update_bucket_options : public common_options<update_bucket_options> {
28
+ public:
29
+ struct built : public common_options<update_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 update_bucket_handler = std::function<void(couchbase::manager_error_context)>;
41
+ } // namespace couchbase
@@ -149,9 +149,9 @@ initiate_upsert_operation(std::shared_ptr<couchbase::core::cluster> core,
149
149
  std::string scope_name,
150
150
  std::string collection_name,
151
151
  std::string document_key,
152
- codec::encoded_value encoded,
153
- upsert_options::built options,
154
- upsert_handler&& handler);
152
+ couchbase::codec::encoded_value encoded,
153
+ couchbase::upsert_options::built options,
154
+ couchbase::upsert_handler&& handler);
155
155
  #endif
156
156
  } // namespace impl
157
157
  } // namespace core
@@ -81,35 +81,4 @@ class watch_query_indexes_options : public common_options<watch_query_indexes_op
81
81
  */
82
82
 
83
83
  using watch_query_indexes_handler = std::function<void(couchbase::manager_error_context)>;
84
-
85
- #ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
86
- namespace core
87
- {
88
- class cluster;
89
- class query_context;
90
- namespace impl
91
- {
92
-
93
- /**
94
- * @since 1.0.0
95
- * @internal
96
- */
97
- void
98
- initiate_watch_query_indexes(std::shared_ptr<couchbase::core::cluster> core,
99
- std::string bucket_name,
100
- std::vector<std::string> index_names,
101
- couchbase::watch_query_indexes_options::built options,
102
- query_context query_ctx,
103
- std::string collection_name,
104
- watch_query_indexes_handler&& handler);
105
- void
106
- initiate_watch_query_indexes(std::shared_ptr<couchbase::core::cluster> core,
107
- std::string bucket_name,
108
- std::vector<std::string> index_names,
109
- couchbase::watch_query_indexes_options::built options,
110
- watch_query_indexes_handler&& handler);
111
-
112
- #endif
113
- } // namespace impl
114
- } // namespace core
115
84
  } // namespace couchbase
@@ -0,0 +1,83 @@
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
+ * A wildcard query is a query in which term the character `*` will match `0..n` occurrences of any characters and `?` will match `1`
29
+ * occurrence of any character.
30
+ *
31
+ * Match documents where field `reviews.content` contains words starting with `"inter"`:
32
+ * @snippet test_unit_search.cxx search-wildcard
33
+ *
34
+ * @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-wildcard.html server documentation
35
+ *
36
+ * @since 1.0.0
37
+ * @committed
38
+ */
39
+ class wildcard_query : public search_query
40
+ {
41
+ public:
42
+ /**
43
+ * Create a new wildcard query.
44
+ *
45
+ * @param regexp the wildcard-containing term to be analyzed and searched
46
+ *
47
+ * @since 1.0.0
48
+ * @committed
49
+ */
50
+ explicit wildcard_query(std::string regexp)
51
+ : wildcard_{ std::move(regexp) }
52
+ {
53
+ }
54
+
55
+ /**
56
+ * If a field is specified, only terms in that field will be matched.
57
+ *
58
+ * @param field_name name of the field to be matched
59
+ *
60
+ * @return this query for chaining purposes.
61
+ *
62
+ * @since 1.0.0
63
+ * @committed
64
+ */
65
+ auto field(std::string field_name) -> wildcard_query&
66
+ {
67
+ field_ = std::move(field_name);
68
+ return *this;
69
+ }
70
+
71
+ /**
72
+ * @return encoded representation of the query.
73
+ *
74
+ * @since 1.0.0
75
+ * @internal
76
+ */
77
+ [[nodiscard]] auto encode() const -> encoded_search_query override;
78
+
79
+ private:
80
+ std::string wildcard_;
81
+ std::optional<std::string> field_{};
82
+ };
83
+ } // namespace couchbase
@@ -25,18 +25,21 @@ unit_test(json_streaming_lexer)
25
25
  unit_test(jsonsl)
26
26
  unit_test(config_profiles)
27
27
  unit_test(options)
28
+ unit_test(search)
29
+ unit_test(query)
28
30
  target_link_libraries(test_unit_jsonsl jsonsl)
29
31
 
30
32
  integration_benchmark(get)
31
33
 
32
- transaction_test(transaction_context)
33
- transaction_test(transaction_simple)
34
- transaction_test(transaction_simple_async)
35
- transaction_test(transaction_public_blocking_api)
36
- transaction_test(transaction_public_async_api)
34
+ transaction_test(context)
35
+ transaction_test(simple)
36
+ transaction_test(simple_async)
37
+ transaction_test(public_blocking_api)
38
+ transaction_test(public_async_api)
37
39
 
38
40
  unit_test(transaction_logging)
39
41
  unit_test(transaction_utils)
40
42
  unit_test(waitable_op_list)
41
43
 
42
44
  integration_test(examples)
45
+ transaction_test(examples)
@@ -17,6 +17,6 @@
17
17
 
18
18
  #pragma once
19
19
 
20
- #define CATCH_CONFIG_ENABLE_BENCHMARKING
21
-
22
20
  #include "test_helper_integration.hxx"
21
+
22
+ #include <catch2/benchmark/catch_benchmark.hpp>