couchbase 3.4.2 → 3.4.3

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,79 @@
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 "config_profiles.hxx"
19
+
20
+ #include "cluster_options.hxx"
21
+
22
+ #include <fmt/core.h>
23
+
24
+ #include <chrono>
25
+ #include <stdexcept>
26
+
27
+ namespace couchbase::core
28
+ {
29
+ class development_profile : public config_profile
30
+ {
31
+ public:
32
+ void apply(couchbase::core::cluster_options& opts) override
33
+ {
34
+ opts.key_value_timeout = std::chrono::seconds(20);
35
+ opts.key_value_durable_timeout = std::chrono::seconds(20);
36
+ opts.connect_timeout = std::chrono::seconds(20);
37
+ opts.view_timeout = std::chrono::minutes(2);
38
+ opts.query_timeout = std::chrono::minutes(2);
39
+ opts.analytics_timeout = std::chrono::minutes(2);
40
+ opts.search_timeout = std::chrono::minutes(2);
41
+ opts.management_timeout = std::chrono::minutes(2);
42
+
43
+ // C++SDK specific
44
+ opts.dns_config = couchbase::core::io::dns::dns_config{
45
+ opts.dns_config.nameserver(),
46
+ opts.dns_config.port(),
47
+ std::chrono::seconds(20), // timeout to make DNS-SRV query
48
+ };
49
+ opts.resolve_timeout = std::chrono::seconds(20); // timeout to resolve hostnames
50
+ opts.bootstrap_timeout = std::chrono::minutes(2); // overall timeout to bootstrap
51
+ }
52
+ };
53
+
54
+ config_profiles::config_profiles() noexcept
55
+ {
56
+ // add all known profiles (above) to the map
57
+ register_profile<development_profile>("wan_development");
58
+ }
59
+
60
+ void
61
+ config_profiles::apply(const std::string& profile_name, couchbase::core::cluster_options& opts)
62
+ {
63
+ std::lock_guard<std::mutex> lock(mut_);
64
+ auto it = profiles_.find(profile_name);
65
+ if (it != profiles_.end()) {
66
+ it->second->apply(opts);
67
+ } else {
68
+ throw std::invalid_argument(fmt::format("unknown profile '{}'", profile_name));
69
+ }
70
+ }
71
+
72
+ config_profiles&
73
+ known_profiles()
74
+ {
75
+ static config_profiles profiles{};
76
+ return profiles;
77
+ }
78
+
79
+ } // namespace couchbase::core
@@ -0,0 +1,56 @@
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
+ #pragma once
18
+
19
+ #include "cluster_options_fwd.hxx"
20
+ #include "config_profile.hxx"
21
+
22
+ #include <map>
23
+ #include <memory>
24
+ #include <mutex>
25
+ #include <string>
26
+
27
+ namespace couchbase::core
28
+ {
29
+ // this class just registers the known profiles defined above, and allows access to them.
30
+ class config_profiles
31
+ {
32
+ private:
33
+ std::map<std::string, std::shared_ptr<config_profile>, std::less<>> profiles_;
34
+ mutable std::mutex mut_;
35
+
36
+ public:
37
+ config_profiles() noexcept;
38
+
39
+ void apply(const std::string& profile_name, couchbase::core::cluster_options& opts);
40
+
41
+ template<typename T, typename... Args>
42
+ void register_profile(const std::string& name, Args... args)
43
+ {
44
+ // This will just add it, doesn't look to see if it is overwriting an existing profile.
45
+ // TODO: perhaps add a template Args param?
46
+ // TODO: should we make this thread-safe? Easy enough here, but we'd need to make the
47
+ // singleton thread-safe too.
48
+ const std::scoped_lock lock(mut_);
49
+ profiles_.emplace(std::make_pair(name, std::make_shared<T>(args...)));
50
+ }
51
+ };
52
+
53
+ config_profiles&
54
+ known_profiles();
55
+
56
+ } // namespace couchbase::core
@@ -32,7 +32,7 @@ struct search {
32
32
  std::error_code ec{};
33
33
  std::string client_context_id{};
34
34
  std::string index_name{};
35
- std::optional<std::string> query{};
35
+ std::string query{};
36
36
  std::optional<std::string> parameters{};
37
37
 
38
38
  std::string method{};
@@ -17,6 +17,7 @@
17
17
 
18
18
  #include <couchbase/cluster.hxx>
19
19
  #include <couchbase/error_codes.hxx>
20
+ #include <couchbase/scope.hxx>
20
21
 
21
22
  #include "core/cluster.hxx"
22
23
  #include "core/operations/document_analytics.hxx"
@@ -0,0 +1,40 @@
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
+ #include "encoded_search_query.hxx"
19
+
20
+ #include <couchbase/boolean_field_query.hxx>
21
+
22
+ namespace couchbase
23
+ {
24
+ auto
25
+ boolean_field_query::encode() const -> encoded_search_query
26
+ {
27
+ encoded_search_query built;
28
+
29
+ built.query = tao::json::empty_object;
30
+ if (boost_) {
31
+ built.query["boost"] = boost_.value();
32
+ }
33
+ built.query["bool"] = bool_;
34
+ if (field_) {
35
+ built.query["field"] = field_.value();
36
+ }
37
+
38
+ return built;
39
+ }
40
+ } // namespace couchbase
@@ -0,0 +1,62 @@
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
+ #include "encoded_search_query.hxx"
19
+
20
+ #include <couchbase/boolean_query.hxx>
21
+
22
+ #include <couchbase/error_codes.hxx>
23
+
24
+ namespace couchbase
25
+ {
26
+ auto
27
+ boolean_query::encode() const -> encoded_search_query
28
+ {
29
+ if (!must_ && !should_ && !must_not_) {
30
+ return { errc::common::invalid_argument };
31
+ }
32
+
33
+ encoded_search_query built;
34
+ built.query = tao::json::empty_object;
35
+ if (boost_) {
36
+ built.query["boost"] = boost_.value();
37
+ }
38
+ if (must_) {
39
+ auto encoded = must_->encode();
40
+ if (encoded.ec) {
41
+ return { encoded.ec };
42
+ }
43
+ built.query["must"] = encoded.query;
44
+ }
45
+ if (must_not_) {
46
+ auto encoded = must_not_->encode();
47
+ if (encoded.ec) {
48
+ return { encoded.ec };
49
+ }
50
+ built.query["must_not"] = encoded.query;
51
+ }
52
+ if (should_) {
53
+ auto encoded = should_->encode();
54
+ if (encoded.ec) {
55
+ return { encoded.ec };
56
+ }
57
+ built.query["should"] = encoded.query;
58
+ }
59
+
60
+ return built;
61
+ }
62
+ } // namespace couchbase
@@ -90,6 +90,7 @@ options_to_origin(const std::string& connection_string, const couchbase::cluster
90
90
  user_options.tls_verify = core::tls_verify_mode::peer;
91
91
  break;
92
92
  }
93
+ user_options.disable_mozilla_ca_certificates = opts.security.disable_mozilla_ca_certificates;
93
94
  }
94
95
 
95
96
  if (opts.dns.nameserver) {
@@ -98,6 +99,7 @@ options_to_origin(const std::string& connection_string, const couchbase::cluster
98
99
  }
99
100
  user_options.enable_clustermap_notification = opts.behavior.enable_clustermap_notification;
100
101
  user_options.show_queries = opts.behavior.show_queries;
102
+ user_options.dump_configuration = opts.behavior.dump_configuration;
101
103
  user_options.enable_mutation_tokens = opts.behavior.enable_mutation_tokens;
102
104
  user_options.enable_unordered_execution = opts.behavior.enable_unordered_execution;
103
105
  user_options.user_agent_extra = opts.behavior.user_agent_extra;
@@ -0,0 +1,51 @@
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
+ #include "encoded_search_query.hxx"
19
+
20
+ #include <couchbase/conjunction_query.hxx>
21
+
22
+ #include <couchbase/error_codes.hxx>
23
+
24
+ namespace couchbase
25
+ {
26
+ auto
27
+ conjunction_query::encode() const -> encoded_search_query
28
+ {
29
+ if (conjuncts_.empty()) {
30
+ return { errc::common::invalid_argument };
31
+ }
32
+
33
+ encoded_search_query built;
34
+ built.query = tao::json::empty_object;
35
+ if (boost_) {
36
+ built.query["boost"] = boost_.value();
37
+ }
38
+
39
+ tao::json::value conjuncts = tao::json::empty_array;
40
+ for (const auto& conjunct : conjuncts_) {
41
+ auto encoded = conjunct->encode();
42
+ if (encoded.ec) {
43
+ return { encoded.ec };
44
+ }
45
+ conjuncts.push_back(encoded.query);
46
+ }
47
+ built.query["conjuncts"] = conjuncts;
48
+
49
+ return built;
50
+ }
51
+ } // namespace couchbase
@@ -0,0 +1,89 @@
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
+ #include <couchbase/date_range.hxx>
19
+
20
+ #include <fmt/chrono.h>
21
+
22
+ namespace couchbase
23
+ {
24
+ static constexpr const char* iso_8601_format = "{:%Y-%m-%dT%H:%M:%S%z}";
25
+
26
+ date_range::date_range(std::string name, std::string start, std::string end)
27
+ : name_{ std::move(name) }
28
+ , start_{ std::move(start) }
29
+ , end_{ std::move(end) }
30
+ {
31
+ }
32
+
33
+ date_range::date_range(std::string name, std::chrono::system_clock::time_point start, std::chrono::system_clock::time_point end)
34
+ : name_{ std::move(name) }
35
+ , start_{ fmt::format(iso_8601_format, start) }
36
+ , end_{ fmt::format(iso_8601_format, end) }
37
+ {
38
+ }
39
+
40
+ date_range::date_range(std::string name, std::tm start, std::tm end)
41
+ : name_{ std::move(name) }
42
+ , start_{ fmt::format(iso_8601_format, start) }
43
+ , end_{ fmt::format(iso_8601_format, end) }
44
+ {
45
+ }
46
+
47
+ date_range::date_range(std::string name, std::optional<std::string> start, std::optional<std::string> end)
48
+ : name_{ std::move(name) }
49
+ , start_{ std::move(start) }
50
+ , end_{ std::move(end) }
51
+ {
52
+ }
53
+
54
+ date_range
55
+ date_range::with_start(std::string name, std::string start)
56
+ {
57
+ return { std::move(name), std::move(start), {} };
58
+ }
59
+
60
+ date_range
61
+ date_range::with_start(std::string name, std::chrono::system_clock::time_point start)
62
+ {
63
+ return { std::move(name), fmt::format(iso_8601_format, start), {} };
64
+ }
65
+
66
+ date_range
67
+ date_range::with_start(std::string name, std::tm start)
68
+ {
69
+ return { std::move(name), fmt::format(iso_8601_format, start), {} };
70
+ }
71
+
72
+ date_range
73
+ date_range::with_end(std::string name, std::string end)
74
+ {
75
+ return { std::move(name), {}, std::move(end) };
76
+ }
77
+
78
+ date_range
79
+ date_range::with_end(std::string name, std::chrono::system_clock::time_point end)
80
+ {
81
+ return { std::move(name), {}, fmt::format(iso_8601_format, end) };
82
+ }
83
+
84
+ date_range
85
+ date_range::with_end(std::string name, std::tm end)
86
+ {
87
+ return { std::move(name), {}, fmt::format(iso_8601_format, end) };
88
+ }
89
+ } // namespace couchbase
@@ -0,0 +1,54 @@
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
+ #include "encoded_search_facet.hxx"
19
+
20
+ #include <couchbase/date_range_facet.hxx>
21
+ #include <couchbase/error_codes.hxx>
22
+
23
+ namespace couchbase
24
+ {
25
+ auto
26
+ date_range_facet::encode() const -> encoded_search_facet
27
+ {
28
+ encoded_search_facet built;
29
+ built.facet = {
30
+ { "field", field_ },
31
+ };
32
+ if (size_) {
33
+ built.facet["size"] = size_.value();
34
+ }
35
+ if (ranges_.empty()) {
36
+ return { errc::common::invalid_argument };
37
+ }
38
+ tao::json::value ranges = tao::json::empty_array;
39
+ for (const auto& range : ranges_) {
40
+ tao::json::value entry = {
41
+ { "field", range.name() },
42
+ };
43
+ if (const auto& start = range.start(); start.has_value()) {
44
+ entry["start"] = start.value();
45
+ }
46
+ if (const auto& end = range.end(); end.has_value()) {
47
+ entry["end"] = end.value();
48
+ }
49
+ ranges.emplace_back(entry);
50
+ }
51
+ built.facet["date_ranges"] = ranges;
52
+ return built;
53
+ }
54
+ } // namespace couchbase
@@ -0,0 +1,64 @@
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
+ #include "internal_date_range_facet_result.hxx"
19
+
20
+ #include <couchbase/date_range_facet_result.hxx>
21
+
22
+ namespace couchbase
23
+ {
24
+ date_range_facet_result::date_range_facet_result(internal_date_range_facet_result internal)
25
+ : internal_{ std::make_unique<internal_date_range_facet_result>(std::move(internal)) }
26
+ {
27
+ }
28
+
29
+ auto
30
+ date_range_facet_result::name() const -> const std::string&
31
+ {
32
+ return internal_->name();
33
+ }
34
+
35
+ auto
36
+ date_range_facet_result::field() const -> const std::string&
37
+ {
38
+ return internal_->field();
39
+ }
40
+
41
+ auto
42
+ date_range_facet_result::total() const -> std::uint64_t
43
+ {
44
+ return internal_->total();
45
+ }
46
+
47
+ auto
48
+ date_range_facet_result::missing() const -> std::uint64_t
49
+ {
50
+ return internal_->missing();
51
+ }
52
+
53
+ auto
54
+ date_range_facet_result::other() const -> std::uint64_t
55
+ {
56
+ return internal_->other();
57
+ }
58
+
59
+ auto
60
+ date_range_facet_result::date_ranges() const -> const std::vector<search_date_range>&
61
+ {
62
+ return internal_->date_ranges();
63
+ }
64
+ } // namespace couchbase
@@ -0,0 +1,125 @@
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
+ #include "encoded_search_query.hxx"
19
+
20
+ #include <couchbase/date_range_query.hxx>
21
+
22
+ #include <couchbase/error_codes.hxx>
23
+
24
+ #include <fmt/chrono.h>
25
+
26
+ namespace couchbase
27
+ {
28
+
29
+ static constexpr const char* iso_8601_format = "{:%Y-%m-%dT%H:%M:%S%z}";
30
+
31
+ auto
32
+ date_range_query::start(std::chrono::system_clock::time_point value) -> date_range_query&
33
+ {
34
+ start_ = fmt::format(iso_8601_format, value);
35
+ return *this;
36
+ }
37
+
38
+ auto
39
+ date_range_query::start(std::tm value) -> date_range_query&
40
+ {
41
+ start_ = fmt::format(iso_8601_format, value);
42
+ return *this;
43
+ }
44
+
45
+ auto
46
+ date_range_query::start(std::chrono::system_clock::time_point value, bool inclusive) -> date_range_query&
47
+ {
48
+ start_ = fmt::format(iso_8601_format, value);
49
+ inclusive_start_ = inclusive;
50
+ return *this;
51
+ }
52
+
53
+ auto
54
+ date_range_query::start(std::tm value, bool inclusive) -> date_range_query&
55
+ {
56
+ start_ = fmt::format(iso_8601_format, value);
57
+ inclusive_start_ = inclusive;
58
+ return *this;
59
+ }
60
+
61
+ auto
62
+ date_range_query::end(std::chrono::system_clock::time_point value) -> date_range_query&
63
+ {
64
+
65
+ end_ = fmt::format(iso_8601_format, value);
66
+ return *this;
67
+ }
68
+
69
+ auto
70
+ date_range_query::end(std::tm value) -> date_range_query&
71
+ {
72
+ end_ = fmt::format(iso_8601_format, value);
73
+ return *this;
74
+ }
75
+
76
+ auto
77
+ date_range_query::end(std::chrono::system_clock::time_point value, bool inclusive) -> date_range_query&
78
+ {
79
+ end_ = fmt::format(iso_8601_format, value);
80
+ inclusive_end_ = inclusive;
81
+ return *this;
82
+ }
83
+
84
+ auto
85
+ date_range_query::end(std::tm value, bool inclusive) -> date_range_query&
86
+ {
87
+ end_ = fmt::format(iso_8601_format, value);
88
+ inclusive_end_ = inclusive;
89
+ return *this;
90
+ }
91
+
92
+ auto
93
+ date_range_query::encode() const -> encoded_search_query
94
+ {
95
+ if ((!start_ || start_->empty()) && (!end_ || end_->empty())) {
96
+ return { errc::common::invalid_argument };
97
+ }
98
+
99
+ encoded_search_query built;
100
+ built.query = tao::json::empty_object;
101
+ if (boost_) {
102
+ built.query["boost"] = boost_.value();
103
+ }
104
+ if (field_) {
105
+ built.query["field"] = field_.value();
106
+ }
107
+ if (start_) {
108
+ built.query["start"] = start_.value();
109
+ if (inclusive_start_.has_value()) {
110
+ built.query["inclusive_start"] = inclusive_start_.value();
111
+ }
112
+ }
113
+ if (end_) {
114
+ built.query["end"] = end_.value();
115
+ if (inclusive_end_.has_value()) {
116
+ built.query["inclusive_end"] = inclusive_end_.value();
117
+ }
118
+ }
119
+ if (date_time_parser_) {
120
+ built.query["datetime_parser"] = date_time_parser_.value();
121
+ }
122
+
123
+ return built;
124
+ }
125
+ } // namespace couchbase