couchbase 3.4.1 → 3.4.3

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 (278) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/ext/couchbase/CMakeLists.txt +59 -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/ThirdPartyDependencies.cmake +4 -0
  8. data/ext/couchbase/cmake/build_config.hxx.in +3 -0
  9. data/ext/couchbase/core/bucket.cxx +3 -2
  10. data/ext/couchbase/core/bucket.hxx +9 -0
  11. data/ext/couchbase/core/cluster.hxx +17 -0
  12. data/ext/couchbase/core/cluster_options.cxx +2 -2
  13. data/ext/couchbase/core/cluster_options.hxx +4 -7
  14. data/ext/couchbase/core/{config_profile.cxx → cluster_options_fwd.hxx} +7 -6
  15. data/ext/couchbase/core/config_profile.hxx +2 -65
  16. data/ext/couchbase/core/config_profiles.cxx +79 -0
  17. data/ext/couchbase/core/config_profiles.hxx +56 -0
  18. data/ext/couchbase/core/error_context/search.hxx +1 -1
  19. data/ext/couchbase/core/impl/analytics.cxx +237 -0
  20. data/ext/couchbase/core/impl/boolean_field_query.cxx +40 -0
  21. data/ext/couchbase/core/impl/boolean_query.cxx +62 -0
  22. data/ext/couchbase/core/impl/cluster.cxx +2 -1
  23. data/ext/couchbase/core/impl/conjunction_query.cxx +51 -0
  24. data/ext/couchbase/core/impl/date_range.cxx +89 -0
  25. data/ext/couchbase/core/impl/date_range_facet.cxx +54 -0
  26. data/ext/couchbase/core/impl/date_range_facet_result.cxx +64 -0
  27. data/ext/couchbase/core/impl/date_range_query.cxx +125 -0
  28. data/ext/couchbase/core/impl/disjunction_query.cxx +51 -0
  29. data/ext/couchbase/core/impl/dns_srv_tracker.cxx +5 -3
  30. data/ext/couchbase/core/impl/encoded_search_facet.hxx +29 -0
  31. data/ext/couchbase/core/impl/encoded_search_query.hxx +29 -0
  32. data/ext/couchbase/core/impl/encoded_search_sort.hxx +29 -0
  33. data/ext/couchbase/core/impl/geo_bounding_box_query.cxx +46 -0
  34. data/ext/couchbase/core/impl/geo_distance_query.cxx +43 -0
  35. data/ext/couchbase/core/impl/geo_polygon_query.cxx +46 -0
  36. data/ext/couchbase/core/impl/internal_date_range_facet_result.cxx +80 -0
  37. data/ext/couchbase/core/impl/internal_date_range_facet_result.hxx +48 -0
  38. data/ext/couchbase/core/impl/internal_numeric_range_facet_result.cxx +80 -0
  39. data/ext/couchbase/core/impl/internal_numeric_range_facet_result.hxx +48 -0
  40. data/ext/couchbase/core/impl/internal_search_error_context.cxx +141 -0
  41. data/ext/couchbase/core/impl/internal_search_error_context.hxx +61 -0
  42. data/ext/couchbase/core/impl/internal_search_meta_data.cxx +60 -0
  43. data/ext/couchbase/core/impl/internal_search_meta_data.hxx +41 -0
  44. data/ext/couchbase/core/impl/internal_search_result.cxx +84 -0
  45. data/ext/couchbase/core/impl/internal_search_result.hxx +43 -0
  46. data/ext/couchbase/core/impl/internal_search_row.cxx +82 -0
  47. data/ext/couchbase/core/impl/internal_search_row.hxx +56 -0
  48. data/ext/couchbase/core/impl/internal_search_row_location.hxx +32 -0
  49. data/ext/couchbase/core/impl/internal_search_row_locations.cxx +137 -0
  50. data/ext/couchbase/core/impl/internal_search_row_locations.hxx +45 -0
  51. data/ext/couchbase/core/impl/internal_term_facet_result.cxx +80 -0
  52. data/ext/couchbase/core/impl/internal_term_facet_result.hxx +48 -0
  53. data/ext/couchbase/core/impl/match_all_query.cxx +35 -0
  54. data/ext/couchbase/core/impl/match_none_query.cxx +35 -0
  55. data/ext/couchbase/core/impl/match_phrase_query.cxx +43 -0
  56. data/ext/couchbase/core/impl/match_query.cxx +59 -0
  57. data/ext/couchbase/core/impl/numeric_range.cxx +49 -0
  58. data/ext/couchbase/core/impl/numeric_range_facet.cxx +54 -0
  59. data/ext/couchbase/core/impl/numeric_range_facet_result.cxx +64 -0
  60. data/ext/couchbase/core/impl/numeric_range_query.cxx +56 -0
  61. data/ext/couchbase/core/impl/phrase_query.cxx +42 -0
  62. data/ext/couchbase/core/impl/prefix_query.cxx +40 -0
  63. data/ext/couchbase/core/impl/query.cxx +5 -5
  64. data/ext/couchbase/core/impl/query_string_query.cxx +37 -0
  65. data/ext/couchbase/core/impl/regexp_query.cxx +40 -0
  66. data/ext/couchbase/core/impl/search.cxx +191 -0
  67. data/ext/couchbase/core/impl/search_error_context.cxx +147 -0
  68. data/ext/couchbase/core/impl/search_meta_data.cxx +46 -0
  69. data/ext/couchbase/core/impl/search_result.cxx +66 -0
  70. data/ext/couchbase/core/impl/search_row.cxx +74 -0
  71. data/ext/couchbase/core/impl/search_row_location.cxx +64 -0
  72. data/ext/couchbase/core/impl/search_row_locations.cxx +66 -0
  73. data/ext/couchbase/core/impl/search_sort_field.cxx +104 -0
  74. data/ext/couchbase/core/impl/search_sort_id.cxx +43 -0
  75. data/ext/couchbase/core/impl/search_sort_score.cxx +43 -0
  76. data/ext/couchbase/core/impl/term_facet.cxx +36 -0
  77. data/ext/couchbase/core/impl/term_facet_result.cxx +64 -0
  78. data/ext/couchbase/core/impl/term_query.cxx +56 -0
  79. data/ext/couchbase/core/impl/term_range_query.cxx +57 -0
  80. data/ext/couchbase/core/impl/wildcard_query.cxx +40 -0
  81. data/ext/couchbase/core/io/dns_client.cxx +225 -0
  82. data/ext/couchbase/core/io/dns_client.hxx +19 -188
  83. data/ext/couchbase/core/io/http_context.hxx +1 -1
  84. data/ext/couchbase/core/io/http_session.hxx +10 -0
  85. data/ext/couchbase/core/io/http_session_manager.hxx +5 -3
  86. data/ext/couchbase/core/io/mcbp_session.cxx +28 -1
  87. data/ext/couchbase/core/io/retry_orchestrator.hxx +3 -2
  88. data/ext/couchbase/core/json_string.hxx +5 -0
  89. data/ext/couchbase/core/meta/version.cxx +18 -4
  90. data/ext/couchbase/core/mozilla_ca_bundle.hxx +39 -0
  91. data/ext/couchbase/core/operations/document_analytics.cxx +1 -0
  92. data/ext/couchbase/core/operations/document_analytics.hxx +1 -0
  93. data/ext/couchbase/core/operations/document_append.hxx +1 -1
  94. data/ext/couchbase/core/operations/document_decrement.hxx +1 -1
  95. data/ext/couchbase/core/operations/document_exists.hxx +1 -1
  96. data/ext/couchbase/core/operations/document_get.hxx +1 -1
  97. data/ext/couchbase/core/operations/document_get_and_lock.hxx +1 -1
  98. data/ext/couchbase/core/operations/document_get_and_touch.hxx +1 -1
  99. data/ext/couchbase/core/operations/document_get_projected.hxx +1 -1
  100. data/ext/couchbase/core/operations/document_increment.hxx +1 -1
  101. data/ext/couchbase/core/operations/document_insert.hxx +1 -1
  102. data/ext/couchbase/core/operations/document_lookup_in.hxx +1 -1
  103. data/ext/couchbase/core/operations/document_mutate_in.hxx +1 -1
  104. data/ext/couchbase/core/operations/document_prepend.hxx +1 -1
  105. data/ext/couchbase/core/operations/document_query.cxx +2 -0
  106. data/ext/couchbase/core/operations/document_query.hxx +6 -0
  107. data/ext/couchbase/core/operations/document_remove.hxx +1 -1
  108. data/ext/couchbase/core/operations/document_replace.hxx +1 -1
  109. data/ext/couchbase/core/operations/document_search.cxx +4 -1
  110. data/ext/couchbase/core/operations/document_search.hxx +2 -1
  111. data/ext/couchbase/core/operations/document_touch.hxx +1 -1
  112. data/ext/couchbase/core/operations/document_unlock.hxx +1 -1
  113. data/ext/couchbase/core/operations/document_upsert.hxx +1 -1
  114. data/ext/couchbase/core/operations/document_view.hxx +1 -0
  115. data/ext/couchbase/core/protocol/client_request.hxx +11 -2
  116. data/ext/couchbase/core/public_fwd.hxx +21 -0
  117. data/ext/couchbase/core/tls_verify_mode.hxx +26 -0
  118. data/ext/couchbase/core/topology/configuration.cxx +15 -2
  119. data/ext/couchbase/core/topology/configuration.hxx +5 -1
  120. data/ext/couchbase/core/transactions/active_transaction_record.hxx +2 -2
  121. data/ext/couchbase/core/transactions/attempt_context_impl.cxx +3 -0
  122. data/ext/couchbase/core/transactions/attempt_context_impl.hxx +1 -1
  123. data/ext/couchbase/core/transactions/attempt_context_testing_hooks.cxx +93 -0
  124. data/ext/couchbase/core/transactions/attempt_context_testing_hooks.hxx +48 -75
  125. data/ext/couchbase/core/transactions/cleanup_testing_hooks.cxx +52 -0
  126. data/ext/couchbase/core/transactions/cleanup_testing_hooks.hxx +17 -31
  127. data/ext/couchbase/core/transactions/exceptions.hxx +12 -9
  128. data/ext/couchbase/core/transactions/internal/transaction_context.hxx +12 -12
  129. data/ext/couchbase/core/transactions/internal/transactions_cleanup.hxx +7 -1
  130. data/ext/couchbase/core/transactions/transaction_context.cxx +1 -0
  131. data/ext/couchbase/core/transactions/transactions_cleanup.cxx +144 -155
  132. data/ext/couchbase/core/utils/connection_string.cxx +27 -3
  133. data/ext/couchbase/core/utils/connection_string.hxx +3 -3
  134. data/ext/couchbase/core/utils/json.cxx +4 -1
  135. data/ext/couchbase/couchbase/analytics_error_context.hxx +143 -0
  136. data/ext/couchbase/couchbase/analytics_meta_data.hxx +155 -0
  137. data/ext/couchbase/couchbase/analytics_metrics.hxx +163 -0
  138. data/ext/couchbase/couchbase/analytics_options.hxx +359 -0
  139. data/ext/couchbase/couchbase/analytics_result.hxx +102 -0
  140. data/ext/couchbase/couchbase/analytics_scan_consistency.hxx +46 -0
  141. data/ext/couchbase/couchbase/analytics_status.hxx +41 -0
  142. data/ext/couchbase/couchbase/analytics_warning.hxx +85 -0
  143. data/ext/couchbase/couchbase/behavior_options.hxx +10 -1
  144. data/ext/couchbase/couchbase/boolean_field_query.hxx +77 -0
  145. data/ext/couchbase/couchbase/boolean_query.hxx +223 -0
  146. data/ext/couchbase/couchbase/cluster.hxx +75 -1
  147. data/ext/couchbase/couchbase/conjunction_query.hxx +88 -0
  148. data/ext/couchbase/couchbase/date_range.hxx +69 -0
  149. data/ext/couchbase/couchbase/date_range_facet.hxx +56 -0
  150. data/ext/couchbase/couchbase/date_range_facet_result.hxx +55 -0
  151. data/ext/couchbase/couchbase/date_range_query.hxx +265 -0
  152. data/ext/couchbase/couchbase/disjunction_query.hxx +109 -0
  153. data/ext/couchbase/couchbase/doc_id_query.hxx +111 -0
  154. data/ext/couchbase/couchbase/error_context.hxx +7 -6
  155. data/ext/couchbase/couchbase/fmt/analytics_scan_consistency.hxx +52 -0
  156. data/ext/couchbase/couchbase/fmt/analytics_status.hxx +76 -0
  157. data/ext/couchbase/couchbase/fmt/search_scan_consistency.hxx +49 -0
  158. data/ext/couchbase/couchbase/geo_bounding_box_query.hxx +107 -0
  159. data/ext/couchbase/couchbase/geo_distance_query.hxx +109 -0
  160. data/ext/couchbase/couchbase/geo_point.hxx +32 -0
  161. data/ext/couchbase/couchbase/geo_polygon_query.hxx +85 -0
  162. data/ext/couchbase/couchbase/highlight_style.hxx +45 -0
  163. data/ext/couchbase/couchbase/match_all_query.hxx +43 -0
  164. data/ext/couchbase/couchbase/match_none_query.hxx +43 -0
  165. data/ext/couchbase/couchbase/match_operator.hxx +45 -0
  166. data/ext/couchbase/couchbase/match_phrase_query.hxx +108 -0
  167. data/ext/couchbase/couchbase/match_query.hxx +163 -0
  168. data/ext/couchbase/couchbase/numeric_range.hxx +58 -0
  169. data/ext/couchbase/couchbase/numeric_range_facet.hxx +56 -0
  170. data/ext/couchbase/couchbase/numeric_range_facet_result.hxx +55 -0
  171. data/ext/couchbase/couchbase/numeric_range_query.hxx +143 -0
  172. data/ext/couchbase/couchbase/phrase_query.hxx +93 -0
  173. data/ext/couchbase/couchbase/prefix_query.hxx +82 -0
  174. data/ext/couchbase/couchbase/query_options.hxx +0 -1
  175. data/ext/couchbase/couchbase/query_string_query.hxx +72 -0
  176. data/ext/couchbase/couchbase/regexp_query.hxx +82 -0
  177. data/ext/couchbase/couchbase/scope.hxx +73 -0
  178. data/ext/couchbase/couchbase/search_date_range.hxx +68 -0
  179. data/ext/couchbase/couchbase/search_error_context.hxx +138 -0
  180. data/ext/couchbase/couchbase/search_facet.hxx +60 -0
  181. data/ext/couchbase/couchbase/search_facet_result.hxx +50 -0
  182. data/ext/couchbase/couchbase/search_meta_data.hxx +85 -0
  183. data/ext/couchbase/couchbase/search_metrics.hxx +127 -0
  184. data/ext/couchbase/couchbase/search_numeric_range.hxx +69 -0
  185. data/ext/couchbase/couchbase/search_options.hxx +509 -0
  186. data/ext/couchbase/couchbase/search_query.hxx +69 -0
  187. data/ext/couchbase/couchbase/search_result.hxx +77 -0
  188. data/ext/couchbase/couchbase/search_row.hxx +104 -0
  189. data/ext/couchbase/couchbase/search_row_location.hxx +55 -0
  190. data/ext/couchbase/couchbase/search_row_locations.hxx +86 -0
  191. data/ext/couchbase/couchbase/search_scan_consistency.hxx +34 -0
  192. data/ext/couchbase/couchbase/search_sort.hxx +58 -0
  193. data/ext/couchbase/couchbase/search_sort_field.hxx +117 -0
  194. data/ext/couchbase/couchbase/search_sort_field_missing.hxx +26 -0
  195. data/ext/couchbase/couchbase/search_sort_field_mode.hxx +27 -0
  196. data/ext/couchbase/couchbase/search_sort_field_type.hxx +28 -0
  197. data/ext/couchbase/couchbase/search_sort_id.hxx +60 -0
  198. data/ext/couchbase/couchbase/search_sort_score.hxx +60 -0
  199. data/ext/couchbase/couchbase/search_term_range.hxx +51 -0
  200. data/ext/couchbase/couchbase/security_options.hxx +3 -0
  201. data/ext/couchbase/couchbase/term_facet.hxx +48 -0
  202. data/ext/couchbase/couchbase/term_facet_result.hxx +55 -0
  203. data/ext/couchbase/couchbase/term_query.hxx +151 -0
  204. data/ext/couchbase/couchbase/term_range_query.hxx +142 -0
  205. data/ext/couchbase/couchbase/tracing/request_span.hxx +63 -0
  206. data/ext/couchbase/couchbase/tracing/request_tracer.hxx +2 -40
  207. data/ext/couchbase/couchbase/transactions/async_attempt_context.hxx +83 -4
  208. data/ext/couchbase/couchbase/transactions/attempt_context.hxx +68 -1
  209. data/ext/couchbase/couchbase/transactions/transaction_get_result.hxx +2 -0
  210. data/ext/couchbase/couchbase/transactions/transaction_keyspace.hxx +11 -1
  211. data/ext/couchbase/couchbase/transactions/transaction_options.hxx +79 -8
  212. data/ext/couchbase/couchbase/transactions/transaction_query_options.hxx +128 -15
  213. data/ext/couchbase/couchbase/transactions/transaction_query_result.hxx +4 -0
  214. data/ext/couchbase/couchbase/transactions/transaction_result.hxx +1 -1
  215. data/ext/couchbase/couchbase/transactions/transactions_cleanup_config.hxx +5 -3
  216. data/ext/couchbase/couchbase/transactions/transactions_config.hxx +9 -5
  217. data/ext/couchbase/couchbase/transactions/transactions_query_config.hxx +6 -3
  218. data/ext/couchbase/couchbase/transactions.hxx +34 -1
  219. data/ext/couchbase/couchbase/wildcard_query.hxx +83 -0
  220. data/ext/couchbase/test/CMakeLists.txt +8 -7
  221. data/ext/couchbase/test/benchmark_helper_integration.hxx +2 -2
  222. data/ext/couchbase/test/test_helper.hxx +6 -6
  223. data/ext/couchbase/test/test_integration_analytics.cxx +314 -16
  224. data/ext/couchbase/test/test_integration_collections.cxx +7 -3
  225. data/ext/couchbase/test/test_integration_connect.cxx +7 -3
  226. data/ext/couchbase/test/test_integration_crud.cxx +19 -2
  227. data/ext/couchbase/test/test_integration_diagnostics.cxx +11 -5
  228. data/ext/couchbase/test/test_integration_durability.cxx +12 -7
  229. data/ext/couchbase/test/test_integration_examples.cxx +324 -11
  230. data/ext/couchbase/test/test_integration_management.cxx +162 -94
  231. data/ext/couchbase/test/test_integration_query.cxx +68 -10
  232. data/ext/couchbase/test/test_integration_range_scan.cxx +12 -12
  233. data/ext/couchbase/test/test_integration_read_replica.cxx +48 -11
  234. data/ext/couchbase/test/test_integration_search.cxx +621 -0
  235. data/ext/couchbase/test/test_integration_subdoc.cxx +62 -11
  236. data/ext/couchbase/test/test_integration_tracer.cxx +5 -0
  237. data/ext/couchbase/test/test_integration_transcoders.cxx +13 -5
  238. data/ext/couchbase/test/{test_transaction_transaction_context.cxx → test_transaction_context.cxx} +1 -1
  239. data/ext/couchbase/test/test_transaction_examples.cxx +195 -0
  240. data/ext/couchbase/test/{test_transaction_transaction_simple.cxx → test_transaction_simple.cxx} +90 -5
  241. data/ext/couchbase/test/{test_transaction_transaction_simple_async.cxx → test_transaction_simple_async.cxx} +19 -21
  242. data/ext/couchbase/test/test_unit_config_profiles.cxx +13 -13
  243. data/ext/couchbase/test/test_unit_connection_string.cxx +35 -0
  244. data/ext/couchbase/test/test_unit_json_transcoder.cxx +4 -0
  245. data/ext/couchbase/test/test_unit_search.cxx +427 -0
  246. data/ext/couchbase/test/test_unit_transaction_utils.cxx +10 -1
  247. data/ext/couchbase/test/test_unit_utils.cxx +8 -4
  248. data/ext/couchbase/third_party/snappy/CMakeLists.txt +150 -27
  249. data/ext/couchbase/third_party/snappy/cmake/config.h.in +28 -24
  250. data/ext/couchbase/third_party/snappy/snappy-internal.h +189 -25
  251. data/ext/couchbase/third_party/snappy/snappy-sinksource.cc +26 -9
  252. data/ext/couchbase/third_party/snappy/snappy-sinksource.h +11 -11
  253. data/ext/couchbase/third_party/snappy/snappy-stubs-internal.cc +1 -1
  254. data/ext/couchbase/third_party/snappy/snappy-stubs-internal.h +227 -308
  255. data/ext/couchbase/third_party/snappy/snappy-stubs-public.h.in +0 -11
  256. data/ext/couchbase/third_party/snappy/snappy.cc +1176 -410
  257. data/ext/couchbase/third_party/snappy/snappy.h +19 -4
  258. data/ext/couchbase.cxx +85 -22
  259. data/ext/revisions.rb +3 -3
  260. data/lib/couchbase/authenticator.rb +0 -1
  261. data/lib/couchbase/cluster.rb +13 -13
  262. data/lib/couchbase/cluster_registry.rb +7 -2
  263. data/lib/couchbase/config_profiles.rb +1 -1
  264. data/lib/couchbase/configuration.rb +3 -4
  265. data/lib/couchbase/json_transcoder.rb +12 -5
  266. data/lib/couchbase/management/collection_query_index_manager.rb +54 -15
  267. data/lib/couchbase/management/query_index_manager.rb +70 -5
  268. data/lib/couchbase/options.rb +85 -2
  269. data/lib/couchbase/raw_binary_transcoder.rb +37 -0
  270. data/lib/couchbase/raw_json_transcoder.rb +38 -0
  271. data/lib/couchbase/raw_string_transcoder.rb +40 -0
  272. data/lib/couchbase/search_options.rb +163 -240
  273. data/lib/couchbase/transcoder_flags.rb +62 -0
  274. data/lib/couchbase/version.rb +1 -1
  275. metadata +151 -12
  276. data/ext/couchbase/core/CMakeLists.txt +0 -0
  277. /data/ext/couchbase/test/{test_transaction_transaction_public_async_api.cxx → test_transaction_public_async_api.cxx} +0 -0
  278. /data/ext/couchbase/test/{test_transaction_transaction_public_blocking_api.cxx → test_transaction_public_blocking_api.cxx} +0 -0
@@ -17,10 +17,13 @@
17
17
 
18
18
  #pragma once
19
19
 
20
+ #include <couchbase/analytics_options.hxx>
20
21
  #include <couchbase/bucket.hxx>
21
22
  #include <couchbase/cluster_options.hxx>
22
23
  #include <couchbase/query_index_manager.hxx>
23
24
  #include <couchbase/query_options.hxx>
25
+ #include <couchbase/search_options.hxx>
26
+ #include <couchbase/search_query.hxx>
24
27
  #include <couchbase/transactions.hxx>
25
28
 
26
29
  #include <memory>
@@ -165,6 +168,75 @@ class cluster
165
168
  return future;
166
169
  }
167
170
 
171
+ /**
172
+ * Performs a query against the full text search services.
173
+ *
174
+ * @param index_name name of the search index
175
+ * @param query query object, see hierarchy of @ref search_query for more details.
176
+ * @param options options to customize the query request.
177
+ * @param handler the handler that implements @ref search_handler
178
+ *
179
+ * @exception errc::common::ambiguous_timeout
180
+ * @exception errc::common::unambiguous_timeout
181
+ *
182
+ * @see https://docs.couchbase.com/server/current/fts/fts-introduction.html
183
+ *
184
+ * @since 1.0.0
185
+ * @committed
186
+ */
187
+ void search_query(std::string index_name, const search_query& query, const search_options& options, search_handler&& handler) const;
188
+
189
+ /**
190
+ * Performs a query against the full text search services.
191
+ *
192
+ * @param index_name name of the search index
193
+ * @param query query object, see hierarchy of @ref search_query for more details.
194
+ * @param options options to customize the query request.
195
+ * @return future object that carries result of the operation
196
+ *
197
+ * @exception errc::common::ambiguous_timeout
198
+ * @exception errc::common::unambiguous_timeout
199
+ *
200
+ * @see https://docs.couchbase.com/server/current/fts/fts-introduction.html
201
+ *
202
+ * @since 1.0.0
203
+ * @committed
204
+ */
205
+ [[nodiscard]] auto search_query(std::string index_name, const class search_query& query, const search_options& options = {}) const
206
+ -> std::future<std::pair<search_error_context, search_result>>;
207
+
208
+ /**
209
+ * Performs a query against the analytics services.
210
+ *
211
+ * @param statement the query statement.
212
+ * @param options options to customize the query request.
213
+ * @param handler the handler that implements @ref query_handler
214
+ *
215
+ * @exception errc::common::ambiguous_timeout
216
+ * @exception errc::common::unambiguous_timeout
217
+ *
218
+ * @see https://docs.couchbase.com/server/current/analytics/introduction.html
219
+ *
220
+ * @since 1.0.0
221
+ * @committed
222
+ */
223
+ void analytics_query(std::string statement, const analytics_options& options, analytics_handler&& handler) const;
224
+
225
+ /**
226
+ * Performs a query against the analytics services.
227
+ *
228
+ * @param statement the query statement.
229
+ * @param options options to customize the query request.
230
+ * @return future object that carries result of the operation
231
+ *
232
+ * @see https://docs.couchbase.com/server/current/analytics/introduction.html
233
+ *
234
+ * @since 1.0.0
235
+ * @committed
236
+ */
237
+ [[nodiscard]] auto analytics_query(std::string statement, const analytics_options& options = {}) const
238
+ -> std::future<std::pair<analytics_error_context, analytics_result>>;
239
+
168
240
  /**
169
241
  * Provides access to the N1QL index management services.
170
242
  *
@@ -181,7 +253,9 @@ class cluster
181
253
  /**
182
254
  * Provides access to transaction services.
183
255
  *
184
- * @return
256
+ * See {@link transactions} for details on using the transactions object.
257
+ *
258
+ * @return an {@link transactions} object
185
259
  *
186
260
  * @since 1.0.0
187
261
  * @committed
@@ -0,0 +1,88 @@
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 <memory>
23
+ #include <vector>
24
+
25
+ namespace couchbase
26
+ {
27
+ /**
28
+ * The conjunction query is a compound query. The result documents must satisfy all of the child queries. It is possible to recursively nest
29
+ * compound queries.
30
+ *
31
+ * At execution, a conjunction query that has no child queries is not allowed and will fail fast.
32
+ *
33
+ * Match documents with `"location"` in the field `reviews.content` and `true` in the field `free_breakfast`.
34
+ * @snippet test_unit_search.cxx search-conjunction
35
+ *
36
+ * @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-conjuncts-disjuncts.html server documentation
37
+ *
38
+ * @since 1.0.0
39
+ * @committed
40
+ */
41
+ class conjunction_query : public search_query
42
+ {
43
+ public:
44
+ /**
45
+ * Create a conjunction query.
46
+ *
47
+ * @tparam SearchQuery any subclass of @ref search_query
48
+ * @param queries sequence of query arguments
49
+ *
50
+ * @since 1.0.0
51
+ * @committed
52
+ */
53
+ template<typename... SearchQuery>
54
+ explicit conjunction_query(SearchQuery&&... queries)
55
+ {
56
+ and_also(std::forward<SearchQuery>(queries)...);
57
+ }
58
+
59
+ /**
60
+ * Add one or more queries to add to the conjunction.
61
+ *
62
+ * @tparam SearchQuery any subclass of @ref search_query
63
+ * @param queries sequence of query arguments
64
+ *
65
+ * @return this query for chaining purposes.
66
+ *
67
+ * @since 1.0.0
68
+ * @committed
69
+ */
70
+ template<typename... SearchQuery>
71
+ auto and_also(SearchQuery... queries) -> conjunction_query&
72
+ {
73
+ (conjuncts_.emplace_back(std::make_shared<SearchQuery>(std::move(queries))), ...);
74
+ return *this;
75
+ }
76
+
77
+ /**
78
+ * @return encoded representation of the query.
79
+ *
80
+ * @since 1.0.0
81
+ * @internal
82
+ */
83
+ [[nodiscard]] auto encode() const -> encoded_search_query override;
84
+
85
+ private:
86
+ std::vector<std::shared_ptr<search_query>> conjuncts_{};
87
+ };
88
+ } // namespace couchbase
@@ -0,0 +1,69 @@
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 <cstdint>
22
+ #include <ctime>
23
+ #include <optional>
24
+ #include <string>
25
+ #include <variant>
26
+
27
+ namespace couchbase
28
+ {
29
+ /**
30
+ * Date range for @ref date_range_facet.
31
+ */
32
+ class date_range
33
+ {
34
+ public:
35
+ date_range(std::string name, std::string start, std::string end);
36
+ date_range(std::string name, std::chrono::system_clock::time_point start, std::chrono::system_clock::time_point end);
37
+ date_range(std::string name, std::tm start, std::tm end);
38
+
39
+ static date_range with_start(std::string name, std::string start);
40
+ static date_range with_start(std::string name, std::chrono::system_clock::time_point start);
41
+ static date_range with_start(std::string name, std::tm start);
42
+
43
+ static date_range with_end(std::string name, std::string end);
44
+ static date_range with_end(std::string name, std::chrono::system_clock::time_point end);
45
+ static date_range with_end(std::string name, std::tm end);
46
+
47
+ [[nodiscard]] auto name() const -> const std::string&
48
+ {
49
+ return name_;
50
+ }
51
+
52
+ [[nodiscard]] auto start() const -> const std::optional<std::string>&
53
+ {
54
+ return start_;
55
+ }
56
+
57
+ [[nodiscard]] auto end() const -> const std::optional<std::string>&
58
+ {
59
+ return end_;
60
+ }
61
+
62
+ private:
63
+ date_range(std::string name, std::optional<std::string> start, std::optional<std::string> end);
64
+
65
+ std::string name_;
66
+ std::optional<std::string> start_{};
67
+ std::optional<std::string> end_{};
68
+ };
69
+ } // namespace couchbase
@@ -0,0 +1,56 @@
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/date_range.hxx>
21
+ #include <couchbase/search_facet.hxx>
22
+
23
+ #include <vector>
24
+
25
+ namespace couchbase
26
+ {
27
+ /**
28
+ * A facet that categorizes rows into dateal ranges (or buckets) provided by the user.
29
+ */
30
+ class date_range_facet : public search_facet
31
+ {
32
+ public:
33
+ date_range_facet(std::string field, std::vector<date_range> ranges)
34
+ : search_facet{ std::move(field) }
35
+ , ranges_{ std::move(ranges) }
36
+ {
37
+ }
38
+
39
+ date_range_facet(std::string field, std::uint32_t size, std::vector<date_range> ranges)
40
+ : search_facet{ std::move(field), size }
41
+ , ranges_{ std::move(ranges) }
42
+ {
43
+ }
44
+
45
+ /**
46
+ * @return encoded representation of the search facet.
47
+ *
48
+ * @since 1.0.0
49
+ * @internal
50
+ */
51
+ [[nodiscard]] auto encode() const -> encoded_search_facet override;
52
+
53
+ private:
54
+ std::vector<date_range> ranges_;
55
+ };
56
+ } // namespace couchbase
@@ -0,0 +1,55 @@
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/search_date_range.hxx>
21
+ #include <couchbase/search_facet_result.hxx>
22
+
23
+ #include <string>
24
+ #include <vector>
25
+
26
+ namespace couchbase
27
+ {
28
+ #ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
29
+ class internal_date_range_facet_result;
30
+ #endif
31
+
32
+ /**
33
+ * @since 1.0.0
34
+ * @committed
35
+ */
36
+ class date_range_facet_result : public search_facet_result
37
+ {
38
+ public:
39
+ /**
40
+ * @since 1.0.0
41
+ * @internal
42
+ */
43
+ explicit date_range_facet_result(internal_date_range_facet_result internal);
44
+
45
+ [[nodiscard]] auto name() const -> const std::string& override;
46
+ [[nodiscard]] auto field() const -> const std::string& override;
47
+ [[nodiscard]] auto total() const -> std::uint64_t override;
48
+ [[nodiscard]] auto missing() const -> std::uint64_t override;
49
+ [[nodiscard]] auto other() const -> std::uint64_t override;
50
+ [[nodiscard]] auto date_ranges() const -> const std::vector<search_date_range>&;
51
+
52
+ private:
53
+ std::unique_ptr<internal_date_range_facet_result> internal_;
54
+ };
55
+ } // namespace couchbase
@@ -0,0 +1,265 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2023-Present Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include <couchbase/match_operator.hxx>
21
+ #include <couchbase/search_query.hxx>
22
+
23
+ #include <chrono>
24
+ #include <cstdint>
25
+ #include <ctime>
26
+ #include <optional>
27
+ #include <string>
28
+
29
+ namespace couchbase
30
+ {
31
+ /**
32
+ * The date range query finds documents containing a date value in the specified field within the specified range. Either start or end can
33
+ * be omitted, but not both.
34
+ *
35
+ * Match documents where field `review_date` falls within the range ("2001-10-09T10:20:30-08:00", "2016-10-31")
36
+ * @snippet test_unit_search.cxx search-date-range
37
+ *
38
+ * It also works with `std::tm` and `std::chrono::system_clock::time_point`.
39
+ * @snippet test_unit_search.cxx search-date-range-tm
40
+ *
41
+ * @see https://docs.couchbase.com/server/current/fts/fts-supported-queries-date-range.html server documentation.
42
+ *
43
+ * @since 1.0.0
44
+ * @committed
45
+ */
46
+ class date_range_query : public search_query
47
+ {
48
+ public:
49
+ /**
50
+ * Set lower limit and automatically format so that default date_time parser will be able to parse it on the server.
51
+ *
52
+ * @param value start limit time point
53
+ *
54
+ * @return this query for chaining purposes.
55
+ *
56
+ * @since 1.0.0
57
+ * @committed
58
+ */
59
+ auto start(std::chrono::system_clock::time_point value) -> date_range_query&;
60
+
61
+ /**
62
+ * Set lower limit and automatically format so that default date_time parser will be able to parse it on the server.
63
+ *
64
+ * @param value start limit as a `tm` (broken down timestamp)
65
+ *
66
+ * @return this query for chaining purposes.
67
+ *
68
+ * @since 1.0.0
69
+ * @committed
70
+ */
71
+ auto start(std::tm value) -> date_range_query&;
72
+
73
+ /**
74
+ * Set lower limit and automatically format so that default date_time parser will be able to parse it on the server.
75
+ *
76
+ * @param value start limit time point
77
+ * @param inclusive whether to include limit value into the interval.
78
+ *
79
+ * @return this query for chaining purposes.
80
+ *
81
+ * @since 1.0.0
82
+ * @committed
83
+ */
84
+ auto start(std::chrono::system_clock::time_point value, bool inclusive) -> date_range_query&;
85
+
86
+ /**
87
+ * Set lower limit and automatically format so that default date_time parser will be able to parse it on the server.
88
+ *
89
+ * @param value start limit as a `tm` (broken down timestamp)
90
+ * @param inclusive whether to include limit value into the interval.
91
+ *
92
+ * @return this query for chaining purposes.
93
+ *
94
+ * @since 1.0.0
95
+ * @committed
96
+ */
97
+ auto start(std::tm value, bool inclusive) -> date_range_query&;
98
+
99
+ /**
100
+ * Set preformatted date as lower limit.
101
+ *
102
+ * @param value start limit formatted as a string, use @ref date_time_parser() for non-standard formats
103
+ *
104
+ * @return this query for chaining purposes.
105
+ *
106
+ * @since 1.0.0
107
+ * @committed
108
+ */
109
+ auto start(std::string value) -> date_range_query&
110
+ {
111
+ start_ = std::move(value);
112
+ return *this;
113
+ }
114
+
115
+ /**
116
+ * Set preformatted date as lower limit.
117
+ *
118
+ * @param value start limit formatted as a string, use @ref date_time_parser() for non-standard formats
119
+ * @param inclusive whether to include limit value into the interval.
120
+ *
121
+ * @return this query for chaining purposes.
122
+ *
123
+ * @since 1.0.0
124
+ * @committed
125
+ */
126
+ auto start(std::string value, bool inclusive) -> date_range_query&
127
+ {
128
+ start_ = std::move(value);
129
+ inclusive_start_ = inclusive;
130
+ return *this;
131
+ }
132
+
133
+ /**
134
+ * Set upper limit and automatically format so that default date_time parser will be able to parse it on the server.
135
+ *
136
+ * @param value end limit time point
137
+ *
138
+ * @return this query for chaining purposes.
139
+ *
140
+ * @since 1.0.0
141
+ * @committed
142
+ */
143
+ auto end(std::chrono::system_clock::time_point value) -> date_range_query&;
144
+
145
+ /**
146
+ * Set upper limit and automatically format so that default date_time parser will be able to parse it on the server.
147
+ *
148
+ * @param value end limit as a `tm` (broken down timestamp)
149
+ *
150
+ * @return this query for chaining purposes.
151
+ *
152
+ * @since 1.0.0
153
+ * @committed
154
+ */
155
+ auto end(std::tm value) -> date_range_query&;
156
+
157
+ /**
158
+ * Set upper limit and automatically format so that default date_time parser will be able to parse it on the server.
159
+ *
160
+ * @param value end limit time point
161
+ * @param inclusive whether to include limit value into the interval.
162
+ *
163
+ * @return this query for chaining purposes.
164
+ *
165
+ * @since 1.0.0
166
+ * @committed
167
+ */
168
+ auto end(std::chrono::system_clock::time_point value, bool inclusive) -> date_range_query&;
169
+
170
+ /**
171
+ * Set upper limit and automatically format so that default date_time parser will be able to parse it on the server.
172
+ *
173
+ * @param value end limit as a `tm` (broken down timestamp)
174
+ * @param inclusive whether to include limit value into the interval.
175
+ *
176
+ * @return this query for chaining purposes.
177
+ *
178
+ * @since 1.0.0
179
+ * @committed
180
+ */
181
+ auto end(std::tm value, bool inclusive) -> date_range_query&;
182
+
183
+ /**
184
+ * Set preformatted date as upper limit.
185
+ *
186
+ * @param value end limit formatted as a string, use @ref date_time_parser() for non-standard formats
187
+ *
188
+ * @return this query for chaining purposes.
189
+ *
190
+ * @since 1.0.0
191
+ * @committed
192
+ */
193
+ auto end(std::string value)
194
+ {
195
+ end_ = std::move(value);
196
+ return *this;
197
+ }
198
+
199
+ /**
200
+ * Set preformatted date as upper limit.
201
+ *
202
+ * @param value end limit formatted as a string, use @ref date_time_parser() for non-standard formats
203
+ * @param inclusive whether to include limit value into the interval.
204
+ *
205
+ * @return this query for chaining purposes.
206
+ *
207
+ * @since 1.0.0
208
+ * @committed
209
+ */
210
+ auto end(std::string value, bool inclusive) -> date_range_query&
211
+ {
212
+ end_ = std::move(value);
213
+ inclusive_end_ = inclusive;
214
+ return *this;
215
+ }
216
+
217
+ /**
218
+ * Enable custom date parser.
219
+ *
220
+ * @param parser_name name of the custom date parser
221
+ *
222
+ * @return this query for chaining purposes.
223
+ *
224
+ * @since 1.0.0
225
+ * @committed
226
+ */
227
+ auto date_time_parser(std::string parser_name) -> date_range_query&
228
+ {
229
+ date_time_parser_ = std::move(parser_name);
230
+ return *this;
231
+ }
232
+
233
+ /**
234
+ * If a field is specified, only terms in that field will be matched.
235
+ *
236
+ * @param field_name name of the field to be matched
237
+ *
238
+ * @return this query for chaining purposes.
239
+ *
240
+ * @since 1.0.0
241
+ * @committed
242
+ */
243
+ auto field(std::string field_name) -> date_range_query&
244
+ {
245
+ field_ = std::move(field_name);
246
+ return *this;
247
+ }
248
+
249
+ /**
250
+ * @return encoded representation of the query.
251
+ *
252
+ * @since 1.0.0
253
+ * @internal
254
+ */
255
+ [[nodiscard]] auto encode() const -> encoded_search_query override;
256
+
257
+ private:
258
+ std::optional<std::string> start_{};
259
+ std::optional<std::string> end_{};
260
+ std::optional<bool> inclusive_start_{};
261
+ std::optional<bool> inclusive_end_{};
262
+ std::optional<std::string> date_time_parser_{};
263
+ std::optional<std::string> field_{};
264
+ };
265
+ } // namespace couchbase