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.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/ext/CMakeLists.txt +3 -1
- data/ext/build_version.hxx.in +1 -1
- data/ext/cmake/Testing.cmake +1 -0
- data/ext/cmake/ThirdPartyDependencies.cmake +6 -0
- data/ext/cmake/VersionInfo.cmake +3 -0
- data/ext/couchbase/bucket.hxx +47 -28
- data/ext/couchbase/cbsasl/client.h +1 -1
- data/ext/couchbase/cbsasl/context.cc +1 -1
- data/ext/couchbase/cbsasl/context.h +3 -3
- data/ext/couchbase/cbsasl/mechanism.cc +5 -8
- data/ext/couchbase/cbsasl/mechanism.h +1 -4
- data/ext/couchbase/cbsasl/plain/plain.cc +1 -1
- data/ext/couchbase/cbsasl/scram-sha/scram-sha.cc +30 -36
- data/ext/couchbase/cluster.hxx +40 -22
- data/ext/couchbase/cluster_options.hxx +7 -1
- data/ext/couchbase/configuration.hxx +37 -16
- data/ext/couchbase/couchbase.cxx +1145 -291
- data/ext/couchbase/error_map.hxx +1 -1
- data/ext/couchbase/errors.hxx +25 -17
- data/ext/couchbase/io/dns_client.hxx +3 -3
- data/ext/couchbase/io/dns_codec.hxx +4 -5
- data/ext/couchbase/io/dns_config.hxx +5 -6
- data/ext/couchbase/io/dns_message.hxx +3 -3
- data/ext/couchbase/io/http_command.hxx +70 -35
- data/ext/couchbase/io/http_session.hxx +4 -3
- data/ext/couchbase/io/http_session_manager.hxx +28 -19
- data/ext/couchbase/io/mcbp_command.hxx +51 -19
- data/ext/couchbase/io/mcbp_context.hxx +1 -1
- data/ext/couchbase/io/mcbp_parser.hxx +4 -4
- data/ext/couchbase/io/mcbp_session.hxx +91 -101
- data/ext/couchbase/io/query_cache.hxx +2 -2
- data/ext/couchbase/io/retry_orchestrator.hxx +2 -4
- data/ext/couchbase/io/retry_reason.hxx +2 -2
- data/ext/couchbase/io/retry_strategy.hxx +1 -6
- data/ext/couchbase/io/streams.hxx +7 -7
- data/ext/couchbase/metrics/logging_meter.hxx +228 -0
- data/ext/couchbase/metrics/logging_meter_options.hxx +28 -0
- data/ext/couchbase/metrics/meter.hxx +49 -0
- data/ext/couchbase/metrics/noop_meter.hxx +43 -0
- data/ext/couchbase/operations.hxx +4 -0
- data/ext/couchbase/operations/analytics_dataset_create.hxx +16 -12
- data/ext/couchbase/operations/analytics_dataset_drop.hxx +11 -11
- data/ext/couchbase/operations/analytics_dataset_get_all.hxx +6 -6
- data/ext/couchbase/operations/analytics_dataverse_create.hxx +10 -11
- data/ext/couchbase/operations/analytics_dataverse_drop.hxx +10 -11
- data/ext/couchbase/operations/analytics_get_pending_mutations.hxx +9 -11
- data/ext/couchbase/operations/analytics_index_create.hxx +14 -13
- data/ext/couchbase/operations/analytics_index_drop.hxx +18 -12
- data/ext/couchbase/operations/analytics_index_get_all.hxx +8 -6
- data/ext/couchbase/operations/analytics_link.hxx +39 -0
- data/ext/couchbase/operations/analytics_link_azure_blob_external.hxx +145 -0
- data/ext/couchbase/operations/analytics_link_connect.hxx +14 -12
- data/ext/couchbase/operations/analytics_link_couchbase_remote.hxx +220 -0
- data/ext/couchbase/operations/analytics_link_create.hxx +128 -0
- data/ext/couchbase/operations/analytics_link_disconnect.hxx +11 -12
- data/ext/couchbase/operations/analytics_link_drop.hxx +130 -0
- data/ext/couchbase/operations/analytics_link_get_all.hxx +160 -0
- data/ext/couchbase/operations/analytics_link_replace.hxx +128 -0
- data/ext/couchbase/operations/analytics_link_s3_external.hxx +122 -0
- data/ext/couchbase/operations/bucket_create.hxx +8 -8
- data/ext/couchbase/operations/bucket_drop.hxx +5 -5
- data/ext/couchbase/operations/bucket_flush.hxx +5 -5
- data/ext/couchbase/operations/bucket_get.hxx +7 -7
- data/ext/couchbase/operations/bucket_get_all.hxx +7 -5
- data/ext/couchbase/operations/bucket_settings.hxx +40 -49
- data/ext/couchbase/operations/bucket_update.hxx +8 -8
- data/ext/couchbase/operations/cluster_developer_preview_enable.hxx +7 -7
- data/ext/couchbase/operations/collection_create.hxx +11 -11
- data/ext/couchbase/operations/collection_drop.hxx +12 -10
- data/ext/couchbase/operations/collections_manifest_get.hxx +3 -3
- data/ext/couchbase/operations/design_document.hxx +2 -2
- data/ext/couchbase/operations/document_analytics.hxx +29 -36
- data/ext/couchbase/operations/document_append.hxx +3 -3
- data/ext/couchbase/operations/document_decrement.hxx +3 -3
- data/ext/couchbase/operations/document_exists.hxx +2 -2
- data/ext/couchbase/operations/document_get.hxx +3 -3
- data/ext/couchbase/operations/document_get_and_lock.hxx +5 -3
- data/ext/couchbase/operations/document_get_and_touch.hxx +5 -3
- data/ext/couchbase/operations/document_get_projected.hxx +10 -11
- data/ext/couchbase/operations/document_increment.hxx +3 -3
- data/ext/couchbase/operations/document_insert.hxx +3 -3
- data/ext/couchbase/operations/document_lookup_in.hxx +12 -18
- data/ext/couchbase/operations/document_mutate_in.hxx +13 -18
- data/ext/couchbase/operations/document_prepend.hxx +3 -3
- data/ext/couchbase/operations/document_query.hxx +39 -41
- data/ext/couchbase/operations/document_remove.hxx +3 -3
- data/ext/couchbase/operations/document_replace.hxx +3 -3
- data/ext/couchbase/operations/document_search.hxx +56 -61
- data/ext/couchbase/operations/document_touch.hxx +3 -3
- data/ext/couchbase/operations/document_unlock.hxx +3 -3
- data/ext/couchbase/operations/document_upsert.hxx +3 -3
- data/ext/couchbase/operations/document_view.hxx +23 -23
- data/ext/couchbase/operations/group_drop.hxx +5 -5
- data/ext/couchbase/operations/group_get.hxx +7 -7
- data/ext/couchbase/operations/group_get_all.hxx +6 -6
- data/ext/couchbase/operations/group_upsert.hxx +11 -11
- data/ext/couchbase/operations/http_noop.hxx +6 -6
- data/ext/couchbase/operations/mcbp_noop.hxx +3 -3
- data/ext/couchbase/operations/query_index_build_deferred.hxx +6 -6
- data/ext/couchbase/operations/query_index_create.hxx +10 -8
- data/ext/couchbase/operations/query_index_drop.hxx +8 -8
- data/ext/couchbase/operations/query_index_get_all.hxx +43 -39
- data/ext/couchbase/operations/rbac.hxx +40 -63
- data/ext/couchbase/operations/role_get_all.hxx +6 -6
- data/ext/couchbase/operations/scope_create.hxx +10 -10
- data/ext/couchbase/operations/scope_drop.hxx +9 -9
- data/ext/couchbase/operations/scope_get_all.hxx +8 -8
- data/ext/couchbase/operations/search_get_stats.hxx +5 -3
- data/ext/couchbase/operations/search_index.hxx +6 -15
- data/ext/couchbase/operations/search_index_analyze_document.hxx +11 -11
- data/ext/couchbase/operations/search_index_control_ingest.hxx +9 -9
- data/ext/couchbase/operations/search_index_control_plan_freeze.hxx +9 -9
- data/ext/couchbase/operations/search_index_control_query.hxx +9 -9
- data/ext/couchbase/operations/search_index_drop.hxx +11 -9
- data/ext/couchbase/operations/search_index_get.hxx +11 -9
- data/ext/couchbase/operations/search_index_get_all.hxx +11 -11
- data/ext/couchbase/operations/search_index_get_documents_count.hxx +10 -10
- data/ext/couchbase/operations/search_index_get_stats.hxx +10 -8
- data/ext/couchbase/operations/search_index_upsert.hxx +12 -10
- data/ext/couchbase/operations/user_drop.hxx +5 -5
- data/ext/couchbase/operations/user_get.hxx +7 -7
- data/ext/couchbase/operations/user_get_all.hxx +6 -6
- data/ext/couchbase/operations/user_upsert.hxx +9 -9
- data/ext/couchbase/operations/view_index_drop.hxx +10 -10
- data/ext/couchbase/operations/view_index_get.hxx +13 -15
- data/ext/couchbase/operations/view_index_get_all.hxx +17 -20
- data/ext/couchbase/operations/view_index_upsert.hxx +9 -7
- data/ext/couchbase/origin.hxx +14 -10
- data/ext/couchbase/platform/backtrace.c +1 -1
- data/ext/couchbase/platform/base64.cc +5 -5
- data/ext/couchbase/platform/base64.h +2 -5
- data/ext/couchbase/protocol/client_opcode.hxx +7 -4
- data/ext/couchbase/protocol/client_request.hxx +2 -2
- data/ext/couchbase/protocol/client_response.hxx +41 -16
- data/ext/couchbase/protocol/cmd_append.hxx +17 -16
- data/ext/couchbase/protocol/cmd_cluster_map_change_notification.hxx +4 -4
- data/ext/couchbase/protocol/cmd_decrement.hxx +10 -11
- data/ext/couchbase/protocol/cmd_exists.hxx +12 -15
- data/ext/couchbase/protocol/cmd_get.hxx +11 -14
- data/ext/couchbase/protocol/cmd_get_and_lock.hxx +10 -12
- data/ext/couchbase/protocol/cmd_get_and_touch.hxx +10 -12
- data/ext/couchbase/protocol/cmd_get_cluster_config.hxx +13 -18
- data/ext/couchbase/protocol/cmd_get_collection_id.hxx +12 -15
- data/ext/couchbase/protocol/cmd_get_collections_manifest.hxx +12 -16
- data/ext/couchbase/protocol/cmd_get_error_map.hxx +14 -17
- data/ext/couchbase/protocol/cmd_hello.hxx +8 -10
- data/ext/couchbase/protocol/cmd_increment.hxx +9 -10
- data/ext/couchbase/protocol/cmd_insert.hxx +9 -9
- data/ext/couchbase/protocol/cmd_lookup_in.hxx +12 -13
- data/ext/couchbase/protocol/cmd_mutate_in.hxx +11 -11
- data/ext/couchbase/protocol/cmd_noop.hxx +16 -20
- data/ext/couchbase/protocol/cmd_prepend.hxx +9 -10
- data/ext/couchbase/protocol/cmd_remove.hxx +10 -13
- data/ext/couchbase/protocol/cmd_replace.hxx +7 -7
- data/ext/couchbase/protocol/cmd_sasl_auth.hxx +8 -10
- data/ext/couchbase/protocol/cmd_sasl_list_mechs.hxx +10 -15
- data/ext/couchbase/protocol/cmd_sasl_step.hxx +10 -12
- data/ext/couchbase/protocol/cmd_select_bucket.hxx +14 -18
- data/ext/couchbase/protocol/cmd_touch.hxx +8 -11
- data/ext/couchbase/protocol/cmd_unlock.hxx +10 -14
- data/ext/couchbase/protocol/cmd_upsert.hxx +8 -8
- data/ext/couchbase/protocol/datatype.hxx +3 -3
- data/ext/couchbase/protocol/durability_level.hxx +2 -2
- data/ext/couchbase/protocol/frame_info_id.hxx +4 -4
- data/ext/couchbase/protocol/hello_feature.hxx +2 -2
- data/ext/couchbase/protocol/magic.hxx +2 -2
- data/ext/couchbase/protocol/server_opcode.hxx +2 -2
- data/ext/couchbase/protocol/server_request.hxx +1 -1
- data/ext/couchbase/protocol/status.hxx +4 -7
- data/ext/couchbase/protocol/unsigned_leb128.h +5 -20
- data/ext/couchbase/service_type.hxx +4 -4
- data/ext/couchbase/tracing/constants.hxx +261 -0
- data/ext/couchbase/tracing/noop_tracer.hxx +50 -0
- data/ext/couchbase/tracing/request_tracer.hxx +77 -0
- data/ext/couchbase/tracing/threshold_logging_options.hxx +64 -0
- data/ext/couchbase/tracing/threshold_logging_tracer.hxx +366 -0
- data/ext/couchbase/utils/byteswap.hxx +1 -1
- data/ext/couchbase/utils/connection_string.hxx +21 -1
- data/ext/couchbase/utils/name_codec.hxx +41 -0
- data/ext/couchbase/utils/url_codec.hxx +236 -0
- data/ext/couchbase/version.hxx +1 -1
- data/ext/test/CMakeLists.txt +1 -0
- data/ext/test/test_native_trivial_query.cxx +60 -0
- data/ext/third_party/hdr_histogram_c/CMakeLists.txt +84 -0
- data/ext/third_party/hdr_histogram_c/COPYING.txt +121 -0
- data/ext/third_party/hdr_histogram_c/LICENSE.txt +41 -0
- data/ext/third_party/hdr_histogram_c/config.cmake.in +6 -0
- data/ext/third_party/hdr_histogram_c/src/CMakeLists.txt +83 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_atomic.h +146 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_encoding.c +322 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_encoding.h +79 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_endian.h +116 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_histogram.c +1196 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_histogram.h +516 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_histogram_log.c +1290 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_histogram_log.h +236 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_histogram_log_no_op.c +171 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_interval_recorder.c +227 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_interval_recorder.h +109 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_malloc.h +19 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_tests.h +22 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_thread.c +108 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_thread.h +55 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_time.c +98 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_time.h +49 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_writer_reader_phaser.c +143 -0
- data/ext/third_party/hdr_histogram_c/src/hdr_writer_reader_phaser.h +51 -0
- data/lib/couchbase/cluster.rb +1 -0
- data/lib/couchbase/errors.rb +3 -0
- data/lib/couchbase/libcouchbase.bundle +0 -0
- data/lib/couchbase/management/analytics_index_manager.rb +920 -226
- data/lib/couchbase/management/bucket_manager.rb +207 -69
- data/lib/couchbase/management/collection_manager.rb +173 -61
- data/lib/couchbase/management/query_index_manager.rb +357 -169
- data/lib/couchbase/options.rb +75 -3
- data/lib/couchbase/scope.rb +102 -0
- data/lib/couchbase/utils/time.rb +4 -0
- data/lib/couchbase/version.rb +6 -6
- metadata +48 -5
@@ -43,7 +43,7 @@ struct remove_request {
|
|
43
43
|
std::chrono::milliseconds timeout{ timeout_defaults::key_value_timeout };
|
44
44
|
io::retry_context<io::retry_strategy::best_effort> retries{ false };
|
45
45
|
|
46
|
-
[[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, mcbp_context&&)
|
46
|
+
[[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, mcbp_context&& /* context */) const
|
47
47
|
{
|
48
48
|
encoded.opaque(opaque);
|
49
49
|
encoded.partition(partition);
|
@@ -57,9 +57,9 @@ struct remove_request {
|
|
57
57
|
};
|
58
58
|
|
59
59
|
remove_response
|
60
|
-
make_response(error_context::key_value&& ctx, remove_request& request, remove_request::encoded_response_type&& encoded)
|
60
|
+
make_response(error_context::key_value&& ctx, const remove_request& request, remove_request::encoded_response_type&& encoded)
|
61
61
|
{
|
62
|
-
remove_response response{ ctx };
|
62
|
+
remove_response response{ std::move(ctx) };
|
63
63
|
if (!response.ctx.ec) {
|
64
64
|
response.cas = encoded.cas();
|
65
65
|
response.token = encoded.body().token();
|
@@ -48,7 +48,7 @@ struct replace_request {
|
|
48
48
|
io::retry_context<io::retry_strategy::best_effort> retries{ false };
|
49
49
|
bool preserve_expiry{ false };
|
50
50
|
|
51
|
-
[[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, mcbp_context&&)
|
51
|
+
[[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, mcbp_context&& /* context */) const
|
52
52
|
{
|
53
53
|
encoded.opaque(opaque);
|
54
54
|
encoded.partition(partition);
|
@@ -68,9 +68,9 @@ struct replace_request {
|
|
68
68
|
};
|
69
69
|
|
70
70
|
replace_response
|
71
|
-
make_response(error_context::key_value&& ctx, replace_request& request, replace_request::encoded_response_type&& encoded)
|
71
|
+
make_response(error_context::key_value&& ctx, const replace_request& request, replace_request::encoded_response_type&& encoded)
|
72
72
|
{
|
73
|
-
replace_response response{ ctx };
|
73
|
+
replace_response response{ std::move(ctx) };
|
74
74
|
if (!response.ctx.ec) {
|
75
75
|
response.cas = encoded.cas();
|
76
76
|
response.token = encoded.body().token();
|
@@ -119,6 +119,8 @@ struct search_request {
|
|
119
119
|
std::optional<highlight_style_type> highlight_style{};
|
120
120
|
std::vector<std::string> highlight_fields{};
|
121
121
|
std::vector<std::string> fields{};
|
122
|
+
std::optional<std::string> scope_name{};
|
123
|
+
std::vector<std::string> collections{};
|
122
124
|
|
123
125
|
enum class scan_consistency_type { not_bounded };
|
124
126
|
std::optional<scan_consistency_type> scan_consistency{};
|
@@ -175,8 +177,8 @@ struct search_request {
|
|
175
177
|
}
|
176
178
|
if (!facets.empty()) {
|
177
179
|
body["facets"] = tao::json::empty_object;
|
178
|
-
for (const auto& facet : facets) {
|
179
|
-
body["facets"][
|
180
|
+
for (const auto& [name, facet] : facets) {
|
181
|
+
body["facets"][name] = tao::json::from_string(facet);
|
180
182
|
}
|
181
183
|
}
|
182
184
|
if (!mutation_state.empty()) {
|
@@ -193,6 +195,10 @@ struct search_request {
|
|
193
195
|
{ "vectors", { { index_name, scan_vectors } } },
|
194
196
|
};
|
195
197
|
}
|
198
|
+
if (scope_name) {
|
199
|
+
body["scope"] = scope_name.value();
|
200
|
+
body["collections"] = collections;
|
201
|
+
}
|
196
202
|
|
197
203
|
encoded.type = type;
|
198
204
|
encoded.headers["content-type"] = "application/json";
|
@@ -210,9 +216,9 @@ struct search_request {
|
|
210
216
|
};
|
211
217
|
|
212
218
|
search_response
|
213
|
-
make_response(error_context::search&& ctx, search_request& request, search_request::encoded_response_type&& encoded)
|
219
|
+
make_response(error_context::search&& ctx, const search_request& request, search_request::encoded_response_type&& encoded)
|
214
220
|
{
|
215
|
-
search_response response{ ctx };
|
221
|
+
search_response response{ std::move(ctx) };
|
216
222
|
response.meta_data.client_context_id = request.client_context_id;
|
217
223
|
response.ctx.index_name = request.index_name;
|
218
224
|
response.ctx.query = tao::json::to_string(request.query);
|
@@ -222,15 +228,15 @@ make_response(error_context::search&& ctx, search_request& request, search_reque
|
|
222
228
|
tao::json::value payload{};
|
223
229
|
try {
|
224
230
|
payload = tao::json::from_string(encoded.body);
|
225
|
-
} catch (tao::json::pegtl::parse_error& e) {
|
226
|
-
response.ctx.ec =
|
231
|
+
} catch (const tao::json::pegtl::parse_error& e) {
|
232
|
+
response.ctx.ec = error::common_errc::parsing_failure;
|
227
233
|
return response;
|
228
234
|
}
|
229
235
|
response.meta_data.metrics.took = std::chrono::nanoseconds(payload.at("took").get_unsigned());
|
230
236
|
response.meta_data.metrics.max_score = payload.at("max_score").as<double>();
|
231
237
|
response.meta_data.metrics.total_rows = payload.at("total_hits").get_unsigned();
|
232
|
-
|
233
|
-
if (status_prop.is_string()) {
|
238
|
+
|
239
|
+
if (auto& status_prop = payload.at("status"); status_prop.is_string()) {
|
234
240
|
response.status = status_prop.get_string();
|
235
241
|
if (response.status == "ok") {
|
236
242
|
return response;
|
@@ -238,36 +244,33 @@ make_response(error_context::search&& ctx, search_request& request, search_reque
|
|
238
244
|
} else if (status_prop.is_object()) {
|
239
245
|
response.meta_data.metrics.error_partition_count = status_prop.at("failed").get_unsigned();
|
240
246
|
response.meta_data.metrics.success_partition_count = status_prop.at("successful").get_unsigned();
|
241
|
-
const auto* errors = status_prop.find("errors");
|
242
|
-
|
243
|
-
|
244
|
-
response.meta_data.errors.emplace(error.first, error.second.get_string());
|
247
|
+
if (const auto* errors = status_prop.find("errors"); errors != nullptr && errors->is_object()) {
|
248
|
+
for (const auto& [location, message] : errors->get_object()) {
|
249
|
+
response.meta_data.errors.try_emplace(location, message.get_string());
|
245
250
|
}
|
246
251
|
}
|
247
252
|
} else {
|
248
|
-
response.ctx.ec =
|
253
|
+
response.ctx.ec = error::common_errc::internal_server_failure;
|
249
254
|
return response;
|
250
255
|
}
|
251
|
-
|
252
|
-
if (rows != nullptr && rows->is_array()) {
|
256
|
+
|
257
|
+
if (const auto* rows = payload.find("hits"); rows != nullptr && rows->is_array()) {
|
253
258
|
for (const auto& entry : rows->get_array()) {
|
254
259
|
search_response::search_row row{};
|
255
260
|
row.index = entry.at("index").get_string();
|
256
261
|
row.id = entry.at("id").get_string();
|
257
262
|
row.score = entry.at("score").as<double>();
|
258
|
-
const auto*
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
for (const auto& loc : term.second.get_array()) {
|
263
|
+
if (const auto* locations_map = entry.find("locations"); locations_map != nullptr && locations_map->is_object()) {
|
264
|
+
for (const auto& [field, terms] : locations_map->get_object()) {
|
265
|
+
for (const auto& [term, locations] : terms.get_object()) {
|
266
|
+
for (const auto& loc : locations.get_array()) {
|
263
267
|
search_response::search_location location{};
|
264
|
-
location.field = field
|
265
|
-
location.term = term
|
268
|
+
location.field = field;
|
269
|
+
location.term = term;
|
266
270
|
location.position = loc.at("pos").get_unsigned();
|
267
271
|
location.start_offset = loc.at("start").get_unsigned();
|
268
272
|
location.end_offset = loc.at("end").get_unsigned();
|
269
|
-
const auto* ap = loc.find("array_positions");
|
270
|
-
if (ap != nullptr && ap->is_array()) {
|
273
|
+
if (const auto* ap = loc.find("array_positions"); ap != nullptr && ap->is_array()) {
|
271
274
|
location.array_positions.emplace(ap->as<std::vector<std::uint64_t>>());
|
272
275
|
}
|
273
276
|
row.locations.emplace_back(location);
|
@@ -275,67 +278,60 @@ make_response(error_context::search&& ctx, search_request& request, search_reque
|
|
275
278
|
}
|
276
279
|
}
|
277
280
|
}
|
278
|
-
|
279
|
-
if (fragments_map != nullptr && fragments_map->is_object()) {
|
280
|
-
for (const auto& field : fragments_map->get_object()) {
|
281
|
-
row.fragments.emplace(field
|
281
|
+
|
282
|
+
if (const auto* fragments_map = entry.find("fragments"); fragments_map != nullptr && fragments_map->is_object()) {
|
283
|
+
for (const auto& [field, fragments] : fragments_map->get_object()) {
|
284
|
+
row.fragments.emplace(field, fragments.as<std::vector<std::string>>());
|
282
285
|
}
|
283
286
|
}
|
284
|
-
const auto* fields = entry.find("fields");
|
285
|
-
if (fields != nullptr && fields->is_object()) {
|
287
|
+
if (const auto* fields = entry.find("fields"); fields != nullptr && fields->is_object()) {
|
286
288
|
row.fields = tao::json::to_string(*fields);
|
287
289
|
}
|
288
|
-
const auto* explanation = entry.find("explanation");
|
289
|
-
if (explanation != nullptr && explanation->is_object()) {
|
290
|
+
if (const auto* explanation = entry.find("explanation"); explanation != nullptr && explanation->is_object()) {
|
290
291
|
row.explanation = tao::json::to_string(*explanation);
|
291
292
|
}
|
292
293
|
response.rows.emplace_back(row);
|
293
294
|
}
|
294
295
|
}
|
295
|
-
|
296
|
-
if (facets != nullptr && facets->is_object()) {
|
297
|
-
for (const auto&
|
296
|
+
|
297
|
+
if (const auto* facets = payload.find("facets"); facets != nullptr && facets->is_object()) {
|
298
|
+
for (const auto& [name, object] : facets->get_object()) {
|
298
299
|
search_response::search_facet facet;
|
299
|
-
facet.name =
|
300
|
-
facet.field =
|
301
|
-
facet.total =
|
302
|
-
facet.missing =
|
303
|
-
facet.other =
|
304
|
-
|
305
|
-
const auto
|
306
|
-
if (date_ranges != nullptr && date_ranges->is_array()) {
|
300
|
+
facet.name = name;
|
301
|
+
facet.field = object.at("field").get_string();
|
302
|
+
facet.total = object.at("total").get_unsigned();
|
303
|
+
facet.missing = object.at("missing").get_unsigned();
|
304
|
+
facet.other = object.at("other").get_unsigned();
|
305
|
+
|
306
|
+
if (const auto* date_ranges = object.find("date_ranges"); date_ranges != nullptr && date_ranges->is_array()) {
|
307
307
|
for (const auto& date_range : date_ranges->get_array()) {
|
308
308
|
search_response::search_facet::date_range_facet drf;
|
309
309
|
drf.name = date_range.at("name").get_string();
|
310
310
|
drf.count = date_range.at("count").get_unsigned();
|
311
|
-
const auto* start = date_range.find("start");
|
312
|
-
if (start != nullptr && start->is_string()) {
|
311
|
+
if (const auto* start = date_range.find("start"); start != nullptr && start->is_string()) {
|
313
312
|
drf.start = start->get_string();
|
314
313
|
}
|
315
|
-
const auto* end = date_range.find("end");
|
316
|
-
if (end != nullptr && end->is_string()) {
|
314
|
+
if (const auto* end = date_range.find("end"); end != nullptr && end->is_string()) {
|
317
315
|
drf.end = end->get_string();
|
318
316
|
}
|
319
317
|
facet.date_ranges.emplace_back(drf);
|
320
318
|
}
|
321
319
|
}
|
322
320
|
|
323
|
-
const auto& numeric_ranges =
|
324
|
-
|
321
|
+
if (const auto& numeric_ranges = object.find("numeric_ranges");
|
322
|
+
numeric_ranges != nullptr && numeric_ranges->is_array()) {
|
325
323
|
for (const auto& numeric_range : numeric_ranges->get_array()) {
|
326
324
|
search_response::search_facet::numeric_range_facet nrf;
|
327
325
|
nrf.name = numeric_range.at("name").get_string();
|
328
326
|
nrf.count = numeric_range.at("count").get_unsigned();
|
329
|
-
const auto* min = numeric_range.find("min");
|
330
|
-
if (min != nullptr) {
|
327
|
+
if (const auto* min = numeric_range.find("min"); min != nullptr) {
|
331
328
|
if (min->is_double()) {
|
332
329
|
nrf.min = min->as<double>();
|
333
330
|
} else if (min->is_integer()) {
|
334
331
|
nrf.min = min->get_unsigned();
|
335
332
|
}
|
336
333
|
}
|
337
|
-
const auto* max = numeric_range.find("max");
|
338
|
-
if (max != nullptr) {
|
334
|
+
if (const auto* max = numeric_range.find("max"); max != nullptr) {
|
339
335
|
if (max->is_double()) {
|
340
336
|
nrf.max = max->as<double>();
|
341
337
|
} else if (max->is_integer()) {
|
@@ -346,8 +342,7 @@ make_response(error_context::search&& ctx, search_request& request, search_reque
|
|
346
342
|
}
|
347
343
|
}
|
348
344
|
|
349
|
-
const auto
|
350
|
-
if (terms != nullptr && terms->is_array()) {
|
345
|
+
if (const auto* terms = object.find("terms"); terms != nullptr && terms->is_array()) {
|
351
346
|
for (const auto& term : terms->get_array()) {
|
352
347
|
search_response::search_facet::term_facet tf;
|
353
348
|
tf.term = term.at("term").get_string();
|
@@ -365,26 +360,26 @@ make_response(error_context::search&& ctx, search_request& request, search_reque
|
|
365
360
|
tao::json::value payload{};
|
366
361
|
try {
|
367
362
|
payload = tao::json::from_string(encoded.body);
|
368
|
-
} catch (tao::json::pegtl::parse_error& e) {
|
369
|
-
response.ctx.ec =
|
363
|
+
} catch (const tao::json::pegtl::parse_error& e) {
|
364
|
+
response.ctx.ec = error::common_errc::parsing_failure;
|
370
365
|
return response;
|
371
366
|
}
|
372
367
|
response.status = payload.at("status").get_string();
|
373
368
|
response.error = payload.at("error").get_string();
|
374
369
|
if (response.error.find("index not found") != std::string::npos) {
|
375
|
-
response.ctx.ec =
|
370
|
+
response.ctx.ec = error::common_errc::index_not_found;
|
376
371
|
return response;
|
377
372
|
}
|
378
373
|
if (response.error.find("no planPIndexes for indexName") != std::string::npos) {
|
379
|
-
response.ctx.ec =
|
374
|
+
response.ctx.ec = error::search_errc::index_not_ready;
|
380
375
|
return response;
|
381
376
|
}
|
382
377
|
if (response.error.find("pindex_consistency mismatched partition") != std::string::npos) {
|
383
|
-
response.ctx.ec =
|
378
|
+
response.ctx.ec = error::search_errc::consistency_mismatch;
|
384
379
|
return response;
|
385
380
|
}
|
386
381
|
}
|
387
|
-
response.ctx.ec =
|
382
|
+
response.ctx.ec = error::common_errc::internal_server_failure;
|
388
383
|
}
|
389
384
|
return response;
|
390
385
|
}
|
@@ -40,7 +40,7 @@ struct touch_request {
|
|
40
40
|
std::chrono::milliseconds timeout{ timeout_defaults::key_value_timeout };
|
41
41
|
io::retry_context<io::retry_strategy::best_effort> retries{ false };
|
42
42
|
|
43
|
-
[[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, mcbp_context&&)
|
43
|
+
[[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, mcbp_context&& /* context */) const
|
44
44
|
{
|
45
45
|
encoded.opaque(opaque);
|
46
46
|
encoded.partition(partition);
|
@@ -51,9 +51,9 @@ struct touch_request {
|
|
51
51
|
};
|
52
52
|
|
53
53
|
touch_response
|
54
|
-
make_response(error_context::key_value&& ctx, touch_request
|
54
|
+
make_response(error_context::key_value&& ctx, const touch_request& /* request */, touch_request::encoded_response_type&& encoded)
|
55
55
|
{
|
56
|
-
touch_response response{ ctx };
|
56
|
+
touch_response response{ std::move(ctx) };
|
57
57
|
if (!response.ctx.ec) {
|
58
58
|
response.cas = encoded.cas();
|
59
59
|
}
|
@@ -40,7 +40,7 @@ struct unlock_request {
|
|
40
40
|
std::chrono::milliseconds timeout{ timeout_defaults::key_value_timeout };
|
41
41
|
io::retry_context<io::retry_strategy::best_effort> retries{ false };
|
42
42
|
|
43
|
-
[[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, mcbp_context&&)
|
43
|
+
[[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, mcbp_context&& /* context */) const
|
44
44
|
{
|
45
45
|
encoded.opaque(opaque);
|
46
46
|
encoded.partition(partition);
|
@@ -51,9 +51,9 @@ struct unlock_request {
|
|
51
51
|
};
|
52
52
|
|
53
53
|
unlock_response
|
54
|
-
make_response(error_context::key_value&& ctx, unlock_request
|
54
|
+
make_response(error_context::key_value&& ctx, const unlock_request& /* request */, unlock_request::encoded_response_type&& encoded)
|
55
55
|
{
|
56
|
-
unlock_response response{ ctx };
|
56
|
+
unlock_response response{ std::move(ctx) };
|
57
57
|
if (!response.ctx.ec) {
|
58
58
|
response.cas = encoded.cas();
|
59
59
|
}
|
@@ -47,7 +47,7 @@ struct upsert_request {
|
|
47
47
|
io::retry_context<io::retry_strategy::best_effort> retries{ false };
|
48
48
|
bool preserve_expiry{ false };
|
49
49
|
|
50
|
-
[[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, mcbp_context&&)
|
50
|
+
[[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, mcbp_context&& /* context */) const
|
51
51
|
{
|
52
52
|
encoded.opaque(opaque);
|
53
53
|
encoded.partition(partition);
|
@@ -66,9 +66,9 @@ struct upsert_request {
|
|
66
66
|
};
|
67
67
|
|
68
68
|
upsert_response
|
69
|
-
make_response(error_context::key_value&& ctx, upsert_request& request, upsert_request::encoded_response_type&& encoded)
|
69
|
+
make_response(error_context::key_value&& ctx, const upsert_request& request, upsert_request::encoded_response_type&& encoded)
|
70
70
|
{
|
71
|
-
upsert_response response{ ctx };
|
71
|
+
upsert_response response{ std::move(ctx) };
|
72
72
|
if (!response.ctx.ec) {
|
73
73
|
response.cas = encoded.cas();
|
74
74
|
response.token = encoded.body().token();
|
@@ -53,7 +53,7 @@ struct document_view_request {
|
|
53
53
|
using encoded_response_type = io::http_response;
|
54
54
|
using error_context_type = error_context::view;
|
55
55
|
|
56
|
-
static const inline service_type type = service_type::
|
56
|
+
static const inline service_type type = service_type::view;
|
57
57
|
|
58
58
|
std::string client_context_id{ uuid::to_string(uuid::random()) };
|
59
59
|
std::chrono::milliseconds timeout{ timeout_defaults::management_timeout };
|
@@ -91,7 +91,7 @@ struct document_view_request {
|
|
91
91
|
std::optional<sort_order> order;
|
92
92
|
std::vector<std::string> query_string{};
|
93
93
|
|
94
|
-
[[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
|
94
|
+
[[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */)
|
95
95
|
{
|
96
96
|
if (debug) {
|
97
97
|
query_string.emplace_back("debug=true");
|
@@ -177,9 +177,9 @@ struct document_view_request {
|
|
177
177
|
};
|
178
178
|
|
179
179
|
document_view_response
|
180
|
-
make_response(error_context::view&& ctx, document_view_request& request, document_view_request::encoded_response_type&& encoded)
|
180
|
+
make_response(error_context::view&& ctx, const document_view_request& request, document_view_request::encoded_response_type&& encoded)
|
181
181
|
{
|
182
|
-
document_view_response response{ ctx };
|
182
|
+
document_view_response response{ std::move(ctx) };
|
183
183
|
response.ctx.client_context_id = request.client_context_id;
|
184
184
|
response.ctx.design_document_name = request.document_name;
|
185
185
|
response.ctx.view_name = request.view_name;
|
@@ -189,24 +189,24 @@ make_response(error_context::view&& ctx, document_view_request& request, documen
|
|
189
189
|
tao::json::value payload{};
|
190
190
|
try {
|
191
191
|
payload = tao::json::from_string(encoded.body);
|
192
|
-
} catch (tao::json::pegtl::parse_error& e) {
|
193
|
-
response.ctx.ec =
|
192
|
+
} catch (const tao::json::pegtl::parse_error& e) {
|
193
|
+
response.ctx.ec = error::common_errc::parsing_failure;
|
194
194
|
return response;
|
195
195
|
}
|
196
|
-
|
197
|
-
if (total_rows != nullptr && total_rows->is_unsigned()) {
|
196
|
+
|
197
|
+
if (const auto* total_rows = payload.find("total_rows"); total_rows != nullptr && total_rows->is_unsigned()) {
|
198
198
|
response.meta_data.total_rows = total_rows->get_unsigned();
|
199
199
|
}
|
200
|
-
|
201
|
-
if (debug_info != nullptr && debug_info->is_object()) {
|
200
|
+
|
201
|
+
if (const auto* debug_info = payload.find("debug_info"); debug_info != nullptr && debug_info->is_object()) {
|
202
202
|
response.meta_data.debug_info.emplace(tao::json::to_string(*debug_info));
|
203
203
|
}
|
204
|
-
|
205
|
-
if (rows != nullptr && rows->is_array()) {
|
204
|
+
|
205
|
+
if (const auto* rows = payload.find("rows"); rows != nullptr && rows->is_array()) {
|
206
206
|
for (const auto& entry : rows->get_array()) {
|
207
207
|
document_view_response::row row{};
|
208
|
-
|
209
|
-
if (id != nullptr && id->is_string()) {
|
208
|
+
|
209
|
+
if (const auto* id = entry.find("id"); id != nullptr && id->is_string()) {
|
210
210
|
row.id = id->get_string();
|
211
211
|
}
|
212
212
|
row.key = tao::json::to_string(entry.at("key"));
|
@@ -218,25 +218,25 @@ make_response(error_context::view&& ctx, document_view_request& request, documen
|
|
218
218
|
tao::json::value payload{};
|
219
219
|
try {
|
220
220
|
payload = tao::json::from_string(encoded.body);
|
221
|
-
} catch (tao::json::pegtl::parse_error& e) {
|
222
|
-
response.ctx.ec =
|
221
|
+
} catch (const tao::json::pegtl::parse_error& e) {
|
222
|
+
response.ctx.ec = error::common_errc::parsing_failure;
|
223
223
|
return response;
|
224
224
|
}
|
225
225
|
document_view_response::problem problem{};
|
226
|
-
|
227
|
-
if (error != nullptr && error->is_string()) {
|
226
|
+
|
227
|
+
if (const auto* error = payload.find("error"); error != nullptr && error->is_string()) {
|
228
228
|
problem.code = error->get_string();
|
229
229
|
}
|
230
|
-
|
231
|
-
if (reason != nullptr && reason->is_string()) {
|
230
|
+
|
231
|
+
if (const auto* reason = payload.find("reason"); reason != nullptr && reason->is_string()) {
|
232
232
|
problem.message = reason->get_string();
|
233
233
|
}
|
234
234
|
response.error.emplace(problem);
|
235
|
-
response.ctx.ec =
|
235
|
+
response.ctx.ec = error::common_errc::invalid_argument;
|
236
236
|
} else if (encoded.status_code == 404) {
|
237
|
-
response.ctx.ec =
|
237
|
+
response.ctx.ec = error::view_errc::design_document_not_found;
|
238
238
|
} else {
|
239
|
-
response.ctx.ec =
|
239
|
+
response.ctx.ec = error::common_errc::internal_server_failure;
|
240
240
|
}
|
241
241
|
}
|
242
242
|
return response;
|
@@ -42,7 +42,7 @@ struct group_drop_request {
|
|
42
42
|
std::chrono::milliseconds timeout{ timeout_defaults::management_timeout };
|
43
43
|
std::string client_context_id{ uuid::to_string(uuid::random()) };
|
44
44
|
|
45
|
-
[[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context&)
|
45
|
+
[[nodiscard]] std::error_code encode_to(encoded_request_type& encoded, http_context& /* context */) const
|
46
46
|
{
|
47
47
|
encoded.method = "DELETE";
|
48
48
|
encoded.path = fmt::format("/settings/rbac/groups/{}", name);
|
@@ -51,18 +51,18 @@ struct group_drop_request {
|
|
51
51
|
};
|
52
52
|
|
53
53
|
group_drop_response
|
54
|
-
make_response(error_context::http&& ctx, group_drop_request
|
54
|
+
make_response(error_context::http&& ctx, const group_drop_request& /* request */, group_drop_request::encoded_response_type&& encoded)
|
55
55
|
{
|
56
|
-
group_drop_response response{ ctx };
|
56
|
+
group_drop_response response{ std::move(ctx) };
|
57
57
|
if (!response.ctx.ec) {
|
58
58
|
switch (encoded.status_code) {
|
59
59
|
case 200:
|
60
60
|
break;
|
61
61
|
case 404:
|
62
|
-
response.ctx.ec =
|
62
|
+
response.ctx.ec = error::management_errc::group_not_found;
|
63
63
|
break;
|
64
64
|
default:
|
65
|
-
response.ctx.ec =
|
65
|
+
response.ctx.ec = error::common_errc::internal_server_failure;
|
66
66
|
break;
|
67
67
|
}
|
68
68
|
}
|