couchbase 3.1.1-universal-darwin-20 → 3.2.0-universal-darwin-20

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 (221) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/ext/CMakeLists.txt +3 -1
  4. data/ext/build_version.hxx.in +1 -1
  5. data/ext/cmake/Testing.cmake +1 -0
  6. data/ext/cmake/ThirdPartyDependencies.cmake +6 -0
  7. data/ext/cmake/VersionInfo.cmake +3 -0
  8. data/ext/couchbase/bucket.hxx +47 -28
  9. data/ext/couchbase/cbsasl/client.h +1 -1
  10. data/ext/couchbase/cbsasl/context.cc +1 -1
  11. data/ext/couchbase/cbsasl/context.h +3 -3
  12. data/ext/couchbase/cbsasl/mechanism.cc +5 -8
  13. data/ext/couchbase/cbsasl/mechanism.h +1 -4
  14. data/ext/couchbase/cbsasl/plain/plain.cc +1 -1
  15. data/ext/couchbase/cbsasl/scram-sha/scram-sha.cc +30 -36
  16. data/ext/couchbase/cluster.hxx +40 -22
  17. data/ext/couchbase/cluster_options.hxx +7 -1
  18. data/ext/couchbase/configuration.hxx +37 -16
  19. data/ext/couchbase/couchbase.cxx +1145 -291
  20. data/ext/couchbase/error_map.hxx +1 -1
  21. data/ext/couchbase/errors.hxx +25 -17
  22. data/ext/couchbase/io/dns_client.hxx +3 -3
  23. data/ext/couchbase/io/dns_codec.hxx +4 -5
  24. data/ext/couchbase/io/dns_config.hxx +5 -6
  25. data/ext/couchbase/io/dns_message.hxx +3 -3
  26. data/ext/couchbase/io/http_command.hxx +70 -35
  27. data/ext/couchbase/io/http_session.hxx +4 -3
  28. data/ext/couchbase/io/http_session_manager.hxx +28 -19
  29. data/ext/couchbase/io/mcbp_command.hxx +51 -19
  30. data/ext/couchbase/io/mcbp_context.hxx +1 -1
  31. data/ext/couchbase/io/mcbp_parser.hxx +4 -4
  32. data/ext/couchbase/io/mcbp_session.hxx +91 -101
  33. data/ext/couchbase/io/query_cache.hxx +2 -2
  34. data/ext/couchbase/io/retry_orchestrator.hxx +2 -4
  35. data/ext/couchbase/io/retry_reason.hxx +2 -2
  36. data/ext/couchbase/io/retry_strategy.hxx +1 -6
  37. data/ext/couchbase/io/streams.hxx +7 -7
  38. data/ext/couchbase/metrics/logging_meter.hxx +228 -0
  39. data/ext/couchbase/metrics/logging_meter_options.hxx +28 -0
  40. data/ext/couchbase/metrics/meter.hxx +49 -0
  41. data/ext/couchbase/metrics/noop_meter.hxx +43 -0
  42. data/ext/couchbase/operations.hxx +4 -0
  43. data/ext/couchbase/operations/analytics_dataset_create.hxx +16 -12
  44. data/ext/couchbase/operations/analytics_dataset_drop.hxx +11 -11
  45. data/ext/couchbase/operations/analytics_dataset_get_all.hxx +6 -6
  46. data/ext/couchbase/operations/analytics_dataverse_create.hxx +10 -11
  47. data/ext/couchbase/operations/analytics_dataverse_drop.hxx +10 -11
  48. data/ext/couchbase/operations/analytics_get_pending_mutations.hxx +9 -11
  49. data/ext/couchbase/operations/analytics_index_create.hxx +14 -13
  50. data/ext/couchbase/operations/analytics_index_drop.hxx +18 -12
  51. data/ext/couchbase/operations/analytics_index_get_all.hxx +8 -6
  52. data/ext/couchbase/operations/analytics_link.hxx +39 -0
  53. data/ext/couchbase/operations/analytics_link_azure_blob_external.hxx +145 -0
  54. data/ext/couchbase/operations/analytics_link_connect.hxx +14 -12
  55. data/ext/couchbase/operations/analytics_link_couchbase_remote.hxx +220 -0
  56. data/ext/couchbase/operations/analytics_link_create.hxx +128 -0
  57. data/ext/couchbase/operations/analytics_link_disconnect.hxx +11 -12
  58. data/ext/couchbase/operations/analytics_link_drop.hxx +130 -0
  59. data/ext/couchbase/operations/analytics_link_get_all.hxx +160 -0
  60. data/ext/couchbase/operations/analytics_link_replace.hxx +128 -0
  61. data/ext/couchbase/operations/analytics_link_s3_external.hxx +122 -0
  62. data/ext/couchbase/operations/bucket_create.hxx +8 -8
  63. data/ext/couchbase/operations/bucket_drop.hxx +5 -5
  64. data/ext/couchbase/operations/bucket_flush.hxx +5 -5
  65. data/ext/couchbase/operations/bucket_get.hxx +7 -7
  66. data/ext/couchbase/operations/bucket_get_all.hxx +7 -5
  67. data/ext/couchbase/operations/bucket_settings.hxx +40 -49
  68. data/ext/couchbase/operations/bucket_update.hxx +8 -8
  69. data/ext/couchbase/operations/cluster_developer_preview_enable.hxx +7 -7
  70. data/ext/couchbase/operations/collection_create.hxx +11 -11
  71. data/ext/couchbase/operations/collection_drop.hxx +12 -10
  72. data/ext/couchbase/operations/collections_manifest_get.hxx +3 -3
  73. data/ext/couchbase/operations/design_document.hxx +2 -2
  74. data/ext/couchbase/operations/document_analytics.hxx +29 -36
  75. data/ext/couchbase/operations/document_append.hxx +3 -3
  76. data/ext/couchbase/operations/document_decrement.hxx +3 -3
  77. data/ext/couchbase/operations/document_exists.hxx +2 -2
  78. data/ext/couchbase/operations/document_get.hxx +3 -3
  79. data/ext/couchbase/operations/document_get_and_lock.hxx +5 -3
  80. data/ext/couchbase/operations/document_get_and_touch.hxx +5 -3
  81. data/ext/couchbase/operations/document_get_projected.hxx +10 -11
  82. data/ext/couchbase/operations/document_increment.hxx +3 -3
  83. data/ext/couchbase/operations/document_insert.hxx +3 -3
  84. data/ext/couchbase/operations/document_lookup_in.hxx +12 -18
  85. data/ext/couchbase/operations/document_mutate_in.hxx +13 -18
  86. data/ext/couchbase/operations/document_prepend.hxx +3 -3
  87. data/ext/couchbase/operations/document_query.hxx +39 -41
  88. data/ext/couchbase/operations/document_remove.hxx +3 -3
  89. data/ext/couchbase/operations/document_replace.hxx +3 -3
  90. data/ext/couchbase/operations/document_search.hxx +56 -61
  91. data/ext/couchbase/operations/document_touch.hxx +3 -3
  92. data/ext/couchbase/operations/document_unlock.hxx +3 -3
  93. data/ext/couchbase/operations/document_upsert.hxx +3 -3
  94. data/ext/couchbase/operations/document_view.hxx +23 -23
  95. data/ext/couchbase/operations/group_drop.hxx +5 -5
  96. data/ext/couchbase/operations/group_get.hxx +7 -7
  97. data/ext/couchbase/operations/group_get_all.hxx +6 -6
  98. data/ext/couchbase/operations/group_upsert.hxx +11 -11
  99. data/ext/couchbase/operations/http_noop.hxx +6 -6
  100. data/ext/couchbase/operations/mcbp_noop.hxx +3 -3
  101. data/ext/couchbase/operations/query_index_build_deferred.hxx +6 -6
  102. data/ext/couchbase/operations/query_index_create.hxx +10 -8
  103. data/ext/couchbase/operations/query_index_drop.hxx +8 -8
  104. data/ext/couchbase/operations/query_index_get_all.hxx +43 -39
  105. data/ext/couchbase/operations/rbac.hxx +40 -63
  106. data/ext/couchbase/operations/role_get_all.hxx +6 -6
  107. data/ext/couchbase/operations/scope_create.hxx +10 -10
  108. data/ext/couchbase/operations/scope_drop.hxx +9 -9
  109. data/ext/couchbase/operations/scope_get_all.hxx +8 -8
  110. data/ext/couchbase/operations/search_get_stats.hxx +5 -3
  111. data/ext/couchbase/operations/search_index.hxx +6 -15
  112. data/ext/couchbase/operations/search_index_analyze_document.hxx +11 -11
  113. data/ext/couchbase/operations/search_index_control_ingest.hxx +9 -9
  114. data/ext/couchbase/operations/search_index_control_plan_freeze.hxx +9 -9
  115. data/ext/couchbase/operations/search_index_control_query.hxx +9 -9
  116. data/ext/couchbase/operations/search_index_drop.hxx +11 -9
  117. data/ext/couchbase/operations/search_index_get.hxx +11 -9
  118. data/ext/couchbase/operations/search_index_get_all.hxx +11 -11
  119. data/ext/couchbase/operations/search_index_get_documents_count.hxx +10 -10
  120. data/ext/couchbase/operations/search_index_get_stats.hxx +10 -8
  121. data/ext/couchbase/operations/search_index_upsert.hxx +12 -10
  122. data/ext/couchbase/operations/user_drop.hxx +5 -5
  123. data/ext/couchbase/operations/user_get.hxx +7 -7
  124. data/ext/couchbase/operations/user_get_all.hxx +6 -6
  125. data/ext/couchbase/operations/user_upsert.hxx +9 -9
  126. data/ext/couchbase/operations/view_index_drop.hxx +10 -10
  127. data/ext/couchbase/operations/view_index_get.hxx +13 -15
  128. data/ext/couchbase/operations/view_index_get_all.hxx +17 -20
  129. data/ext/couchbase/operations/view_index_upsert.hxx +9 -7
  130. data/ext/couchbase/origin.hxx +14 -10
  131. data/ext/couchbase/platform/backtrace.c +1 -1
  132. data/ext/couchbase/platform/base64.cc +5 -5
  133. data/ext/couchbase/platform/base64.h +2 -5
  134. data/ext/couchbase/protocol/client_opcode.hxx +7 -4
  135. data/ext/couchbase/protocol/client_request.hxx +2 -2
  136. data/ext/couchbase/protocol/client_response.hxx +41 -16
  137. data/ext/couchbase/protocol/cmd_append.hxx +17 -16
  138. data/ext/couchbase/protocol/cmd_cluster_map_change_notification.hxx +4 -4
  139. data/ext/couchbase/protocol/cmd_decrement.hxx +10 -11
  140. data/ext/couchbase/protocol/cmd_exists.hxx +12 -15
  141. data/ext/couchbase/protocol/cmd_get.hxx +11 -14
  142. data/ext/couchbase/protocol/cmd_get_and_lock.hxx +10 -12
  143. data/ext/couchbase/protocol/cmd_get_and_touch.hxx +10 -12
  144. data/ext/couchbase/protocol/cmd_get_cluster_config.hxx +13 -18
  145. data/ext/couchbase/protocol/cmd_get_collection_id.hxx +12 -15
  146. data/ext/couchbase/protocol/cmd_get_collections_manifest.hxx +12 -16
  147. data/ext/couchbase/protocol/cmd_get_error_map.hxx +14 -17
  148. data/ext/couchbase/protocol/cmd_hello.hxx +8 -10
  149. data/ext/couchbase/protocol/cmd_increment.hxx +9 -10
  150. data/ext/couchbase/protocol/cmd_insert.hxx +9 -9
  151. data/ext/couchbase/protocol/cmd_lookup_in.hxx +12 -13
  152. data/ext/couchbase/protocol/cmd_mutate_in.hxx +11 -11
  153. data/ext/couchbase/protocol/cmd_noop.hxx +16 -20
  154. data/ext/couchbase/protocol/cmd_prepend.hxx +9 -10
  155. data/ext/couchbase/protocol/cmd_remove.hxx +10 -13
  156. data/ext/couchbase/protocol/cmd_replace.hxx +7 -7
  157. data/ext/couchbase/protocol/cmd_sasl_auth.hxx +8 -10
  158. data/ext/couchbase/protocol/cmd_sasl_list_mechs.hxx +10 -15
  159. data/ext/couchbase/protocol/cmd_sasl_step.hxx +10 -12
  160. data/ext/couchbase/protocol/cmd_select_bucket.hxx +14 -18
  161. data/ext/couchbase/protocol/cmd_touch.hxx +8 -11
  162. data/ext/couchbase/protocol/cmd_unlock.hxx +10 -14
  163. data/ext/couchbase/protocol/cmd_upsert.hxx +8 -8
  164. data/ext/couchbase/protocol/datatype.hxx +3 -3
  165. data/ext/couchbase/protocol/durability_level.hxx +2 -2
  166. data/ext/couchbase/protocol/frame_info_id.hxx +4 -4
  167. data/ext/couchbase/protocol/hello_feature.hxx +2 -2
  168. data/ext/couchbase/protocol/magic.hxx +2 -2
  169. data/ext/couchbase/protocol/server_opcode.hxx +2 -2
  170. data/ext/couchbase/protocol/server_request.hxx +1 -1
  171. data/ext/couchbase/protocol/status.hxx +4 -7
  172. data/ext/couchbase/protocol/unsigned_leb128.h +5 -20
  173. data/ext/couchbase/service_type.hxx +4 -4
  174. data/ext/couchbase/tracing/constants.hxx +261 -0
  175. data/ext/couchbase/tracing/noop_tracer.hxx +50 -0
  176. data/ext/couchbase/tracing/request_tracer.hxx +77 -0
  177. data/ext/couchbase/tracing/threshold_logging_options.hxx +64 -0
  178. data/ext/couchbase/tracing/threshold_logging_tracer.hxx +366 -0
  179. data/ext/couchbase/utils/byteswap.hxx +1 -1
  180. data/ext/couchbase/utils/connection_string.hxx +21 -1
  181. data/ext/couchbase/utils/name_codec.hxx +41 -0
  182. data/ext/couchbase/utils/url_codec.hxx +236 -0
  183. data/ext/couchbase/version.hxx +1 -1
  184. data/ext/test/CMakeLists.txt +1 -0
  185. data/ext/test/test_native_trivial_query.cxx +60 -0
  186. data/ext/third_party/hdr_histogram_c/CMakeLists.txt +84 -0
  187. data/ext/third_party/hdr_histogram_c/COPYING.txt +121 -0
  188. data/ext/third_party/hdr_histogram_c/LICENSE.txt +41 -0
  189. data/ext/third_party/hdr_histogram_c/config.cmake.in +6 -0
  190. data/ext/third_party/hdr_histogram_c/src/CMakeLists.txt +83 -0
  191. data/ext/third_party/hdr_histogram_c/src/hdr_atomic.h +146 -0
  192. data/ext/third_party/hdr_histogram_c/src/hdr_encoding.c +322 -0
  193. data/ext/third_party/hdr_histogram_c/src/hdr_encoding.h +79 -0
  194. data/ext/third_party/hdr_histogram_c/src/hdr_endian.h +116 -0
  195. data/ext/third_party/hdr_histogram_c/src/hdr_histogram.c +1196 -0
  196. data/ext/third_party/hdr_histogram_c/src/hdr_histogram.h +516 -0
  197. data/ext/third_party/hdr_histogram_c/src/hdr_histogram_log.c +1290 -0
  198. data/ext/third_party/hdr_histogram_c/src/hdr_histogram_log.h +236 -0
  199. data/ext/third_party/hdr_histogram_c/src/hdr_histogram_log_no_op.c +171 -0
  200. data/ext/third_party/hdr_histogram_c/src/hdr_interval_recorder.c +227 -0
  201. data/ext/third_party/hdr_histogram_c/src/hdr_interval_recorder.h +109 -0
  202. data/ext/third_party/hdr_histogram_c/src/hdr_malloc.h +19 -0
  203. data/ext/third_party/hdr_histogram_c/src/hdr_tests.h +22 -0
  204. data/ext/third_party/hdr_histogram_c/src/hdr_thread.c +108 -0
  205. data/ext/third_party/hdr_histogram_c/src/hdr_thread.h +55 -0
  206. data/ext/third_party/hdr_histogram_c/src/hdr_time.c +98 -0
  207. data/ext/third_party/hdr_histogram_c/src/hdr_time.h +49 -0
  208. data/ext/third_party/hdr_histogram_c/src/hdr_writer_reader_phaser.c +143 -0
  209. data/ext/third_party/hdr_histogram_c/src/hdr_writer_reader_phaser.h +51 -0
  210. data/lib/couchbase/cluster.rb +1 -0
  211. data/lib/couchbase/errors.rb +3 -0
  212. data/lib/couchbase/libcouchbase.bundle +0 -0
  213. data/lib/couchbase/management/analytics_index_manager.rb +920 -226
  214. data/lib/couchbase/management/bucket_manager.rb +207 -69
  215. data/lib/couchbase/management/collection_manager.rb +173 -61
  216. data/lib/couchbase/management/query_index_manager.rb +357 -169
  217. data/lib/couchbase/options.rb +75 -3
  218. data/lib/couchbase/scope.rb +102 -0
  219. data/lib/couchbase/utils/time.rb +4 -0
  220. data/lib/couchbase/version.rb +6 -6
  221. metadata +48 -5
@@ -100,6 +100,10 @@
100
100
  #include <operations/analytics_index_drop.hxx>
101
101
  #include <operations/analytics_link_connect.hxx>
102
102
  #include <operations/analytics_link_disconnect.hxx>
103
+ #include <operations/analytics_link_create.hxx>
104
+ #include <operations/analytics_link_replace.hxx>
105
+ #include <operations/analytics_link_drop.hxx>
106
+ #include <operations/analytics_link_get_all.hxx>
103
107
 
104
108
  #include <operations/view_index_get_all.hxx>
105
109
  #include <operations/view_index_get.hxx>
@@ -20,6 +20,7 @@
20
20
  #include <tao/json.hpp>
21
21
 
22
22
  #include <error_context/http.hxx>
23
+ #include <utils/name_codec.hxx>
23
24
  #include <version.hxx>
24
25
 
25
26
  namespace couchbase::operations
@@ -54,15 +55,19 @@ struct analytics_dataset_create_request {
54
55
 
55
56
  bool ignore_if_exists{ false };
56
57
 
57
- [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */)
58
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */) const
58
59
  {
59
60
  std::string where_clause = condition ? fmt::format("WHERE {}", *condition) : "";
60
61
  std::string if_not_exists_clause = ignore_if_exists ? "IF NOT EXISTS" : "";
61
62
 
62
63
  tao::json::value body{
63
64
  { "statement",
64
- fmt::format(
65
- "CREATE DATASET {} `{}`.`{}` ON `{}` {}", if_not_exists_clause, dataverse_name, dataset_name, bucket_name, where_clause) },
65
+ fmt::format("CREATE DATASET {} {}.`{}` ON `{}` {}",
66
+ if_not_exists_clause,
67
+ utils::analytics::uncompound_name(dataverse_name),
68
+ dataset_name,
69
+ bucket_name,
70
+ where_clause) },
66
71
  };
67
72
  encoded.headers["content-type"] = "application/json";
68
73
  encoded.method = "POST";
@@ -74,16 +79,16 @@ struct analytics_dataset_create_request {
74
79
 
75
80
  analytics_dataset_create_response
76
81
  make_response(error_context::http&& ctx,
77
- analytics_dataset_create_request& /* request */,
82
+ const analytics_dataset_create_request& /* request */,
78
83
  analytics_dataset_create_request::encoded_response_type&& encoded)
79
84
  {
80
- analytics_dataset_create_response response{ ctx };
85
+ analytics_dataset_create_response response{ std::move(ctx) };
81
86
  if (!response.ctx.ec) {
82
87
  tao::json::value payload{};
83
88
  try {
84
89
  payload = tao::json::from_string(encoded.body);
85
- } catch (tao::json::pegtl::parse_error& e) {
86
- response.ctx.ec = std::make_error_code(error::common_errc::parsing_failure);
90
+ } catch (const tao::json::pegtl::parse_error& e) {
91
+ response.ctx.ec = error::common_errc::parsing_failure;
87
92
  return response;
88
93
  }
89
94
  response.status = payload.at("status").get_string();
@@ -92,8 +97,7 @@ make_response(error_context::http&& ctx,
92
97
  bool dataset_exists = false;
93
98
  bool link_not_found = false;
94
99
 
95
- auto* errors = payload.find("errors");
96
- if (errors != nullptr && errors->is_array()) {
100
+ if (auto* errors = payload.find("errors"); errors != nullptr && errors->is_array()) {
97
101
  for (const auto& error : errors->get_array()) {
98
102
  analytics_dataset_create_response::problem err{
99
103
  error.at("code").as<std::uint32_t>(),
@@ -111,11 +115,11 @@ make_response(error_context::http&& ctx,
111
115
  }
112
116
  }
113
117
  if (dataset_exists) {
114
- response.ctx.ec = std::make_error_code(error::analytics_errc::dataset_exists);
118
+ response.ctx.ec = error::analytics_errc::dataset_exists;
115
119
  } else if (link_not_found) {
116
- response.ctx.ec = std::make_error_code(error::analytics_errc::link_not_found);
120
+ response.ctx.ec = error::analytics_errc::link_not_found;
117
121
  } else {
118
- response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
122
+ response.ctx.ec = error::common_errc::internal_server_failure;
119
123
  }
120
124
  }
121
125
  }
@@ -19,7 +19,7 @@
19
19
 
20
20
  #include <tao/json.hpp>
21
21
 
22
- #include <version.hxx>
22
+ #include <utils/name_codec.hxx>
23
23
 
24
24
  namespace couchbase::operations
25
25
  {
@@ -50,12 +50,13 @@ struct analytics_dataset_drop_request {
50
50
 
51
51
  bool ignore_if_does_not_exist{ false };
52
52
 
53
- [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */)
53
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */) const
54
54
  {
55
55
  std::string if_exists_clause = ignore_if_does_not_exist ? "IF EXISTS" : "";
56
56
 
57
57
  tao::json::value body{
58
- { "statement", fmt::format("DROP DATASET `{}`.`{}` {}", dataverse_name, dataset_name, if_exists_clause) },
58
+ { "statement",
59
+ fmt::format("DROP DATASET {}.`{}` {}", utils::analytics::uncompound_name(dataverse_name), dataset_name, if_exists_clause) },
59
60
  };
60
61
  encoded.headers["content-type"] = "application/json";
61
62
  encoded.method = "POST";
@@ -67,16 +68,16 @@ struct analytics_dataset_drop_request {
67
68
 
68
69
  analytics_dataset_drop_response
69
70
  make_response(error_context::http&& ctx,
70
- analytics_dataset_drop_request& /* request */,
71
+ const analytics_dataset_drop_request& /* request */,
71
72
  analytics_dataset_drop_request::encoded_response_type&& encoded)
72
73
  {
73
- analytics_dataset_drop_response response{ ctx };
74
+ analytics_dataset_drop_response response{ std::move(ctx) };
74
75
  if (!response.ctx.ec) {
75
76
  tao::json::value payload{};
76
77
  try {
77
78
  payload = tao::json::from_string(encoded.body);
78
- } catch (tao::json::pegtl::parse_error& e) {
79
- response.ctx.ec = std::make_error_code(error::common_errc::parsing_failure);
79
+ } catch (const tao::json::pegtl::parse_error& e) {
80
+ response.ctx.ec = error::common_errc::parsing_failure;
80
81
  return response;
81
82
  }
82
83
  response.status = payload.at("status").get_string();
@@ -84,8 +85,7 @@ make_response(error_context::http&& ctx,
84
85
  if (response.status != "success") {
85
86
  bool dataset_does_not_exist = false;
86
87
 
87
- auto* errors = payload.find("errors");
88
- if (errors != nullptr && errors->is_array()) {
88
+ if (auto* errors = payload.find("errors"); errors != nullptr && errors->is_array()) {
89
89
  for (const auto& error : errors->get_array()) {
90
90
  analytics_dataset_drop_response::problem err{
91
91
  error.at("code").as<std::uint32_t>(),
@@ -100,9 +100,9 @@ make_response(error_context::http&& ctx,
100
100
  }
101
101
  }
102
102
  if (dataset_does_not_exist) {
103
- response.ctx.ec = std::make_error_code(error::analytics_errc::dataset_not_found);
103
+ response.ctx.ec = error::analytics_errc::dataset_not_found;
104
104
  } else {
105
- response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
105
+ response.ctx.ec = error::common_errc::internal_server_failure;
106
106
  }
107
107
  }
108
108
  }
@@ -53,7 +53,7 @@ struct analytics_dataset_get_all_request {
53
53
  std::string client_context_id{ uuid::to_string(uuid::random()) };
54
54
  std::chrono::milliseconds timeout{ timeout_defaults::management_timeout };
55
55
 
56
- [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */)
56
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */) const
57
57
  {
58
58
  tao::json::value body{
59
59
  { "statement", "SELECT d.* FROM Metadata.`Dataset` d WHERE d.DataverseName <> \"Metadata\"" },
@@ -68,17 +68,17 @@ struct analytics_dataset_get_all_request {
68
68
 
69
69
  analytics_dataset_get_all_response
70
70
  make_response(error_context::http&& ctx,
71
- analytics_dataset_get_all_request& /* request */,
71
+ const analytics_dataset_get_all_request& /* request */,
72
72
  analytics_dataset_get_all_request::encoded_response_type&& encoded)
73
73
  {
74
- analytics_dataset_get_all_response response{ ctx };
74
+ analytics_dataset_get_all_response response{ std::move(ctx) };
75
75
 
76
76
  if (!response.ctx.ec) {
77
77
  tao::json::value payload{};
78
78
  try {
79
79
  payload = tao::json::from_string(encoded.body);
80
- } catch (tao::json::pegtl::parse_error& e) {
81
- response.ctx.ec = std::make_error_code(error::common_errc::parsing_failure);
80
+ } catch (const tao::json::pegtl::parse_error& e) {
81
+ response.ctx.ec = error::common_errc::parsing_failure;
82
82
  return response;
83
83
  }
84
84
  response.status = payload.at("status").get_string();
@@ -105,7 +105,7 @@ make_response(error_context::http&& ctx,
105
105
  response.errors.emplace_back(err);
106
106
  }
107
107
  }
108
- response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
108
+ response.ctx.ec = error::common_errc::internal_server_failure;
109
109
  }
110
110
  }
111
111
  return response;
@@ -20,7 +20,7 @@
20
20
  #include <tao/json.hpp>
21
21
 
22
22
  #include <error_context/http.hxx>
23
- #include <version.hxx>
23
+ #include <utils/name_codec.hxx>
24
24
 
25
25
  namespace couchbase::operations
26
26
  {
@@ -50,12 +50,12 @@ struct analytics_dataverse_create_request {
50
50
 
51
51
  bool ignore_if_exists{ false };
52
52
 
53
- [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */)
53
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */) const
54
54
  {
55
55
  std::string if_not_exists_clause = ignore_if_exists ? "IF NOT EXISTS" : "";
56
56
 
57
57
  tao::json::value body{
58
- { "statement", fmt::format("CREATE DATAVERSE `{}` {}", dataverse_name, if_not_exists_clause) },
58
+ { "statement", fmt::format("CREATE DATAVERSE {} {}", utils::analytics::uncompound_name(dataverse_name), if_not_exists_clause) },
59
59
  };
60
60
  encoded.headers["content-type"] = "application/json";
61
61
  encoded.method = "POST";
@@ -67,16 +67,16 @@ struct analytics_dataverse_create_request {
67
67
 
68
68
  analytics_dataverse_create_response
69
69
  make_response(error_context::http&& ctx,
70
- analytics_dataverse_create_request& /* request */,
70
+ const analytics_dataverse_create_request& /* request */,
71
71
  analytics_dataverse_create_request::encoded_response_type&& encoded)
72
72
  {
73
- analytics_dataverse_create_response response{ ctx };
73
+ analytics_dataverse_create_response response{ std::move(ctx) };
74
74
  if (!response.ctx.ec) {
75
75
  tao::json::value payload{};
76
76
  try {
77
77
  payload = tao::json::from_string(encoded.body);
78
- } catch (tao::json::pegtl::parse_error& e) {
79
- response.ctx.ec = std::make_error_code(error::common_errc::parsing_failure);
78
+ } catch (const tao::json::pegtl::parse_error& e) {
79
+ response.ctx.ec = error::common_errc::parsing_failure;
80
80
  return response;
81
81
  }
82
82
  response.status = payload.at("status").get_string();
@@ -84,8 +84,7 @@ make_response(error_context::http&& ctx,
84
84
  if (response.status != "success") {
85
85
  bool dataverse_exists = false;
86
86
 
87
- auto* errors = payload.find("errors");
88
- if (errors != nullptr && errors->is_array()) {
87
+ if (auto* errors = payload.find("errors"); errors != nullptr && errors->is_array()) {
89
88
  for (const auto& error : errors->get_array()) {
90
89
  analytics_dataverse_create_response::problem err{
91
90
  error.at("code").as<std::uint32_t>(),
@@ -100,9 +99,9 @@ make_response(error_context::http&& ctx,
100
99
  }
101
100
  }
102
101
  if (dataverse_exists) {
103
- response.ctx.ec = std::make_error_code(error::analytics_errc::dataverse_exists);
102
+ response.ctx.ec = error::analytics_errc::dataverse_exists;
104
103
  } else {
105
- response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
104
+ response.ctx.ec = error::common_errc::internal_server_failure;
106
105
  }
107
106
  }
108
107
  }
@@ -19,7 +19,7 @@
19
19
 
20
20
  #include <tao/json.hpp>
21
21
 
22
- #include <version.hxx>
22
+ #include <utils/name_codec.hxx>
23
23
 
24
24
  namespace couchbase::operations
25
25
  {
@@ -49,12 +49,12 @@ struct analytics_dataverse_drop_request {
49
49
 
50
50
  bool ignore_if_does_not_exist{ false };
51
51
 
52
- [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */)
52
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */) const
53
53
  {
54
54
  std::string if_exists_clause = ignore_if_does_not_exist ? "IF EXISTS" : "";
55
55
 
56
56
  tao::json::value body{
57
- { "statement", fmt::format("DROP DATAVERSE `{}` {}", dataverse_name, if_exists_clause) },
57
+ { "statement", fmt::format("DROP DATAVERSE {} {}", utils::analytics::uncompound_name(dataverse_name), if_exists_clause) },
58
58
  };
59
59
  encoded.headers["content-type"] = "application/json";
60
60
  encoded.method = "POST";
@@ -66,16 +66,16 @@ struct analytics_dataverse_drop_request {
66
66
 
67
67
  analytics_dataverse_drop_response
68
68
  make_response(error_context::http&& ctx,
69
- analytics_dataverse_drop_request& /* request */,
69
+ const analytics_dataverse_drop_request& /* request */,
70
70
  analytics_dataverse_drop_request::encoded_response_type&& encoded)
71
71
  {
72
- analytics_dataverse_drop_response response{ ctx };
72
+ analytics_dataverse_drop_response response{ std::move(ctx) };
73
73
  if (!response.ctx.ec) {
74
74
  tao::json::value payload{};
75
75
  try {
76
76
  payload = tao::json::from_string(encoded.body);
77
- } catch (tao::json::pegtl::parse_error& e) {
78
- response.ctx.ec = std::make_error_code(error::common_errc::parsing_failure);
77
+ } catch (const tao::json::pegtl::parse_error& e) {
78
+ response.ctx.ec = error::common_errc::parsing_failure;
79
79
  return response;
80
80
  }
81
81
  response.status = payload.at("status").get_string();
@@ -83,8 +83,7 @@ make_response(error_context::http&& ctx,
83
83
  if (response.status != "success") {
84
84
  bool dataverse_does_not_exist = false;
85
85
 
86
- auto* errors = payload.find("errors");
87
- if (errors != nullptr && errors->is_array()) {
86
+ if (auto* errors = payload.find("errors"); errors != nullptr && errors->is_array()) {
88
87
  for (const auto& error : errors->get_array()) {
89
88
  analytics_dataverse_drop_response::problem err{
90
89
  error.at("code").as<std::uint32_t>(),
@@ -99,9 +98,9 @@ make_response(error_context::http&& ctx,
99
98
  }
100
99
  }
101
100
  if (dataverse_does_not_exist) {
102
- response.ctx.ec = std::make_error_code(error::analytics_errc::dataverse_not_found);
101
+ response.ctx.ec = error::analytics_errc::dataverse_not_found;
103
102
  } else {
104
- response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
103
+ response.ctx.ec = error::common_errc::internal_server_failure;
105
104
  }
106
105
  }
107
106
  }
@@ -47,7 +47,7 @@ struct analytics_get_pending_mutations_request {
47
47
  std::string client_context_id{ uuid::to_string(uuid::random()) };
48
48
  std::chrono::milliseconds timeout{ timeout_defaults::management_timeout };
49
49
 
50
- [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */)
50
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */) const
51
51
  {
52
52
  encoded.method = "GET";
53
53
  encoded.path = "/analytics/node/agg/stats/remaining";
@@ -57,25 +57,23 @@ struct analytics_get_pending_mutations_request {
57
57
 
58
58
  analytics_get_pending_mutations_response
59
59
  make_response(error_context::http&& ctx,
60
- analytics_get_pending_mutations_request& /* request */,
60
+ const analytics_get_pending_mutations_request& /* request */,
61
61
  analytics_get_pending_mutations_request::encoded_response_type&& encoded)
62
62
  {
63
- analytics_get_pending_mutations_response response{ ctx };
63
+ analytics_get_pending_mutations_response response{ std::move(ctx) };
64
64
  if (!response.ctx.ec) {
65
65
  tao::json::value payload{};
66
66
  try {
67
67
  payload = tao::json::from_string(encoded.body);
68
- } catch (tao::json::pegtl::parse_error& e) {
69
- response.ctx.ec = std::make_error_code(error::common_errc::parsing_failure);
68
+ } catch (const tao::json::pegtl::parse_error& e) {
69
+ response.ctx.ec = error::common_errc::parsing_failure;
70
70
  return response;
71
71
  }
72
72
  if (encoded.status_code == 200) {
73
73
  if (payload.is_object()) {
74
- for (const auto& entry : payload.get_object()) {
75
- std::string dataverse = entry.first + ".";
76
- for (const auto& stats : entry.second.get_object()) {
77
- std::string dataset = dataverse + stats.first;
78
- response.stats.emplace(dataset, stats.second.get_unsigned());
74
+ for (const auto& [dataverse, entry] : payload.get_object()) {
75
+ for (const auto& [dataset, counter] : entry.get_object()) {
76
+ response.stats.try_emplace(fmt::format("{}.{}", dataverse, dataset), counter.get_unsigned());
79
77
  }
80
78
  }
81
79
  }
@@ -91,7 +89,7 @@ make_response(error_context::http&& ctx,
91
89
  response.errors.emplace_back(err);
92
90
  }
93
91
  }
94
- response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
92
+ response.ctx.ec = error::common_errc::internal_server_failure;
95
93
  }
96
94
  return response;
97
95
  }
@@ -52,13 +52,13 @@ struct analytics_index_create_request {
52
52
 
53
53
  bool ignore_if_exists{ false };
54
54
 
55
- [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
55
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */) const
56
56
  {
57
57
  std::string if_not_exists_clause = ignore_if_exists ? "IF NOT EXISTS" : "";
58
58
  std::vector<std::string> field_specs;
59
59
  field_specs.reserve(fields.size());
60
- for (const auto& entry : fields) {
61
- field_specs.emplace_back(entry.first + ": " + entry.second);
60
+ for (const auto& [field_name, field_type] : fields) {
61
+ field_specs.emplace_back(fmt::format("{}:{}", field_name, field_type));
62
62
  }
63
63
 
64
64
  tao::json::value body{
@@ -79,15 +79,17 @@ struct analytics_index_create_request {
79
79
  };
80
80
 
81
81
  analytics_index_create_response
82
- make_response(error_context::http&& ctx, analytics_index_create_request&, analytics_index_create_request::encoded_response_type&& encoded)
82
+ make_response(error_context::http&& ctx,
83
+ const analytics_index_create_request& /* request */,
84
+ analytics_index_create_request::encoded_response_type&& encoded)
83
85
  {
84
- analytics_index_create_response response{ ctx };
86
+ analytics_index_create_response response{ std::move(ctx) };
85
87
  if (!response.ctx.ec) {
86
88
  tao::json::value payload{};
87
89
  try {
88
90
  payload = tao::json::from_string(encoded.body);
89
- } catch (tao::json::pegtl::parse_error& e) {
90
- response.ctx.ec = std::make_error_code(error::common_errc::parsing_failure);
91
+ } catch (const tao::json::pegtl::parse_error& e) {
92
+ response.ctx.ec = error::common_errc::parsing_failure;
91
93
  return response;
92
94
  }
93
95
  response.status = payload.at("status").get_string();
@@ -97,8 +99,7 @@ make_response(error_context::http&& ctx, analytics_index_create_request&, analyt
97
99
  bool dataset_not_found = false;
98
100
  bool link_not_found = false;
99
101
 
100
- auto* errors = payload.find("errors");
101
- if (errors != nullptr && errors->is_array()) {
102
+ if (auto* errors = payload.find("errors"); errors != nullptr && errors->is_array()) {
102
103
  for (const auto& error : errors->get_array()) {
103
104
  analytics_index_create_response::problem err{
104
105
  error.at("code").as<std::uint32_t>(),
@@ -119,13 +120,13 @@ make_response(error_context::http&& ctx, analytics_index_create_request&, analyt
119
120
  }
120
121
  }
121
122
  if (index_exists) {
122
- response.ctx.ec = std::make_error_code(error::common_errc::index_exists);
123
+ response.ctx.ec = error::common_errc::index_exists;
123
124
  } else if (dataset_not_found) {
124
- response.ctx.ec = std::make_error_code(error::analytics_errc::dataset_not_found);
125
+ response.ctx.ec = error::analytics_errc::dataset_not_found;
125
126
  } else if (link_not_found) {
126
- response.ctx.ec = std::make_error_code(error::analytics_errc::link_not_found);
127
+ response.ctx.ec = error::analytics_errc::link_not_found;
127
128
  } else {
128
- response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
129
+ response.ctx.ec = error::common_errc::internal_server_failure;
129
130
  }
130
131
  }
131
132
  }
@@ -19,7 +19,7 @@
19
19
 
20
20
  #include <tao/json.hpp>
21
21
 
22
- #include <version.hxx>
22
+ #include <utils/name_codec.hxx>
23
23
 
24
24
  namespace couchbase::operations
25
25
  {
@@ -51,12 +51,17 @@ struct analytics_index_drop_request {
51
51
 
52
52
  bool ignore_if_does_not_exist{ false };
53
53
 
54
- [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
54
+ [[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */) const
55
55
  {
56
56
  std::string if_exists_clause = ignore_if_does_not_exist ? "IF EXISTS" : "";
57
57
 
58
58
  tao::json::value body{
59
- { "statement", fmt::format("DROP INDEX `{}`.`{}`.`{}` {}", dataverse_name, dataset_name, index_name, if_exists_clause) },
59
+ { "statement",
60
+ fmt::format("DROP INDEX {}.`{}`.`{}` {}",
61
+ utils::analytics::uncompound_name(dataverse_name),
62
+ dataset_name,
63
+ index_name,
64
+ if_exists_clause) },
60
65
  };
61
66
  encoded.headers["content-type"] = "application/json";
62
67
  encoded.method = "POST";
@@ -67,15 +72,17 @@ struct analytics_index_drop_request {
67
72
  };
68
73
 
69
74
  analytics_index_drop_response
70
- make_response(error_context::http&& ctx, analytics_index_drop_request&, analytics_index_drop_request::encoded_response_type&& encoded)
75
+ make_response(error_context::http&& ctx,
76
+ const analytics_index_drop_request& /* request */,
77
+ analytics_index_drop_request::encoded_response_type&& encoded)
71
78
  {
72
- analytics_index_drop_response response{ ctx };
79
+ analytics_index_drop_response response{ std::move(ctx) };
73
80
  if (!response.ctx.ec) {
74
81
  tao::json::value payload{};
75
82
  try {
76
83
  payload = tao::json::from_string(encoded.body);
77
- } catch (tao::json::pegtl::parse_error& e) {
78
- response.ctx.ec = std::make_error_code(error::common_errc::parsing_failure);
84
+ } catch (const tao::json::pegtl::parse_error& e) {
85
+ response.ctx.ec = error::common_errc::parsing_failure;
79
86
  return response;
80
87
  }
81
88
  response.status = payload.at("status").get_string();
@@ -84,8 +91,7 @@ make_response(error_context::http&& ctx, analytics_index_drop_request&, analytic
84
91
  bool index_does_not_exist = false;
85
92
  bool dataset_not_found = false;
86
93
 
87
- auto* errors = payload.find("errors");
88
- if (errors != nullptr && errors->is_array()) {
94
+ if (auto* errors = payload.find("errors"); errors != nullptr && errors->is_array()) {
89
95
  for (const auto& error : errors->get_array()) {
90
96
  analytics_index_drop_response::problem err{
91
97
  error.at("code").as<std::uint32_t>(),
@@ -103,11 +109,11 @@ make_response(error_context::http&& ctx, analytics_index_drop_request&, analytic
103
109
  }
104
110
  }
105
111
  if (index_does_not_exist) {
106
- response.ctx.ec = std::make_error_code(error::common_errc::index_not_found);
112
+ response.ctx.ec = error::common_errc::index_not_found;
107
113
  } else if (dataset_not_found) {
108
- response.ctx.ec = std::make_error_code(error::analytics_errc::dataset_not_found);
114
+ response.ctx.ec = error::analytics_errc::dataset_not_found;
109
115
  } else {
110
- response.ctx.ec = std::make_error_code(error::common_errc::internal_server_failure);
116
+ response.ctx.ec = error::common_errc::internal_server_failure;
111
117
  }
112
118
  }
113
119
  }