couchbase 3.4.2 → 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 (241) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/ext/couchbase/CMakeLists.txt +57 -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 +3 -2
  9. data/ext/couchbase/core/bucket.hxx +9 -0
  10. data/ext/couchbase/core/cluster.hxx +17 -0
  11. data/ext/couchbase/core/cluster_options.cxx +2 -2
  12. data/ext/couchbase/core/cluster_options.hxx +4 -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/error_context/search.hxx +1 -1
  18. data/ext/couchbase/core/impl/analytics.cxx +1 -0
  19. data/ext/couchbase/core/impl/boolean_field_query.cxx +40 -0
  20. data/ext/couchbase/core/impl/boolean_query.cxx +62 -0
  21. data/ext/couchbase/core/impl/cluster.cxx +2 -0
  22. data/ext/couchbase/core/impl/conjunction_query.cxx +51 -0
  23. data/ext/couchbase/core/impl/date_range.cxx +89 -0
  24. data/ext/couchbase/core/impl/date_range_facet.cxx +54 -0
  25. data/ext/couchbase/core/impl/date_range_facet_result.cxx +64 -0
  26. data/ext/couchbase/core/impl/date_range_query.cxx +125 -0
  27. data/ext/couchbase/core/impl/disjunction_query.cxx +51 -0
  28. data/ext/couchbase/core/impl/encoded_search_facet.hxx +29 -0
  29. data/ext/couchbase/core/impl/encoded_search_query.hxx +29 -0
  30. data/ext/couchbase/core/impl/encoded_search_sort.hxx +29 -0
  31. data/ext/couchbase/core/impl/geo_bounding_box_query.cxx +46 -0
  32. data/ext/couchbase/core/impl/geo_distance_query.cxx +43 -0
  33. data/ext/couchbase/core/impl/geo_polygon_query.cxx +46 -0
  34. data/ext/couchbase/core/impl/internal_date_range_facet_result.cxx +80 -0
  35. data/ext/couchbase/core/impl/internal_date_range_facet_result.hxx +48 -0
  36. data/ext/couchbase/core/impl/internal_numeric_range_facet_result.cxx +80 -0
  37. data/ext/couchbase/core/impl/internal_numeric_range_facet_result.hxx +48 -0
  38. data/ext/couchbase/core/impl/internal_search_error_context.cxx +141 -0
  39. data/ext/couchbase/core/impl/internal_search_error_context.hxx +61 -0
  40. data/ext/couchbase/core/impl/internal_search_meta_data.cxx +60 -0
  41. data/ext/couchbase/core/impl/internal_search_meta_data.hxx +41 -0
  42. data/ext/couchbase/core/impl/internal_search_result.cxx +84 -0
  43. data/ext/couchbase/core/impl/internal_search_result.hxx +43 -0
  44. data/ext/couchbase/core/impl/internal_search_row.cxx +82 -0
  45. data/ext/couchbase/core/impl/internal_search_row.hxx +56 -0
  46. data/ext/couchbase/core/impl/internal_search_row_location.hxx +32 -0
  47. data/ext/couchbase/core/impl/internal_search_row_locations.cxx +137 -0
  48. data/ext/couchbase/core/impl/internal_search_row_locations.hxx +45 -0
  49. data/ext/couchbase/core/impl/internal_term_facet_result.cxx +80 -0
  50. data/ext/couchbase/core/impl/internal_term_facet_result.hxx +48 -0
  51. data/ext/couchbase/core/impl/match_all_query.cxx +35 -0
  52. data/ext/couchbase/core/impl/match_none_query.cxx +35 -0
  53. data/ext/couchbase/core/impl/match_phrase_query.cxx +43 -0
  54. data/ext/couchbase/core/impl/match_query.cxx +59 -0
  55. data/ext/couchbase/core/impl/numeric_range.cxx +49 -0
  56. data/ext/couchbase/core/impl/numeric_range_facet.cxx +54 -0
  57. data/ext/couchbase/core/impl/numeric_range_facet_result.cxx +64 -0
  58. data/ext/couchbase/core/impl/numeric_range_query.cxx +56 -0
  59. data/ext/couchbase/core/impl/phrase_query.cxx +42 -0
  60. data/ext/couchbase/core/impl/prefix_query.cxx +40 -0
  61. data/ext/couchbase/core/impl/query_string_query.cxx +37 -0
  62. data/ext/couchbase/core/impl/regexp_query.cxx +40 -0
  63. data/ext/couchbase/core/impl/search.cxx +191 -0
  64. data/ext/couchbase/core/impl/search_error_context.cxx +147 -0
  65. data/ext/couchbase/core/impl/search_meta_data.cxx +46 -0
  66. data/ext/couchbase/core/impl/search_result.cxx +66 -0
  67. data/ext/couchbase/core/impl/search_row.cxx +74 -0
  68. data/ext/couchbase/core/impl/search_row_location.cxx +64 -0
  69. data/ext/couchbase/core/impl/search_row_locations.cxx +66 -0
  70. data/ext/couchbase/core/impl/search_sort_field.cxx +104 -0
  71. data/ext/couchbase/core/impl/search_sort_id.cxx +43 -0
  72. data/ext/couchbase/core/impl/search_sort_score.cxx +43 -0
  73. data/ext/couchbase/core/impl/term_facet.cxx +36 -0
  74. data/ext/couchbase/core/impl/term_facet_result.cxx +64 -0
  75. data/ext/couchbase/core/impl/term_query.cxx +56 -0
  76. data/ext/couchbase/core/impl/term_range_query.cxx +57 -0
  77. data/ext/couchbase/core/impl/wildcard_query.cxx +40 -0
  78. data/ext/couchbase/core/io/http_context.hxx +1 -1
  79. data/ext/couchbase/core/io/http_session.hxx +10 -0
  80. data/ext/couchbase/core/io/http_session_manager.hxx +5 -3
  81. data/ext/couchbase/core/io/mcbp_session.cxx +28 -1
  82. data/ext/couchbase/core/io/retry_orchestrator.hxx +3 -2
  83. data/ext/couchbase/core/json_string.hxx +5 -0
  84. data/ext/couchbase/core/meta/version.cxx +18 -4
  85. data/ext/couchbase/core/mozilla_ca_bundle.hxx +39 -0
  86. data/ext/couchbase/core/operations/document_analytics.cxx +1 -0
  87. data/ext/couchbase/core/operations/document_analytics.hxx +1 -0
  88. data/ext/couchbase/core/operations/document_append.hxx +1 -1
  89. data/ext/couchbase/core/operations/document_decrement.hxx +1 -1
  90. data/ext/couchbase/core/operations/document_exists.hxx +1 -1
  91. data/ext/couchbase/core/operations/document_get.hxx +1 -1
  92. data/ext/couchbase/core/operations/document_get_and_lock.hxx +1 -1
  93. data/ext/couchbase/core/operations/document_get_and_touch.hxx +1 -1
  94. data/ext/couchbase/core/operations/document_get_projected.hxx +1 -1
  95. data/ext/couchbase/core/operations/document_increment.hxx +1 -1
  96. data/ext/couchbase/core/operations/document_insert.hxx +1 -1
  97. data/ext/couchbase/core/operations/document_lookup_in.hxx +1 -1
  98. data/ext/couchbase/core/operations/document_mutate_in.hxx +1 -1
  99. data/ext/couchbase/core/operations/document_prepend.hxx +1 -1
  100. data/ext/couchbase/core/operations/document_query.cxx +2 -0
  101. data/ext/couchbase/core/operations/document_query.hxx +6 -0
  102. data/ext/couchbase/core/operations/document_remove.hxx +1 -1
  103. data/ext/couchbase/core/operations/document_replace.hxx +1 -1
  104. data/ext/couchbase/core/operations/document_search.cxx +4 -1
  105. data/ext/couchbase/core/operations/document_search.hxx +2 -1
  106. data/ext/couchbase/core/operations/document_touch.hxx +1 -1
  107. data/ext/couchbase/core/operations/document_unlock.hxx +1 -1
  108. data/ext/couchbase/core/operations/document_upsert.hxx +1 -1
  109. data/ext/couchbase/core/operations/document_view.hxx +1 -0
  110. data/ext/couchbase/core/protocol/client_request.hxx +11 -2
  111. data/ext/couchbase/core/public_fwd.hxx +21 -0
  112. data/ext/couchbase/core/tls_verify_mode.hxx +26 -0
  113. data/ext/couchbase/core/topology/configuration.cxx +15 -2
  114. data/ext/couchbase/core/topology/configuration.hxx +5 -1
  115. data/ext/couchbase/core/transactions/attempt_context_testing_hooks.cxx +93 -0
  116. data/ext/couchbase/core/transactions/attempt_context_testing_hooks.hxx +48 -75
  117. data/ext/couchbase/core/transactions/cleanup_testing_hooks.cxx +52 -0
  118. data/ext/couchbase/core/transactions/cleanup_testing_hooks.hxx +17 -31
  119. data/ext/couchbase/core/transactions/exceptions.hxx +12 -9
  120. data/ext/couchbase/core/utils/connection_string.cxx +17 -0
  121. data/ext/couchbase/core/utils/json.cxx +4 -1
  122. data/ext/couchbase/couchbase/behavior_options.hxx +10 -1
  123. data/ext/couchbase/couchbase/boolean_field_query.hxx +77 -0
  124. data/ext/couchbase/couchbase/boolean_query.hxx +223 -0
  125. data/ext/couchbase/couchbase/cluster.hxx +42 -1
  126. data/ext/couchbase/couchbase/conjunction_query.hxx +88 -0
  127. data/ext/couchbase/couchbase/date_range.hxx +69 -0
  128. data/ext/couchbase/couchbase/date_range_facet.hxx +56 -0
  129. data/ext/couchbase/couchbase/date_range_facet_result.hxx +55 -0
  130. data/ext/couchbase/couchbase/date_range_query.hxx +265 -0
  131. data/ext/couchbase/couchbase/disjunction_query.hxx +109 -0
  132. data/ext/couchbase/couchbase/doc_id_query.hxx +111 -0
  133. data/ext/couchbase/couchbase/error_context.hxx +7 -6
  134. data/ext/couchbase/couchbase/fmt/analytics_scan_consistency.hxx +52 -0
  135. data/ext/couchbase/couchbase/fmt/search_scan_consistency.hxx +49 -0
  136. data/ext/couchbase/couchbase/geo_bounding_box_query.hxx +107 -0
  137. data/ext/couchbase/couchbase/geo_distance_query.hxx +109 -0
  138. data/ext/couchbase/couchbase/geo_point.hxx +32 -0
  139. data/ext/couchbase/couchbase/geo_polygon_query.hxx +85 -0
  140. data/ext/couchbase/couchbase/highlight_style.hxx +45 -0
  141. data/ext/couchbase/couchbase/match_all_query.hxx +43 -0
  142. data/ext/couchbase/couchbase/match_none_query.hxx +43 -0
  143. data/ext/couchbase/couchbase/match_operator.hxx +45 -0
  144. data/ext/couchbase/couchbase/match_phrase_query.hxx +108 -0
  145. data/ext/couchbase/couchbase/match_query.hxx +163 -0
  146. data/ext/couchbase/couchbase/numeric_range.hxx +58 -0
  147. data/ext/couchbase/couchbase/numeric_range_facet.hxx +56 -0
  148. data/ext/couchbase/couchbase/numeric_range_facet_result.hxx +55 -0
  149. data/ext/couchbase/couchbase/numeric_range_query.hxx +143 -0
  150. data/ext/couchbase/couchbase/phrase_query.hxx +93 -0
  151. data/ext/couchbase/couchbase/prefix_query.hxx +82 -0
  152. data/ext/couchbase/couchbase/query_string_query.hxx +72 -0
  153. data/ext/couchbase/couchbase/regexp_query.hxx +82 -0
  154. data/ext/couchbase/couchbase/scope.hxx +40 -0
  155. data/ext/couchbase/couchbase/search_date_range.hxx +68 -0
  156. data/ext/couchbase/couchbase/search_error_context.hxx +138 -0
  157. data/ext/couchbase/couchbase/search_facet.hxx +60 -0
  158. data/ext/couchbase/couchbase/search_facet_result.hxx +50 -0
  159. data/ext/couchbase/couchbase/search_meta_data.hxx +85 -0
  160. data/ext/couchbase/couchbase/search_metrics.hxx +127 -0
  161. data/ext/couchbase/couchbase/search_numeric_range.hxx +69 -0
  162. data/ext/couchbase/couchbase/search_options.hxx +509 -0
  163. data/ext/couchbase/couchbase/search_query.hxx +69 -0
  164. data/ext/couchbase/couchbase/search_result.hxx +77 -0
  165. data/ext/couchbase/couchbase/search_row.hxx +104 -0
  166. data/ext/couchbase/couchbase/search_row_location.hxx +55 -0
  167. data/ext/couchbase/couchbase/search_row_locations.hxx +86 -0
  168. data/ext/couchbase/couchbase/search_scan_consistency.hxx +34 -0
  169. data/ext/couchbase/couchbase/search_sort.hxx +58 -0
  170. data/ext/couchbase/couchbase/search_sort_field.hxx +117 -0
  171. data/ext/couchbase/couchbase/search_sort_field_missing.hxx +26 -0
  172. data/ext/couchbase/couchbase/search_sort_field_mode.hxx +27 -0
  173. data/ext/couchbase/couchbase/search_sort_field_type.hxx +28 -0
  174. data/ext/couchbase/couchbase/search_sort_id.hxx +60 -0
  175. data/ext/couchbase/couchbase/search_sort_score.hxx +60 -0
  176. data/ext/couchbase/couchbase/search_term_range.hxx +51 -0
  177. data/ext/couchbase/couchbase/security_options.hxx +3 -0
  178. data/ext/couchbase/couchbase/term_facet.hxx +48 -0
  179. data/ext/couchbase/couchbase/term_facet_result.hxx +55 -0
  180. data/ext/couchbase/couchbase/term_query.hxx +151 -0
  181. data/ext/couchbase/couchbase/term_range_query.hxx +142 -0
  182. data/ext/couchbase/couchbase/tracing/request_span.hxx +63 -0
  183. data/ext/couchbase/couchbase/tracing/request_tracer.hxx +2 -40
  184. data/ext/couchbase/couchbase/transactions/async_attempt_context.hxx +83 -4
  185. data/ext/couchbase/couchbase/transactions/attempt_context.hxx +67 -0
  186. data/ext/couchbase/couchbase/transactions/transaction_get_result.hxx +2 -0
  187. data/ext/couchbase/couchbase/transactions/transaction_keyspace.hxx +11 -1
  188. data/ext/couchbase/couchbase/transactions/transaction_options.hxx +79 -8
  189. data/ext/couchbase/couchbase/transactions/transaction_query_options.hxx +128 -15
  190. data/ext/couchbase/couchbase/transactions/transaction_query_result.hxx +4 -0
  191. data/ext/couchbase/couchbase/transactions/transaction_result.hxx +1 -1
  192. data/ext/couchbase/couchbase/transactions/transactions_cleanup_config.hxx +5 -3
  193. data/ext/couchbase/couchbase/transactions/transactions_config.hxx +9 -5
  194. data/ext/couchbase/couchbase/transactions/transactions_query_config.hxx +6 -3
  195. data/ext/couchbase/couchbase/transactions.hxx +34 -1
  196. data/ext/couchbase/couchbase/wildcard_query.hxx +83 -0
  197. data/ext/couchbase/test/CMakeLists.txt +7 -5
  198. data/ext/couchbase/test/benchmark_helper_integration.hxx +2 -2
  199. data/ext/couchbase/test/test_helper.hxx +5 -5
  200. data/ext/couchbase/test/test_integration_analytics.cxx +28 -6
  201. data/ext/couchbase/test/test_integration_collections.cxx +7 -3
  202. data/ext/couchbase/test/test_integration_connect.cxx +7 -3
  203. data/ext/couchbase/test/test_integration_crud.cxx +13 -3
  204. data/ext/couchbase/test/test_integration_diagnostics.cxx +11 -5
  205. data/ext/couchbase/test/test_integration_durability.cxx +12 -7
  206. data/ext/couchbase/test/test_integration_examples.cxx +283 -11
  207. data/ext/couchbase/test/test_integration_management.cxx +147 -91
  208. data/ext/couchbase/test/test_integration_query.cxx +68 -10
  209. data/ext/couchbase/test/test_integration_range_scan.cxx +12 -12
  210. data/ext/couchbase/test/test_integration_read_replica.cxx +48 -11
  211. data/ext/couchbase/test/test_integration_search.cxx +22 -2
  212. data/ext/couchbase/test/test_integration_subdoc.cxx +62 -11
  213. data/ext/couchbase/test/test_integration_tracer.cxx +5 -0
  214. data/ext/couchbase/test/test_integration_transcoders.cxx +13 -5
  215. data/ext/couchbase/test/{test_transaction_transaction_context.cxx → test_transaction_context.cxx} +1 -1
  216. data/ext/couchbase/test/test_transaction_examples.cxx +195 -0
  217. data/ext/couchbase/test/{test_transaction_transaction_simple.cxx → test_transaction_simple.cxx} +17 -5
  218. data/ext/couchbase/test/{test_transaction_transaction_simple_async.cxx → test_transaction_simple_async.cxx} +19 -21
  219. data/ext/couchbase/test/test_unit_config_profiles.cxx +1 -1
  220. data/ext/couchbase/test/test_unit_json_transcoder.cxx +4 -0
  221. data/ext/couchbase/test/test_unit_search.cxx +427 -0
  222. data/ext/couchbase/test/test_unit_transaction_utils.cxx +10 -1
  223. data/ext/couchbase/test/test_unit_utils.cxx +8 -4
  224. data/ext/couchbase.cxx +58 -16
  225. data/ext/revisions.rb +3 -3
  226. data/lib/couchbase/authenticator.rb +0 -1
  227. data/lib/couchbase/cluster.rb +0 -4
  228. data/lib/couchbase/config_profiles.rb +1 -1
  229. data/lib/couchbase/json_transcoder.rb +12 -5
  230. data/lib/couchbase/management/collection_query_index_manager.rb +54 -15
  231. data/lib/couchbase/management/query_index_manager.rb +70 -5
  232. data/lib/couchbase/raw_binary_transcoder.rb +37 -0
  233. data/lib/couchbase/raw_json_transcoder.rb +38 -0
  234. data/lib/couchbase/raw_string_transcoder.rb +40 -0
  235. data/lib/couchbase/search_options.rb +5 -0
  236. data/lib/couchbase/transcoder_flags.rb +62 -0
  237. data/lib/couchbase/version.rb +1 -1
  238. metadata +139 -11
  239. data/ext/couchbase/core/config_profile.cxx +0 -47
  240. /data/ext/couchbase/test/{test_transaction_transaction_public_async_api.cxx → test_transaction_public_async_api.cxx} +0 -0
  241. /data/ext/couchbase/test/{test_transaction_transaction_public_blocking_api.cxx → test_transaction_public_blocking_api.cxx} +0 -0
@@ -596,16 +596,15 @@ TEST_CASE("transactions: async KV get", "[transactions]")
596
596
  [get_called, &id](async_attempt_context& ctx) {
597
597
  ctx.get(id, [get_called, &id, &ctx](std::exception_ptr, std::optional<transaction_get_result>) {
598
598
  auto query = fmt::format("UPDATE `{}` USE KEYS '{}' SET `some` = 'thing else'", id.bucket(), id.key());
599
- ctx.query(
600
- query, [get_called, &id, &ctx](std::exception_ptr err, std::optional<couchbase::core::operations::query_response>) {
601
- if (!err) {
602
- ctx.get(id, [get_called](std::exception_ptr err, std::optional<transaction_get_result>) {
603
- if (!err) {
604
- get_called->store(true);
605
- }
606
- });
607
- }
608
- });
599
+ ctx.query(query, [get_called, &id, &ctx](std::exception_ptr err, std::optional<couchbase::core::operations::query_response>) {
600
+ if (!err) {
601
+ ctx.get(id, [get_called](std::exception_ptr err, std::optional<transaction_get_result>) {
602
+ if (!err) {
603
+ get_called->store(true);
604
+ }
605
+ });
606
+ }
607
+ });
609
608
  });
610
609
  },
611
610
  [get_called, barrier](std::optional<transaction_exception> err, std::optional<couchbase::transactions::transaction_result> result) {
@@ -643,17 +642,16 @@ TEST_CASE("transactions: rollback async KV get", "[transactions]")
643
642
  [get_called, &id](async_attempt_context& ctx) {
644
643
  ctx.get(id, [&ctx, get_called, &id](std::exception_ptr, std::optional<transaction_get_result>) {
645
644
  auto query = fmt::format("UPDATE `{}` USE KEYS '{}' SET `some` = 'thing else'", id.bucket(), id.key());
646
- ctx.query(
647
- query, [&ctx, get_called, &id](std::exception_ptr err, std::optional<couchbase::core::operations::query_response>) {
648
- if (!err) {
649
- ctx.get(id, [get_called](std::exception_ptr err, std::optional<transaction_get_result>) {
650
- if (!err) {
651
- get_called->store(true);
652
- throw 3;
653
- }
654
- });
655
- }
656
- });
645
+ ctx.query(query, [&ctx, get_called, &id](std::exception_ptr err, std::optional<couchbase::core::operations::query_response>) {
646
+ if (!err) {
647
+ ctx.get(id, [get_called](std::exception_ptr err, std::optional<transaction_get_result>) {
648
+ if (!err) {
649
+ get_called->store(true);
650
+ throw 3;
651
+ }
652
+ });
653
+ }
654
+ });
657
655
  });
658
656
  },
659
657
  [&get_called, barrier](std::optional<transaction_exception> err, std::optional<couchbase::transactions::transaction_result> result) {
@@ -18,7 +18,7 @@
18
18
  #include "test_helper.hxx"
19
19
 
20
20
  #include "core/cluster_options.hxx"
21
- #include "core/config_profile.hxx"
21
+ #include "core/config_profiles.hxx"
22
22
  #include <stdexcept>
23
23
 
24
24
  class test_profile : public couchbase::core::config_profile
@@ -17,10 +17,14 @@
17
17
 
18
18
  #include "test_helper.hxx"
19
19
 
20
+ #include <catch2/catch_approx.hpp>
21
+
20
22
  #include <couchbase/codec/default_json_transcoder.hxx>
21
23
 
22
24
  #include <tao/json.hpp>
23
25
 
26
+ using Catch::Approx;
27
+
24
28
  TEST_CASE("unit: default_json_transcoder encodes primitives", "[unit]")
25
29
  {
26
30
  {
@@ -0,0 +1,427 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2020-2021 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
+ #include "test_helper.hxx"
19
+
20
+ #include "core/impl/encoded_search_query.hxx"
21
+
22
+ #include <couchbase/boolean_field_query.hxx>
23
+ #include <couchbase/boolean_query.hxx>
24
+ #include <couchbase/conjunction_query.hxx>
25
+ #include <couchbase/date_range_query.hxx>
26
+ #include <couchbase/disjunction_query.hxx>
27
+ #include <couchbase/geo_bounding_box_query.hxx>
28
+ #include <couchbase/geo_distance_query.hxx>
29
+ #include <couchbase/geo_polygon_query.hxx>
30
+ #include <couchbase/match_phrase_query.hxx>
31
+ #include <couchbase/match_query.hxx>
32
+ #include <couchbase/numeric_range_query.hxx>
33
+ #include <couchbase/phrase_query.hxx>
34
+ #include <couchbase/prefix_query.hxx>
35
+ #include <couchbase/query_string_query.hxx>
36
+ #include <couchbase/regexp_query.hxx>
37
+ #include <couchbase/term_query.hxx>
38
+ #include <couchbase/term_range_query.hxx>
39
+ #include <couchbase/wildcard_query.hxx>
40
+
41
+ #include <tao/json.hpp>
42
+
43
+ using namespace tao::json::literals;
44
+
45
+ TEST_CASE("unit: query string search query", "[unit]")
46
+ {
47
+ {
48
+ // clang-format off
49
+ //! [search-query-string-boosting]
50
+ couchbase::query_string_query query(R"(description:pool name:pool^5)");
51
+ //! [search-query-string-boosting]
52
+ // clang-format on
53
+ const auto encoded = query.encode();
54
+ REQUIRE_FALSE(encoded.ec);
55
+ REQUIRE(encoded.query == "{\"query\":\"description:pool name:pool^5\"}"_json);
56
+ }
57
+ {
58
+ // clang-format off
59
+ //! [search-query-string-date-range]
60
+ couchbase::query_string_query query(R"(created:>"2016-09-21")");
61
+ //! [search-query-string-date-range]
62
+ // clang-format on
63
+ const auto encoded = query.encode();
64
+ REQUIRE_FALSE(encoded.ec);
65
+ REQUIRE(encoded.query == "{\"query\":\"created:>\\\"2016-09-21\\\"\"}"_json);
66
+ }
67
+
68
+ {
69
+ // clang-format off
70
+ //! [search-query-string-numeric-range]
71
+ couchbase::query_string_query query(R"(reviews.ratings.Cleanliness:>4)");
72
+ //! [search-query-string-numeric-range]
73
+ // clang-format on
74
+ query.boost(1.42);
75
+ const auto encoded = query.encode();
76
+ REQUIRE_FALSE(encoded.ec);
77
+ REQUIRE(encoded.query == "{\"boost\":1.42,\"query\":\"reviews.ratings.Cleanliness:>4\"}"_json);
78
+ }
79
+ }
80
+
81
+ TEST_CASE("unit: match search query", "[unit]")
82
+ {
83
+ {
84
+ // clang-format off
85
+ //! [search-match]
86
+ auto query = couchbase::match_query("location hostel")
87
+ .field("reviews.content")
88
+ .analyzer("standard")
89
+ .fuzziness(2)
90
+ .prefix_length(4)
91
+ .match_operator(couchbase::match_operator::logical_and);
92
+ //! [search-match]
93
+ // clang-format on
94
+ const auto encoded = query.encode();
95
+ REQUIRE_FALSE(encoded.ec);
96
+ REQUIRE(encoded.query == R"(
97
+ {"analyzer":"standard","field":"reviews.content","fuzziness":2,"match":"location hostel","operator":"and","prefix_length":4}
98
+ )"_json);
99
+ }
100
+ }
101
+
102
+ TEST_CASE("unit: conjunction search query", "[unit]")
103
+ {
104
+ // clang-format off
105
+ //! [search-conjunction]
106
+ auto query = couchbase::conjunction_query{
107
+ couchbase::match_query("location hostel").field("reviews.content"),
108
+ couchbase::boolean_field_query(true).field("free_breakfast")
109
+ };
110
+ //! [search-conjunction]
111
+ // clang-format on
112
+ const auto encoded = query.encode();
113
+ REQUIRE_FALSE(encoded.ec);
114
+ REQUIRE(encoded.query == R"(
115
+ {"conjuncts":[
116
+ {"field":"reviews.content","match":"location hostel"},
117
+ {"bool":true,"field":"free_breakfast"}
118
+ ]}
119
+ )"_json);
120
+ }
121
+
122
+ TEST_CASE("unit: disjunction search query", "[unit]")
123
+ {
124
+ // clang-format off
125
+ //! [search-disjunction]
126
+ auto query = couchbase::disjunction_query{
127
+ couchbase::match_query("location hostel").field("reviews.content"),
128
+ couchbase::boolean_field_query(true).field("free_breakfast")
129
+ };
130
+ //! [search-disjunction]
131
+ // clang-format on
132
+ const auto encoded = query.encode();
133
+ REQUIRE_FALSE(encoded.ec);
134
+ REQUIRE(encoded.query == R"(
135
+ {"disjuncts":[
136
+ {"field":"reviews.content","match":"location hostel"},
137
+ {"bool":true,"field":"free_breakfast"}
138
+ ]}
139
+ )"_json);
140
+ }
141
+
142
+ TEST_CASE("unit: boolean search query", "[unit]")
143
+ {
144
+ // clang-format off
145
+ //! [search-boolean]
146
+ couchbase::boolean_query query;
147
+ query.must(
148
+ couchbase::match_query("hostel room").field("reviews.content"),
149
+ couchbase::boolean_field_query(true).field("free_breakfast"));
150
+ query.should(
151
+ couchbase::numeric_range_query().field("reviews.ratings.Overall").min(4),
152
+ couchbase::numeric_range_query().field("reviews.ratings.Service").min(5));
153
+ query.must_not(
154
+ couchbase::match_query("Padfield Gilingham").field("city"));
155
+ //! [search-boolean]
156
+ // clang-format on
157
+ const auto encoded = query.encode();
158
+ REQUIRE_FALSE(encoded.ec);
159
+ REQUIRE(encoded.query == R"(
160
+ {"must": {"conjuncts":[{"field":"reviews.content","match":"hostel room"},{"bool":true,"field":"free_breakfast"}]},
161
+ "must_not": {"disjuncts":[{"field":"city","match":"Padfield Gilingham"}]},
162
+ "should": {"disjuncts":[{"field":"reviews.ratings.Overall","min":4},{"field":"reviews.ratings.Service","min":5}]}}
163
+ )"_json);
164
+ }
165
+
166
+ TEST_CASE("unit: term search query", "[unit]")
167
+ {
168
+ // clang-format off
169
+ //! [search-term]
170
+ auto query = couchbase::term_query("locate").field("reviews.content");
171
+ //! [search-term]
172
+ // clang-format on
173
+ const auto encoded = query.encode();
174
+ REQUIRE_FALSE(encoded.ec);
175
+ REQUIRE(encoded.query == R"(
176
+ {"term": "locate", "field": "reviews.content"}
177
+ )"_json);
178
+ }
179
+
180
+ TEST_CASE("unit: match phrase search query", "[unit]")
181
+ {
182
+ // clang-format off
183
+ //! [search-match-phrase]
184
+ auto query = couchbase::match_phrase_query("nice view").field("reviews.content");
185
+ //! [search-match-phrase]
186
+ // clang-format on
187
+ const auto encoded = query.encode();
188
+ REQUIRE_FALSE(encoded.ec);
189
+ REQUIRE(encoded.query == R"(
190
+ {"match_phrase": "nice view", "field": "reviews.content"}
191
+ )"_json);
192
+ }
193
+
194
+ TEST_CASE("unit: phrase search query", "[unit]")
195
+ {
196
+ // clang-format off
197
+ //! [search-phrase]
198
+ auto query = couchbase::phrase_query({"nice", "view"}).field("reviews.content");
199
+ //! [search-phrase]
200
+ // clang-format on
201
+ const auto encoded = query.encode();
202
+ REQUIRE_FALSE(encoded.ec);
203
+ REQUIRE(encoded.query == R"(
204
+ {"terms": ["nice", "view"], "field": "reviews.content"}
205
+ )"_json);
206
+ }
207
+
208
+ TEST_CASE("unit: prefix search query", "[unit]")
209
+ {
210
+ // clang-format off
211
+ //! [search-prefix]
212
+ auto query = couchbase::prefix_query("inter").field("reviews.content");
213
+ //! [search-prefix]
214
+ // clang-format on
215
+ const auto encoded = query.encode();
216
+ REQUIRE_FALSE(encoded.ec);
217
+ REQUIRE(encoded.query == R"(
218
+ {"prefix": "inter", "field": "reviews.content"}
219
+ )"_json);
220
+ }
221
+
222
+ TEST_CASE("unit: regexp search query", "[unit]")
223
+ {
224
+ // clang-format off
225
+ //! [search-regexp]
226
+ auto query = couchbase::regexp_query("inter.+").field("reviews.content");
227
+ //! [search-regexp]
228
+ // clang-format on
229
+ const auto encoded = query.encode();
230
+ REQUIRE_FALSE(encoded.ec);
231
+ REQUIRE(encoded.query == R"(
232
+ {"regexp": "inter.+", "field": "reviews.content"}
233
+ )"_json);
234
+ }
235
+
236
+ TEST_CASE("unit: wildcard search query", "[unit]")
237
+ {
238
+ // clang-format off
239
+ //! [search-wildcard]
240
+ auto query = couchbase::wildcard_query("inter*").field("reviews.content");
241
+ //! [search-wildcard]
242
+ // clang-format on
243
+ const auto encoded = query.encode();
244
+ REQUIRE_FALSE(encoded.ec);
245
+ REQUIRE(encoded.query == R"(
246
+ {"wildcard": "inter*", "field": "reviews.content"}
247
+ )"_json);
248
+ }
249
+
250
+ TEST_CASE("unit: numeric range search query", "[unit]")
251
+ {
252
+ // clang-format off
253
+ //! [search-numeric-range]
254
+ auto query = couchbase::numeric_range_query()
255
+ .field("id")
256
+ .min(100, /* inclusive= */ false)
257
+ .max(1000, /* inclusive= */ false);
258
+ //! [search-numeric-range]
259
+ // clang-format on
260
+ const auto encoded = query.encode();
261
+ REQUIRE_FALSE(encoded.ec);
262
+ REQUIRE(encoded.query == R"(
263
+ {"min": 100, "inclusive_min": false, "max": 1000, "inclusive_max": false, "field": "id"}
264
+ )"_json);
265
+ }
266
+
267
+ TEST_CASE("unit: date range search query", "[unit]")
268
+ {
269
+ {
270
+ // clang-format off
271
+ //! [search-date-range]
272
+ auto query = couchbase::date_range_query()
273
+ .field("review_date")
274
+ .start("2001-10-09T10:20:30-08:00", /* inclusive= */ false)
275
+ .end("2016-10-31", /* inclusive= */ false);
276
+ //! [search-date-range]
277
+ // clang-format on
278
+ const auto encoded = query.encode();
279
+ REQUIRE_FALSE(encoded.ec);
280
+ REQUIRE(encoded.query == R"(
281
+ {"start": "2001-10-09T10:20:30-08:00", "inclusive_start": false, "end": "2016-10-31", "inclusive_end": false, "field": "review_date"}
282
+ )"_json);
283
+ }
284
+
285
+ {
286
+ // clang-format off
287
+ //! [search-date-range-tm]
288
+ std::tm start_tm{};
289
+ start_tm.tm_year = 2001 - 1900;
290
+ start_tm.tm_mon = 9;
291
+ start_tm.tm_mday = 9;
292
+ start_tm.tm_hour = 10;
293
+ start_tm.tm_min = 20;
294
+ start_tm.tm_sec = 30;
295
+
296
+ std::tm end_tm{};
297
+ end_tm.tm_year = 2001 - 1900;
298
+ end_tm.tm_mon = 9;
299
+ end_tm.tm_mday = 31;
300
+
301
+ auto query = couchbase::date_range_query()
302
+ .field("review_date")
303
+ .start(start_tm)
304
+ .end(end_tm);
305
+ // equivalent of {"field":"review_date","start":"2001-10-09T10:20:30+0000","end":"2001-10-31T00:00:00+0000"}
306
+ //! [search-date-range-tm]
307
+ // clang-format on
308
+ const auto encoded = query.encode();
309
+ REQUIRE_FALSE(encoded.ec);
310
+ REQUIRE(encoded.query == R"(
311
+ {"end":"2001-10-31T00:00:00+0000","field":"review_date","start":"2001-10-09T10:20:30+0000"}
312
+ )"_json);
313
+ }
314
+ }
315
+
316
+ TEST_CASE("unit: term range search query", "[unit]")
317
+ {
318
+ // clang-format off
319
+ //! [search-term-range]
320
+ auto query = couchbase::term_range_query()
321
+ .field("desc")
322
+ .min("foo", /* inclusive= */ false)
323
+ .max("foof", /* inclusive= */ false);
324
+ //! [search-term-range]
325
+ // clang-format on
326
+ const auto encoded = query.encode();
327
+ REQUIRE_FALSE(encoded.ec);
328
+ REQUIRE(encoded.query == R"(
329
+ {"min": "foo", "inclusive_min": false, "max": "foof", "inclusive_max": false, "field": "desc"}
330
+ )"_json);
331
+ }
332
+
333
+ TEST_CASE("unit: special search query", "[unit]")
334
+ {
335
+ {
336
+ auto query = couchbase::match_none_query();
337
+ const auto encoded = query.encode();
338
+ REQUIRE_FALSE(encoded.ec);
339
+ REQUIRE(encoded.query == R"({"match_none": {}})"_json);
340
+ }
341
+ {
342
+ auto query = couchbase::match_all_query();
343
+ const auto encoded = query.encode();
344
+ REQUIRE_FALSE(encoded.ec);
345
+ REQUIRE(encoded.query == R"({"match_all": {}})"_json);
346
+ }
347
+ }
348
+
349
+ TEST_CASE("unit: geo distance search query", "[unit]")
350
+ {
351
+ // clang-format off
352
+ //! [search-geo-distance]
353
+ auto query = couchbase::geo_distance_query(53.482358, -2.235143, "100mi")
354
+ .field("geo");
355
+ //! [search-geo-distance]
356
+ // clang-format on
357
+ const auto encoded = query.encode();
358
+ REQUIRE_FALSE(encoded.ec);
359
+ REQUIRE(encoded.query == R"(
360
+ {
361
+ "location": {
362
+ "lon": -2.235143,
363
+ "lat": 53.482358
364
+ },
365
+ "distance": "100mi",
366
+ "field": "geo"
367
+ }
368
+ )"_json);
369
+ }
370
+
371
+ TEST_CASE("unit: geo bounding box search query", "[unit]")
372
+ {
373
+ // clang-format off
374
+ //! [search-geo-bounding-box]
375
+ auto query = couchbase::geo_bounding_box_query(
376
+ couchbase::geo_point{53.482358, -2.235143},
377
+ couchbase::geo_point{40.991862, 28.955043}
378
+ ).field("geo");
379
+ //! [search-geo-bounding-box]
380
+ // clang-format on
381
+ const auto encoded = query.encode();
382
+ REQUIRE_FALSE(encoded.ec);
383
+ REQUIRE(encoded.query == R"(
384
+ {
385
+ "top_left": {
386
+ "lon": -2.235143,
387
+ "lat": 53.482358
388
+ },
389
+ "bottom_right": {
390
+ "lon": 28.955043,
391
+ "lat": 40.991862
392
+ },
393
+ "field": "geo"
394
+ }
395
+ )"_json);
396
+ }
397
+
398
+ TEST_CASE("unit: geo polygon search query", "[unit]")
399
+ {
400
+ // clang-format off
401
+ //! [search-geo-polygon]
402
+ auto query = couchbase::geo_polygon_query({
403
+ couchbase::geo_point{ 37.79393211306212, -122.44234633404847 },
404
+ couchbase::geo_point{ 37.77995881733997, -122.43977141339417 },
405
+ couchbase::geo_point{ 37.788031092020155, -122.42925715405579 },
406
+ couchbase::geo_point{ 37.79026946582319, -122.41149020154114 },
407
+ couchbase::geo_point{ 37.79571192027403, -122.40735054016113 },
408
+ couchbase::geo_point{ 37.79393211306212, -122.44234633404847 },
409
+ }).field("geo");
410
+ //! [search-geo-polygon]
411
+ // clang-format on
412
+ const auto encoded = query.encode();
413
+ REQUIRE_FALSE(encoded.ec);
414
+ REQUIRE(encoded.query == R"(
415
+ {
416
+ "field": "geo",
417
+ "polygon_points": [
418
+ {"lat": 37.79393211306212, "lon": -122.44234633404847},
419
+ {"lat": 37.77995881733997, "lon": -122.43977141339417},
420
+ {"lat": 37.788031092020155, "lon": -122.42925715405579},
421
+ {"lat": 37.79026946582319, "lon": -122.41149020154114},
422
+ {"lat": 37.79571192027403, "lon": -122.40735054016113},
423
+ {"lat": 37.79393211306212, "lon": -122.44234633404847}
424
+ ]
425
+ }
426
+ )"_json);
427
+ }
@@ -26,6 +26,15 @@
26
26
  #include <limits>
27
27
  #include <thread>
28
28
 
29
+ #if defined(__GNUC__)
30
+ #if __GNUC__ <= 10
31
+ #pragma GCC diagnostic ignored "-Wparentheses"
32
+ #endif
33
+ #if __GNUC__ < 9
34
+ #pragma GCC diagnostic ignored "-Wuseless-cast"
35
+ #endif
36
+ #endif
37
+
29
38
  using namespace couchbase::core::transactions;
30
39
  using namespace std;
31
40
 
@@ -315,4 +324,4 @@ TEST_CASE("transaction_get_result: can convert core transaction_get_result to pu
315
324
  auto final_public_res = core_res.to_public_result();
316
325
  REQUIRE(final_public_res.cas().empty());
317
326
  }
318
- }
327
+ }
@@ -17,6 +17,10 @@
17
17
 
18
18
  #include "test_helper.hxx"
19
19
 
20
+ #include <catch2/matchers/catch_matchers.hpp>
21
+ #include <catch2/matchers/catch_matchers_exception.hpp>
22
+ #include <catch2/matchers/catch_matchers_string.hpp>
23
+
20
24
  #include "core/meta/version.hxx"
21
25
  #include "core/platform/base64.h"
22
26
  #include "core/utils/join_strings.hxx"
@@ -32,14 +36,14 @@
32
36
 
33
37
  TEST_CASE("unit: transformer to deduplicate JSON keys", "[unit]")
34
38
  {
35
- using Catch::Contains;
39
+ using Catch::Matchers::ContainsSubstring;
36
40
 
37
41
  std::string input{ R"({"answer":"wrong","answer":42})" };
38
42
 
39
- CHECK_THROWS_WITH(tao::json::from_string(input), Contains("duplicate JSON object key \"answer\""));
43
+ CHECK_THROWS_WITH(tao::json::from_string(input), ContainsSubstring("duplicate JSON object key \"answer\""));
40
44
 
41
45
  auto result = couchbase::core::utils::json::parse(input);
42
- INFO(couchbase::core::utils::json::generate(result))
46
+ INFO(couchbase::core::utils::json::generate(result));
43
47
  CHECK(result.is_object());
44
48
  CHECK(result.find("answer") != nullptr);
45
49
  CHECK(result["answer"].is_integer());
@@ -96,7 +100,7 @@ TEST_CASE("unit: user_agent string", "[unit]")
96
100
 
97
101
  auto simple_user_agent = couchbase::core::meta::user_agent_for_mcbp("0xDEADBEEF", "0xCAFEBEBE");
98
102
  REQUIRE(simple_user_agent == fmt::format(R"({{"a":"{}","i":"0xDEADBEEF/0xCAFEBEBE"}})", core_version));
99
- REQUIRE(simple_user_agent.size() == 66);
103
+ REQUIRE(simple_user_agent.size() == 53 + os_version.size());
100
104
 
101
105
  REQUIRE(couchbase::core::meta::user_agent_for_mcbp("0xDEADBEEF", "0xCAFEBEBE", "couchnode/1.2.3; openssl/1.1.1l") ==
102
106
  fmt::format(R"({{"a":"{};couchnode/1.2.3; openssl/1.1.1l","i":"0xDEADBEEF/0xCAFEBEBE"}})", core_version));