couchbase 3.0.2 → 3.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/ext/CMakeLists.txt +3 -0
- data/ext/build_version.hxx.in +1 -1
- data/ext/cmake/CompilerWarnings.cmake +1 -0
- data/ext/cmake/PreventInSourceBuilds.cmake +4 -1
- data/ext/couchbase/bucket.hxx +28 -2
- data/ext/couchbase/cluster.hxx +8 -2
- data/ext/couchbase/couchbase.cxx +955 -511
- data/ext/couchbase/error_context/analytics.hxx +46 -0
- data/ext/couchbase/error_context/http.hxx +44 -0
- data/ext/couchbase/error_context/key_value.hxx +47 -0
- data/ext/couchbase/error_context/query.hxx +46 -0
- data/ext/couchbase/error_context/search.hxx +47 -0
- data/ext/couchbase/error_context/view.hxx +47 -0
- data/ext/couchbase/io/dns_codec.hxx +1 -2
- data/ext/couchbase/io/http_command.hxx +16 -3
- data/ext/couchbase/io/http_context.hxx +1 -1
- data/ext/couchbase/io/http_session.hxx +12 -6
- data/ext/couchbase/io/http_session_manager.hxx +25 -24
- data/ext/couchbase/io/mcbp_session.hxx +8 -2
- data/ext/couchbase/io/retry_context.hxx +1 -1
- data/ext/couchbase/operations/analytics_dataset_create.hxx +19 -12
- data/ext/couchbase/operations/analytics_dataset_drop.hxx +18 -10
- data/ext/couchbase/operations/analytics_dataset_get_all.hxx +16 -10
- data/ext/couchbase/operations/analytics_dataverse_create.hxx +18 -11
- data/ext/couchbase/operations/analytics_dataverse_drop.hxx +17 -11
- data/ext/couchbase/operations/analytics_get_pending_mutations.hxx +17 -10
- data/ext/couchbase/operations/analytics_index_create.hxx +17 -11
- data/ext/couchbase/operations/analytics_index_drop.hxx +16 -10
- data/ext/couchbase/operations/analytics_index_get_all.hxx +14 -10
- data/ext/couchbase/operations/analytics_link_connect.hxx +15 -9
- data/ext/couchbase/operations/analytics_link_disconnect.hxx +16 -10
- data/ext/couchbase/operations/bucket_create.hxx +33 -10
- data/ext/couchbase/operations/bucket_drop.hxx +9 -8
- data/ext/couchbase/operations/bucket_flush.hxx +8 -8
- data/ext/couchbase/operations/bucket_get.hxx +15 -10
- data/ext/couchbase/operations/bucket_get_all.hxx +14 -7
- data/ext/couchbase/operations/bucket_settings.hxx +16 -0
- data/ext/couchbase/operations/bucket_update.hxx +32 -10
- data/ext/couchbase/operations/cluster_developer_preview_enable.hxx +6 -6
- data/ext/couchbase/operations/collection_create.hxx +19 -13
- data/ext/couchbase/operations/collection_drop.hxx +18 -12
- data/ext/couchbase/operations/collections_manifest_get.hxx +5 -10
- data/ext/couchbase/operations/document_analytics.hxx +39 -17
- data/ext/couchbase/operations/document_append.hxx +5 -10
- data/ext/couchbase/operations/document_decrement.hxx +5 -10
- data/ext/couchbase/operations/document_exists.hxx +4 -6
- data/ext/couchbase/operations/document_get.hxx +6 -10
- data/ext/couchbase/operations/document_get_and_lock.hxx +4 -9
- data/ext/couchbase/operations/document_get_and_touch.hxx +4 -9
- data/ext/couchbase/operations/document_get_projected.hxx +21 -14
- data/ext/couchbase/operations/document_increment.hxx +5 -10
- data/ext/couchbase/operations/document_insert.hxx +5 -10
- data/ext/couchbase/operations/document_lookup_in.hxx +4 -9
- data/ext/couchbase/operations/document_mutate_in.hxx +7 -12
- data/ext/couchbase/operations/document_prepend.hxx +5 -10
- data/ext/couchbase/operations/document_query.hxx +45 -28
- data/ext/couchbase/operations/document_remove.hxx +5 -10
- data/ext/couchbase/operations/document_replace.hxx +5 -10
- data/ext/couchbase/operations/document_search.hxx +37 -16
- data/ext/couchbase/operations/document_touch.hxx +4 -9
- data/ext/couchbase/operations/document_unlock.hxx +4 -9
- data/ext/couchbase/operations/document_upsert.hxx +5 -10
- data/ext/couchbase/operations/document_view.hxx +29 -13
- data/ext/couchbase/operations/group_drop.hxx +7 -7
- data/ext/couchbase/operations/group_get.hxx +14 -10
- data/ext/couchbase/operations/group_get_all.hxx +14 -8
- data/ext/couchbase/operations/group_upsert.hxx +15 -9
- data/ext/couchbase/operations/http_noop.hxx +5 -5
- data/ext/couchbase/operations/mcbp_noop.hxx +3 -9
- data/ext/couchbase/operations/query_index_build_deferred.hxx +15 -9
- data/ext/couchbase/operations/query_index_create.hxx +16 -10
- data/ext/couchbase/operations/query_index_drop.hxx +16 -10
- data/ext/couchbase/operations/query_index_get_all.hxx +13 -7
- data/ext/couchbase/operations/role_get_all.hxx +14 -8
- data/ext/couchbase/operations/scope_create.hxx +19 -13
- data/ext/couchbase/operations/scope_drop.hxx +17 -11
- data/ext/couchbase/operations/scope_get_all.hxx +15 -10
- data/ext/couchbase/operations/search_get_stats.hxx +5 -5
- data/ext/couchbase/operations/search_index_analyze_document.hxx +25 -13
- data/ext/couchbase/operations/search_index_control_ingest.hxx +23 -11
- data/ext/couchbase/operations/search_index_control_plan_freeze.hxx +23 -11
- data/ext/couchbase/operations/search_index_control_query.hxx +23 -11
- data/ext/couchbase/operations/search_index_drop.hxx +22 -10
- data/ext/couchbase/operations/search_index_get.hxx +22 -10
- data/ext/couchbase/operations/search_index_get_all.hxx +13 -7
- data/ext/couchbase/operations/search_index_get_documents_count.hxx +24 -13
- data/ext/couchbase/operations/search_index_get_stats.hxx +16 -10
- data/ext/couchbase/operations/search_index_upsert.hxx +23 -11
- data/ext/couchbase/operations/user_drop.hxx +8 -8
- data/ext/couchbase/operations/user_get.hxx +14 -10
- data/ext/couchbase/operations/user_get_all.hxx +14 -8
- data/ext/couchbase/operations/user_upsert.hxx +15 -9
- data/ext/couchbase/operations/view_index_drop.hxx +7 -7
- data/ext/couchbase/operations/view_index_get.hxx +15 -9
- data/ext/couchbase/operations/view_index_get_all.hxx +15 -9
- data/ext/couchbase/operations/view_index_upsert.hxx +8 -8
- data/ext/couchbase/origin.hxx +1 -0
- data/ext/couchbase/platform/terminate_handler.cc +12 -8
- data/ext/couchbase/protocol/client_request.hxx +2 -1
- data/ext/couchbase/protocol/client_response.hxx +18 -15
- data/ext/couchbase/protocol/cmd_exists.hxx +1 -0
- data/ext/couchbase/protocol/cmd_get.hxx +1 -1
- data/ext/couchbase/protocol/cmd_mutate_in.hxx +3 -4
- data/ext/couchbase/protocol/enhanced_error_info.hxx +28 -0
- data/ext/couchbase/utils/connection_string.hxx +1 -1
- data/ext/couchbase/version.hxx +1 -1
- data/ext/extconf.rb +1 -1
- data/ext/test/test_native_binary_operations.cxx +18 -18
- data/ext/test/test_native_diagnostics.cxx +2 -2
- data/ext/test/test_native_trivial_crud.cxx +2 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_reader.hpp +1 -5
- data/lib/active_support/cache/couchbase_store.rb +362 -0
- data/lib/couchbase.rb +2 -0
- data/lib/couchbase/authenticator.rb +26 -0
- data/lib/couchbase/binary_collection.rb +1 -0
- data/lib/couchbase/bucket.rb +1 -0
- data/lib/couchbase/cluster.rb +51 -27
- data/lib/couchbase/collection.rb +19 -4
- data/lib/couchbase/collection_options.rb +10 -0
- data/lib/couchbase/configuration.rb +57 -0
- data/lib/couchbase/datastructures.rb +6 -0
- data/lib/couchbase/errors.rb +111 -3
- data/lib/couchbase/management.rb +27 -0
- data/lib/couchbase/management/bucket_manager.rb +9 -2
- data/lib/couchbase/management/collection_manager.rb +1 -1
- data/lib/couchbase/management/user_manager.rb +18 -2
- data/lib/couchbase/options.rb +33 -23
- data/lib/couchbase/railtie.rb +45 -0
- data/lib/couchbase/scope.rb +44 -3
- data/lib/couchbase/utils.rb +21 -0
- data/lib/couchbase/utils/time.rb +52 -0
- data/lib/couchbase/version.rb +1 -1
- data/lib/rails/generators/couchbase/config/config_generator.rb +27 -0
- metadata +19 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 850654b24f508816010fe6558dc0b5e50bd6a4a54667c17d929988762ea836c6
|
4
|
+
data.tar.gz: 4e6f334a34c80ec64fa15a8fbf16f22a913bded0e10aed76e5870db6ded5a17b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1e7b161fe8fbca8d8ca8d524014f6be1eb0fd7dffb3295f18ee6aa2b20997c2ff0277b90011a3330892e3173038b0667e73e791b945ee7490bda7a9abebe52d
|
7
|
+
data.tar.gz: b72cb74eb7f1a34fd0ed0421af78d1a322f2dde47f615466cf9aaf80e3a5f7f4420110650b400a515f4b0f4ada98c388b00b0feff5b416e1216e59c58299500f
|
data/README.md
CHANGED
@@ -20,12 +20,12 @@ Please attach version information to ticket/post. To obtain this information use
|
|
20
20
|
|
21
21
|
## Installation
|
22
22
|
|
23
|
-
The library tested with the MRI 2.5, 2.6
|
23
|
+
The library tested with the MRI 2.5, 2.6, 2.7 and 3.0. Supported platforms are Linux and MacOS.
|
24
24
|
|
25
25
|
Add this line to your application's Gemfile:
|
26
26
|
|
27
27
|
```ruby
|
28
|
-
gem "couchbase", "3.0.
|
28
|
+
gem "couchbase", "3.0.3"
|
29
29
|
```
|
30
30
|
|
31
31
|
And then execute:
|
data/ext/CMakeLists.txt
CHANGED
@@ -6,6 +6,9 @@ include(cmake/StandardProjectSettings.cmake)
|
|
6
6
|
# 'library' to set the c++ standard / compile-time options requested
|
7
7
|
add_library(project_options INTERFACE)
|
8
8
|
target_compile_features(project_options INTERFACE cxx_std_17)
|
9
|
+
if(CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
|
10
|
+
target_compile_options(project_options INTERFACE -fdeclspec)
|
11
|
+
endif()
|
9
12
|
|
10
13
|
# 'library' to use the warnings specified in CompilerWarnings.cmake
|
11
14
|
add_library(project_warnings INTERFACE)
|
data/ext/build_version.hxx.in
CHANGED
@@ -26,5 +26,5 @@ constexpr auto BACKEND_CXX_COMPILER = "@CMAKE_CXX_COMPILER_ID@ @CMAKE_CXX_COMPIL
|
|
26
26
|
constexpr auto BACKEND_C_COMPILER = "@CMAKE_C_COMPILER_ID@ @CMAKE_C_COMPILER_VERSION@";
|
27
27
|
constexpr auto BACKEND_SYSTEM = "@CMAKE_SYSTEM@";
|
28
28
|
constexpr auto BACKEND_SYSTEM_PROCESSOR = "@CMAKE_SYSTEM_PROCESSOR@";
|
29
|
-
constexpr auto BACKEND_GIT_REVISION = "
|
29
|
+
constexpr auto BACKEND_GIT_REVISION = "bcb5da39fd4dfd3bd7ce917abc89faf1fbcd7d5f";
|
30
30
|
} // namespace couchbase
|
@@ -66,6 +66,7 @@ function(set_project_warnings project_name)
|
|
66
66
|
-Wduplicated-branches # warn if if / else branches have duplicated code
|
67
67
|
-Wlogical-op # warn about logical operations being used where bitwise were probably wanted
|
68
68
|
-Wuseless-cast # warn if you perform a cast to the same type
|
69
|
+
-Wdeprecated-declarations # warn if [[deprecated]] elements being used
|
69
70
|
)
|
70
71
|
|
71
72
|
if(MSVC)
|
@@ -5,6 +5,9 @@ function(AssureOutOfSourceBuilds)
|
|
5
5
|
get_filename_component(srcdir "${CMAKE_SOURCE_DIR}" REALPATH)
|
6
6
|
get_filename_component(bindir "${CMAKE_BINARY_DIR}" REALPATH)
|
7
7
|
|
8
|
+
message(STATUS "CMAKE_SOURCE_DIR=${srcdir}")
|
9
|
+
message(STATUS "CMAKE_BINARY_DIR=${bindir}")
|
10
|
+
|
8
11
|
# disallow in-source builds
|
9
12
|
if("${srcdir}" STREQUAL "${bindir}")
|
10
13
|
message("######################################################")
|
@@ -15,4 +18,4 @@ function(AssureOutOfSourceBuilds)
|
|
15
18
|
endif()
|
16
19
|
endfunction()
|
17
20
|
|
18
|
-
|
21
|
+
AssureOutOfSourceBuilds()
|
data/ext/couchbase/bucket.hxx
CHANGED
@@ -242,7 +242,28 @@ class bucket : public std::enable_shared_from_this<bucket>
|
|
242
242
|
auto cmd = std::make_shared<operations::mcbp_command<bucket, Request>>(ctx_, shared_from_this(), request);
|
243
243
|
cmd->start([cmd, handler = std::forward<Handler>(handler)](std::error_code ec, std::optional<io::mcbp_message> msg) mutable {
|
244
244
|
using encoded_response_type = typename Request::encoded_response_type;
|
245
|
-
|
245
|
+
auto resp = msg ? encoded_response_type(*msg) : encoded_response_type{};
|
246
|
+
error_context::key_value ctx{};
|
247
|
+
ctx.id = cmd->request.id;
|
248
|
+
ctx.opaque = resp.opaque();
|
249
|
+
ctx.ec = ec;
|
250
|
+
if (ctx.ec && ctx.opaque == 0) {
|
251
|
+
ctx.opaque = cmd->request.opaque;
|
252
|
+
}
|
253
|
+
if (msg) {
|
254
|
+
ctx.status_code = resp.status();
|
255
|
+
}
|
256
|
+
ctx.retry_attempts = cmd->request.retries.retry_attempts;
|
257
|
+
ctx.retry_reasons = cmd->request.retries.reasons;
|
258
|
+
if (cmd->session_) {
|
259
|
+
ctx.last_dispatched_from = cmd->session_->local_address();
|
260
|
+
ctx.last_dispatched_to = cmd->session_->remote_address();
|
261
|
+
if (msg) {
|
262
|
+
ctx.error_map_info = cmd->session_->decode_error_code(msg->header.status());
|
263
|
+
}
|
264
|
+
}
|
265
|
+
ctx.enhanced_error_info = resp.error_info();
|
266
|
+
handler(make_response(std::move(ctx), cmd->request, std::move(resp)));
|
246
267
|
});
|
247
268
|
if (config_) {
|
248
269
|
map_and_send(cmd);
|
@@ -287,7 +308,12 @@ class bucket : public std::enable_shared_from_this<bucket>
|
|
287
308
|
cmd->manager_, cmd, io::retry_reason::node_not_available, std::make_error_code(error::common_errc::request_canceled));
|
288
309
|
}
|
289
310
|
}
|
290
|
-
|
311
|
+
auto session = sessions_.at(static_cast<std::size_t>(index));
|
312
|
+
if (session->is_stopped()) {
|
313
|
+
return io::retry_orchestrator::maybe_retry(
|
314
|
+
cmd->manager_, cmd, io::retry_reason::node_not_available, std::make_error_code(error::common_errc::request_canceled));
|
315
|
+
}
|
316
|
+
cmd->send_to(session);
|
291
317
|
}
|
292
318
|
|
293
319
|
template<typename Request>
|
data/ext/couchbase/cluster.hxx
CHANGED
@@ -151,7 +151,11 @@ class cluster
|
|
151
151
|
{
|
152
152
|
auto bucket = buckets_.find(request.id.bucket);
|
153
153
|
if (bucket == buckets_.end()) {
|
154
|
-
|
154
|
+
error_context::key_value ctx{};
|
155
|
+
ctx.id = request.id;
|
156
|
+
ctx.ec = std::make_error_code(error::common_errc::bucket_not_found);
|
157
|
+
using response_type = typename Request::encoded_response_type;
|
158
|
+
return handler(operations::make_response(std::move(ctx), request, response_type{}));
|
155
159
|
}
|
156
160
|
return bucket->second->execute(request, std::forward<Handler>(handler));
|
157
161
|
}
|
@@ -161,7 +165,9 @@ class cluster
|
|
161
165
|
{
|
162
166
|
auto session = session_manager_->check_out(Request::type, origin_.credentials());
|
163
167
|
if (!session) {
|
164
|
-
|
168
|
+
typename Request::error_context_type ctx{};
|
169
|
+
ctx.ec = std::make_error_code(error::common_errc::service_not_available);
|
170
|
+
return handler(operations::make_response(std::move(ctx), request, {}));
|
165
171
|
}
|
166
172
|
auto cmd = std::make_shared<operations::http_command<Request>>(ctx_, request);
|
167
173
|
cmd->send_to(session, [this, session, handler = std::forward<Handler>(handler)](typename Request::response_type resp) mutable {
|
data/ext/couchbase/couchbase.cxx
CHANGED
@@ -18,8 +18,8 @@
|
|
18
18
|
#include <build_info.hxx>
|
19
19
|
#include <version.hxx>
|
20
20
|
|
21
|
+
#include <asio.hpp>
|
21
22
|
#include <openssl/crypto.h>
|
22
|
-
#include <asio/version.hpp>
|
23
23
|
|
24
24
|
#include <spdlog/spdlog.h>
|
25
25
|
#include <spdlog/cfg/env.h>
|
@@ -41,12 +41,12 @@
|
|
41
41
|
#include <ruby/version.h>
|
42
42
|
#endif
|
43
43
|
|
44
|
-
#if
|
45
|
-
#define VALUE_FUNC(f) reinterpret_cast<VALUE (*)(ANYARGS)>(f)
|
46
|
-
#define INT_FUNC(f) reinterpret_cast<int (*)(ANYARGS)>(f)
|
47
|
-
#else
|
44
|
+
#if defined(RB_METHOD_DEFINITION_DECL) || RUBY_API_VERSION_MAJOR == 3
|
48
45
|
#define VALUE_FUNC(f) (f)
|
49
46
|
#define INT_FUNC(f) (f)
|
47
|
+
#else
|
48
|
+
#define VALUE_FUNC(f) reinterpret_cast<VALUE (*)(ANYARGS)>(f)
|
49
|
+
#define INT_FUNC(f) reinterpret_cast<int (*)(ANYARGS)>(f)
|
50
50
|
#endif
|
51
51
|
|
52
52
|
static void
|
@@ -63,7 +63,8 @@ init_versions(VALUE mCouchbase)
|
|
63
63
|
|
64
64
|
std::string ver;
|
65
65
|
ver = fmt::format("{}.{}.{}", couchbase::BACKEND_VERSION_MAJOR, couchbase::BACKEND_VERSION_MINOR, couchbase::BACKEND_VERSION_PATCH);
|
66
|
-
rb_hash_aset(
|
66
|
+
rb_hash_aset(
|
67
|
+
cb_Version, rb_id2sym(rb_intern("backend")), rb_str_freeze(rb_external_str_new(ver.c_str(), static_cast<long>(ver.size()))));
|
67
68
|
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("build_timestamp")), rb_str_freeze(rb_str_new_cstr(couchbase::BACKEND_BUILD_TIMESTAMP)));
|
68
69
|
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("revision")), rb_str_freeze(rb_str_new_cstr(couchbase::BACKEND_GIT_REVISION)));
|
69
70
|
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("platform")), rb_str_freeze(rb_str_new_cstr(couchbase::BACKEND_SYSTEM)));
|
@@ -72,16 +73,19 @@ init_versions(VALUE mCouchbase)
|
|
72
73
|
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("cxx")), rb_str_freeze(rb_str_new_cstr(couchbase::BACKEND_CXX_COMPILER)));
|
73
74
|
#if defined(HAVE_RUBY_VERSION_H)
|
74
75
|
ver = fmt::format("{}.{}.{}", RUBY_API_VERSION_MAJOR, RUBY_API_VERSION_MINOR, RUBY_API_VERSION_TEENY);
|
75
|
-
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("ruby")), rb_str_freeze(
|
76
|
+
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("ruby")), rb_str_freeze(rb_external_str_new(ver.c_str(), static_cast<long>(ver.size()))));
|
76
77
|
#endif
|
77
78
|
ver = fmt::format("{}.{}.{}", SPDLOG_VER_MAJOR, SPDLOG_VER_MINOR, SPDLOG_VER_PATCH);
|
78
|
-
rb_hash_aset(
|
79
|
+
rb_hash_aset(
|
80
|
+
cb_Version, rb_id2sym(rb_intern("spdlog")), rb_str_freeze(rb_external_str_new(ver.c_str(), static_cast<long>(ver.size()))));
|
79
81
|
ver = fmt::format("{}.{}.{}", VERSION_SPLIT_(ASIO_VERSION));
|
80
|
-
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("asio")), rb_str_freeze(
|
82
|
+
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("asio")), rb_str_freeze(rb_external_str_new(ver.c_str(), static_cast<long>(ver.size()))));
|
81
83
|
ver = fmt::format("{}.{}.{}", SNAPPY_MAJOR, SNAPPY_MINOR, SNAPPY_PATCHLEVEL);
|
82
|
-
rb_hash_aset(
|
84
|
+
rb_hash_aset(
|
85
|
+
cb_Version, rb_id2sym(rb_intern("snappy")), rb_str_freeze(rb_external_str_new(ver.c_str(), static_cast<long>(ver.size()))));
|
83
86
|
ver = fmt::format("{}.{}.{}", HTTP_PARSER_VERSION_MAJOR, HTTP_PARSER_VERSION_MINOR, HTTP_PARSER_VERSION_PATCH);
|
84
|
-
rb_hash_aset(
|
87
|
+
rb_hash_aset(
|
88
|
+
cb_Version, rb_id2sym(rb_intern("http_parser")), rb_str_freeze(rb_external_str_new(ver.c_str(), static_cast<long>(ver.size()))));
|
85
89
|
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("openssl_headers")), rb_str_freeze(rb_str_new_cstr(OPENSSL_VERSION_TEXT)));
|
86
90
|
#if defined(OPENSSL_VERSION)
|
87
91
|
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("openssl_runtime")), rb_str_freeze(rb_str_new_cstr(OpenSSL_version(OPENSSL_VERSION))));
|
@@ -584,6 +588,303 @@ cb__map_error_code(std::error_code ec, const std::string& message)
|
|
584
588
|
return rb_exc_new_cstr(eBackendError, fmt::format("{}: {}", message, ec.message()).c_str());
|
585
589
|
}
|
586
590
|
|
591
|
+
static VALUE
|
592
|
+
cb__map_error_code(const couchbase::error_context::key_value& ctx, const std::string& message)
|
593
|
+
{
|
594
|
+
VALUE exc = cb__map_error_code(ctx.ec, message);
|
595
|
+
VALUE error_context = rb_hash_new();
|
596
|
+
std::string error(fmt::format("{}, {}", ctx.ec.value(), ctx.ec.message()));
|
597
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("error")), rb_external_str_new(error.data(), static_cast<long>(error.size())));
|
598
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("id")), rb_external_str_new(ctx.id.key.data(), static_cast<long>(ctx.id.key.size())));
|
599
|
+
rb_hash_aset(error_context,
|
600
|
+
rb_id2sym(rb_intern("collection")),
|
601
|
+
rb_external_str_new(ctx.id.collection.data(), static_cast<long>(ctx.id.collection.size())));
|
602
|
+
rb_hash_aset(
|
603
|
+
error_context, rb_id2sym(rb_intern("bucket")), rb_external_str_new(ctx.id.bucket.data(), static_cast<long>(ctx.id.bucket.size())));
|
604
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("opaque")), ULONG2NUM(ctx.opaque));
|
605
|
+
if (ctx.status_code) {
|
606
|
+
std::string status(fmt::format("{}", ctx.status_code.value()));
|
607
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("status")), rb_external_str_new(status.data(), static_cast<long>(status.size())));
|
608
|
+
}
|
609
|
+
if (ctx.error_map_info) {
|
610
|
+
VALUE error_map_info = rb_hash_new();
|
611
|
+
rb_hash_aset(error_map_info,
|
612
|
+
rb_id2sym(rb_intern("name")),
|
613
|
+
rb_external_str_new(ctx.error_map_info->name.data(), static_cast<long>(ctx.error_map_info->name.size())));
|
614
|
+
rb_hash_aset(
|
615
|
+
error_map_info,
|
616
|
+
rb_id2sym(rb_intern("desc")),
|
617
|
+
rb_external_str_new(ctx.error_map_info->description.data(), static_cast<long>(ctx.error_map_info->description.size())));
|
618
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("error_map_info")), error_map_info);
|
619
|
+
}
|
620
|
+
if (ctx.enhanced_error_info) {
|
621
|
+
VALUE enhanced_error_info = rb_hash_new();
|
622
|
+
rb_hash_aset(
|
623
|
+
enhanced_error_info,
|
624
|
+
rb_id2sym(rb_intern("reference")),
|
625
|
+
rb_external_str_new(ctx.enhanced_error_info->reference.data(), static_cast<long>(ctx.enhanced_error_info->reference.size())));
|
626
|
+
rb_hash_aset(
|
627
|
+
enhanced_error_info,
|
628
|
+
rb_id2sym(rb_intern("context")),
|
629
|
+
rb_external_str_new(ctx.enhanced_error_info->context.data(), static_cast<long>(ctx.enhanced_error_info->context.size())));
|
630
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("extended_error_info")), enhanced_error_info);
|
631
|
+
}
|
632
|
+
if (ctx.retry_attempts > 0) {
|
633
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("retry_attempts")), INT2FIX(ctx.retry_attempts));
|
634
|
+
if (!ctx.retry_reasons.empty()) {
|
635
|
+
VALUE retry_reasons = rb_ary_new_capa(static_cast<long>(ctx.retry_reasons.size()));
|
636
|
+
for (const auto& reason : ctx.retry_reasons) {
|
637
|
+
auto reason_str = fmt::format("{}", reason);
|
638
|
+
rb_ary_push(retry_reasons, rb_id2sym(rb_intern(reason_str.c_str())));
|
639
|
+
}
|
640
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("retry_reasons")), retry_reasons);
|
641
|
+
}
|
642
|
+
}
|
643
|
+
if (ctx.last_dispatched_to) {
|
644
|
+
rb_hash_aset(error_context,
|
645
|
+
rb_id2sym(rb_intern("last_dispatched_to")),
|
646
|
+
rb_external_str_new(ctx.last_dispatched_to->data(), static_cast<long>(ctx.last_dispatched_to->size())));
|
647
|
+
}
|
648
|
+
if (ctx.last_dispatched_from) {
|
649
|
+
rb_hash_aset(error_context,
|
650
|
+
rb_id2sym(rb_intern("last_dispatched_from")),
|
651
|
+
rb_external_str_new(ctx.last_dispatched_from->data(), static_cast<long>(ctx.last_dispatched_from->size())));
|
652
|
+
}
|
653
|
+
rb_iv_set(exc, "@context", error_context);
|
654
|
+
return exc;
|
655
|
+
}
|
656
|
+
|
657
|
+
static VALUE
|
658
|
+
cb__map_error_code(const couchbase::error_context::query& ctx, const std::string& message)
|
659
|
+
{
|
660
|
+
VALUE exc = cb__map_error_code(ctx.ec, message);
|
661
|
+
VALUE error_context = rb_hash_new();
|
662
|
+
std::string error(fmt::format("{}, {}", ctx.ec.value(), ctx.ec.message()));
|
663
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("error")), rb_external_str_new(error.data(), static_cast<long>(error.size())));
|
664
|
+
rb_hash_aset(error_context,
|
665
|
+
rb_id2sym(rb_intern("client_context_id")),
|
666
|
+
rb_external_str_new(ctx.client_context_id.data(), static_cast<long>(ctx.client_context_id.size())));
|
667
|
+
rb_hash_aset(
|
668
|
+
error_context, rb_id2sym(rb_intern("statement")), rb_external_str_new(ctx.statement.data(), static_cast<long>(ctx.statement.size())));
|
669
|
+
if (ctx.parameters) {
|
670
|
+
rb_hash_aset(error_context,
|
671
|
+
rb_id2sym(rb_intern("parameters")),
|
672
|
+
rb_external_str_new(ctx.parameters->data(), static_cast<long>(ctx.parameters->size())));
|
673
|
+
}
|
674
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("http_status")), INT2FIX(ctx.http_status));
|
675
|
+
rb_hash_aset(
|
676
|
+
error_context, rb_id2sym(rb_intern("http_body")), rb_external_str_new(ctx.http_body.data(), static_cast<long>(ctx.http_body.size())));
|
677
|
+
if (ctx.retry_attempts > 0) {
|
678
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("retry_attempts")), INT2FIX(ctx.retry_attempts));
|
679
|
+
if (!ctx.retry_reasons.empty()) {
|
680
|
+
VALUE retry_reasons = rb_ary_new_capa(static_cast<long>(ctx.retry_reasons.size()));
|
681
|
+
for (const auto& reason : ctx.retry_reasons) {
|
682
|
+
auto reason_str = fmt::format("{}", reason);
|
683
|
+
rb_ary_push(retry_reasons, rb_id2sym(rb_intern(reason_str.c_str())));
|
684
|
+
}
|
685
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("retry_reasons")), retry_reasons);
|
686
|
+
}
|
687
|
+
}
|
688
|
+
if (ctx.last_dispatched_to) {
|
689
|
+
rb_hash_aset(error_context,
|
690
|
+
rb_id2sym(rb_intern("last_dispatched_to")),
|
691
|
+
rb_external_str_new(ctx.last_dispatched_to->data(), static_cast<long>(ctx.last_dispatched_to->size())));
|
692
|
+
}
|
693
|
+
if (ctx.last_dispatched_from) {
|
694
|
+
rb_hash_aset(error_context,
|
695
|
+
rb_id2sym(rb_intern("last_dispatched_from")),
|
696
|
+
rb_external_str_new(ctx.last_dispatched_from->data(), static_cast<long>(ctx.last_dispatched_from->size())));
|
697
|
+
}
|
698
|
+
rb_iv_set(exc, "@context", error_context);
|
699
|
+
return exc;
|
700
|
+
}
|
701
|
+
|
702
|
+
static VALUE
|
703
|
+
cb__map_error_code(const couchbase::error_context::analytics& ctx, const std::string& message)
|
704
|
+
{
|
705
|
+
VALUE exc = cb__map_error_code(ctx.ec, message);
|
706
|
+
VALUE error_context = rb_hash_new();
|
707
|
+
std::string error(fmt::format("{}, {}", ctx.ec.value(), ctx.ec.message()));
|
708
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("error")), rb_external_str_new(error.data(), static_cast<long>(error.size())));
|
709
|
+
rb_hash_aset(error_context,
|
710
|
+
rb_id2sym(rb_intern("client_context_id")),
|
711
|
+
rb_external_str_new(ctx.client_context_id.data(), static_cast<long>(ctx.client_context_id.size())));
|
712
|
+
rb_hash_aset(
|
713
|
+
error_context, rb_id2sym(rb_intern("statement")), rb_external_str_new(ctx.statement.data(), static_cast<long>(ctx.statement.size())));
|
714
|
+
if (ctx.parameters) {
|
715
|
+
rb_hash_aset(error_context,
|
716
|
+
rb_id2sym(rb_intern("parameters")),
|
717
|
+
rb_external_str_new(ctx.parameters->data(), static_cast<long>(ctx.parameters->size())));
|
718
|
+
}
|
719
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("http_status")), INT2FIX(ctx.http_status));
|
720
|
+
rb_hash_aset(
|
721
|
+
error_context, rb_id2sym(rb_intern("http_body")), rb_external_str_new(ctx.http_body.data(), static_cast<long>(ctx.http_body.size())));
|
722
|
+
if (ctx.retry_attempts > 0) {
|
723
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("retry_attempts")), INT2FIX(ctx.retry_attempts));
|
724
|
+
if (!ctx.retry_reasons.empty()) {
|
725
|
+
VALUE retry_reasons = rb_ary_new_capa(static_cast<long>(ctx.retry_reasons.size()));
|
726
|
+
for (const auto& reason : ctx.retry_reasons) {
|
727
|
+
auto reason_str = fmt::format("{}", reason);
|
728
|
+
rb_ary_push(retry_reasons, rb_id2sym(rb_intern(reason_str.c_str())));
|
729
|
+
}
|
730
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("retry_reasons")), retry_reasons);
|
731
|
+
}
|
732
|
+
}
|
733
|
+
if (ctx.last_dispatched_to) {
|
734
|
+
rb_hash_aset(error_context,
|
735
|
+
rb_id2sym(rb_intern("last_dispatched_to")),
|
736
|
+
rb_external_str_new(ctx.last_dispatched_to->data(), static_cast<long>(ctx.last_dispatched_to->size())));
|
737
|
+
}
|
738
|
+
if (ctx.last_dispatched_from) {
|
739
|
+
rb_hash_aset(error_context,
|
740
|
+
rb_id2sym(rb_intern("last_dispatched_from")),
|
741
|
+
rb_external_str_new(ctx.last_dispatched_from->data(), static_cast<long>(ctx.last_dispatched_from->size())));
|
742
|
+
}
|
743
|
+
rb_iv_set(exc, "@context", error_context);
|
744
|
+
return exc;
|
745
|
+
}
|
746
|
+
|
747
|
+
static VALUE
|
748
|
+
cb__map_error_code(const couchbase::error_context::view& ctx, const std::string& message)
|
749
|
+
{
|
750
|
+
VALUE exc = cb__map_error_code(ctx.ec, message);
|
751
|
+
VALUE error_context = rb_hash_new();
|
752
|
+
std::string error(fmt::format("{}, {}", ctx.ec.value(), ctx.ec.message()));
|
753
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("error")), rb_external_str_new(error.data(), static_cast<long>(error.size())));
|
754
|
+
rb_hash_aset(error_context,
|
755
|
+
rb_id2sym(rb_intern("client_context_id")),
|
756
|
+
rb_external_str_new(ctx.client_context_id.data(), static_cast<long>(ctx.client_context_id.size())));
|
757
|
+
rb_hash_aset(error_context,
|
758
|
+
rb_id2sym(rb_intern("design_document_name")),
|
759
|
+
rb_external_str_new(ctx.design_document_name.data(), static_cast<long>(ctx.design_document_name.size())));
|
760
|
+
rb_hash_aset(
|
761
|
+
error_context, rb_id2sym(rb_intern("view_name")), rb_external_str_new(ctx.view_name.data(), static_cast<long>(ctx.view_name.size())));
|
762
|
+
if (!ctx.query_string.empty()) {
|
763
|
+
VALUE parameters = rb_ary_new_capa(static_cast<long>(ctx.query_string.size()));
|
764
|
+
for (const auto& param : ctx.query_string) {
|
765
|
+
rb_ary_push(parameters, rb_external_str_new(param.data(), static_cast<long>(param.size())));
|
766
|
+
}
|
767
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("parameters")), parameters);
|
768
|
+
}
|
769
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("http_status")), INT2FIX(ctx.http_status));
|
770
|
+
rb_hash_aset(
|
771
|
+
error_context, rb_id2sym(rb_intern("http_body")), rb_external_str_new(ctx.http_body.data(), static_cast<long>(ctx.http_body.size())));
|
772
|
+
if (ctx.retry_attempts > 0) {
|
773
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("retry_attempts")), INT2FIX(ctx.retry_attempts));
|
774
|
+
if (!ctx.retry_reasons.empty()) {
|
775
|
+
VALUE retry_reasons = rb_ary_new_capa(static_cast<long>(ctx.retry_reasons.size()));
|
776
|
+
for (const auto& reason : ctx.retry_reasons) {
|
777
|
+
auto reason_str = fmt::format("{}", reason);
|
778
|
+
rb_ary_push(retry_reasons, rb_id2sym(rb_intern(reason_str.c_str())));
|
779
|
+
}
|
780
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("retry_reasons")), retry_reasons);
|
781
|
+
}
|
782
|
+
}
|
783
|
+
if (ctx.last_dispatched_to) {
|
784
|
+
rb_hash_aset(error_context,
|
785
|
+
rb_id2sym(rb_intern("last_dispatched_to")),
|
786
|
+
rb_external_str_new(ctx.last_dispatched_to->data(), static_cast<long>(ctx.last_dispatched_to->size())));
|
787
|
+
}
|
788
|
+
if (ctx.last_dispatched_from) {
|
789
|
+
rb_hash_aset(error_context,
|
790
|
+
rb_id2sym(rb_intern("last_dispatched_from")),
|
791
|
+
rb_external_str_new(ctx.last_dispatched_from->data(), static_cast<long>(ctx.last_dispatched_from->size())));
|
792
|
+
}
|
793
|
+
rb_iv_set(exc, "@context", error_context);
|
794
|
+
return exc;
|
795
|
+
}
|
796
|
+
|
797
|
+
static VALUE
|
798
|
+
cb__map_error_code(const couchbase::error_context::http& ctx, const std::string& message)
|
799
|
+
{
|
800
|
+
VALUE exc = cb__map_error_code(ctx.ec, message);
|
801
|
+
VALUE error_context = rb_hash_new();
|
802
|
+
std::string error(fmt::format("{}, {}", ctx.ec.value(), ctx.ec.message()));
|
803
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("error")), rb_external_str_new(error.data(), static_cast<long>(error.size())));
|
804
|
+
rb_hash_aset(error_context,
|
805
|
+
rb_id2sym(rb_intern("client_context_id")),
|
806
|
+
rb_external_str_new(ctx.client_context_id.data(), static_cast<long>(ctx.client_context_id.size())));
|
807
|
+
rb_hash_aset(
|
808
|
+
error_context, rb_id2sym(rb_intern("method")), rb_external_str_new(ctx.method.data(), static_cast<long>(ctx.method.size())));
|
809
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("path")), rb_external_str_new(ctx.path.data(), static_cast<long>(ctx.path.size())));
|
810
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("http_status")), INT2FIX(ctx.http_status));
|
811
|
+
rb_hash_aset(
|
812
|
+
error_context, rb_id2sym(rb_intern("http_body")), rb_external_str_new(ctx.http_body.data(), static_cast<long>(ctx.http_body.size())));
|
813
|
+
if (ctx.retry_attempts > 0) {
|
814
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("retry_attempts")), INT2FIX(ctx.retry_attempts));
|
815
|
+
if (!ctx.retry_reasons.empty()) {
|
816
|
+
VALUE retry_reasons = rb_ary_new_capa(static_cast<long>(ctx.retry_reasons.size()));
|
817
|
+
for (const auto& reason : ctx.retry_reasons) {
|
818
|
+
auto reason_str = fmt::format("{}", reason);
|
819
|
+
rb_ary_push(retry_reasons, rb_id2sym(rb_intern(reason_str.c_str())));
|
820
|
+
}
|
821
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("retry_reasons")), retry_reasons);
|
822
|
+
}
|
823
|
+
}
|
824
|
+
if (ctx.last_dispatched_to) {
|
825
|
+
rb_hash_aset(error_context,
|
826
|
+
rb_id2sym(rb_intern("last_dispatched_to")),
|
827
|
+
rb_external_str_new(ctx.last_dispatched_to->data(), static_cast<long>(ctx.last_dispatched_to->size())));
|
828
|
+
}
|
829
|
+
if (ctx.last_dispatched_from) {
|
830
|
+
rb_hash_aset(error_context,
|
831
|
+
rb_id2sym(rb_intern("last_dispatched_from")),
|
832
|
+
rb_external_str_new(ctx.last_dispatched_from->data(), static_cast<long>(ctx.last_dispatched_from->size())));
|
833
|
+
}
|
834
|
+
rb_iv_set(exc, "@context", error_context);
|
835
|
+
return exc;
|
836
|
+
}
|
837
|
+
|
838
|
+
static VALUE
|
839
|
+
cb__map_error_code(const couchbase::error_context::search& ctx, const std::string& message)
|
840
|
+
{
|
841
|
+
VALUE exc = cb__map_error_code(ctx.ec, message);
|
842
|
+
VALUE error_context = rb_hash_new();
|
843
|
+
std::string error(fmt::format("{}, {}", ctx.ec.value(), ctx.ec.message()));
|
844
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("error")), rb_external_str_new(error.data(), static_cast<long>(error.size())));
|
845
|
+
rb_hash_aset(error_context,
|
846
|
+
rb_id2sym(rb_intern("client_context_id")),
|
847
|
+
rb_external_str_new(ctx.client_context_id.data(), static_cast<long>(ctx.client_context_id.size())));
|
848
|
+
rb_hash_aset(error_context,
|
849
|
+
rb_id2sym(rb_intern("index_name")),
|
850
|
+
rb_external_str_new(ctx.index_name.data(), static_cast<long>(ctx.index_name.size())));
|
851
|
+
if (ctx.query) {
|
852
|
+
rb_hash_aset(
|
853
|
+
error_context, rb_id2sym(rb_intern("query")), rb_external_str_new(ctx.query->data(), static_cast<long>(ctx.query->size())));
|
854
|
+
}
|
855
|
+
if (ctx.parameters) {
|
856
|
+
rb_hash_aset(error_context,
|
857
|
+
rb_id2sym(rb_intern("parameters")),
|
858
|
+
rb_external_str_new(ctx.parameters->data(), static_cast<long>(ctx.parameters->size())));
|
859
|
+
}
|
860
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("http_status")), INT2FIX(ctx.http_status));
|
861
|
+
rb_hash_aset(
|
862
|
+
error_context, rb_id2sym(rb_intern("http_body")), rb_external_str_new(ctx.http_body.data(), static_cast<long>(ctx.http_body.size())));
|
863
|
+
if (ctx.retry_attempts > 0) {
|
864
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("retry_attempts")), INT2FIX(ctx.retry_attempts));
|
865
|
+
if (!ctx.retry_reasons.empty()) {
|
866
|
+
VALUE retry_reasons = rb_ary_new_capa(static_cast<long>(ctx.retry_reasons.size()));
|
867
|
+
for (const auto& reason : ctx.retry_reasons) {
|
868
|
+
auto reason_str = fmt::format("{}", reason);
|
869
|
+
rb_ary_push(retry_reasons, rb_id2sym(rb_intern(reason_str.c_str())));
|
870
|
+
}
|
871
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("retry_reasons")), retry_reasons);
|
872
|
+
}
|
873
|
+
}
|
874
|
+
if (ctx.last_dispatched_to) {
|
875
|
+
rb_hash_aset(error_context,
|
876
|
+
rb_id2sym(rb_intern("last_dispatched_to")),
|
877
|
+
rb_external_str_new(ctx.last_dispatched_to->data(), static_cast<long>(ctx.last_dispatched_to->size())));
|
878
|
+
}
|
879
|
+
if (ctx.last_dispatched_from) {
|
880
|
+
rb_hash_aset(error_context,
|
881
|
+
rb_id2sym(rb_intern("last_dispatched_from")),
|
882
|
+
rb_external_str_new(ctx.last_dispatched_from->data(), static_cast<long>(ctx.last_dispatched_from->size())));
|
883
|
+
}
|
884
|
+
rb_iv_set(exc, "@context", error_context);
|
885
|
+
return exc;
|
886
|
+
}
|
887
|
+
|
587
888
|
static VALUE
|
588
889
|
cb_Backend_open(VALUE self, VALUE connection_string, VALUE credentials, VALUE options)
|
589
890
|
{
|
@@ -628,6 +929,24 @@ cb_Backend_open(VALUE self, VALUE connection_string, VALUE credentials, VALUE op
|
|
628
929
|
if (NIL_P(certificate_path) || NIL_P(key_path)) {
|
629
930
|
auth.username.assign(RSTRING_PTR(username), static_cast<size_t>(RSTRING_LEN(username)));
|
630
931
|
auth.password.assign(RSTRING_PTR(password), static_cast<size_t>(RSTRING_LEN(password)));
|
932
|
+
VALUE allowed_mechanisms = rb_hash_aref(options, rb_id2sym(rb_intern("allowed_sasl_mechanisms")));
|
933
|
+
if (!NIL_P(allowed_mechanisms)) {
|
934
|
+
Check_Type(allowed_mechanisms, T_ARRAY);
|
935
|
+
auto allowed_mechanisms_size = static_cast<size_t>(RARRAY_LEN(allowed_mechanisms));
|
936
|
+
auth.allowed_sasl_mechanisms.reserve(allowed_mechanisms_size);
|
937
|
+
for (size_t i = 0; i < allowed_mechanisms_size; ++i) {
|
938
|
+
VALUE mechanism = rb_ary_entry(allowed_mechanisms, static_cast<long>(i));
|
939
|
+
if (mechanism == rb_id2sym(rb_intern("scram_sha512"))) {
|
940
|
+
auth.allowed_sasl_mechanisms.emplace_back("SCRAM-SHA512");
|
941
|
+
} else if (mechanism == rb_id2sym(rb_intern("scram_sha256"))) {
|
942
|
+
auth.allowed_sasl_mechanisms.emplace_back("SCRAM-SHA256");
|
943
|
+
} else if (mechanism == rb_id2sym(rb_intern("scram_sha1"))) {
|
944
|
+
auth.allowed_sasl_mechanisms.emplace_back("SCRAM-SHA1");
|
945
|
+
} else if (mechanism == rb_id2sym(rb_intern("plain"))) {
|
946
|
+
auth.allowed_sasl_mechanisms.emplace_back("PLAIN");
|
947
|
+
}
|
948
|
+
}
|
949
|
+
}
|
631
950
|
} else {
|
632
951
|
if (!connstr.tls) {
|
633
952
|
exc = rb_exc_new_cstr(
|
@@ -638,7 +957,7 @@ cb_Backend_open(VALUE self, VALUE connection_string, VALUE credentials, VALUE op
|
|
638
957
|
auth.certificate_path.assign(RSTRING_PTR(certificate_path), static_cast<size_t>(RSTRING_LEN(certificate_path)));
|
639
958
|
auth.key_path.assign(RSTRING_PTR(key_path), static_cast<size_t>(RSTRING_LEN(key_path)));
|
640
959
|
}
|
641
|
-
couchbase::origin origin(auth,
|
960
|
+
couchbase::origin origin(auth, connstr);
|
642
961
|
auto barrier = std::make_shared<std::promise<std::error_code>>();
|
643
962
|
auto f = barrier->get_future();
|
644
963
|
backend->cluster->open(origin, [barrier](std::error_code ec) mutable { barrier->set_value(ec); });
|
@@ -688,8 +1007,8 @@ cb_Backend_diagnostics(VALUE self, VALUE report_id)
|
|
688
1007
|
auto resp = f.get();
|
689
1008
|
|
690
1009
|
VALUE res = rb_hash_new();
|
691
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("id")),
|
692
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("sdk")),
|
1010
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("id")), rb_external_str_new(resp.id.data(), static_cast<long>(resp.id.size())));
|
1011
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("sdk")), rb_external_str_new(resp.sdk.data(), static_cast<long>(resp.sdk.size())));
|
693
1012
|
rb_hash_aset(res, rb_id2sym(rb_intern("version")), INT2FIX(resp.version));
|
694
1013
|
VALUE services = rb_hash_new();
|
695
1014
|
rb_hash_aset(res, rb_id2sym(rb_intern("services")), services);
|
@@ -722,9 +1041,11 @@ cb_Backend_diagnostics(VALUE self, VALUE report_id)
|
|
722
1041
|
if (svc.last_activity) {
|
723
1042
|
rb_hash_aset(service, rb_id2sym(rb_intern("last_activity_us")), LL2NUM(svc.last_activity->count()));
|
724
1043
|
}
|
725
|
-
rb_hash_aset(service, rb_id2sym(rb_intern("id")),
|
726
|
-
rb_hash_aset(
|
727
|
-
|
1044
|
+
rb_hash_aset(service, rb_id2sym(rb_intern("id")), rb_external_str_new(svc.id.data(), static_cast<long>(svc.id.size())));
|
1045
|
+
rb_hash_aset(
|
1046
|
+
service, rb_id2sym(rb_intern("remote")), rb_external_str_new(svc.remote.data(), static_cast<long>(svc.remote.size())));
|
1047
|
+
rb_hash_aset(
|
1048
|
+
service, rb_id2sym(rb_intern("local")), rb_external_str_new(svc.local.data(), static_cast<long>(svc.local.size())));
|
728
1049
|
VALUE state = Qnil;
|
729
1050
|
switch (svc.state) {
|
730
1051
|
case couchbase::diag::endpoint_state::disconnected:
|
@@ -741,8 +1062,9 @@ cb_Backend_diagnostics(VALUE self, VALUE report_id)
|
|
741
1062
|
break;
|
742
1063
|
}
|
743
1064
|
if (svc.details) {
|
744
|
-
rb_hash_aset(
|
745
|
-
|
1065
|
+
rb_hash_aset(service,
|
1066
|
+
rb_id2sym(rb_intern("details")),
|
1067
|
+
rb_external_str_new(svc.details->data(), static_cast<long>(svc.details->size())));
|
746
1068
|
}
|
747
1069
|
rb_hash_aset(service, rb_id2sym(rb_intern("state")), state);
|
748
1070
|
rb_ary_push(endpoints, service);
|
@@ -1182,8 +1504,8 @@ cb_Backend_ping(VALUE self, VALUE bucket, VALUE options)
|
|
1182
1504
|
auto resp = f.get();
|
1183
1505
|
|
1184
1506
|
VALUE res = rb_hash_new();
|
1185
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("id")),
|
1186
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("sdk")),
|
1507
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("id")), rb_external_str_new(resp.id.data(), static_cast<long>(resp.id.size())));
|
1508
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("sdk")), rb_external_str_new(resp.sdk.data(), static_cast<long>(resp.sdk.size())));
|
1187
1509
|
rb_hash_aset(res, rb_id2sym(rb_intern("version")), INT2FIX(resp.version));
|
1188
1510
|
services = rb_hash_new();
|
1189
1511
|
rb_hash_aset(res, rb_id2sym(rb_intern("services")), services);
|
@@ -1214,9 +1536,11 @@ cb_Backend_ping(VALUE self, VALUE bucket, VALUE options)
|
|
1214
1536
|
for (const auto& svc : svcs.second) {
|
1215
1537
|
VALUE service = rb_hash_new();
|
1216
1538
|
rb_hash_aset(service, rb_id2sym(rb_intern("latency")), LL2NUM(svc.latency.count()));
|
1217
|
-
rb_hash_aset(service, rb_id2sym(rb_intern("id")),
|
1218
|
-
rb_hash_aset(
|
1219
|
-
|
1539
|
+
rb_hash_aset(service, rb_id2sym(rb_intern("id")), rb_external_str_new(svc.id.data(), static_cast<long>(svc.id.size())));
|
1540
|
+
rb_hash_aset(
|
1541
|
+
service, rb_id2sym(rb_intern("remote")), rb_external_str_new(svc.remote.data(), static_cast<long>(svc.remote.size())));
|
1542
|
+
rb_hash_aset(
|
1543
|
+
service, rb_id2sym(rb_intern("local")), rb_external_str_new(svc.local.data(), static_cast<long>(svc.local.size())));
|
1220
1544
|
VALUE state = Qnil;
|
1221
1545
|
switch (svc.state) {
|
1222
1546
|
case couchbase::diag::ping_state::ok:
|
@@ -1228,8 +1552,9 @@ cb_Backend_ping(VALUE self, VALUE bucket, VALUE options)
|
|
1228
1552
|
case couchbase::diag::ping_state::error:
|
1229
1553
|
state = rb_id2sym(rb_intern("error"));
|
1230
1554
|
if (svc.error) {
|
1231
|
-
rb_hash_aset(
|
1232
|
-
|
1555
|
+
rb_hash_aset(service,
|
1556
|
+
rb_id2sym(rb_intern("error")),
|
1557
|
+
rb_external_str_new(svc.error->data(), static_cast<long>(svc.error->size())));
|
1233
1558
|
}
|
1234
1559
|
break;
|
1235
1560
|
}
|
@@ -1274,13 +1599,13 @@ cb_Backend_document_get(VALUE self, VALUE bucket, VALUE collection, VALUE id, VA
|
|
1274
1599
|
auto f = barrier->get_future();
|
1275
1600
|
backend->cluster->execute(req, [barrier](couchbase::operations::get_response&& resp) mutable { barrier->set_value(resp); });
|
1276
1601
|
auto resp = f.get();
|
1277
|
-
if (resp.ec) {
|
1278
|
-
exc = cb__map_error_code(resp.
|
1602
|
+
if (resp.ctx.ec) {
|
1603
|
+
exc = cb__map_error_code(resp.ctx, "unable to fetch document");
|
1279
1604
|
break;
|
1280
1605
|
}
|
1281
1606
|
|
1282
1607
|
VALUE res = rb_hash_new();
|
1283
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("content")),
|
1608
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("content")), rb_external_str_new(resp.value.data(), static_cast<long>(resp.value.size())));
|
1284
1609
|
rb_hash_aset(res, rb_id2sym(rb_intern("cas")), ULL2NUM(resp.cas));
|
1285
1610
|
rb_hash_aset(res, rb_id2sym(rb_intern("flags")), UINT2NUM(resp.flags));
|
1286
1611
|
return res;
|
@@ -1332,12 +1657,11 @@ cb_Backend_document_get_multi(VALUE self, VALUE keys, VALUE options)
|
|
1332
1657
|
for (auto& barrier : barriers) {
|
1333
1658
|
auto resp = barrier->get_future().get();
|
1334
1659
|
VALUE entry = rb_hash_new();
|
1335
|
-
if (resp.ec) {
|
1336
|
-
rb_hash_aset(entry,
|
1337
|
-
rb_id2sym(rb_intern("error")),
|
1338
|
-
cb__map_error_code(resp.ec, fmt::format(R"(unable fetch "{}" (opaque={}))", resp.id, resp.opaque)));
|
1660
|
+
if (resp.ctx.ec) {
|
1661
|
+
rb_hash_aset(entry, rb_id2sym(rb_intern("error")), cb__map_error_code(resp.ctx, "unable to (multi)fetch document"));
|
1339
1662
|
}
|
1340
|
-
rb_hash_aset(
|
1663
|
+
rb_hash_aset(
|
1664
|
+
entry, rb_id2sym(rb_intern("content")), rb_external_str_new(resp.value.data(), static_cast<long>(resp.value.size())));
|
1341
1665
|
rb_hash_aset(entry, rb_id2sym(rb_intern("cas")), ULL2NUM(resp.cas));
|
1342
1666
|
rb_hash_aset(entry, rb_id2sym(rb_intern("flags")), UINT2NUM(resp.flags));
|
1343
1667
|
rb_ary_push(res, entry);
|
@@ -1410,13 +1734,13 @@ cb_Backend_document_get_projected(VALUE self, VALUE bucket, VALUE collection, VA
|
|
1410
1734
|
backend->cluster->execute(req,
|
1411
1735
|
[barrier](couchbase::operations::get_projected_response&& resp) mutable { barrier->set_value(resp); });
|
1412
1736
|
auto resp = f.get();
|
1413
|
-
if (resp.ec) {
|
1414
|
-
exc = cb__map_error_code(resp.
|
1737
|
+
if (resp.ctx.ec) {
|
1738
|
+
exc = cb__map_error_code(resp.ctx, "unable fetch with projections");
|
1415
1739
|
break;
|
1416
1740
|
}
|
1417
1741
|
|
1418
1742
|
VALUE res = rb_hash_new();
|
1419
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("content")),
|
1743
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("content")), rb_external_str_new(resp.value.data(), static_cast<long>(resp.value.size())));
|
1420
1744
|
rb_hash_aset(res, rb_id2sym(rb_intern("cas")), ULL2NUM(resp.cas));
|
1421
1745
|
rb_hash_aset(res, rb_id2sym(rb_intern("flags")), UINT2NUM(resp.flags));
|
1422
1746
|
if (resp.expiry) {
|
@@ -1466,13 +1790,13 @@ cb_Backend_document_get_and_lock(VALUE self, VALUE bucket, VALUE collection, VAL
|
|
1466
1790
|
backend->cluster->execute(req,
|
1467
1791
|
[barrier](couchbase::operations::get_and_lock_response&& resp) mutable { barrier->set_value(resp); });
|
1468
1792
|
auto resp = f.get();
|
1469
|
-
if (resp.ec) {
|
1470
|
-
exc = cb__map_error_code(resp.
|
1793
|
+
if (resp.ctx.ec) {
|
1794
|
+
exc = cb__map_error_code(resp.ctx, "unable lock and fetch");
|
1471
1795
|
break;
|
1472
1796
|
}
|
1473
1797
|
|
1474
1798
|
VALUE res = rb_hash_new();
|
1475
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("content")),
|
1799
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("content")), rb_external_str_new(resp.value.data(), static_cast<long>(resp.value.size())));
|
1476
1800
|
rb_hash_aset(res, rb_id2sym(rb_intern("cas")), ULL2NUM(resp.cas));
|
1477
1801
|
rb_hash_aset(res, rb_id2sym(rb_intern("flags")), UINT2NUM(resp.flags));
|
1478
1802
|
return res;
|
@@ -1519,13 +1843,13 @@ cb_Backend_document_get_and_touch(VALUE self, VALUE bucket, VALUE collection, VA
|
|
1519
1843
|
backend->cluster->execute(req,
|
1520
1844
|
[barrier](couchbase::operations::get_and_touch_response&& resp) mutable { barrier->set_value(resp); });
|
1521
1845
|
auto resp = f.get();
|
1522
|
-
if (resp.ec) {
|
1523
|
-
exc = cb__map_error_code(resp.
|
1846
|
+
if (resp.ctx.ec) {
|
1847
|
+
exc = cb__map_error_code(resp.ctx, "unable fetch and touch");
|
1524
1848
|
break;
|
1525
1849
|
}
|
1526
1850
|
|
1527
1851
|
VALUE res = rb_hash_new();
|
1528
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("content")),
|
1852
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("content")), rb_external_str_new(resp.value.data(), static_cast<long>(resp.value.size())));
|
1529
1853
|
rb_hash_aset(res, rb_id2sym(rb_intern("cas")), ULL2NUM(resp.cas));
|
1530
1854
|
rb_hash_aset(res, rb_id2sym(rb_intern("flags")), UINT2NUM(resp.flags));
|
1531
1855
|
return res;
|
@@ -1542,11 +1866,11 @@ cb__extract_mutation_result(Response resp)
|
|
1542
1866
|
rb_hash_aset(res, rb_id2sym(rb_intern("cas")), ULL2NUM(resp.cas));
|
1543
1867
|
VALUE token = rb_hash_new();
|
1544
1868
|
rb_hash_aset(token, rb_id2sym(rb_intern("partition_uuid")), ULL2NUM(resp.token.partition_uuid));
|
1545
|
-
rb_hash_aset(token, rb_id2sym(rb_intern("sequence_number")),
|
1869
|
+
rb_hash_aset(token, rb_id2sym(rb_intern("sequence_number")), ULL2NUM(resp.token.sequence_number));
|
1546
1870
|
rb_hash_aset(token, rb_id2sym(rb_intern("partition_id")), UINT2NUM(resp.token.partition_id));
|
1547
1871
|
rb_hash_aset(token,
|
1548
1872
|
rb_id2sym(rb_intern("bucket_name")),
|
1549
|
-
|
1873
|
+
rb_external_str_new(resp.token.bucket_name.c_str(), static_cast<long>(resp.token.bucket_name.size())));
|
1550
1874
|
rb_hash_aset(res, rb_id2sym(rb_intern("mutation_token")), token);
|
1551
1875
|
return res;
|
1552
1876
|
}
|
@@ -1588,8 +1912,8 @@ cb_Backend_document_touch(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
1588
1912
|
auto f = barrier->get_future();
|
1589
1913
|
backend->cluster->execute(req, [barrier](couchbase::operations::touch_response&& resp) mutable { barrier->set_value(resp); });
|
1590
1914
|
auto resp = f.get();
|
1591
|
-
if (resp.ec) {
|
1592
|
-
exc = cb__map_error_code(resp.
|
1915
|
+
if (resp.ctx.ec) {
|
1916
|
+
exc = cb__map_error_code(resp.ctx, "unable to touch");
|
1593
1917
|
break;
|
1594
1918
|
}
|
1595
1919
|
|
@@ -1636,8 +1960,8 @@ cb_Backend_document_exists(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
1636
1960
|
auto f = barrier->get_future();
|
1637
1961
|
backend->cluster->execute(req, [barrier](couchbase::operations::exists_response&& resp) mutable { barrier->set_value(resp); });
|
1638
1962
|
auto resp = f.get();
|
1639
|
-
if (resp.ec) {
|
1640
|
-
exc = cb__map_error_code(resp.
|
1963
|
+
if (resp.ctx.ec) {
|
1964
|
+
exc = cb__map_error_code(resp.ctx, "unable to exists");
|
1641
1965
|
break;
|
1642
1966
|
}
|
1643
1967
|
|
@@ -1713,8 +2037,8 @@ cb_Backend_document_unlock(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
1713
2037
|
auto f = barrier->get_future();
|
1714
2038
|
backend->cluster->execute(req, [barrier](couchbase::operations::unlock_response&& resp) mutable { barrier->set_value(resp); });
|
1715
2039
|
auto resp = f.get();
|
1716
|
-
if (resp.ec) {
|
1717
|
-
exc = cb__map_error_code(resp.
|
2040
|
+
if (resp.ctx.ec) {
|
2041
|
+
exc = cb__map_error_code(resp.ctx, "unable to unlock");
|
1718
2042
|
break;
|
1719
2043
|
}
|
1720
2044
|
|
@@ -1778,8 +2102,8 @@ cb_Backend_document_upsert(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
1778
2102
|
auto f = barrier->get_future();
|
1779
2103
|
backend->cluster->execute(req, [barrier](couchbase::operations::upsert_response&& resp) mutable { barrier->set_value(resp); });
|
1780
2104
|
auto resp = f.get();
|
1781
|
-
if (resp.ec) {
|
1782
|
-
exc = cb__map_error_code(resp.
|
2105
|
+
if (resp.ctx.ec) {
|
2106
|
+
exc = cb__map_error_code(resp.ctx, "unable to upsert");
|
1783
2107
|
break;
|
1784
2108
|
}
|
1785
2109
|
|
@@ -1850,10 +2174,8 @@ cb_Backend_document_upsert_multi(VALUE self, VALUE id_content, VALUE options)
|
|
1850
2174
|
for (auto& barrier : barriers) {
|
1851
2175
|
auto resp = barrier->get_future().get();
|
1852
2176
|
VALUE entry = cb__extract_mutation_result(resp);
|
1853
|
-
if (resp.ec) {
|
1854
|
-
rb_hash_aset(entry,
|
1855
|
-
rb_id2sym(rb_intern("error")),
|
1856
|
-
cb__map_error_code(resp.ec, fmt::format(R"(unable upsert "{}" (opaque={}))", resp.id, resp.opaque)));
|
2177
|
+
if (resp.ctx.ec) {
|
2178
|
+
rb_hash_aset(entry, rb_id2sym(rb_intern("error")), cb__map_error_code(resp.ctx, "unable (multi)upsert"));
|
1857
2179
|
}
|
1858
2180
|
rb_ary_push(res, entry);
|
1859
2181
|
}
|
@@ -1904,8 +2226,8 @@ cb_Backend_document_append(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
1904
2226
|
auto f = barrier->get_future();
|
1905
2227
|
backend->cluster->execute(req, [barrier](couchbase::operations::append_response&& resp) mutable { barrier->set_value(resp); });
|
1906
2228
|
auto resp = f.get();
|
1907
|
-
if (resp.ec) {
|
1908
|
-
exc = cb__map_error_code(resp.
|
2229
|
+
if (resp.ctx.ec) {
|
2230
|
+
exc = cb__map_error_code(resp.ctx, "unable to append");
|
1909
2231
|
break;
|
1910
2232
|
}
|
1911
2233
|
|
@@ -1956,8 +2278,8 @@ cb_Backend_document_prepend(VALUE self, VALUE bucket, VALUE collection, VALUE id
|
|
1956
2278
|
auto f = barrier->get_future();
|
1957
2279
|
backend->cluster->execute(req, [barrier](couchbase::operations::prepend_response&& resp) mutable { barrier->set_value(resp); });
|
1958
2280
|
auto resp = f.get();
|
1959
|
-
if (resp.ec) {
|
1960
|
-
exc = cb__map_error_code(resp.
|
2281
|
+
if (resp.ctx.ec) {
|
2282
|
+
exc = cb__map_error_code(resp.ctx, "unable to prepend");
|
1961
2283
|
break;
|
1962
2284
|
}
|
1963
2285
|
|
@@ -2027,8 +2349,8 @@ cb_Backend_document_replace(VALUE self, VALUE bucket, VALUE collection, VALUE id
|
|
2027
2349
|
auto f = barrier->get_future();
|
2028
2350
|
backend->cluster->execute(req, [barrier](couchbase::operations::replace_response&& resp) mutable { barrier->set_value(resp); });
|
2029
2351
|
auto resp = f.get();
|
2030
|
-
if (resp.ec) {
|
2031
|
-
exc = cb__map_error_code(resp.
|
2352
|
+
if (resp.ctx.ec) {
|
2353
|
+
exc = cb__map_error_code(resp.ctx, "unable to replace");
|
2032
2354
|
break;
|
2033
2355
|
}
|
2034
2356
|
|
@@ -2090,8 +2412,8 @@ cb_Backend_document_insert(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
2090
2412
|
auto f = barrier->get_future();
|
2091
2413
|
backend->cluster->execute(req, [barrier](couchbase::operations::insert_response&& resp) mutable { barrier->set_value(resp); });
|
2092
2414
|
auto resp = f.get();
|
2093
|
-
if (resp.ec) {
|
2094
|
-
exc = cb__map_error_code(resp.
|
2415
|
+
if (resp.ctx.ec) {
|
2416
|
+
exc = cb__map_error_code(resp.ctx, "unable to insert");
|
2095
2417
|
break;
|
2096
2418
|
}
|
2097
2419
|
|
@@ -2148,8 +2470,8 @@ cb_Backend_document_remove(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
2148
2470
|
auto f = barrier->get_future();
|
2149
2471
|
backend->cluster->execute(req, [barrier](couchbase::operations::remove_response&& resp) mutable { barrier->set_value(resp); });
|
2150
2472
|
auto resp = f.get();
|
2151
|
-
if (resp.ec) {
|
2152
|
-
exc = cb__map_error_code(resp.
|
2473
|
+
if (resp.ctx.ec) {
|
2474
|
+
exc = cb__map_error_code(resp.ctx, "unable to remove");
|
2153
2475
|
break;
|
2154
2476
|
}
|
2155
2477
|
return cb__extract_mutation_result(resp);
|
@@ -2215,10 +2537,8 @@ cb_Backend_document_remove_multi(VALUE self, VALUE id_cas, VALUE options)
|
|
2215
2537
|
for (auto& barrier : barriers) {
|
2216
2538
|
auto resp = barrier->get_future().get();
|
2217
2539
|
VALUE entry = cb__extract_mutation_result(resp);
|
2218
|
-
if (resp.ec) {
|
2219
|
-
rb_hash_aset(entry,
|
2220
|
-
rb_id2sym(rb_intern("error")),
|
2221
|
-
cb__map_error_code(resp.ec, fmt::format(R"(unable remove "{}" (opaque={}))", resp.id, resp.opaque)));
|
2540
|
+
if (resp.ctx.ec) {
|
2541
|
+
rb_hash_aset(entry, rb_id2sym(rb_intern("error")), cb__map_error_code(resp.ctx, "unable (multi)remove"));
|
2222
2542
|
}
|
2223
2543
|
rb_ary_push(res, entry);
|
2224
2544
|
}
|
@@ -2292,8 +2612,8 @@ cb_Backend_document_increment(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
2292
2612
|
auto f = barrier->get_future();
|
2293
2613
|
backend->cluster->execute(req, [barrier](couchbase::operations::increment_response&& resp) mutable { barrier->set_value(resp); });
|
2294
2614
|
auto resp = f.get();
|
2295
|
-
if (resp.ec) {
|
2296
|
-
exc = cb__map_error_code(resp.ec, fmt::format(R"(unable to increment
|
2615
|
+
if (resp.ctx.ec) {
|
2616
|
+
exc = cb__map_error_code(resp.ctx.ec, fmt::format(R"(unable to increment by {})", req.delta));
|
2297
2617
|
break;
|
2298
2618
|
}
|
2299
2619
|
VALUE res = cb__extract_mutation_result(resp);
|
@@ -2367,8 +2687,8 @@ cb_Backend_document_decrement(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
2367
2687
|
auto f = barrier->get_future();
|
2368
2688
|
backend->cluster->execute(req, [barrier](couchbase::operations::decrement_response&& resp) mutable { barrier->set_value(resp); });
|
2369
2689
|
auto resp = f.get();
|
2370
|
-
if (resp.ec) {
|
2371
|
-
exc = cb__map_error_code(resp.
|
2690
|
+
if (resp.ctx.ec) {
|
2691
|
+
exc = cb__map_error_code(resp.ctx, fmt::format(R"(unable to decrement by {})", req.delta));
|
2372
2692
|
break;
|
2373
2693
|
}
|
2374
2694
|
VALUE res = cb__extract_mutation_result(resp);
|
@@ -2626,8 +2946,8 @@ cb_Backend_document_lookup_in(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
2626
2946
|
auto f = barrier->get_future();
|
2627
2947
|
backend->cluster->execute(req, [barrier](couchbase::operations::lookup_in_response&& resp) mutable { barrier->set_value(resp); });
|
2628
2948
|
auto resp = f.get();
|
2629
|
-
if (resp.ec) {
|
2630
|
-
exc = cb__map_error_code(resp.
|
2949
|
+
if (resp.ctx.ec) {
|
2950
|
+
exc = cb__map_error_code(resp.ctx, "unable fetch");
|
2631
2951
|
break;
|
2632
2952
|
}
|
2633
2953
|
|
@@ -2642,11 +2962,12 @@ cb_Backend_document_lookup_in(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
2642
2962
|
VALUE entry = rb_hash_new();
|
2643
2963
|
rb_hash_aset(entry, rb_id2sym(rb_intern("index")), ULL2NUM(i));
|
2644
2964
|
rb_hash_aset(entry, rb_id2sym(rb_intern("exists")), resp.fields[i].exists ? Qtrue : Qfalse);
|
2645
|
-
rb_hash_aset(
|
2646
|
-
|
2965
|
+
rb_hash_aset(entry,
|
2966
|
+
rb_id2sym(rb_intern("path")),
|
2967
|
+
rb_external_str_new(resp.fields[i].path.data(), static_cast<long>(resp.fields[i].path.size())));
|
2647
2968
|
rb_hash_aset(entry,
|
2648
2969
|
rb_id2sym(rb_intern("value")),
|
2649
|
-
|
2970
|
+
rb_external_str_new(resp.fields[i].value.data(), static_cast<long>(resp.fields[i].value.size())));
|
2650
2971
|
cb__map_subdoc_status(resp.fields[i].status, i, resp.fields[i].path, entry);
|
2651
2972
|
if (resp.fields[i].opcode == couchbase::protocol::subdoc_opcode::get && resp.fields[i].path.empty()) {
|
2652
2973
|
rb_hash_aset(entry, rb_id2sym(rb_intern("type")), rb_id2sym(rb_intern("get_doc")));
|
@@ -2805,14 +3126,14 @@ cb_Backend_document_mutate_in(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
2805
3126
|
auto f = barrier->get_future();
|
2806
3127
|
backend->cluster->execute(req, [barrier](couchbase::operations::mutate_in_response&& resp) mutable { barrier->set_value(resp); });
|
2807
3128
|
auto resp = f.get();
|
2808
|
-
if (resp.ec) {
|
2809
|
-
exc = cb__map_error_code(resp.
|
3129
|
+
if (resp.ctx.ec) {
|
3130
|
+
exc = cb__map_error_code(resp.ctx, "unable to mutate");
|
2810
3131
|
break;
|
2811
3132
|
}
|
2812
3133
|
|
2813
3134
|
VALUE res = cb__extract_mutation_result(resp);
|
2814
3135
|
if (resp.first_error_index) {
|
2815
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("first_error_index")),
|
3136
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("first_error_index")), ULL2NUM(resp.first_error_index.value()));
|
2816
3137
|
}
|
2817
3138
|
if (resp.deleted) {
|
2818
3139
|
rb_hash_aset(res, rb_id2sym(rb_intern("deleted")), Qtrue);
|
@@ -2822,18 +3143,19 @@ cb_Backend_document_mutate_in(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
2822
3143
|
for (size_t i = 0; i < resp.fields.size(); ++i) {
|
2823
3144
|
VALUE entry = rb_hash_new();
|
2824
3145
|
rb_hash_aset(entry, rb_id2sym(rb_intern("index")), ULL2NUM(i));
|
2825
|
-
rb_hash_aset(
|
2826
|
-
|
3146
|
+
rb_hash_aset(entry,
|
3147
|
+
rb_id2sym(rb_intern("path")),
|
3148
|
+
rb_external_str_new(resp.fields[i].path.data(), static_cast<long>(resp.fields[i].path.size())));
|
2827
3149
|
if (resp.fields[i].status == couchbase::protocol::status::success ||
|
2828
3150
|
resp.fields[i].status == couchbase::protocol::status::subdoc_success_deleted) {
|
2829
3151
|
if (resp.fields[i].opcode == couchbase::protocol::subdoc_opcode::counter) {
|
2830
|
-
if (resp.fields[i].value.
|
2831
|
-
rb_hash_aset(entry, rb_id2sym(rb_intern("value")),
|
3152
|
+
if (!resp.fields[i].value.empty()) {
|
3153
|
+
rb_hash_aset(entry, rb_id2sym(rb_intern("value")), LL2NUM(std::stoll(resp.fields[i].value)));
|
2832
3154
|
}
|
2833
3155
|
} else {
|
2834
3156
|
rb_hash_aset(entry,
|
2835
3157
|
rb_id2sym(rb_intern("value")),
|
2836
|
-
|
3158
|
+
rb_external_str_new(resp.fields[i].value.data(), static_cast<long>(resp.fields[i].value.size())));
|
2837
3159
|
}
|
2838
3160
|
}
|
2839
3161
|
cb__map_subdoc_status(resp.fields[i].status, i, resp.fields[i].path, entry);
|
@@ -3022,22 +3344,12 @@ cb_Backend_document_query(VALUE self, VALUE statement, VALUE options)
|
|
3022
3344
|
auto f = barrier->get_future();
|
3023
3345
|
backend->cluster->execute_http(req, [barrier](couchbase::operations::query_response&& resp) mutable { barrier->set_value(resp); });
|
3024
3346
|
auto resp = f.get();
|
3025
|
-
if (resp.ec) {
|
3347
|
+
if (resp.ctx.ec) {
|
3026
3348
|
if (resp.payload.meta_data.errors && !resp.payload.meta_data.errors->empty()) {
|
3027
3349
|
const auto& first_error = resp.payload.meta_data.errors->front();
|
3028
|
-
exc = cb__map_error_code(resp.
|
3029
|
-
fmt::format(R"(unable to query (client_context_id="{}"): "{}{}" ({}: {}))",
|
3030
|
-
req.client_context_id,
|
3031
|
-
req.statement.substr(0, 100),
|
3032
|
-
req.statement.size() > 100 ? "..." : "",
|
3033
|
-
first_error.code,
|
3034
|
-
first_error.message));
|
3350
|
+
exc = cb__map_error_code(resp.ctx, fmt::format(R"(unable to query ({}: {}))", first_error.code, first_error.message));
|
3035
3351
|
} else {
|
3036
|
-
exc = cb__map_error_code(resp.
|
3037
|
-
fmt::format(R"(unable to query (client_context_id="{}"): "{}{}")",
|
3038
|
-
req.client_context_id,
|
3039
|
-
req.statement.substr(0, 100),
|
3040
|
-
req.statement.size() > 100 ? "..." : ""));
|
3352
|
+
exc = cb__map_error_code(resp.ctx, "unable to query");
|
3041
3353
|
}
|
3042
3354
|
break;
|
3043
3355
|
}
|
@@ -3045,43 +3357,46 @@ cb_Backend_document_query(VALUE self, VALUE statement, VALUE options)
|
|
3045
3357
|
VALUE rows = rb_ary_new_capa(static_cast<long>(resp.payload.rows.size()));
|
3046
3358
|
rb_hash_aset(res, rb_id2sym(rb_intern("rows")), rows);
|
3047
3359
|
for (auto& row : resp.payload.rows) {
|
3048
|
-
rb_ary_push(rows,
|
3360
|
+
rb_ary_push(rows, rb_external_str_new(row.data(), static_cast<long>(row.size())));
|
3049
3361
|
}
|
3050
3362
|
VALUE meta = rb_hash_new();
|
3051
3363
|
rb_hash_aset(res, rb_id2sym(rb_intern("meta")), meta);
|
3052
3364
|
rb_hash_aset(meta,
|
3053
3365
|
rb_id2sym(rb_intern("status")),
|
3054
3366
|
rb_id2sym(rb_intern2(resp.payload.meta_data.status.data(), static_cast<long>(resp.payload.meta_data.status.size()))));
|
3055
|
-
rb_hash_aset(meta,
|
3056
|
-
rb_id2sym(rb_intern("request_id")),
|
3057
|
-
rb_str_new(resp.payload.meta_data.request_id.data(), static_cast<long>(resp.payload.meta_data.request_id.size())));
|
3058
3367
|
rb_hash_aset(
|
3059
3368
|
meta,
|
3060
|
-
rb_id2sym(rb_intern("
|
3061
|
-
|
3369
|
+
rb_id2sym(rb_intern("request_id")),
|
3370
|
+
rb_external_str_new(resp.payload.meta_data.request_id.data(), static_cast<long>(resp.payload.meta_data.request_id.size())));
|
3371
|
+
rb_hash_aset(meta,
|
3372
|
+
rb_id2sym(rb_intern("client_context_id")),
|
3373
|
+
rb_external_str_new(resp.payload.meta_data.client_context_id.data(),
|
3374
|
+
static_cast<long>(resp.payload.meta_data.client_context_id.size())));
|
3062
3375
|
if (resp.payload.meta_data.signature) {
|
3063
|
-
rb_hash_aset(
|
3064
|
-
|
3065
|
-
|
3376
|
+
rb_hash_aset(
|
3377
|
+
meta,
|
3378
|
+
rb_id2sym(rb_intern("signature")),
|
3379
|
+
rb_external_str_new(resp.payload.meta_data.signature->data(), static_cast<long>(resp.payload.meta_data.signature->size())));
|
3066
3380
|
}
|
3067
3381
|
if (resp.payload.meta_data.profile) {
|
3068
|
-
rb_hash_aset(
|
3069
|
-
|
3070
|
-
|
3382
|
+
rb_hash_aset(
|
3383
|
+
meta,
|
3384
|
+
rb_id2sym(rb_intern("profile")),
|
3385
|
+
rb_external_str_new(resp.payload.meta_data.profile->data(), static_cast<long>(resp.payload.meta_data.profile->size())));
|
3071
3386
|
}
|
3072
3387
|
metrics = rb_hash_new();
|
3073
3388
|
rb_hash_aset(meta, rb_id2sym(rb_intern("metrics")), metrics);
|
3074
3389
|
if (!resp.payload.meta_data.metrics.elapsed_time.empty()) {
|
3075
3390
|
rb_hash_aset(metrics,
|
3076
3391
|
rb_id2sym(rb_intern("elapsed_time")),
|
3077
|
-
|
3078
|
-
|
3392
|
+
rb_external_str_new(resp.payload.meta_data.metrics.elapsed_time.data(),
|
3393
|
+
static_cast<long>(resp.payload.meta_data.metrics.elapsed_time.size())));
|
3079
3394
|
}
|
3080
3395
|
if (!resp.payload.meta_data.metrics.execution_time.empty()) {
|
3081
3396
|
rb_hash_aset(metrics,
|
3082
3397
|
rb_id2sym(rb_intern("execution_time")),
|
3083
|
-
|
3084
|
-
|
3398
|
+
rb_external_str_new(resp.payload.meta_data.metrics.execution_time.data(),
|
3399
|
+
static_cast<long>(resp.payload.meta_data.metrics.execution_time.size())));
|
3085
3400
|
}
|
3086
3401
|
rb_hash_aset(metrics, rb_id2sym(rb_intern("result_count")), ULL2NUM(resp.payload.meta_data.metrics.result_count));
|
3087
3402
|
rb_hash_aset(metrics, rb_id2sym(rb_intern("result_size")), ULL2NUM(resp.payload.meta_data.metrics.result_size));
|
@@ -3104,44 +3419,60 @@ cb_Backend_document_query(VALUE self, VALUE statement, VALUE options)
|
|
3104
3419
|
return Qnil;
|
3105
3420
|
}
|
3106
3421
|
|
3107
|
-
static
|
3422
|
+
static VALUE
|
3108
3423
|
cb__generate_bucket_settings(VALUE bucket, couchbase::operations::bucket_settings& entry, bool is_create)
|
3109
3424
|
{
|
3110
3425
|
{
|
3111
3426
|
VALUE bucket_type = rb_hash_aref(bucket, rb_id2sym(rb_intern("bucket_type")));
|
3112
|
-
|
3113
|
-
|
3114
|
-
|
3115
|
-
|
3116
|
-
|
3117
|
-
|
3118
|
-
|
3427
|
+
if (TYPE(bucket_type) == T_SYMBOL) {
|
3428
|
+
if (bucket_type == rb_id2sym(rb_intern("couchbase")) || bucket_type == rb_id2sym(rb_intern("membase"))) {
|
3429
|
+
entry.bucket_type = couchbase::operations::bucket_settings::bucket_type::couchbase;
|
3430
|
+
} else if (bucket_type == rb_id2sym(rb_intern("memcached"))) {
|
3431
|
+
entry.bucket_type = couchbase::operations::bucket_settings::bucket_type::memcached;
|
3432
|
+
} else if (bucket_type == rb_id2sym(rb_intern("ephemeral"))) {
|
3433
|
+
entry.bucket_type = couchbase::operations::bucket_settings::bucket_type::ephemeral;
|
3434
|
+
} else {
|
3435
|
+
return rb_exc_new_str(rb_eArgError, rb_sprintf("unknown bucket type, given %+" PRIsVALUE, bucket_type));
|
3436
|
+
}
|
3119
3437
|
} else {
|
3120
|
-
|
3438
|
+
return rb_exc_new_str(rb_eArgError, rb_sprintf("bucket type must be a Symbol, given %+" PRIsVALUE, bucket_type));
|
3121
3439
|
}
|
3122
3440
|
}
|
3123
3441
|
{
|
3124
3442
|
VALUE name = rb_hash_aref(bucket, rb_id2sym(rb_intern("name")));
|
3125
|
-
|
3126
|
-
|
3443
|
+
if (TYPE(name) == T_STRING) {
|
3444
|
+
entry.name.assign(RSTRING_PTR(name), static_cast<size_t>(RSTRING_LEN(name)));
|
3445
|
+
} else {
|
3446
|
+
return rb_exc_new_str(rb_eArgError, rb_sprintf("bucket name must be a String, given %+" PRIsVALUE, name));
|
3447
|
+
}
|
3127
3448
|
}
|
3128
3449
|
{
|
3129
3450
|
VALUE quota = rb_hash_aref(bucket, rb_id2sym(rb_intern("ram_quota_mb")));
|
3130
|
-
|
3131
|
-
|
3451
|
+
if (TYPE(quota) == T_FIXNUM) {
|
3452
|
+
entry.ram_quota_mb = FIX2ULONG(quota);
|
3453
|
+
} else {
|
3454
|
+
return rb_exc_new_str(rb_eArgError, rb_sprintf("bucket RAM quota must be an Integer, given %+" PRIsVALUE, quota));
|
3455
|
+
}
|
3132
3456
|
}
|
3133
3457
|
{
|
3134
3458
|
VALUE expiry = rb_hash_aref(bucket, rb_id2sym(rb_intern("max_expiry")));
|
3135
3459
|
if (!NIL_P(expiry)) {
|
3136
|
-
|
3137
|
-
|
3460
|
+
if (TYPE(expiry) == T_FIXNUM) {
|
3461
|
+
entry.max_expiry = FIX2UINT(expiry);
|
3462
|
+
} else {
|
3463
|
+
return rb_exc_new_str(rb_eArgError, rb_sprintf("bucket max expiry must be an Integer, given %+" PRIsVALUE, expiry));
|
3464
|
+
}
|
3138
3465
|
}
|
3139
3466
|
}
|
3140
3467
|
{
|
3141
3468
|
VALUE num_replicas = rb_hash_aref(bucket, rb_id2sym(rb_intern("num_replicas")));
|
3142
3469
|
if (!NIL_P(num_replicas)) {
|
3143
|
-
|
3144
|
-
|
3470
|
+
if (TYPE(num_replicas) == T_FIXNUM) {
|
3471
|
+
entry.num_replicas = FIX2UINT(num_replicas);
|
3472
|
+
} else {
|
3473
|
+
return rb_exc_new_str(rb_eArgError,
|
3474
|
+
rb_sprintf("bucket number of replicas must be an Integer, given %+" PRIsVALUE, num_replicas));
|
3475
|
+
}
|
3145
3476
|
}
|
3146
3477
|
}
|
3147
3478
|
{
|
@@ -3159,48 +3490,84 @@ cb__generate_bucket_settings(VALUE bucket, couchbase::operations::bucket_setting
|
|
3159
3490
|
{
|
3160
3491
|
VALUE compression_mode = rb_hash_aref(bucket, rb_id2sym(rb_intern("compression_mode")));
|
3161
3492
|
if (!NIL_P(compression_mode)) {
|
3162
|
-
|
3163
|
-
|
3164
|
-
|
3165
|
-
|
3166
|
-
|
3167
|
-
|
3168
|
-
|
3493
|
+
if (TYPE(compression_mode) == T_SYMBOL) {
|
3494
|
+
if (compression_mode == rb_id2sym(rb_intern("active"))) {
|
3495
|
+
entry.compression_mode = couchbase::operations::bucket_settings::compression_mode::active;
|
3496
|
+
} else if (compression_mode == rb_id2sym(rb_intern("passive"))) {
|
3497
|
+
entry.compression_mode = couchbase::operations::bucket_settings::compression_mode::passive;
|
3498
|
+
} else if (compression_mode == rb_id2sym(rb_intern("off"))) {
|
3499
|
+
entry.compression_mode = couchbase::operations::bucket_settings::compression_mode::off;
|
3500
|
+
} else {
|
3501
|
+
return rb_exc_new_str(rb_eArgError, rb_sprintf("unknown compression mode, given %+" PRIsVALUE, compression_mode));
|
3502
|
+
}
|
3169
3503
|
} else {
|
3170
|
-
|
3504
|
+
return rb_exc_new_str(rb_eArgError,
|
3505
|
+
rb_sprintf("bucket compression mode must be a Symbol, given %+" PRIsVALUE, compression_mode));
|
3171
3506
|
}
|
3172
3507
|
}
|
3173
3508
|
}
|
3174
3509
|
{
|
3175
3510
|
VALUE eviction_policy = rb_hash_aref(bucket, rb_id2sym(rb_intern("eviction_policy")));
|
3176
3511
|
if (!NIL_P(eviction_policy)) {
|
3177
|
-
|
3178
|
-
|
3179
|
-
|
3180
|
-
|
3181
|
-
|
3182
|
-
|
3183
|
-
|
3184
|
-
|
3185
|
-
|
3512
|
+
if (TYPE(eviction_policy) == T_SYMBOL) {
|
3513
|
+
if (eviction_policy == rb_id2sym(rb_intern("full"))) {
|
3514
|
+
entry.eviction_policy = couchbase::operations::bucket_settings::eviction_policy::full;
|
3515
|
+
} else if (eviction_policy == rb_id2sym(rb_intern("value_only"))) {
|
3516
|
+
entry.eviction_policy = couchbase::operations::bucket_settings::eviction_policy::value_only;
|
3517
|
+
} else if (eviction_policy == rb_id2sym(rb_intern("no_eviction"))) {
|
3518
|
+
entry.eviction_policy = couchbase::operations::bucket_settings::eviction_policy::no_eviction;
|
3519
|
+
} else if (eviction_policy == rb_id2sym(rb_intern("not_recently_used"))) {
|
3520
|
+
entry.eviction_policy = couchbase::operations::bucket_settings::eviction_policy::not_recently_used;
|
3521
|
+
} else {
|
3522
|
+
return rb_exc_new_str(rb_eArgError, rb_sprintf("unknown eviction policy, given %+" PRIsVALUE, eviction_policy));
|
3523
|
+
}
|
3186
3524
|
} else {
|
3187
|
-
|
3525
|
+
return rb_exc_new_str(rb_eArgError,
|
3526
|
+
rb_sprintf("bucket eviction policy must be a Symbol, given %+" PRIsVALUE, eviction_policy));
|
3527
|
+
}
|
3528
|
+
}
|
3529
|
+
}
|
3530
|
+
{
|
3531
|
+
VALUE minimum_level = rb_hash_aref(bucket, rb_id2sym(rb_intern("minimum_durability_level")));
|
3532
|
+
if (!NIL_P(minimum_level)) {
|
3533
|
+
if (TYPE(minimum_level) == T_SYMBOL) {
|
3534
|
+
if (minimum_level == rb_id2sym(rb_intern("none"))) {
|
3535
|
+
entry.minimum_durability_level = couchbase::protocol::durability_level::none;
|
3536
|
+
} else if (minimum_level == rb_id2sym(rb_intern("majority"))) {
|
3537
|
+
entry.minimum_durability_level = couchbase::protocol::durability_level::majority;
|
3538
|
+
} else if (minimum_level == rb_id2sym(rb_intern("majority_and_persist_to_active"))) {
|
3539
|
+
entry.minimum_durability_level = couchbase::protocol::durability_level::majority_and_persist_to_active;
|
3540
|
+
} else if (minimum_level == rb_id2sym(rb_intern("persist_to_majority"))) {
|
3541
|
+
entry.minimum_durability_level = couchbase::protocol::durability_level::persist_to_majority;
|
3542
|
+
} else {
|
3543
|
+
return rb_exc_new_str(rb_eArgError, rb_sprintf("unknown durability level, given %+" PRIsVALUE, minimum_level));
|
3544
|
+
}
|
3545
|
+
} else {
|
3546
|
+
return rb_exc_new_str(rb_eArgError,
|
3547
|
+
rb_sprintf("bucket minimum durability level must be a Symbol, given %+" PRIsVALUE, minimum_level));
|
3188
3548
|
}
|
3189
3549
|
}
|
3190
3550
|
}
|
3191
3551
|
if (is_create) {
|
3192
3552
|
VALUE conflict_resolution_type = rb_hash_aref(bucket, rb_id2sym(rb_intern("conflict_resolution_type")));
|
3193
3553
|
if (!NIL_P(conflict_resolution_type)) {
|
3194
|
-
|
3195
|
-
|
3196
|
-
|
3197
|
-
|
3198
|
-
|
3554
|
+
if (TYPE(conflict_resolution_type) == T_SYMBOL) {
|
3555
|
+
if (conflict_resolution_type == rb_id2sym(rb_intern("timestamp"))) {
|
3556
|
+
entry.conflict_resolution_type = couchbase::operations::bucket_settings::conflict_resolution_type::timestamp;
|
3557
|
+
} else if (conflict_resolution_type == rb_id2sym(rb_intern("sequence_number"))) {
|
3558
|
+
entry.conflict_resolution_type = couchbase::operations::bucket_settings::conflict_resolution_type::sequence_number;
|
3559
|
+
} else {
|
3560
|
+
return rb_exc_new_str(rb_eArgError,
|
3561
|
+
rb_sprintf("unknown conflict resolution type, given %+" PRIsVALUE, conflict_resolution_type));
|
3562
|
+
}
|
3199
3563
|
} else {
|
3200
|
-
|
3564
|
+
return rb_exc_new_str(
|
3565
|
+
rb_eArgError,
|
3566
|
+
rb_sprintf("bucket conflict resulution type must be a Symbol, given %+" PRIsVALUE, conflict_resolution_type));
|
3201
3567
|
}
|
3202
3568
|
}
|
3203
3569
|
}
|
3570
|
+
return Qnil;
|
3204
3571
|
}
|
3205
3572
|
|
3206
3573
|
static VALUE
|
@@ -3223,15 +3590,18 @@ cb_Backend_bucket_create(VALUE self, VALUE bucket_settings, VALUE timeout)
|
|
3223
3590
|
if (!NIL_P(exc)) {
|
3224
3591
|
break;
|
3225
3592
|
}
|
3226
|
-
cb__generate_bucket_settings(bucket_settings, req.bucket, true);
|
3593
|
+
exc = cb__generate_bucket_settings(bucket_settings, req.bucket, true);
|
3594
|
+
if (!NIL_P(exc)) {
|
3595
|
+
break;
|
3596
|
+
}
|
3227
3597
|
auto barrier = std::make_shared<std::promise<couchbase::operations::bucket_create_response>>();
|
3228
3598
|
auto f = barrier->get_future();
|
3229
3599
|
backend->cluster->execute_http(
|
3230
3600
|
req, [barrier](couchbase::operations::bucket_create_response&& resp) mutable { barrier->set_value(resp); });
|
3231
3601
|
auto resp = f.get();
|
3232
|
-
if (resp.ec) {
|
3602
|
+
if (resp.ctx.ec) {
|
3233
3603
|
exc = cb__map_error_code(
|
3234
|
-
resp.
|
3604
|
+
resp.ctx, fmt::format("unable to create bucket \"{}\" on the cluster ({})", req.bucket.name, resp.error_message));
|
3235
3605
|
break;
|
3236
3606
|
}
|
3237
3607
|
|
@@ -3260,15 +3630,18 @@ cb_Backend_bucket_update(VALUE self, VALUE bucket_settings, VALUE timeout)
|
|
3260
3630
|
if (!NIL_P(exc)) {
|
3261
3631
|
break;
|
3262
3632
|
}
|
3263
|
-
cb__generate_bucket_settings(bucket_settings, req.bucket, false);
|
3633
|
+
exc = cb__generate_bucket_settings(bucket_settings, req.bucket, false);
|
3634
|
+
if (!NIL_P(exc)) {
|
3635
|
+
break;
|
3636
|
+
}
|
3264
3637
|
auto barrier = std::make_shared<std::promise<couchbase::operations::bucket_update_response>>();
|
3265
3638
|
auto f = barrier->get_future();
|
3266
3639
|
backend->cluster->execute_http(
|
3267
3640
|
req, [barrier](couchbase::operations::bucket_update_response&& resp) mutable { barrier->set_value(resp); });
|
3268
3641
|
auto resp = f.get();
|
3269
|
-
if (resp.ec) {
|
3642
|
+
if (resp.ctx.ec) {
|
3270
3643
|
exc = cb__map_error_code(
|
3271
|
-
resp.
|
3644
|
+
resp.ctx, fmt::format("unable to update bucket \"{}\" on the cluster ({})", req.bucket.name, resp.error_message));
|
3272
3645
|
break;
|
3273
3646
|
}
|
3274
3647
|
return Qtrue;
|
@@ -3303,8 +3676,8 @@ cb_Backend_bucket_drop(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
3303
3676
|
backend->cluster->execute_http(req,
|
3304
3677
|
[barrier](couchbase::operations::bucket_drop_response&& resp) mutable { barrier->set_value(resp); });
|
3305
3678
|
auto resp = f.get();
|
3306
|
-
if (resp.ec) {
|
3307
|
-
exc = cb__map_error_code(resp.
|
3679
|
+
if (resp.ctx.ec) {
|
3680
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to remove bucket \"{}\" on the cluster", req.name));
|
3308
3681
|
break;
|
3309
3682
|
}
|
3310
3683
|
return Qtrue;
|
@@ -3339,8 +3712,8 @@ cb_Backend_bucket_flush(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
3339
3712
|
backend->cluster->execute_http(
|
3340
3713
|
req, [barrier](couchbase::operations::bucket_flush_response&& resp) mutable { barrier->set_value(resp); });
|
3341
3714
|
auto resp = f.get();
|
3342
|
-
if (resp.ec) {
|
3343
|
-
exc = cb__map_error_code(resp.
|
3715
|
+
if (resp.ctx.ec) {
|
3716
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to flush bucket \"{}\" on the cluster", req.name));
|
3344
3717
|
break;
|
3345
3718
|
}
|
3346
3719
|
|
@@ -3367,8 +3740,8 @@ cb__extract_bucket_settings(const couchbase::operations::bucket_settings& entry,
|
|
3367
3740
|
rb_hash_aset(bucket, rb_id2sym(rb_intern("bucket_type")), Qnil);
|
3368
3741
|
break;
|
3369
3742
|
}
|
3370
|
-
rb_hash_aset(bucket, rb_id2sym(rb_intern("name")),
|
3371
|
-
rb_hash_aset(bucket, rb_id2sym(rb_intern("uuid")),
|
3743
|
+
rb_hash_aset(bucket, rb_id2sym(rb_intern("name")), rb_external_str_new(entry.name.data(), static_cast<long>(entry.name.size())));
|
3744
|
+
rb_hash_aset(bucket, rb_id2sym(rb_intern("uuid")), rb_external_str_new(entry.uuid.data(), static_cast<long>(entry.uuid.size())));
|
3372
3745
|
rb_hash_aset(bucket, rb_id2sym(rb_intern("ram_quota_mb")), ULL2NUM(entry.ram_quota_mb));
|
3373
3746
|
rb_hash_aset(bucket, rb_id2sym(rb_intern("max_expiry")), ULONG2NUM(entry.max_expiry));
|
3374
3747
|
switch (entry.compression_mode) {
|
@@ -3416,17 +3789,34 @@ cb__extract_bucket_settings(const couchbase::operations::bucket_settings& entry,
|
|
3416
3789
|
rb_hash_aset(bucket, rb_id2sym(rb_intern("conflict_resolution_type")), Qnil);
|
3417
3790
|
break;
|
3418
3791
|
}
|
3792
|
+
if (entry.minimum_durability_level) {
|
3793
|
+
switch (entry.minimum_durability_level.value()) {
|
3794
|
+
case couchbase::protocol::durability_level::none:
|
3795
|
+
rb_hash_aset(bucket, rb_id2sym(rb_intern("minimum_durability_level")), rb_id2sym(rb_intern("none")));
|
3796
|
+
break;
|
3797
|
+
case couchbase::protocol::durability_level::majority:
|
3798
|
+
rb_hash_aset(bucket, rb_id2sym(rb_intern("minimum_durability_level")), rb_id2sym(rb_intern("majority")));
|
3799
|
+
break;
|
3800
|
+
case couchbase::protocol::durability_level::majority_and_persist_to_active:
|
3801
|
+
rb_hash_aset(
|
3802
|
+
bucket, rb_id2sym(rb_intern("minimum_durability_level")), rb_id2sym(rb_intern("majority_and_persist_to_active")));
|
3803
|
+
break;
|
3804
|
+
case couchbase::protocol::durability_level::persist_to_majority:
|
3805
|
+
rb_hash_aset(bucket, rb_id2sym(rb_intern("minimum_durability_level")), rb_id2sym(rb_intern("persist_to_majority")));
|
3806
|
+
break;
|
3807
|
+
}
|
3808
|
+
}
|
3419
3809
|
VALUE capabilities = rb_ary_new_capa(static_cast<long>(entry.capabilities.size()));
|
3420
3810
|
for (const auto& capa : entry.capabilities) {
|
3421
|
-
rb_ary_push(capabilities,
|
3811
|
+
rb_ary_push(capabilities, rb_external_str_new(capa.data(), static_cast<long>(capa.size())));
|
3422
3812
|
}
|
3423
3813
|
rb_hash_aset(bucket, rb_id2sym(rb_intern("capabilities")), capabilities);
|
3424
3814
|
VALUE nodes = rb_ary_new_capa(static_cast<long>(entry.nodes.size()));
|
3425
3815
|
for (const auto& n : entry.nodes) {
|
3426
3816
|
VALUE node = rb_hash_new();
|
3427
|
-
rb_hash_aset(node, rb_id2sym(rb_intern("status")),
|
3428
|
-
rb_hash_aset(node, rb_id2sym(rb_intern("hostname")),
|
3429
|
-
rb_hash_aset(node, rb_id2sym(rb_intern("version")),
|
3817
|
+
rb_hash_aset(node, rb_id2sym(rb_intern("status")), rb_external_str_new(n.status.data(), static_cast<long>(n.status.size())));
|
3818
|
+
rb_hash_aset(node, rb_id2sym(rb_intern("hostname")), rb_external_str_new(n.hostname.data(), static_cast<long>(n.hostname.size())));
|
3819
|
+
rb_hash_aset(node, rb_id2sym(rb_intern("version")), rb_external_str_new(n.version.data(), static_cast<long>(n.version.size())));
|
3430
3820
|
rb_ary_push(nodes, node);
|
3431
3821
|
}
|
3432
3822
|
rb_hash_aset(bucket, rb_id2sym(rb_intern("nodes")), nodes);
|
@@ -3455,8 +3845,8 @@ cb_Backend_bucket_get_all(VALUE self, VALUE timeout)
|
|
3455
3845
|
backend->cluster->execute_http(
|
3456
3846
|
req, [barrier](couchbase::operations::bucket_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
3457
3847
|
auto resp = f.get();
|
3458
|
-
if (resp.ec) {
|
3459
|
-
exc = cb__map_error_code(resp.
|
3848
|
+
if (resp.ctx.ec) {
|
3849
|
+
exc = cb__map_error_code(resp.ctx, "unable to get list of the buckets of the cluster");
|
3460
3850
|
break;
|
3461
3851
|
}
|
3462
3852
|
|
@@ -3499,8 +3889,8 @@ cb_Backend_bucket_get(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
3499
3889
|
backend->cluster->execute_http(req,
|
3500
3890
|
[barrier](couchbase::operations::bucket_get_response&& resp) mutable { barrier->set_value(resp); });
|
3501
3891
|
auto resp = f.get();
|
3502
|
-
if (resp.ec) {
|
3503
|
-
exc = cb__map_error_code(resp.
|
3892
|
+
if (resp.ctx.ec) {
|
3893
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to locate bucket \"{}\" on the cluster", req.name));
|
3504
3894
|
break;
|
3505
3895
|
}
|
3506
3896
|
|
@@ -3516,20 +3906,24 @@ cb_Backend_bucket_get(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
3516
3906
|
static void
|
3517
3907
|
cb__extract_role(const couchbase::operations::rbac::role_and_description& entry, VALUE role)
|
3518
3908
|
{
|
3519
|
-
rb_hash_aset(role, rb_id2sym(rb_intern("name")),
|
3520
|
-
rb_hash_aset(
|
3521
|
-
|
3522
|
-
|
3523
|
-
|
3909
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("name")), rb_external_str_new(entry.name.data(), static_cast<long>(entry.name.size())));
|
3910
|
+
rb_hash_aset(role,
|
3911
|
+
rb_id2sym(rb_intern("display_name")),
|
3912
|
+
rb_external_str_new(entry.display_name.data(), static_cast<long>(entry.display_name.size())));
|
3913
|
+
rb_hash_aset(role,
|
3914
|
+
rb_id2sym(rb_intern("description")),
|
3915
|
+
rb_external_str_new(entry.description.data(), static_cast<long>(entry.description.size())));
|
3524
3916
|
if (entry.bucket) {
|
3525
|
-
rb_hash_aset(
|
3917
|
+
rb_hash_aset(
|
3918
|
+
role, rb_id2sym(rb_intern("bucket")), rb_external_str_new(entry.bucket->data(), static_cast<long>(entry.bucket->size())));
|
3526
3919
|
}
|
3527
3920
|
if (entry.scope) {
|
3528
|
-
rb_hash_aset(role, rb_id2sym(rb_intern("scope")),
|
3921
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("scope")), rb_external_str_new(entry.scope->data(), static_cast<long>(entry.scope->size())));
|
3529
3922
|
}
|
3530
3923
|
if (entry.collection) {
|
3531
|
-
rb_hash_aset(
|
3532
|
-
|
3924
|
+
rb_hash_aset(role,
|
3925
|
+
rb_id2sym(rb_intern("collection")),
|
3926
|
+
rb_external_str_new(entry.collection->data(), static_cast<long>(entry.collection->size())));
|
3533
3927
|
}
|
3534
3928
|
}
|
3535
3929
|
|
@@ -3556,8 +3950,8 @@ cb_Backend_role_get_all(VALUE self, VALUE timeout)
|
|
3556
3950
|
backend->cluster->execute_http(
|
3557
3951
|
req, [barrier](couchbase::operations::role_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
3558
3952
|
auto resp = f.get();
|
3559
|
-
if (resp.ec) {
|
3560
|
-
exc = cb__map_error_code(resp.
|
3953
|
+
if (resp.ctx.ec) {
|
3954
|
+
exc = cb__map_error_code(resp.ctx, "unable to fetch roles");
|
3561
3955
|
break;
|
3562
3956
|
}
|
3563
3957
|
|
@@ -3576,7 +3970,8 @@ cb_Backend_role_get_all(VALUE self, VALUE timeout)
|
|
3576
3970
|
static void
|
3577
3971
|
cb__extract_user(const couchbase::operations::rbac::user_and_metadata& entry, VALUE user)
|
3578
3972
|
{
|
3579
|
-
rb_hash_aset(
|
3973
|
+
rb_hash_aset(
|
3974
|
+
user, rb_id2sym(rb_intern("username")), rb_external_str_new(entry.username.data(), static_cast<long>(entry.username.size())));
|
3580
3975
|
switch (entry.domain) {
|
3581
3976
|
case couchbase::operations::rbac::auth_domain::local:
|
3582
3977
|
rb_hash_aset(user, rb_id2sym(rb_intern("domain")), rb_id2sym(rb_intern("local")));
|
@@ -3589,44 +3984,47 @@ cb__extract_user(const couchbase::operations::rbac::user_and_metadata& entry, VA
|
|
3589
3984
|
}
|
3590
3985
|
VALUE external_groups = rb_ary_new_capa(static_cast<long>(entry.external_groups.size()));
|
3591
3986
|
for (const auto& group : entry.external_groups) {
|
3592
|
-
rb_ary_push(external_groups,
|
3987
|
+
rb_ary_push(external_groups, rb_external_str_new(group.data(), static_cast<long>(group.size())));
|
3593
3988
|
}
|
3594
3989
|
rb_hash_aset(user, rb_id2sym(rb_intern("external_groups")), external_groups);
|
3595
3990
|
VALUE groups = rb_ary_new_capa(static_cast<long>(entry.groups.size()));
|
3596
3991
|
for (const auto& group : entry.groups) {
|
3597
|
-
rb_ary_push(groups,
|
3992
|
+
rb_ary_push(groups, rb_external_str_new(group.data(), static_cast<long>(group.size())));
|
3598
3993
|
}
|
3599
3994
|
rb_hash_aset(user, rb_id2sym(rb_intern("groups")), groups);
|
3600
3995
|
if (entry.display_name) {
|
3601
3996
|
rb_hash_aset(user,
|
3602
3997
|
rb_id2sym(rb_intern("display_name")),
|
3603
|
-
|
3998
|
+
rb_external_str_new(entry.display_name->data(), static_cast<long>(entry.display_name->size())));
|
3604
3999
|
}
|
3605
4000
|
if (entry.password_changed) {
|
3606
4001
|
rb_hash_aset(user,
|
3607
4002
|
rb_id2sym(rb_intern("password_changed")),
|
3608
|
-
|
4003
|
+
rb_external_str_new(entry.password_changed->data(), static_cast<long>(entry.password_changed->size())));
|
3609
4004
|
}
|
3610
4005
|
VALUE effective_roles = rb_ary_new_capa(static_cast<long>(entry.effective_roles.size()));
|
3611
4006
|
for (const auto& er : entry.effective_roles) {
|
3612
4007
|
VALUE role = rb_hash_new();
|
3613
|
-
rb_hash_aset(role, rb_id2sym(rb_intern("name")),
|
4008
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("name")), rb_external_str_new(er.name.data(), static_cast<long>(er.name.size())));
|
3614
4009
|
if (er.bucket) {
|
3615
|
-
rb_hash_aset(
|
4010
|
+
rb_hash_aset(
|
4011
|
+
role, rb_id2sym(rb_intern("bucket")), rb_external_str_new(er.bucket->data(), static_cast<long>(er.bucket->size())));
|
3616
4012
|
}
|
3617
4013
|
if (er.scope) {
|
3618
|
-
rb_hash_aset(role, rb_id2sym(rb_intern("scope")),
|
4014
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("scope")), rb_external_str_new(er.scope->data(), static_cast<long>(er.scope->size())));
|
3619
4015
|
}
|
3620
4016
|
if (er.collection) {
|
3621
|
-
rb_hash_aset(
|
3622
|
-
|
4017
|
+
rb_hash_aset(role,
|
4018
|
+
rb_id2sym(rb_intern("collection")),
|
4019
|
+
rb_external_str_new(er.collection->data(), static_cast<long>(er.collection->size())));
|
3623
4020
|
}
|
3624
4021
|
VALUE origins = rb_ary_new_capa(static_cast<long>(er.origins.size()));
|
3625
4022
|
for (const auto& orig : er.origins) {
|
3626
4023
|
VALUE origin = rb_hash_new();
|
3627
|
-
rb_hash_aset(origin, rb_id2sym(rb_intern("type")),
|
4024
|
+
rb_hash_aset(origin, rb_id2sym(rb_intern("type")), rb_external_str_new(orig.type.data(), static_cast<long>(orig.type.size())));
|
3628
4025
|
if (orig.name) {
|
3629
|
-
rb_hash_aset(
|
4026
|
+
rb_hash_aset(
|
4027
|
+
origin, rb_id2sym(rb_intern("name")), rb_external_str_new(orig.name->data(), static_cast<long>(orig.name->size())));
|
3630
4028
|
}
|
3631
4029
|
rb_ary_push(origins, origin);
|
3632
4030
|
}
|
@@ -3638,16 +4036,18 @@ cb__extract_user(const couchbase::operations::rbac::user_and_metadata& entry, VA
|
|
3638
4036
|
VALUE roles = rb_ary_new_capa(static_cast<long>(entry.roles.size()));
|
3639
4037
|
for (const auto& er : entry.roles) {
|
3640
4038
|
VALUE role = rb_hash_new();
|
3641
|
-
rb_hash_aset(role, rb_id2sym(rb_intern("name")),
|
4039
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("name")), rb_external_str_new(er.name.data(), static_cast<long>(er.name.size())));
|
3642
4040
|
if (er.bucket) {
|
3643
|
-
rb_hash_aset(
|
4041
|
+
rb_hash_aset(
|
4042
|
+
role, rb_id2sym(rb_intern("bucket")), rb_external_str_new(er.bucket->data(), static_cast<long>(er.bucket->size())));
|
3644
4043
|
}
|
3645
4044
|
if (er.scope) {
|
3646
|
-
rb_hash_aset(role, rb_id2sym(rb_intern("scope")),
|
4045
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("scope")), rb_external_str_new(er.scope->data(), static_cast<long>(er.scope->size())));
|
3647
4046
|
}
|
3648
4047
|
if (er.collection) {
|
3649
|
-
rb_hash_aset(
|
3650
|
-
|
4048
|
+
rb_hash_aset(role,
|
4049
|
+
rb_id2sym(rb_intern("collection")),
|
4050
|
+
rb_external_str_new(er.collection->data(), static_cast<long>(er.collection->size())));
|
3651
4051
|
}
|
3652
4052
|
rb_ary_push(roles, role);
|
3653
4053
|
}
|
@@ -3687,8 +4087,8 @@ cb_Backend_user_get_all(VALUE self, VALUE domain, VALUE timeout)
|
|
3687
4087
|
backend->cluster->execute_http(
|
3688
4088
|
req, [barrier](couchbase::operations::user_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
3689
4089
|
auto resp = f.get();
|
3690
|
-
if (resp.ec) {
|
3691
|
-
exc = cb__map_error_code(resp.
|
4090
|
+
if (resp.ctx.ec) {
|
4091
|
+
exc = cb__map_error_code(resp.ctx, "unable to fetch users");
|
3692
4092
|
break;
|
3693
4093
|
}
|
3694
4094
|
|
@@ -3739,8 +4139,8 @@ cb_Backend_user_get(VALUE self, VALUE domain, VALUE username, VALUE timeout)
|
|
3739
4139
|
backend->cluster->execute_http(req,
|
3740
4140
|
[barrier](couchbase::operations::user_get_response&& resp) mutable { barrier->set_value(resp); });
|
3741
4141
|
auto resp = f.get();
|
3742
|
-
if (resp.ec) {
|
3743
|
-
exc = cb__map_error_code(resp.
|
4142
|
+
if (resp.ctx.ec) {
|
4143
|
+
exc = cb__map_error_code(resp.ctx, fmt::format(R"(unable to fetch user "{}")", req.username));
|
3744
4144
|
break;
|
3745
4145
|
}
|
3746
4146
|
|
@@ -3787,8 +4187,8 @@ cb_Backend_user_drop(VALUE self, VALUE domain, VALUE username, VALUE timeout)
|
|
3787
4187
|
backend->cluster->execute_http(req,
|
3788
4188
|
[barrier](couchbase::operations::user_drop_response&& resp) mutable { barrier->set_value(resp); });
|
3789
4189
|
auto resp = f.get();
|
3790
|
-
if (resp.ec) {
|
3791
|
-
exc = cb__map_error_code(resp.
|
4190
|
+
if (resp.ctx.ec) {
|
4191
|
+
exc = cb__map_error_code(resp.ctx, fmt::format(R"(unable to fetch user "{}")", req.username));
|
3792
4192
|
break;
|
3793
4193
|
}
|
3794
4194
|
|
@@ -3883,9 +4283,9 @@ cb_Backend_user_upsert(VALUE self, VALUE domain, VALUE user, VALUE timeout)
|
|
3883
4283
|
backend->cluster->execute_http(req,
|
3884
4284
|
[barrier](couchbase::operations::user_upsert_response&& resp) mutable { barrier->set_value(resp); });
|
3885
4285
|
auto resp = f.get();
|
3886
|
-
if (resp.ec) {
|
3887
|
-
exc = cb__map_error_code(
|
3888
|
-
|
4286
|
+
if (resp.ctx.ec) {
|
4287
|
+
exc = cb__map_error_code(resp.ctx,
|
4288
|
+
fmt::format(R"(unable to upsert user "{}" ({}))", req.user.username, fmt::join(resp.errors, ", ")));
|
3889
4289
|
break;
|
3890
4290
|
}
|
3891
4291
|
|
@@ -3898,29 +4298,32 @@ cb_Backend_user_upsert(VALUE self, VALUE domain, VALUE user, VALUE timeout)
|
|
3898
4298
|
static void
|
3899
4299
|
cb__extract_group(const couchbase::operations::rbac::group& entry, VALUE group)
|
3900
4300
|
{
|
3901
|
-
rb_hash_aset(group, rb_id2sym(rb_intern("name")),
|
4301
|
+
rb_hash_aset(group, rb_id2sym(rb_intern("name")), rb_external_str_new(entry.name.data(), static_cast<long>(entry.name.size())));
|
3902
4302
|
if (entry.description) {
|
3903
|
-
rb_hash_aset(
|
3904
|
-
|
4303
|
+
rb_hash_aset(group,
|
4304
|
+
rb_id2sym(rb_intern("description")),
|
4305
|
+
rb_external_str_new(entry.description->data(), static_cast<long>(entry.description->size())));
|
3905
4306
|
}
|
3906
4307
|
if (entry.ldap_group_reference) {
|
3907
4308
|
rb_hash_aset(group,
|
3908
4309
|
rb_id2sym(rb_intern("ldap_group_reference")),
|
3909
|
-
|
4310
|
+
rb_external_str_new(entry.ldap_group_reference->data(), static_cast<long>(entry.ldap_group_reference->size())));
|
3910
4311
|
}
|
3911
4312
|
VALUE roles = rb_ary_new_capa(static_cast<long>(entry.roles.size()));
|
3912
4313
|
for (const auto& er : entry.roles) {
|
3913
4314
|
VALUE role = rb_hash_new();
|
3914
|
-
rb_hash_aset(role, rb_id2sym(rb_intern("name")),
|
4315
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("name")), rb_external_str_new(er.name.data(), static_cast<long>(er.name.size())));
|
3915
4316
|
if (er.bucket) {
|
3916
|
-
rb_hash_aset(
|
4317
|
+
rb_hash_aset(
|
4318
|
+
role, rb_id2sym(rb_intern("bucket")), rb_external_str_new(er.bucket->data(), static_cast<long>(er.bucket->size())));
|
3917
4319
|
}
|
3918
4320
|
if (er.scope) {
|
3919
|
-
rb_hash_aset(role, rb_id2sym(rb_intern("scope")),
|
4321
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("scope")), rb_external_str_new(er.scope->data(), static_cast<long>(er.scope->size())));
|
3920
4322
|
}
|
3921
4323
|
if (er.collection) {
|
3922
|
-
rb_hash_aset(
|
3923
|
-
|
4324
|
+
rb_hash_aset(role,
|
4325
|
+
rb_id2sym(rb_intern("collection")),
|
4326
|
+
rb_external_str_new(er.collection->data(), static_cast<long>(er.collection->size())));
|
3924
4327
|
}
|
3925
4328
|
rb_ary_push(roles, role);
|
3926
4329
|
}
|
@@ -3950,8 +4353,8 @@ cb_Backend_group_get_all(VALUE self, VALUE timeout)
|
|
3950
4353
|
backend->cluster->execute_http(
|
3951
4354
|
req, [barrier](couchbase::operations::group_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
3952
4355
|
auto resp = f.get();
|
3953
|
-
if (resp.ec) {
|
3954
|
-
exc = cb__map_error_code(resp.
|
4356
|
+
if (resp.ctx.ec) {
|
4357
|
+
exc = cb__map_error_code(resp.ctx, "unable to fetch groups");
|
3955
4358
|
break;
|
3956
4359
|
}
|
3957
4360
|
|
@@ -3993,8 +4396,8 @@ cb_Backend_group_get(VALUE self, VALUE name, VALUE timeout)
|
|
3993
4396
|
backend->cluster->execute_http(req,
|
3994
4397
|
[barrier](couchbase::operations::group_get_response&& resp) mutable { barrier->set_value(resp); });
|
3995
4398
|
auto resp = f.get();
|
3996
|
-
if (resp.ec) {
|
3997
|
-
exc = cb__map_error_code(resp.
|
4399
|
+
if (resp.ctx.ec) {
|
4400
|
+
exc = cb__map_error_code(resp.ctx, fmt::format(R"(unable to fetch group "{}")", req.name));
|
3998
4401
|
break;
|
3999
4402
|
}
|
4000
4403
|
|
@@ -4032,8 +4435,8 @@ cb_Backend_group_drop(VALUE self, VALUE name, VALUE timeout)
|
|
4032
4435
|
backend->cluster->execute_http(req,
|
4033
4436
|
[barrier](couchbase::operations::group_drop_response&& resp) mutable { barrier->set_value(resp); });
|
4034
4437
|
auto resp = f.get();
|
4035
|
-
if (resp.ec) {
|
4036
|
-
exc = cb__map_error_code(resp.
|
4438
|
+
if (resp.ctx.ec) {
|
4439
|
+
exc = cb__map_error_code(resp.ctx, fmt::format(R"(unable to drop group "{}")", req.name));
|
4037
4440
|
break;
|
4038
4441
|
}
|
4039
4442
|
|
@@ -4108,9 +4511,9 @@ cb_Backend_group_upsert(VALUE self, VALUE group, VALUE timeout)
|
|
4108
4511
|
backend->cluster->execute_http(
|
4109
4512
|
req, [barrier](couchbase::operations::group_upsert_response&& resp) mutable { barrier->set_value(resp); });
|
4110
4513
|
auto resp = f.get();
|
4111
|
-
if (resp.ec) {
|
4112
|
-
exc = cb__map_error_code(
|
4113
|
-
|
4514
|
+
if (resp.ctx.ec) {
|
4515
|
+
exc = cb__map_error_code(resp.ctx,
|
4516
|
+
fmt::format(R"(unable to upsert group "{}" ({}))", req.group.name, fmt::join(resp.errors, ", ")));
|
4114
4517
|
break;
|
4115
4518
|
}
|
4116
4519
|
|
@@ -4139,8 +4542,8 @@ cb_Backend_cluster_enable_developer_preview(VALUE self)
|
|
4139
4542
|
backend->cluster->execute_http(
|
4140
4543
|
req, [barrier](couchbase::operations::cluster_developer_preview_enable_response&& resp) mutable { barrier->set_value(resp); });
|
4141
4544
|
auto resp = f.get();
|
4142
|
-
if (resp.ec) {
|
4143
|
-
exc = cb__map_error_code(resp.
|
4545
|
+
if (resp.ctx.ec) {
|
4546
|
+
exc = cb__map_error_code(resp.ctx, "unable to enable developer preview for this cluster");
|
4144
4547
|
break;
|
4145
4548
|
}
|
4146
4549
|
spdlog::critical(
|
@@ -4178,8 +4581,8 @@ cb_Backend_scope_get_all(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
4178
4581
|
backend->cluster->execute_http(
|
4179
4582
|
req, [barrier](couchbase::operations::scope_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
4180
4583
|
auto resp = f.get();
|
4181
|
-
if (resp.ec) {
|
4182
|
-
exc = cb__map_error_code(resp.
|
4584
|
+
if (resp.ctx.ec) {
|
4585
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to get list of the scopes of the bucket \"{}\"", req.bucket_name));
|
4183
4586
|
break;
|
4184
4587
|
}
|
4185
4588
|
|
@@ -4189,12 +4592,13 @@ cb_Backend_scope_get_all(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
4189
4592
|
for (const auto& s : resp.manifest.scopes) {
|
4190
4593
|
VALUE scope = rb_hash_new();
|
4191
4594
|
rb_hash_aset(scope, rb_id2sym(rb_intern("uid")), ULL2NUM(s.uid));
|
4192
|
-
rb_hash_aset(scope, rb_id2sym(rb_intern("name")),
|
4595
|
+
rb_hash_aset(scope, rb_id2sym(rb_intern("name")), rb_external_str_new(s.name.data(), static_cast<long>(s.name.size())));
|
4193
4596
|
VALUE collections = rb_ary_new_capa(static_cast<long>(s.collections.size()));
|
4194
4597
|
for (const auto& c : s.collections) {
|
4195
4598
|
VALUE collection = rb_hash_new();
|
4196
4599
|
rb_hash_aset(collection, rb_id2sym(rb_intern("uid")), ULL2NUM(c.uid));
|
4197
|
-
rb_hash_aset(
|
4600
|
+
rb_hash_aset(
|
4601
|
+
collection, rb_id2sym(rb_intern("name")), rb_external_str_new(c.name.data(), static_cast<long>(c.name.size())));
|
4198
4602
|
rb_ary_push(collections, collection);
|
4199
4603
|
}
|
4200
4604
|
rb_hash_aset(scope, rb_id2sym(rb_intern("collections")), collections);
|
@@ -4234,8 +4638,8 @@ cb_Backend_collections_manifest_get(VALUE self, VALUE bucket_name, VALUE timeout
|
|
4234
4638
|
backend->cluster->execute(
|
4235
4639
|
req, [barrier](couchbase::operations::collections_manifest_get_response&& resp) mutable { barrier->set_value(resp); });
|
4236
4640
|
auto resp = f.get();
|
4237
|
-
if (resp.ec) {
|
4238
|
-
exc = cb__map_error_code(resp.
|
4641
|
+
if (resp.ctx.ec) {
|
4642
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to get collections manifest of the bucket \"{}\"", req.id.bucket));
|
4239
4643
|
break;
|
4240
4644
|
}
|
4241
4645
|
|
@@ -4245,12 +4649,13 @@ cb_Backend_collections_manifest_get(VALUE self, VALUE bucket_name, VALUE timeout
|
|
4245
4649
|
for (const auto& s : resp.manifest.scopes) {
|
4246
4650
|
VALUE scope = rb_hash_new();
|
4247
4651
|
rb_hash_aset(scope, rb_id2sym(rb_intern("uid")), ULL2NUM(s.uid));
|
4248
|
-
rb_hash_aset(scope, rb_id2sym(rb_intern("name")),
|
4652
|
+
rb_hash_aset(scope, rb_id2sym(rb_intern("name")), rb_external_str_new(s.name.data(), static_cast<long>(s.name.size())));
|
4249
4653
|
VALUE collections = rb_ary_new_capa(static_cast<long>(s.collections.size()));
|
4250
4654
|
for (const auto& c : s.collections) {
|
4251
4655
|
VALUE collection = rb_hash_new();
|
4252
4656
|
rb_hash_aset(collection, rb_id2sym(rb_intern("uid")), ULL2NUM(c.uid));
|
4253
|
-
rb_hash_aset(
|
4657
|
+
rb_hash_aset(
|
4658
|
+
collection, rb_id2sym(rb_intern("name")), rb_external_str_new(c.name.data(), static_cast<long>(c.name.size())));
|
4254
4659
|
rb_ary_push(collections, collection);
|
4255
4660
|
}
|
4256
4661
|
rb_hash_aset(scope, rb_id2sym(rb_intern("collections")), collections);
|
@@ -4292,8 +4697,8 @@ cb_Backend_scope_create(VALUE self, VALUE bucket_name, VALUE scope_name, VALUE t
|
|
4292
4697
|
backend->cluster->execute_http(
|
4293
4698
|
req, [barrier](couchbase::operations::scope_create_response&& resp) mutable { barrier->set_value(resp); });
|
4294
4699
|
auto resp = f.get();
|
4295
|
-
if (resp.ec) {
|
4296
|
-
exc = cb__map_error_code(resp.
|
4700
|
+
if (resp.ctx.ec) {
|
4701
|
+
exc = cb__map_error_code(resp.ctx,
|
4297
4702
|
fmt::format(R"(unable to create the scope "{}" on the bucket "{}")", req.scope_name, req.bucket_name));
|
4298
4703
|
break;
|
4299
4704
|
}
|
@@ -4331,9 +4736,9 @@ cb_Backend_scope_drop(VALUE self, VALUE bucket_name, VALUE scope_name, VALUE tim
|
|
4331
4736
|
backend->cluster->execute_http(req,
|
4332
4737
|
[barrier](couchbase::operations::scope_drop_response&& resp) mutable { barrier->set_value(resp); });
|
4333
4738
|
auto resp = f.get();
|
4334
|
-
if (resp.ec) {
|
4335
|
-
exc = cb__map_error_code(resp.
|
4336
|
-
fmt::format("unable to drop the scope
|
4739
|
+
if (resp.ctx.ec) {
|
4740
|
+
exc = cb__map_error_code(resp.ctx,
|
4741
|
+
fmt::format(R"(unable to drop the scope "{}" on the bucket "{}")", req.scope_name, req.bucket_name));
|
4337
4742
|
break;
|
4338
4743
|
}
|
4339
4744
|
return ULL2NUM(resp.uid);
|
@@ -4377,9 +4782,9 @@ cb_Backend_collection_create(VALUE self, VALUE bucket_name, VALUE scope_name, VA
|
|
4377
4782
|
backend->cluster->execute_http(
|
4378
4783
|
req, [barrier](couchbase::operations::collection_create_response&& resp) mutable { barrier->set_value(resp); });
|
4379
4784
|
auto resp = f.get();
|
4380
|
-
if (resp.ec) {
|
4785
|
+
if (resp.ctx.ec) {
|
4381
4786
|
exc = cb__map_error_code(
|
4382
|
-
resp.
|
4787
|
+
resp.ctx,
|
4383
4788
|
fmt::format(
|
4384
4789
|
R"(unable create the collection "{}.{}" on the bucket "{}")", req.scope_name, req.collection_name, req.bucket_name));
|
4385
4790
|
break;
|
@@ -4421,9 +4826,9 @@ cb_Backend_collection_drop(VALUE self, VALUE bucket_name, VALUE scope_name, VALU
|
|
4421
4826
|
backend->cluster->execute_http(
|
4422
4827
|
req, [barrier](couchbase::operations::collection_drop_response&& resp) mutable { barrier->set_value(resp); });
|
4423
4828
|
auto resp = f.get();
|
4424
|
-
if (resp.ec) {
|
4829
|
+
if (resp.ctx.ec) {
|
4425
4830
|
exc = cb__map_error_code(
|
4426
|
-
resp.
|
4831
|
+
resp.ctx,
|
4427
4832
|
fmt::format(
|
4428
4833
|
R"(unable to drop the collection "{}.{}" on the bucket "{}")", req.scope_name, req.collection_name, req.bucket_name));
|
4429
4834
|
break;
|
@@ -4460,43 +4865,49 @@ cb_Backend_query_index_get_all(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
4460
4865
|
backend->cluster->execute_http(
|
4461
4866
|
req, [barrier](couchbase::operations::query_index_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
4462
4867
|
auto resp = f.get();
|
4463
|
-
if (resp.ec) {
|
4464
|
-
exc = cb__map_error_code(resp.
|
4868
|
+
if (resp.ctx.ec) {
|
4869
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to get list of the indexes of the bucket \"{}\"", req.bucket_name));
|
4465
4870
|
break;
|
4466
4871
|
}
|
4467
4872
|
|
4468
4873
|
VALUE res = rb_hash_new();
|
4469
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
4874
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), rb_external_str_new(resp.status.data(), static_cast<long>(resp.status.size())));
|
4470
4875
|
VALUE indexes = rb_ary_new_capa(static_cast<long>(resp.indexes.size()));
|
4471
4876
|
for (const auto& idx : resp.indexes) {
|
4472
4877
|
VALUE index = rb_hash_new();
|
4473
|
-
rb_hash_aset(index, rb_id2sym(rb_intern("id")),
|
4474
|
-
rb_hash_aset(index, rb_id2sym(rb_intern("state")),
|
4475
|
-
rb_hash_aset(index, rb_id2sym(rb_intern("name")),
|
4476
|
-
rb_hash_aset(
|
4477
|
-
|
4478
|
-
|
4479
|
-
|
4480
|
-
|
4481
|
-
|
4482
|
-
rb_hash_aset(index,
|
4878
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("id")), rb_external_str_new(idx.id.data(), static_cast<long>(idx.id.size())));
|
4879
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("state")), rb_external_str_new(idx.state.data(), static_cast<long>(idx.state.size())));
|
4880
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("name")), rb_external_str_new(idx.name.data(), static_cast<long>(idx.name.size())));
|
4881
|
+
rb_hash_aset(index,
|
4882
|
+
rb_id2sym(rb_intern("datastore_id")),
|
4883
|
+
rb_external_str_new(idx.datastore_id.data(), static_cast<long>(idx.datastore_id.size())));
|
4884
|
+
rb_hash_aset(index,
|
4885
|
+
rb_id2sym(rb_intern("keyspace_id")),
|
4886
|
+
rb_external_str_new(idx.keyspace_id.data(), static_cast<long>(idx.keyspace_id.size())));
|
4887
|
+
rb_hash_aset(index,
|
4888
|
+
rb_id2sym(rb_intern("namespace_id")),
|
4889
|
+
rb_external_str_new(idx.namespace_id.data(), static_cast<long>(idx.namespace_id.size())));
|
4890
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("type")), rb_external_str_new(idx.type.data(), static_cast<long>(idx.type.size())));
|
4483
4891
|
rb_hash_aset(index, rb_id2sym(rb_intern("is_primary")), idx.is_primary ? Qtrue : Qfalse);
|
4484
4892
|
VALUE index_key = rb_ary_new_capa(static_cast<long>(idx.index_key.size()));
|
4485
4893
|
for (const auto& key : idx.index_key) {
|
4486
|
-
rb_ary_push(index_key,
|
4894
|
+
rb_ary_push(index_key, rb_external_str_new(key.data(), static_cast<long>(key.size())));
|
4487
4895
|
}
|
4488
4896
|
rb_hash_aset(index, rb_id2sym(rb_intern("index_key")), index_key);
|
4489
4897
|
if (idx.scope_id) {
|
4490
|
-
rb_hash_aset(
|
4491
|
-
|
4898
|
+
rb_hash_aset(index,
|
4899
|
+
rb_id2sym(rb_intern("scope_id")),
|
4900
|
+
rb_external_str_new(idx.scope_id->data(), static_cast<long>(idx.scope_id->size())));
|
4492
4901
|
}
|
4493
4902
|
if (idx.bucket_id) {
|
4494
|
-
rb_hash_aset(
|
4495
|
-
|
4903
|
+
rb_hash_aset(index,
|
4904
|
+
rb_id2sym(rb_intern("bucket_id")),
|
4905
|
+
rb_external_str_new(idx.bucket_id->data(), static_cast<long>(idx.bucket_id->size())));
|
4496
4906
|
}
|
4497
4907
|
if (idx.condition) {
|
4498
|
-
rb_hash_aset(
|
4499
|
-
|
4908
|
+
rb_hash_aset(index,
|
4909
|
+
rb_id2sym(rb_intern("condition")),
|
4910
|
+
rb_external_str_new(idx.condition->data(), static_cast<long>(idx.condition->size())));
|
4500
4911
|
}
|
4501
4912
|
rb_ary_push(indexes, index);
|
4502
4913
|
}
|
@@ -4577,29 +4988,30 @@ cb_Backend_query_index_create(VALUE self, VALUE bucket_name, VALUE index_name, V
|
|
4577
4988
|
backend->cluster->execute_http(
|
4578
4989
|
req, [barrier](couchbase::operations::query_index_create_response&& resp) mutable { barrier->set_value(resp); });
|
4579
4990
|
auto resp = f.get();
|
4580
|
-
if (resp.ec) {
|
4991
|
+
if (resp.ctx.ec) {
|
4581
4992
|
if (!resp.errors.empty()) {
|
4582
4993
|
const auto& first_error = resp.errors.front();
|
4583
|
-
exc = cb__map_error_code(resp.
|
4994
|
+
exc = cb__map_error_code(resp.ctx,
|
4584
4995
|
fmt::format(R"(unable to create index "{}" on the bucket "{}" ({}: {}))",
|
4585
4996
|
req.index_name,
|
4586
4997
|
req.bucket_name,
|
4587
4998
|
first_error.code,
|
4588
4999
|
first_error.message));
|
4589
5000
|
} else {
|
4590
|
-
exc = cb__map_error_code(resp.
|
5001
|
+
exc = cb__map_error_code(resp.ctx,
|
4591
5002
|
fmt::format(R"(unable to create index "{}" on the bucket "{}")", req.index_name, req.bucket_name));
|
4592
5003
|
}
|
4593
5004
|
break;
|
4594
5005
|
}
|
4595
5006
|
VALUE res = rb_hash_new();
|
4596
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5007
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), rb_external_str_new(resp.status.data(), static_cast<long>(resp.status.size())));
|
4597
5008
|
if (!resp.errors.empty()) {
|
4598
5009
|
VALUE errors = rb_ary_new_capa(static_cast<long>(resp.errors.size()));
|
4599
5010
|
for (const auto& err : resp.errors) {
|
4600
5011
|
VALUE error = rb_hash_new();
|
4601
5012
|
rb_hash_aset(error, rb_id2sym(rb_intern("code")), ULL2NUM(err.code));
|
4602
|
-
rb_hash_aset(
|
5013
|
+
rb_hash_aset(
|
5014
|
+
error, rb_id2sym(rb_intern("message")), rb_external_str_new(err.message.data(), static_cast<long>(err.message.size())));
|
4603
5015
|
rb_ary_push(errors, error);
|
4604
5016
|
}
|
4605
5017
|
rb_hash_aset(res, rb_id2sym(rb_intern("errors")), errors);
|
@@ -4656,29 +5068,30 @@ cb_Backend_query_index_drop(VALUE self, VALUE bucket_name, VALUE index_name, VAL
|
|
4656
5068
|
backend->cluster->execute_http(
|
4657
5069
|
req, [barrier](couchbase::operations::query_index_drop_response&& resp) mutable { barrier->set_value(resp); });
|
4658
5070
|
auto resp = f.get();
|
4659
|
-
if (resp.ec) {
|
5071
|
+
if (resp.ctx.ec) {
|
4660
5072
|
if (!resp.errors.empty()) {
|
4661
5073
|
const auto& first_error = resp.errors.front();
|
4662
|
-
exc = cb__map_error_code(resp.
|
5074
|
+
exc = cb__map_error_code(resp.ctx,
|
4663
5075
|
fmt::format(R"(unable to drop index "{}" on the bucket "{}" ({}: {}))",
|
4664
5076
|
req.index_name,
|
4665
5077
|
req.bucket_name,
|
4666
5078
|
first_error.code,
|
4667
5079
|
first_error.message));
|
4668
5080
|
} else {
|
4669
|
-
exc = cb__map_error_code(resp.
|
5081
|
+
exc = cb__map_error_code(resp.ctx,
|
4670
5082
|
fmt::format(R"(unable to drop index "{}" on the bucket "{}")", req.index_name, req.bucket_name));
|
4671
5083
|
}
|
4672
5084
|
break;
|
4673
5085
|
}
|
4674
5086
|
VALUE res = rb_hash_new();
|
4675
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5087
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), rb_external_str_new(resp.status.data(), static_cast<long>(resp.status.size())));
|
4676
5088
|
if (!resp.errors.empty()) {
|
4677
5089
|
VALUE errors = rb_ary_new_capa(static_cast<long>(resp.errors.size()));
|
4678
5090
|
for (const auto& err : resp.errors) {
|
4679
5091
|
VALUE error = rb_hash_new();
|
4680
5092
|
rb_hash_aset(error, rb_id2sym(rb_intern("code")), ULL2NUM(err.code));
|
4681
|
-
rb_hash_aset(
|
5093
|
+
rb_hash_aset(
|
5094
|
+
error, rb_id2sym(rb_intern("message")), rb_external_str_new(err.message.data(), static_cast<long>(err.message.size())));
|
4682
5095
|
rb_ary_push(errors, error);
|
4683
5096
|
}
|
4684
5097
|
rb_hash_aset(res, rb_id2sym(rb_intern("errors")), errors);
|
@@ -4751,28 +5164,29 @@ cb_Backend_query_index_create_primary(VALUE self, VALUE bucket_name, VALUE optio
|
|
4751
5164
|
backend->cluster->execute_http(
|
4752
5165
|
req, [barrier](couchbase::operations::query_index_create_response&& resp) mutable { barrier->set_value(resp); });
|
4753
5166
|
auto resp = f.get();
|
4754
|
-
if (resp.ec) {
|
5167
|
+
if (resp.ctx.ec) {
|
4755
5168
|
if (!resp.errors.empty()) {
|
4756
5169
|
const auto& first_error = resp.errors.front();
|
4757
|
-
exc = cb__map_error_code(resp.
|
5170
|
+
exc = cb__map_error_code(resp.ctx,
|
4758
5171
|
fmt::format(R"(unable to create primary index on the bucket "{}" ({}: {}))",
|
4759
5172
|
req.bucket_name,
|
4760
5173
|
first_error.code,
|
4761
5174
|
first_error.message));
|
4762
5175
|
} else {
|
4763
5176
|
exc = cb__map_error_code(
|
4764
|
-
resp.
|
5177
|
+
resp.ctx, fmt::format(R"(unable to create primary index on the bucket "{}")", req.index_name, req.bucket_name));
|
4765
5178
|
}
|
4766
5179
|
break;
|
4767
5180
|
}
|
4768
5181
|
VALUE res = rb_hash_new();
|
4769
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5182
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), rb_external_str_new(resp.status.data(), static_cast<long>(resp.status.size())));
|
4770
5183
|
if (!resp.errors.empty()) {
|
4771
5184
|
VALUE errors = rb_ary_new_capa(static_cast<long>(resp.errors.size()));
|
4772
5185
|
for (const auto& err : resp.errors) {
|
4773
5186
|
VALUE error = rb_hash_new();
|
4774
5187
|
rb_hash_aset(error, rb_id2sym(rb_intern("code")), ULL2NUM(err.code));
|
4775
|
-
rb_hash_aset(
|
5188
|
+
rb_hash_aset(
|
5189
|
+
error, rb_id2sym(rb_intern("message")), rb_external_str_new(err.message.data(), static_cast<long>(err.message.size())));
|
4776
5190
|
rb_ary_push(errors, error);
|
4777
5191
|
}
|
4778
5192
|
rb_hash_aset(res, rb_id2sym(rb_intern("errors")), errors);
|
@@ -4834,26 +5248,27 @@ cb_Backend_query_index_drop_primary(VALUE self, VALUE bucket_name, VALUE options
|
|
4834
5248
|
backend->cluster->execute_http(
|
4835
5249
|
req, [barrier](couchbase::operations::query_index_drop_response&& resp) mutable { barrier->set_value(resp); });
|
4836
5250
|
auto resp = f.get();
|
4837
|
-
if (resp.ec) {
|
5251
|
+
if (resp.ctx.ec) {
|
4838
5252
|
if (!resp.errors.empty()) {
|
4839
5253
|
const auto& first_error = resp.errors.front();
|
4840
5254
|
exc = cb__map_error_code(
|
4841
|
-
resp.
|
5255
|
+
resp.ctx,
|
4842
5256
|
fmt::format(
|
4843
5257
|
R"(unable to drop primary index on the bucket "{}" ({}: {}))", req.bucket_name, first_error.code, first_error.message));
|
4844
5258
|
} else {
|
4845
|
-
exc = cb__map_error_code(resp.
|
5259
|
+
exc = cb__map_error_code(resp.ctx, fmt::format(R"(unable to drop primary index on the bucket "{}")", req.bucket_name));
|
4846
5260
|
}
|
4847
5261
|
break;
|
4848
5262
|
}
|
4849
5263
|
VALUE res = rb_hash_new();
|
4850
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5264
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), rb_external_str_new(resp.status.data(), static_cast<long>(resp.status.size())));
|
4851
5265
|
if (!resp.errors.empty()) {
|
4852
5266
|
VALUE errors = rb_ary_new_capa(static_cast<long>(resp.errors.size()));
|
4853
5267
|
for (const auto& err : resp.errors) {
|
4854
5268
|
VALUE error = rb_hash_new();
|
4855
5269
|
rb_hash_aset(error, rb_id2sym(rb_intern("code")), ULL2NUM(err.code));
|
4856
|
-
rb_hash_aset(
|
5270
|
+
rb_hash_aset(
|
5271
|
+
error, rb_id2sym(rb_intern("message")), rb_external_str_new(err.message.data(), static_cast<long>(err.message.size())));
|
4857
5272
|
rb_ary_push(errors, error);
|
4858
5273
|
}
|
4859
5274
|
rb_hash_aset(res, rb_id2sym(rb_intern("errors")), errors);
|
@@ -4890,17 +5305,17 @@ cb_Backend_query_index_build_deferred(VALUE self, VALUE bucket_name, VALUE timeo
|
|
4890
5305
|
backend->cluster->execute_http(
|
4891
5306
|
req, [barrier](couchbase::operations::query_index_build_deferred_response&& resp) mutable { barrier->set_value(resp); });
|
4892
5307
|
auto resp = f.get();
|
4893
|
-
if (resp.ec) {
|
5308
|
+
if (resp.ctx.ec) {
|
4894
5309
|
if (!resp.errors.empty()) {
|
4895
5310
|
const auto& first_error = resp.errors.front();
|
4896
5311
|
exc = cb__map_error_code(
|
4897
|
-
resp.
|
5312
|
+
resp.ctx,
|
4898
5313
|
fmt::format(
|
4899
5314
|
R"(unable to drop primary index on the bucket "{}" ({}: {}))", req.bucket_name, first_error.code, first_error.message));
|
4900
5315
|
|
4901
5316
|
} else {
|
4902
5317
|
exc = cb__map_error_code(
|
4903
|
-
resp.
|
5318
|
+
resp.ctx, fmt::format("unable to trigger build for deferred indexes for the bucket \"{}\"", req.bucket_name));
|
4904
5319
|
}
|
4905
5320
|
break;
|
4906
5321
|
}
|
@@ -4934,31 +5349,35 @@ cb_Backend_query_index_watch(VALUE self, VALUE bucket_name, VALUE index_names, V
|
|
4934
5349
|
static void
|
4935
5350
|
cb__extract_search_index(VALUE index, const couchbase::operations::search_index& idx)
|
4936
5351
|
{
|
4937
|
-
rb_hash_aset(index, rb_id2sym(rb_intern("uuid")),
|
4938
|
-
rb_hash_aset(index, rb_id2sym(rb_intern("name")),
|
4939
|
-
rb_hash_aset(index, rb_id2sym(rb_intern("type")),
|
5352
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("uuid")), rb_external_str_new(idx.uuid.data(), static_cast<long>(idx.uuid.size())));
|
5353
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("name")), rb_external_str_new(idx.name.data(), static_cast<long>(idx.name.size())));
|
5354
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("type")), rb_external_str_new(idx.type.data(), static_cast<long>(idx.type.size())));
|
4940
5355
|
if (!idx.params_json.empty()) {
|
4941
|
-
rb_hash_aset(
|
5356
|
+
rb_hash_aset(
|
5357
|
+
index, rb_id2sym(rb_intern("params")), rb_external_str_new(idx.params_json.data(), static_cast<long>(idx.params_json.size())));
|
4942
5358
|
}
|
4943
5359
|
|
4944
5360
|
if (!idx.source_uuid.empty()) {
|
4945
|
-
rb_hash_aset(
|
4946
|
-
|
5361
|
+
rb_hash_aset(index,
|
5362
|
+
rb_id2sym(rb_intern("source_uuid")),
|
5363
|
+
rb_external_str_new(idx.source_uuid.data(), static_cast<long>(idx.source_uuid.size())));
|
4947
5364
|
}
|
4948
5365
|
if (!idx.source_name.empty()) {
|
4949
|
-
rb_hash_aset(
|
4950
|
-
|
5366
|
+
rb_hash_aset(index,
|
5367
|
+
rb_id2sym(rb_intern("source_name")),
|
5368
|
+
rb_external_str_new(idx.source_name.data(), static_cast<long>(idx.source_name.size())));
|
4951
5369
|
}
|
4952
|
-
rb_hash_aset(
|
5370
|
+
rb_hash_aset(
|
5371
|
+
index, rb_id2sym(rb_intern("source_type")), rb_external_str_new(idx.source_type.data(), static_cast<long>(idx.source_type.size())));
|
4953
5372
|
if (!idx.source_params_json.empty()) {
|
4954
5373
|
rb_hash_aset(index,
|
4955
5374
|
rb_id2sym(rb_intern("source_params")),
|
4956
|
-
|
5375
|
+
rb_external_str_new(idx.source_params_json.data(), static_cast<long>(idx.source_params_json.size())));
|
4957
5376
|
}
|
4958
5377
|
if (!idx.plan_params_json.empty()) {
|
4959
5378
|
rb_hash_aset(index,
|
4960
5379
|
rb_id2sym(rb_intern("plan_params")),
|
4961
|
-
|
5380
|
+
rb_external_str_new(idx.plan_params_json.data(), static_cast<long>(idx.plan_params_json.size())));
|
4962
5381
|
}
|
4963
5382
|
}
|
4964
5383
|
|
@@ -4985,14 +5404,15 @@ cb_Backend_search_index_get_all(VALUE self, VALUE timeout)
|
|
4985
5404
|
backend->cluster->execute_http(
|
4986
5405
|
req, [barrier](couchbase::operations::search_index_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
4987
5406
|
auto resp = f.get();
|
4988
|
-
if (resp.ec) {
|
4989
|
-
exc = cb__map_error_code(resp.
|
5407
|
+
if (resp.ctx.ec) {
|
5408
|
+
exc = cb__map_error_code(resp.ctx, "unable to get list of the search indexes");
|
4990
5409
|
break;
|
4991
5410
|
}
|
4992
5411
|
VALUE res = rb_hash_new();
|
4993
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
4994
|
-
rb_hash_aset(
|
4995
|
-
|
5412
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), rb_external_str_new(resp.status.data(), static_cast<long>(resp.status.size())));
|
5413
|
+
rb_hash_aset(res,
|
5414
|
+
rb_id2sym(rb_intern("impl_version")),
|
5415
|
+
rb_external_str_new(resp.impl_version.data(), static_cast<long>(resp.impl_version.size())));
|
4996
5416
|
VALUE indexes = rb_ary_new_capa(static_cast<long>(resp.indexes.size()));
|
4997
5417
|
for (const auto& idx : resp.indexes) {
|
4998
5418
|
VALUE index = rb_hash_new();
|
@@ -5031,11 +5451,11 @@ cb_Backend_search_index_get(VALUE self, VALUE index_name, VALUE timeout)
|
|
5031
5451
|
backend->cluster->execute_http(
|
5032
5452
|
req, [barrier](couchbase::operations::search_index_get_response&& resp) mutable { barrier->set_value(resp); });
|
5033
5453
|
auto resp = f.get();
|
5034
|
-
if (resp.ec) {
|
5454
|
+
if (resp.ctx.ec) {
|
5035
5455
|
if (resp.error.empty()) {
|
5036
|
-
exc = cb__map_error_code(resp.
|
5456
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to get search index \"{}\"", req.index_name));
|
5037
5457
|
} else {
|
5038
|
-
exc = cb__map_error_code(resp.
|
5458
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to get search index \"{}\": {}", req.index_name, resp.error));
|
5039
5459
|
}
|
5040
5460
|
break;
|
5041
5461
|
}
|
@@ -5120,16 +5540,16 @@ cb_Backend_search_index_upsert(VALUE self, VALUE index_definition, VALUE timeout
|
|
5120
5540
|
backend->cluster->execute_http(
|
5121
5541
|
req, [barrier](couchbase::operations::search_index_upsert_response&& resp) mutable { barrier->set_value(resp); });
|
5122
5542
|
auto resp = f.get();
|
5123
|
-
if (resp.ec) {
|
5543
|
+
if (resp.ctx.ec) {
|
5124
5544
|
if (resp.error.empty()) {
|
5125
|
-
exc = cb__map_error_code(resp.
|
5545
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to upsert the search index \"{}\"", req.index.name));
|
5126
5546
|
} else {
|
5127
|
-
exc = cb__map_error_code(resp.
|
5547
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to upsert the search index \"{}\": {}", req.index.name, resp.error));
|
5128
5548
|
}
|
5129
5549
|
break;
|
5130
5550
|
}
|
5131
5551
|
VALUE res = rb_hash_new();
|
5132
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5552
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), rb_external_str_new(resp.status.data(), static_cast<long>(resp.status.size())));
|
5133
5553
|
return res;
|
5134
5554
|
} while (false);
|
5135
5555
|
rb_exc_raise(exc);
|
@@ -5161,16 +5581,16 @@ cb_Backend_search_index_drop(VALUE self, VALUE index_name, VALUE timeout)
|
|
5161
5581
|
backend->cluster->execute_http(
|
5162
5582
|
req, [barrier](couchbase::operations::search_index_drop_response&& resp) mutable { barrier->set_value(resp); });
|
5163
5583
|
auto resp = f.get();
|
5164
|
-
if (resp.ec) {
|
5584
|
+
if (resp.ctx.ec) {
|
5165
5585
|
if (resp.error.empty()) {
|
5166
|
-
exc = cb__map_error_code(resp.
|
5586
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to drop the search index \"{}\"", req.index_name));
|
5167
5587
|
} else {
|
5168
|
-
exc = cb__map_error_code(resp.
|
5588
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to drop the search index \"{}\": {}", req.index_name, resp.error));
|
5169
5589
|
}
|
5170
5590
|
break;
|
5171
5591
|
}
|
5172
5592
|
VALUE res = rb_hash_new();
|
5173
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5593
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), rb_external_str_new(resp.status.data(), static_cast<long>(resp.status.size())));
|
5174
5594
|
return res;
|
5175
5595
|
} while (false);
|
5176
5596
|
rb_exc_raise(exc);
|
@@ -5202,19 +5622,19 @@ cb_Backend_search_index_get_documents_count(VALUE self, VALUE index_name, VALUE
|
|
5202
5622
|
backend->cluster->execute_http(
|
5203
5623
|
req, [barrier](couchbase::operations::search_index_get_documents_count_response&& resp) mutable { barrier->set_value(resp); });
|
5204
5624
|
auto resp = f.get();
|
5205
|
-
if (resp.ec) {
|
5625
|
+
if (resp.ctx.ec) {
|
5206
5626
|
if (resp.error.empty()) {
|
5207
5627
|
exc = cb__map_error_code(
|
5208
|
-
resp.
|
5628
|
+
resp.ctx, fmt::format("unable to get number of the indexed documents for the search index \"{}\"", req.index_name));
|
5209
5629
|
} else {
|
5210
5630
|
exc = cb__map_error_code(
|
5211
|
-
resp.
|
5631
|
+
resp.ctx,
|
5212
5632
|
fmt::format("unable to get number of the indexed documents for the search index \"{}\": {}", req.index_name, resp.error));
|
5213
5633
|
}
|
5214
5634
|
break;
|
5215
5635
|
}
|
5216
5636
|
VALUE res = rb_hash_new();
|
5217
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5637
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), rb_external_str_new(resp.status.data(), static_cast<long>(resp.status.size())));
|
5218
5638
|
rb_hash_aset(res, rb_id2sym(rb_intern("count")), ULL2NUM(resp.count));
|
5219
5639
|
return res;
|
5220
5640
|
} while (false);
|
@@ -5247,16 +5667,16 @@ cb_Backend_search_index_get_stats(VALUE self, VALUE index_name, VALUE timeout)
|
|
5247
5667
|
backend->cluster->execute_http(
|
5248
5668
|
req, [barrier](couchbase::operations::search_index_get_stats_response&& resp) mutable { barrier->set_value(resp); });
|
5249
5669
|
auto resp = f.get();
|
5250
|
-
if (resp.ec) {
|
5670
|
+
if (resp.ctx.ec) {
|
5251
5671
|
if (resp.error.empty()) {
|
5252
|
-
exc = cb__map_error_code(resp.
|
5672
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to get stats for the search index \"{}\"", req.index_name));
|
5253
5673
|
} else {
|
5254
|
-
exc = cb__map_error_code(resp.
|
5674
|
+
exc = cb__map_error_code(resp.ctx,
|
5255
5675
|
fmt::format("unable to get stats for the search index \"{}\": {}", req.index_name, resp.error));
|
5256
5676
|
}
|
5257
5677
|
break;
|
5258
5678
|
}
|
5259
|
-
return
|
5679
|
+
return rb_external_str_new(resp.stats.data(), static_cast<long>(resp.stats.size()));
|
5260
5680
|
} while (false);
|
5261
5681
|
rb_exc_raise(exc);
|
5262
5682
|
return Qnil;
|
@@ -5285,11 +5705,11 @@ cb_Backend_search_get_stats(VALUE self, VALUE timeout)
|
|
5285
5705
|
backend->cluster->execute_http(
|
5286
5706
|
req, [barrier](couchbase::operations::search_index_stats_response&& resp) mutable { barrier->set_value(resp); });
|
5287
5707
|
auto resp = f.get();
|
5288
|
-
if (resp.ec) {
|
5289
|
-
exc = cb__map_error_code(resp.
|
5708
|
+
if (resp.ctx.ec) {
|
5709
|
+
exc = cb__map_error_code(resp.ctx, "unable to get stats for the search service");
|
5290
5710
|
break;
|
5291
5711
|
}
|
5292
|
-
return
|
5712
|
+
return rb_external_str_new(resp.stats.data(), static_cast<long>(resp.stats.size()));
|
5293
5713
|
} while (false);
|
5294
5714
|
rb_exc_raise(exc);
|
5295
5715
|
return Qnil;
|
@@ -5321,17 +5741,17 @@ cb_Backend_search_index_pause_ingest(VALUE self, VALUE index_name, VALUE timeout
|
|
5321
5741
|
backend->cluster->execute_http(
|
5322
5742
|
req, [barrier](couchbase::operations::search_index_control_ingest_response&& resp) mutable { barrier->set_value(resp); });
|
5323
5743
|
auto resp = f.get();
|
5324
|
-
if (resp.ec) {
|
5744
|
+
if (resp.ctx.ec) {
|
5325
5745
|
if (resp.error.empty()) {
|
5326
|
-
exc = cb__map_error_code(resp.
|
5746
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to pause ingest for the search index \"{}\"", req.index_name));
|
5327
5747
|
} else {
|
5328
|
-
exc = cb__map_error_code(resp.
|
5748
|
+
exc = cb__map_error_code(resp.ctx,
|
5329
5749
|
fmt::format("unable to pause ingest for the search index \"{}\": {}", req.index_name, resp.error));
|
5330
5750
|
}
|
5331
5751
|
break;
|
5332
5752
|
}
|
5333
5753
|
VALUE res = rb_hash_new();
|
5334
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5754
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), rb_external_str_new(resp.status.data(), static_cast<long>(resp.status.size())));
|
5335
5755
|
return res;
|
5336
5756
|
} while (false);
|
5337
5757
|
rb_exc_raise(exc);
|
@@ -5364,17 +5784,17 @@ cb_Backend_search_index_resume_ingest(VALUE self, VALUE index_name, VALUE timeou
|
|
5364
5784
|
backend->cluster->execute_http(
|
5365
5785
|
req, [barrier](couchbase::operations::search_index_control_ingest_response&& resp) mutable { barrier->set_value(resp); });
|
5366
5786
|
auto resp = f.get();
|
5367
|
-
if (resp.ec) {
|
5787
|
+
if (resp.ctx.ec) {
|
5368
5788
|
if (resp.error.empty()) {
|
5369
|
-
exc = cb__map_error_code(resp.
|
5789
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to resume ingest for the search index \"{}\"", req.index_name));
|
5370
5790
|
} else {
|
5371
5791
|
exc = cb__map_error_code(
|
5372
|
-
resp.
|
5792
|
+
resp.ctx, fmt::format("unable to resume ingest for the search index \"{}\": {}", req.index_name, resp.error));
|
5373
5793
|
}
|
5374
5794
|
break;
|
5375
5795
|
}
|
5376
5796
|
VALUE res = rb_hash_new();
|
5377
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5797
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), rb_external_str_new(resp.status.data(), static_cast<long>(resp.status.size())));
|
5378
5798
|
return res;
|
5379
5799
|
} while (false);
|
5380
5800
|
rb_exc_raise(exc);
|
@@ -5407,17 +5827,17 @@ cb_Backend_search_index_allow_querying(VALUE self, VALUE index_name, VALUE timeo
|
|
5407
5827
|
backend->cluster->execute_http(
|
5408
5828
|
req, [barrier](couchbase::operations::search_index_control_query_response&& resp) mutable { barrier->set_value(resp); });
|
5409
5829
|
auto resp = f.get();
|
5410
|
-
if (resp.ec) {
|
5830
|
+
if (resp.ctx.ec) {
|
5411
5831
|
if (resp.error.empty()) {
|
5412
|
-
exc = cb__map_error_code(resp.
|
5832
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to allow querying for the search index \"{}\"", req.index_name));
|
5413
5833
|
} else {
|
5414
5834
|
exc = cb__map_error_code(
|
5415
|
-
resp.
|
5835
|
+
resp.ctx, fmt::format("unable to allow querying for the search index \"{}\": {}", req.index_name, resp.error));
|
5416
5836
|
}
|
5417
5837
|
break;
|
5418
5838
|
}
|
5419
5839
|
VALUE res = rb_hash_new();
|
5420
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5840
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), rb_external_str_new(resp.status.data(), static_cast<long>(resp.status.size())));
|
5421
5841
|
return res;
|
5422
5842
|
} while (false);
|
5423
5843
|
rb_exc_raise(exc);
|
@@ -5450,17 +5870,17 @@ cb_Backend_search_index_disallow_querying(VALUE self, VALUE index_name, VALUE ti
|
|
5450
5870
|
backend->cluster->execute_http(
|
5451
5871
|
req, [barrier](couchbase::operations::search_index_control_query_response&& resp) mutable { barrier->set_value(resp); });
|
5452
5872
|
auto resp = f.get();
|
5453
|
-
if (resp.ec) {
|
5873
|
+
if (resp.ctx.ec) {
|
5454
5874
|
if (resp.error.empty()) {
|
5455
|
-
exc = cb__map_error_code(resp.
|
5875
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to disallow querying for the search index \"{}\"", req.index_name));
|
5456
5876
|
} else {
|
5457
5877
|
exc = cb__map_error_code(
|
5458
|
-
resp.
|
5878
|
+
resp.ctx, fmt::format("unable to disallow querying for the search index \"{}\": {}", req.index_name, resp.error));
|
5459
5879
|
}
|
5460
5880
|
break;
|
5461
5881
|
}
|
5462
5882
|
VALUE res = rb_hash_new();
|
5463
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5883
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), rb_external_str_new(resp.status.data(), static_cast<long>(resp.status.size())));
|
5464
5884
|
return res;
|
5465
5885
|
} while (false);
|
5466
5886
|
rb_exc_raise(exc);
|
@@ -5493,17 +5913,17 @@ cb_Backend_search_index_freeze_plan(VALUE self, VALUE index_name, VALUE timeout)
|
|
5493
5913
|
backend->cluster->execute_http(
|
5494
5914
|
req, [barrier](couchbase::operations::search_index_control_plan_freeze_response&& resp) mutable { barrier->set_value(resp); });
|
5495
5915
|
auto resp = f.get();
|
5496
|
-
if (resp.ec) {
|
5916
|
+
if (resp.ctx.ec) {
|
5497
5917
|
if (resp.error.empty()) {
|
5498
|
-
exc = cb__map_error_code(resp.
|
5918
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to freeze for the search index \"{}\"", req.index_name));
|
5499
5919
|
} else {
|
5500
5920
|
exc =
|
5501
|
-
cb__map_error_code(resp.
|
5921
|
+
cb__map_error_code(resp.ctx, fmt::format("unable to freeze for the search index \"{}\": {}", req.index_name, resp.error));
|
5502
5922
|
}
|
5503
5923
|
break;
|
5504
5924
|
}
|
5505
5925
|
VALUE res = rb_hash_new();
|
5506
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5926
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), rb_external_str_new(resp.status.data(), static_cast<long>(resp.status.size())));
|
5507
5927
|
return res;
|
5508
5928
|
} while (false);
|
5509
5929
|
rb_exc_raise(exc);
|
@@ -5536,17 +5956,17 @@ cb_Backend_search_index_unfreeze_plan(VALUE self, VALUE index_name, VALUE timeou
|
|
5536
5956
|
backend->cluster->execute_http(
|
5537
5957
|
req, [barrier](couchbase::operations::search_index_control_plan_freeze_response&& resp) mutable { barrier->set_value(resp); });
|
5538
5958
|
auto resp = f.get();
|
5539
|
-
if (resp.ec) {
|
5959
|
+
if (resp.ctx.ec) {
|
5540
5960
|
if (resp.error.empty()) {
|
5541
|
-
exc = cb__map_error_code(resp.
|
5961
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to unfreeze plan for the search index \"{}\"", req.index_name));
|
5542
5962
|
} else {
|
5543
|
-
exc = cb__map_error_code(resp.
|
5963
|
+
exc = cb__map_error_code(resp.ctx,
|
5544
5964
|
fmt::format("unable to unfreeze for the search index \"{}\": {}", req.index_name, resp.error));
|
5545
5965
|
}
|
5546
5966
|
break;
|
5547
5967
|
}
|
5548
5968
|
VALUE res = rb_hash_new();
|
5549
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5969
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), rb_external_str_new(resp.status.data(), static_cast<long>(resp.status.size())));
|
5550
5970
|
return res;
|
5551
5971
|
} while (false);
|
5552
5972
|
rb_exc_raise(exc);
|
@@ -5582,18 +6002,19 @@ cb_Backend_search_index_analyze_document(VALUE self, VALUE index_name, VALUE enc
|
|
5582
6002
|
backend->cluster->execute_http(
|
5583
6003
|
req, [barrier](couchbase::operations::search_index_analyze_document_response&& resp) mutable { barrier->set_value(resp); });
|
5584
6004
|
auto resp = f.get();
|
5585
|
-
if (resp.ec) {
|
6005
|
+
if (resp.ctx.ec) {
|
5586
6006
|
if (resp.error.empty()) {
|
5587
|
-
exc = cb__map_error_code(resp.
|
6007
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to analyze document using the search index \"{}\"", req.index_name));
|
5588
6008
|
} else {
|
5589
6009
|
exc = cb__map_error_code(
|
5590
|
-
resp.
|
6010
|
+
resp.ctx, fmt::format("unable to analyze document using the search index \"{}\": {}", req.index_name, resp.error));
|
5591
6011
|
}
|
5592
6012
|
break;
|
5593
6013
|
}
|
5594
6014
|
VALUE res = rb_hash_new();
|
5595
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5596
|
-
rb_hash_aset(
|
6015
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), rb_external_str_new(resp.status.data(), static_cast<long>(resp.status.size())));
|
6016
|
+
rb_hash_aset(
|
6017
|
+
res, rb_id2sym(rb_intern("analysis")), rb_external_str_new(resp.analysis.data(), static_cast<long>(resp.analysis.size())));
|
5597
6018
|
return res;
|
5598
6019
|
} while (false);
|
5599
6020
|
rb_exc_raise(exc);
|
@@ -5768,22 +6189,23 @@ cb_Backend_document_search(VALUE self, VALUE index_name, VALUE query, VALUE opti
|
|
5768
6189
|
auto f = barrier->get_future();
|
5769
6190
|
backend->cluster->execute_http(req, [barrier](couchbase::operations::search_response&& resp) mutable { barrier->set_value(resp); });
|
5770
6191
|
auto resp = f.get();
|
5771
|
-
if (resp.ec) {
|
6192
|
+
if (resp.ctx.ec) {
|
5772
6193
|
exc =
|
5773
|
-
cb__map_error_code(resp.
|
6194
|
+
cb__map_error_code(resp.ctx, fmt::format("unable to perform search query for index \"{}\": {}", req.index_name, resp.error));
|
5774
6195
|
break;
|
5775
6196
|
}
|
5776
6197
|
VALUE res = rb_hash_new();
|
5777
6198
|
|
5778
6199
|
VALUE meta_data = rb_hash_new();
|
5779
|
-
rb_hash_aset(
|
5780
|
-
|
5781
|
-
|
6200
|
+
rb_hash_aset(
|
6201
|
+
meta_data,
|
6202
|
+
rb_id2sym(rb_intern("client_context_id")),
|
6203
|
+
rb_external_str_new(resp.meta_data.client_context_id.data(), static_cast<long>(resp.meta_data.client_context_id.size())));
|
5782
6204
|
|
5783
6205
|
VALUE metrics = rb_hash_new();
|
5784
6206
|
rb_hash_aset(metrics,
|
5785
6207
|
rb_id2sym(rb_intern("took")),
|
5786
|
-
|
6208
|
+
LL2NUM(std::chrono::duration_cast<std::chrono::milliseconds>(resp.meta_data.metrics.took).count()));
|
5787
6209
|
rb_hash_aset(metrics, rb_id2sym(rb_intern("total_rows")), ULL2NUM(resp.meta_data.metrics.total_rows));
|
5788
6210
|
rb_hash_aset(metrics, rb_id2sym(rb_intern("max_score")), DBL2NUM(resp.meta_data.metrics.max_score));
|
5789
6211
|
rb_hash_aset(metrics, rb_id2sym(rb_intern("success_partition_count")), ULL2NUM(resp.meta_data.metrics.success_partition_count));
|
@@ -5794,8 +6216,8 @@ cb_Backend_document_search(VALUE self, VALUE index_name, VALUE query, VALUE opti
|
|
5794
6216
|
VALUE errors = rb_hash_new();
|
5795
6217
|
for (auto err : resp.meta_data.errors) {
|
5796
6218
|
rb_hash_aset(errors,
|
5797
|
-
|
5798
|
-
|
6219
|
+
rb_external_str_new(err.first.data(), static_cast<long>(err.first.size())),
|
6220
|
+
rb_external_str_new(err.second.data(), static_cast<long>(err.second.size())));
|
5799
6221
|
}
|
5800
6222
|
rb_hash_aset(meta_data, rb_id2sym(rb_intern("errors")), errors);
|
5801
6223
|
}
|
@@ -5805,14 +6227,16 @@ cb_Backend_document_search(VALUE self, VALUE index_name, VALUE query, VALUE opti
|
|
5805
6227
|
VALUE rows = rb_ary_new_capa(static_cast<long>(resp.rows.size()));
|
5806
6228
|
for (const auto& entry : resp.rows) {
|
5807
6229
|
VALUE row = rb_hash_new();
|
5808
|
-
rb_hash_aset(
|
5809
|
-
|
6230
|
+
rb_hash_aset(
|
6231
|
+
row, rb_id2sym(rb_intern("index")), rb_external_str_new(entry.index.data(), static_cast<long>(entry.index.size())));
|
6232
|
+
rb_hash_aset(row, rb_id2sym(rb_intern("id")), rb_external_str_new(entry.id.data(), static_cast<long>(entry.id.size())));
|
5810
6233
|
rb_hash_aset(row, rb_id2sym(rb_intern("score")), DBL2NUM(entry.score));
|
5811
6234
|
VALUE locations = rb_ary_new_capa(static_cast<long>(entry.locations.size()));
|
5812
6235
|
for (const auto& loc : entry.locations) {
|
5813
6236
|
VALUE location = rb_hash_new();
|
5814
|
-
rb_hash_aset(
|
5815
|
-
|
6237
|
+
rb_hash_aset(
|
6238
|
+
row, rb_id2sym(rb_intern("field")), rb_external_str_new(loc.field.data(), static_cast<long>(loc.field.size())));
|
6239
|
+
rb_hash_aset(row, rb_id2sym(rb_intern("term")), rb_external_str_new(loc.term.data(), static_cast<long>(loc.term.size())));
|
5816
6240
|
rb_hash_aset(row, rb_id2sym(rb_intern("pos")), ULL2NUM(loc.position));
|
5817
6241
|
rb_hash_aset(row, rb_id2sym(rb_intern("start_offset")), ULL2NUM(loc.start_offset));
|
5818
6242
|
rb_hash_aset(row, rb_id2sym(rb_intern("end_offset")), ULL2NUM(loc.end_offset));
|
@@ -5831,20 +6255,22 @@ cb_Backend_document_search(VALUE self, VALUE index_name, VALUE query, VALUE opti
|
|
5831
6255
|
for (const auto& field_fragments : entry.fragments) {
|
5832
6256
|
VALUE fragments_list = rb_ary_new_capa(static_cast<long>(field_fragments.second.size()));
|
5833
6257
|
for (const auto& fragment : field_fragments.second) {
|
5834
|
-
rb_ary_push(fragments_list,
|
6258
|
+
rb_ary_push(fragments_list, rb_external_str_new(fragment.data(), static_cast<long>(fragment.size())));
|
5835
6259
|
}
|
5836
|
-
rb_hash_aset(
|
5837
|
-
|
6260
|
+
rb_hash_aset(fragments,
|
6261
|
+
rb_external_str_new(field_fragments.first.data(), static_cast<long>(field_fragments.first.size())),
|
6262
|
+
fragments_list);
|
5838
6263
|
}
|
5839
6264
|
rb_hash_aset(row, rb_id2sym(rb_intern("fragments")), fragments);
|
5840
6265
|
}
|
5841
6266
|
if (!entry.fields.empty()) {
|
5842
|
-
rb_hash_aset(
|
6267
|
+
rb_hash_aset(
|
6268
|
+
row, rb_id2sym(rb_intern("fields")), rb_external_str_new(entry.fields.data(), static_cast<long>(entry.fields.size())));
|
5843
6269
|
}
|
5844
6270
|
if (!entry.explanation.empty()) {
|
5845
6271
|
rb_hash_aset(row,
|
5846
6272
|
rb_id2sym(rb_intern("explanation")),
|
5847
|
-
|
6273
|
+
rb_external_str_new(entry.explanation.data(), static_cast<long>(entry.explanation.size())));
|
5848
6274
|
}
|
5849
6275
|
rb_ary_push(rows, row);
|
5850
6276
|
}
|
@@ -5854,9 +6280,10 @@ cb_Backend_document_search(VALUE self, VALUE index_name, VALUE query, VALUE opti
|
|
5854
6280
|
VALUE result_facets = rb_hash_new();
|
5855
6281
|
for (const auto& entry : resp.facets) {
|
5856
6282
|
VALUE facet = rb_hash_new();
|
5857
|
-
VALUE facet_name =
|
6283
|
+
VALUE facet_name = rb_external_str_new(entry.name.data(), static_cast<long>(entry.name.size()));
|
5858
6284
|
rb_hash_aset(facet, rb_id2sym(rb_intern("name")), facet_name);
|
5859
|
-
rb_hash_aset(
|
6285
|
+
rb_hash_aset(
|
6286
|
+
facet, rb_id2sym(rb_intern("field")), rb_external_str_new(entry.field.data(), static_cast<long>(entry.field.size())));
|
5860
6287
|
rb_hash_aset(facet, rb_id2sym(rb_intern("total")), ULL2NUM(entry.total));
|
5861
6288
|
rb_hash_aset(facet, rb_id2sym(rb_intern("missing")), ULL2NUM(entry.missing));
|
5862
6289
|
rb_hash_aset(facet, rb_id2sym(rb_intern("other")), ULL2NUM(entry.other));
|
@@ -5864,7 +6291,8 @@ cb_Backend_document_search(VALUE self, VALUE index_name, VALUE query, VALUE opti
|
|
5864
6291
|
VALUE terms = rb_ary_new_capa(static_cast<long>(entry.terms.size()));
|
5865
6292
|
for (const auto& item : entry.terms) {
|
5866
6293
|
VALUE term = rb_hash_new();
|
5867
|
-
rb_hash_aset(
|
6294
|
+
rb_hash_aset(
|
6295
|
+
term, rb_id2sym(rb_intern("term")), rb_external_str_new(item.term.data(), static_cast<long>(item.term.size())));
|
5868
6296
|
rb_hash_aset(term, rb_id2sym(rb_intern("count")), ULL2NUM(item.count));
|
5869
6297
|
rb_ary_push(terms, term);
|
5870
6298
|
}
|
@@ -5873,18 +6301,19 @@ cb_Backend_document_search(VALUE self, VALUE index_name, VALUE query, VALUE opti
|
|
5873
6301
|
VALUE date_ranges = rb_ary_new_capa(static_cast<long>(entry.date_ranges.size()));
|
5874
6302
|
for (const auto& item : entry.date_ranges) {
|
5875
6303
|
VALUE date_range = rb_hash_new();
|
5876
|
-
rb_hash_aset(
|
5877
|
-
|
6304
|
+
rb_hash_aset(date_range,
|
6305
|
+
rb_id2sym(rb_intern("name")),
|
6306
|
+
rb_external_str_new(item.name.data(), static_cast<long>(item.name.size())));
|
5878
6307
|
rb_hash_aset(date_range, rb_id2sym(rb_intern("count")), ULL2NUM(item.count));
|
5879
6308
|
if (item.start) {
|
5880
6309
|
rb_hash_aset(date_range,
|
5881
6310
|
rb_id2sym(rb_intern("start_time")),
|
5882
|
-
|
6311
|
+
rb_external_str_new(item.start->data(), static_cast<long>(item.start->size())));
|
5883
6312
|
}
|
5884
6313
|
if (item.end) {
|
5885
6314
|
rb_hash_aset(date_range,
|
5886
6315
|
rb_id2sym(rb_intern("end_time")),
|
5887
|
-
|
6316
|
+
rb_external_str_new(item.end->data(), static_cast<long>(item.end->size())));
|
5888
6317
|
}
|
5889
6318
|
rb_ary_push(date_ranges, date_range);
|
5890
6319
|
}
|
@@ -5893,8 +6322,9 @@ cb_Backend_document_search(VALUE self, VALUE index_name, VALUE query, VALUE opti
|
|
5893
6322
|
VALUE numeric_ranges = rb_ary_new_capa(static_cast<long>(entry.numeric_ranges.size()));
|
5894
6323
|
for (const auto& item : entry.numeric_ranges) {
|
5895
6324
|
VALUE numeric_range = rb_hash_new();
|
5896
|
-
rb_hash_aset(
|
5897
|
-
|
6325
|
+
rb_hash_aset(numeric_range,
|
6326
|
+
rb_id2sym(rb_intern("name")),
|
6327
|
+
rb_external_str_new(item.name.data(), static_cast<long>(item.name.size())));
|
5898
6328
|
rb_hash_aset(numeric_range, rb_id2sym(rb_intern("count")), ULL2NUM(item.count));
|
5899
6329
|
if (std::holds_alternative<double>(item.min)) {
|
5900
6330
|
rb_hash_aset(numeric_range, rb_id2sym(rb_intern("min")), DBL2NUM(std::get<double>(item.min)));
|
@@ -5964,8 +6394,9 @@ cb_Backend_dns_srv(VALUE self, VALUE hostname, VALUE service)
|
|
5964
6394
|
VALUE res = rb_ary_new();
|
5965
6395
|
for (const auto& target : resp.targets) {
|
5966
6396
|
VALUE addr = rb_hash_new();
|
5967
|
-
rb_hash_aset(
|
5968
|
-
|
6397
|
+
rb_hash_aset(addr,
|
6398
|
+
rb_id2sym(rb_intern("hostname")),
|
6399
|
+
rb_external_str_new(target.hostname.data(), static_cast<long>(target.hostname.size())));
|
5969
6400
|
rb_hash_aset(addr, rb_id2sym(rb_intern("port")), UINT2NUM(target.port));
|
5970
6401
|
rb_ary_push(res, addr);
|
5971
6402
|
}
|
@@ -5998,20 +6429,20 @@ cb_Backend_analytics_get_pending_mutations(VALUE self, VALUE timeout)
|
|
5998
6429
|
backend->cluster->execute_http(
|
5999
6430
|
req, [barrier](couchbase::operations::analytics_get_pending_mutations_response&& resp) mutable { barrier->set_value(resp); });
|
6000
6431
|
auto resp = f.get();
|
6001
|
-
if (resp.ec) {
|
6432
|
+
if (resp.ctx.ec) {
|
6002
6433
|
if (resp.errors.empty()) {
|
6003
|
-
exc = cb__map_error_code(resp.
|
6434
|
+
exc = cb__map_error_code(resp.ctx, "unable to get pending mutations for the analytics service");
|
6004
6435
|
} else {
|
6005
6436
|
const auto& first_error = resp.errors.front();
|
6006
6437
|
exc = cb__map_error_code(
|
6007
|
-
resp.
|
6438
|
+
resp.ctx,
|
6008
6439
|
fmt::format("unable to get pending mutations for the analytics service ({}: {})", first_error.code, first_error.message));
|
6009
6440
|
}
|
6010
6441
|
break;
|
6011
6442
|
}
|
6012
6443
|
VALUE res = rb_hash_new();
|
6013
6444
|
for (const auto& entry : resp.stats) {
|
6014
|
-
rb_hash_aset(res,
|
6445
|
+
rb_hash_aset(res, rb_external_str_new(entry.first.data(), static_cast<long>(entry.first.size())), ULL2NUM(entry.second));
|
6015
6446
|
}
|
6016
6447
|
return res;
|
6017
6448
|
} while (false);
|
@@ -6042,27 +6473,28 @@ cb_Backend_analytics_dataset_get_all(VALUE self, VALUE timeout)
|
|
6042
6473
|
backend->cluster->execute_http(
|
6043
6474
|
req, [barrier](couchbase::operations::analytics_dataset_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
6044
6475
|
auto resp = f.get();
|
6045
|
-
if (resp.ec) {
|
6476
|
+
if (resp.ctx.ec) {
|
6046
6477
|
if (resp.errors.empty()) {
|
6047
|
-
exc = cb__map_error_code(resp.
|
6478
|
+
exc = cb__map_error_code(resp.ctx, "unable to fetch all datasets");
|
6048
6479
|
} else {
|
6049
6480
|
const auto& first_error = resp.errors.front();
|
6050
6481
|
exc =
|
6051
|
-
cb__map_error_code(resp.
|
6482
|
+
cb__map_error_code(resp.ctx, fmt::format("unable to fetch all datasets ({}: {})", first_error.code, first_error.message));
|
6052
6483
|
}
|
6053
6484
|
break;
|
6054
6485
|
}
|
6055
6486
|
VALUE res = rb_ary_new_capa(static_cast<long>(resp.datasets.size()));
|
6056
6487
|
for (const auto& ds : resp.datasets) {
|
6057
6488
|
VALUE dataset = rb_hash_new();
|
6058
|
-
rb_hash_aset(dataset, rb_id2sym(rb_intern("name")),
|
6489
|
+
rb_hash_aset(dataset, rb_id2sym(rb_intern("name")), rb_external_str_new(ds.name.data(), static_cast<long>(ds.name.size())));
|
6059
6490
|
rb_hash_aset(dataset,
|
6060
6491
|
rb_id2sym(rb_intern("dataverse_name")),
|
6061
|
-
|
6062
|
-
rb_hash_aset(
|
6063
|
-
dataset, rb_id2sym(rb_intern("link_name")), rb_str_new(ds.link_name.data(), static_cast<long>(ds.link_name.size())));
|
6492
|
+
rb_external_str_new(ds.dataverse_name.data(), static_cast<long>(ds.dataverse_name.size())));
|
6064
6493
|
rb_hash_aset(
|
6065
|
-
dataset, rb_id2sym(rb_intern("
|
6494
|
+
dataset, rb_id2sym(rb_intern("link_name")), rb_external_str_new(ds.link_name.data(), static_cast<long>(ds.link_name.size())));
|
6495
|
+
rb_hash_aset(dataset,
|
6496
|
+
rb_id2sym(rb_intern("bucket_name")),
|
6497
|
+
rb_external_str_new(ds.bucket_name.data(), static_cast<long>(ds.bucket_name.size())));
|
6066
6498
|
rb_ary_push(res, dataset);
|
6067
6499
|
}
|
6068
6500
|
return res;
|
@@ -6106,12 +6538,12 @@ cb_Backend_analytics_dataset_drop(VALUE self, VALUE dataset_name, VALUE datavers
|
|
6106
6538
|
backend->cluster->execute_http(
|
6107
6539
|
req, [barrier](couchbase::operations::analytics_dataset_drop_response&& resp) mutable { barrier->set_value(resp); });
|
6108
6540
|
auto resp = f.get();
|
6109
|
-
if (resp.ec) {
|
6541
|
+
if (resp.ctx.ec) {
|
6110
6542
|
if (resp.errors.empty()) {
|
6111
|
-
exc = cb__map_error_code(resp.
|
6543
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to drop dataset `{}`.`{}`", req.dataverse_name, req.dataset_name));
|
6112
6544
|
} else {
|
6113
6545
|
const auto& first_error = resp.errors.front();
|
6114
|
-
exc = cb__map_error_code(resp.
|
6546
|
+
exc = cb__map_error_code(resp.ctx,
|
6115
6547
|
fmt::format("unable to drop dataset `{}`.`{}` ({}: {})",
|
6116
6548
|
req.dataverse_name,
|
6117
6549
|
req.dataset_name,
|
@@ -6175,12 +6607,12 @@ cb_Backend_analytics_dataset_create(VALUE self,
|
|
6175
6607
|
backend->cluster->execute_http(
|
6176
6608
|
req, [barrier](couchbase::operations::analytics_dataset_create_response&& resp) mutable { barrier->set_value(resp); });
|
6177
6609
|
auto resp = f.get();
|
6178
|
-
if (resp.ec) {
|
6610
|
+
if (resp.ctx.ec) {
|
6179
6611
|
if (resp.errors.empty()) {
|
6180
|
-
exc = cb__map_error_code(resp.
|
6612
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to create dataset `{}`.`{}`", req.dataverse_name, req.dataset_name));
|
6181
6613
|
} else {
|
6182
6614
|
const auto& first_error = resp.errors.front();
|
6183
|
-
exc = cb__map_error_code(resp.
|
6615
|
+
exc = cb__map_error_code(resp.ctx,
|
6184
6616
|
fmt::format("unable to create dataset `{}`.`{}` ({}: {})",
|
6185
6617
|
req.dataverse_name,
|
6186
6618
|
req.dataset_name,
|
@@ -6224,13 +6656,13 @@ cb_Backend_analytics_dataverse_drop(VALUE self, VALUE dataverse_name, VALUE igno
|
|
6224
6656
|
backend->cluster->execute_http(
|
6225
6657
|
req, [barrier](couchbase::operations::analytics_dataverse_drop_response&& resp) mutable { barrier->set_value(resp); });
|
6226
6658
|
auto resp = f.get();
|
6227
|
-
if (resp.ec) {
|
6659
|
+
if (resp.ctx.ec) {
|
6228
6660
|
if (resp.errors.empty()) {
|
6229
|
-
exc = cb__map_error_code(resp.
|
6661
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to drop dataverse `{}`", req.dataverse_name));
|
6230
6662
|
} else {
|
6231
6663
|
const auto& first_error = resp.errors.front();
|
6232
6664
|
exc = cb__map_error_code(
|
6233
|
-
resp.
|
6665
|
+
resp.ctx,
|
6234
6666
|
fmt::format("unable to drop dataverse `{}` ({}: {})", req.dataverse_name, first_error.code, first_error.message));
|
6235
6667
|
}
|
6236
6668
|
break;
|
@@ -6273,13 +6705,13 @@ cb_Backend_analytics_dataverse_create(VALUE self, VALUE dataverse_name, VALUE ig
|
|
6273
6705
|
backend->cluster->execute_http(
|
6274
6706
|
req, [barrier](couchbase::operations::analytics_dataverse_create_response&& resp) mutable { barrier->set_value(resp); });
|
6275
6707
|
auto resp = f.get();
|
6276
|
-
if (resp.ec) {
|
6708
|
+
if (resp.ctx.ec) {
|
6277
6709
|
if (resp.errors.empty()) {
|
6278
|
-
exc = cb__map_error_code(resp.
|
6710
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to create dataverse `{}`", req.dataverse_name));
|
6279
6711
|
} else {
|
6280
6712
|
const auto& first_error = resp.errors.front();
|
6281
6713
|
exc = cb__map_error_code(
|
6282
|
-
resp.
|
6714
|
+
resp.ctx,
|
6283
6715
|
fmt::format("unable to create dataverse `{}` ({}: {})", req.dataverse_name, first_error.code, first_error.message));
|
6284
6716
|
}
|
6285
6717
|
break;
|
@@ -6313,25 +6745,26 @@ cb_Backend_analytics_index_get_all(VALUE self, VALUE timeout)
|
|
6313
6745
|
backend->cluster->execute_http(
|
6314
6746
|
req, [barrier](couchbase::operations::analytics_index_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
6315
6747
|
auto resp = f.get();
|
6316
|
-
if (resp.ec) {
|
6748
|
+
if (resp.ctx.ec) {
|
6317
6749
|
if (resp.errors.empty()) {
|
6318
|
-
exc = cb__map_error_code(resp.
|
6750
|
+
exc = cb__map_error_code(resp.ctx, "unable to fetch all indexes");
|
6319
6751
|
} else {
|
6320
6752
|
const auto& first_error = resp.errors.front();
|
6321
6753
|
exc =
|
6322
|
-
cb__map_error_code(resp.
|
6754
|
+
cb__map_error_code(resp.ctx, fmt::format("unable to fetch all indexes ({}: {})", first_error.code, first_error.message));
|
6323
6755
|
}
|
6324
6756
|
break;
|
6325
6757
|
}
|
6326
6758
|
VALUE res = rb_ary_new_capa(static_cast<long>(resp.indexes.size()));
|
6327
6759
|
for (const auto& idx : resp.indexes) {
|
6328
6760
|
VALUE index = rb_hash_new();
|
6329
|
-
rb_hash_aset(index, rb_id2sym(rb_intern("name")),
|
6330
|
-
rb_hash_aset(
|
6331
|
-
|
6761
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("name")), rb_external_str_new(idx.name.data(), static_cast<long>(idx.name.size())));
|
6762
|
+
rb_hash_aset(index,
|
6763
|
+
rb_id2sym(rb_intern("dataset_name")),
|
6764
|
+
rb_external_str_new(idx.dataset_name.data(), static_cast<long>(idx.dataset_name.size())));
|
6332
6765
|
rb_hash_aset(index,
|
6333
6766
|
rb_id2sym(rb_intern("dataverse_name")),
|
6334
|
-
|
6767
|
+
rb_external_str_new(idx.dataverse_name.data(), static_cast<long>(idx.dataverse_name.size())));
|
6335
6768
|
rb_hash_aset(index, rb_id2sym(rb_intern("is_primary")), idx.is_primary ? Qtrue : Qfalse);
|
6336
6769
|
rb_ary_push(res, index);
|
6337
6770
|
}
|
@@ -6396,13 +6829,13 @@ cb_Backend_analytics_index_create(VALUE self,
|
|
6396
6829
|
backend->cluster->execute_http(
|
6397
6830
|
req, [barrier](couchbase::operations::analytics_index_create_response&& resp) mutable { barrier->set_value(resp); });
|
6398
6831
|
auto resp = f.get();
|
6399
|
-
if (resp.ec) {
|
6832
|
+
if (resp.ctx.ec) {
|
6400
6833
|
if (resp.errors.empty()) {
|
6401
6834
|
exc = cb__map_error_code(
|
6402
|
-
resp.
|
6835
|
+
resp.ctx, fmt::format("unable to create index `{}` on `{}`.`{}`", req.index_name, req.dataverse_name, req.dataset_name));
|
6403
6836
|
} else {
|
6404
6837
|
const auto& first_error = resp.errors.front();
|
6405
|
-
exc = cb__map_error_code(resp.
|
6838
|
+
exc = cb__map_error_code(resp.ctx,
|
6406
6839
|
fmt::format("unable to create index `{}` on `{}`.`{}` ({}: {})",
|
6407
6840
|
req.index_name,
|
6408
6841
|
req.dataverse_name,
|
@@ -6460,13 +6893,13 @@ cb_Backend_analytics_index_drop(VALUE self,
|
|
6460
6893
|
backend->cluster->execute_http(
|
6461
6894
|
req, [barrier](couchbase::operations::analytics_index_drop_response&& resp) mutable { barrier->set_value(resp); });
|
6462
6895
|
auto resp = f.get();
|
6463
|
-
if (resp.ec) {
|
6896
|
+
if (resp.ctx.ec) {
|
6464
6897
|
if (resp.errors.empty()) {
|
6465
6898
|
exc = cb__map_error_code(
|
6466
|
-
resp.
|
6899
|
+
resp.ctx, fmt::format("unable to drop index `{}`.`{}`.`{}`", req.dataverse_name, req.dataset_name, req.index_name));
|
6467
6900
|
} else {
|
6468
6901
|
const auto& first_error = resp.errors.front();
|
6469
|
-
exc = cb__map_error_code(resp.
|
6902
|
+
exc = cb__map_error_code(resp.ctx,
|
6470
6903
|
fmt::format("unable to drop index `{}`.`{}`.`{}` ({}: {})",
|
6471
6904
|
req.dataverse_name,
|
6472
6905
|
req.dataset_name,
|
@@ -6517,12 +6950,12 @@ cb_Backend_analytics_link_connect(VALUE self, VALUE link_name, VALUE force, VALU
|
|
6517
6950
|
backend->cluster->execute_http(
|
6518
6951
|
req, [barrier](couchbase::operations::analytics_link_connect_response&& resp) mutable { barrier->set_value(resp); });
|
6519
6952
|
auto resp = f.get();
|
6520
|
-
if (resp.ec) {
|
6953
|
+
if (resp.ctx.ec) {
|
6521
6954
|
if (resp.errors.empty()) {
|
6522
|
-
exc = cb__map_error_code(resp.
|
6955
|
+
exc = cb__map_error_code(resp.ctx, fmt::format("unable to connect link `{}` on `{}`", req.link_name, req.dataverse_name));
|
6523
6956
|
} else {
|
6524
6957
|
const auto& first_error = resp.errors.front();
|
6525
|
-
exc = cb__map_error_code(resp.
|
6958
|
+
exc = cb__map_error_code(resp.ctx,
|
6526
6959
|
fmt::format("unable to connect link `{}` on `{}` ({}: {})",
|
6527
6960
|
req.link_name,
|
6528
6961
|
req.dataverse_name,
|
@@ -6569,12 +7002,13 @@ cb_Backend_analytics_link_disconnect(VALUE self, VALUE link_name, VALUE datavers
|
|
6569
7002
|
backend->cluster->execute_http(
|
6570
7003
|
req, [barrier](couchbase::operations::analytics_link_disconnect_response&& resp) mutable { barrier->set_value(resp); });
|
6571
7004
|
auto resp = f.get();
|
6572
|
-
if (resp.ec) {
|
7005
|
+
if (resp.ctx.ec) {
|
6573
7006
|
if (resp.errors.empty()) {
|
6574
|
-
exc =
|
7007
|
+
exc =
|
7008
|
+
cb__map_error_code(resp.ctx, fmt::format("unable to disconnect link `{}` on `{}`", req.link_name, req.dataverse_name));
|
6575
7009
|
} else {
|
6576
7010
|
const auto& first_error = resp.errors.front();
|
6577
|
-
exc = cb__map_error_code(resp.
|
7011
|
+
exc = cb__map_error_code(resp.ctx,
|
6578
7012
|
fmt::format("unable to disconnect link `{}` on `{}` ({}: {})",
|
6579
7013
|
req.link_name,
|
6580
7014
|
req.dataverse_name,
|
@@ -6663,6 +7097,23 @@ cb_Backend_document_analytics(VALUE self, VALUE statement, VALUE options)
|
|
6663
7097
|
req.scan_consistency = couchbase::operations::analytics_request::scan_consistency_type::request_plus;
|
6664
7098
|
}
|
6665
7099
|
}
|
7100
|
+
VALUE scope_qualifier = rb_hash_aref(options, rb_id2sym(rb_intern("scope_qualifier")));
|
7101
|
+
if (!NIL_P(scope_qualifier) && TYPE(scope_qualifier) == T_STRING) {
|
7102
|
+
req.scope_qualifier.emplace(std::string(RSTRING_PTR(scope_qualifier), static_cast<std::size_t>(RSTRING_LEN(scope_qualifier))));
|
7103
|
+
} else {
|
7104
|
+
VALUE scope_name = rb_hash_aref(options, rb_id2sym(rb_intern("scope_name")));
|
7105
|
+
if (!NIL_P(scope_name) && TYPE(scope_name) == T_STRING) {
|
7106
|
+
req.scope_name.emplace(std::string(RSTRING_PTR(scope_name), static_cast<std::size_t>(RSTRING_LEN(scope_name))));
|
7107
|
+
VALUE bucket_name = rb_hash_aref(options, rb_id2sym(rb_intern("bucket_name")));
|
7108
|
+
if (NIL_P(bucket_name)) {
|
7109
|
+
exc = rb_exc_new_cstr(
|
7110
|
+
eInvalidArgument,
|
7111
|
+
fmt::format("bucket must be specified for analytics query in scope \"{}\"", req.scope_name.value()).c_str());
|
7112
|
+
break;
|
7113
|
+
}
|
7114
|
+
req.bucket_name.emplace(std::string(RSTRING_PTR(bucket_name), static_cast<std::size_t>(RSTRING_LEN(bucket_name))));
|
7115
|
+
}
|
7116
|
+
}
|
6666
7117
|
|
6667
7118
|
VALUE raw_params = rb_hash_aref(options, rb_id2sym(rb_intern("raw_parameters")));
|
6668
7119
|
if (!NIL_P(raw_params)) {
|
@@ -6675,20 +7126,13 @@ cb_Backend_document_analytics(VALUE self, VALUE statement, VALUE options)
|
|
6675
7126
|
backend->cluster->execute_http(req,
|
6676
7127
|
[barrier](couchbase::operations::analytics_response&& resp) mutable { barrier->set_value(resp); });
|
6677
7128
|
auto resp = f.get();
|
6678
|
-
if (resp.ec) {
|
7129
|
+
if (resp.ctx.ec) {
|
6679
7130
|
if (resp.payload.meta_data.errors && !resp.payload.meta_data.errors->empty()) {
|
6680
7131
|
const auto& first_error = resp.payload.meta_data.errors->front();
|
6681
|
-
exc = cb__map_error_code(resp.
|
6682
|
-
fmt::format("unable to execute analytics query
|
6683
|
-
req.statement.substr(0, 50),
|
6684
|
-
req.statement.size() > 50 ? "..." : "",
|
6685
|
-
first_error.code,
|
6686
|
-
first_error.message));
|
7132
|
+
exc = cb__map_error_code(resp.ctx,
|
7133
|
+
fmt::format("unable to execute analytics query ({}: {})", first_error.code, first_error.message));
|
6687
7134
|
} else {
|
6688
|
-
exc = cb__map_error_code(resp.
|
6689
|
-
fmt::format("unable to execute analytics query: \"{}{}\"",
|
6690
|
-
req.statement.substr(0, 50),
|
6691
|
-
req.statement.size() > 50 ? "..." : ""));
|
7135
|
+
exc = cb__map_error_code(resp.ctx, "unable to execute analytics query");
|
6692
7136
|
}
|
6693
7137
|
break;
|
6694
7138
|
}
|
@@ -6696,40 +7140,43 @@ cb_Backend_document_analytics(VALUE self, VALUE statement, VALUE options)
|
|
6696
7140
|
VALUE rows = rb_ary_new_capa(static_cast<long>(resp.payload.rows.size()));
|
6697
7141
|
rb_hash_aset(res, rb_id2sym(rb_intern("rows")), rows);
|
6698
7142
|
for (auto& row : resp.payload.rows) {
|
6699
|
-
rb_ary_push(rows,
|
7143
|
+
rb_ary_push(rows, rb_external_str_new(row.data(), static_cast<long>(row.size())));
|
6700
7144
|
}
|
6701
7145
|
VALUE meta = rb_hash_new();
|
6702
7146
|
rb_hash_aset(res, rb_id2sym(rb_intern("meta")), meta);
|
6703
7147
|
rb_hash_aset(meta,
|
6704
7148
|
rb_id2sym(rb_intern("status")),
|
6705
7149
|
rb_id2sym(rb_intern2(resp.payload.meta_data.status.data(), static_cast<long>(resp.payload.meta_data.status.size()))));
|
6706
|
-
rb_hash_aset(meta,
|
6707
|
-
rb_id2sym(rb_intern("request_id")),
|
6708
|
-
rb_str_new(resp.payload.meta_data.request_id.data(), static_cast<long>(resp.payload.meta_data.request_id.size())));
|
6709
7150
|
rb_hash_aset(
|
6710
7151
|
meta,
|
6711
|
-
rb_id2sym(rb_intern("
|
6712
|
-
|
7152
|
+
rb_id2sym(rb_intern("request_id")),
|
7153
|
+
rb_external_str_new(resp.payload.meta_data.request_id.data(), static_cast<long>(resp.payload.meta_data.request_id.size())));
|
7154
|
+
rb_hash_aset(meta,
|
7155
|
+
rb_id2sym(rb_intern("client_context_id")),
|
7156
|
+
rb_external_str_new(resp.payload.meta_data.client_context_id.data(),
|
7157
|
+
static_cast<long>(resp.payload.meta_data.client_context_id.size())));
|
6713
7158
|
if (resp.payload.meta_data.signature) {
|
6714
|
-
rb_hash_aset(
|
6715
|
-
|
6716
|
-
|
7159
|
+
rb_hash_aset(
|
7160
|
+
meta,
|
7161
|
+
rb_id2sym(rb_intern("signature")),
|
7162
|
+
rb_external_str_new(resp.payload.meta_data.signature->data(), static_cast<long>(resp.payload.meta_data.signature->size())));
|
6717
7163
|
}
|
6718
7164
|
if (resp.payload.meta_data.profile) {
|
6719
|
-
rb_hash_aset(
|
6720
|
-
|
6721
|
-
|
7165
|
+
rb_hash_aset(
|
7166
|
+
meta,
|
7167
|
+
rb_id2sym(rb_intern("profile")),
|
7168
|
+
rb_external_str_new(resp.payload.meta_data.profile->data(), static_cast<long>(resp.payload.meta_data.profile->size())));
|
6722
7169
|
}
|
6723
7170
|
VALUE metrics = rb_hash_new();
|
6724
7171
|
rb_hash_aset(meta, rb_id2sym(rb_intern("metrics")), metrics);
|
6725
7172
|
rb_hash_aset(metrics,
|
6726
7173
|
rb_id2sym(rb_intern("elapsed_time")),
|
6727
|
-
|
6728
|
-
|
7174
|
+
rb_external_str_new(resp.payload.meta_data.metrics.elapsed_time.data(),
|
7175
|
+
static_cast<long>(resp.payload.meta_data.metrics.elapsed_time.size())));
|
6729
7176
|
rb_hash_aset(metrics,
|
6730
7177
|
rb_id2sym(rb_intern("execution_time")),
|
6731
|
-
|
6732
|
-
|
7178
|
+
rb_external_str_new(resp.payload.meta_data.metrics.execution_time.data(),
|
7179
|
+
static_cast<long>(resp.payload.meta_data.metrics.execution_time.size())));
|
6733
7180
|
rb_hash_aset(metrics, rb_id2sym(rb_intern("result_count")), ULL2NUM(resp.payload.meta_data.metrics.result_count));
|
6734
7181
|
rb_hash_aset(metrics, rb_id2sym(rb_intern("result_size")), ULL2NUM(resp.payload.meta_data.metrics.result_count));
|
6735
7182
|
if (resp.payload.meta_data.metrics.sort_count) {
|
@@ -6762,14 +7209,16 @@ cb_Backend_parse_connection_string(VALUE self, VALUE connection_string)
|
|
6762
7209
|
|
6763
7210
|
VALUE res = rb_hash_new();
|
6764
7211
|
if (!connstr.scheme.empty()) {
|
6765
|
-
rb_hash_aset(
|
7212
|
+
rb_hash_aset(
|
7213
|
+
res, rb_id2sym(rb_intern("scheme")), rb_external_str_new(connstr.scheme.data(), static_cast<long>(connstr.scheme.size())));
|
6766
7214
|
rb_hash_aset(res, rb_id2sym(rb_intern("tls")), connstr.tls ? Qtrue : Qfalse);
|
6767
7215
|
}
|
6768
7216
|
|
6769
7217
|
VALUE nodes = rb_ary_new_capa(static_cast<long>(connstr.bootstrap_nodes.size()));
|
6770
7218
|
for (const auto& entry : connstr.bootstrap_nodes) {
|
6771
7219
|
VALUE node = rb_hash_new();
|
6772
|
-
rb_hash_aset(
|
7220
|
+
rb_hash_aset(
|
7221
|
+
node, rb_id2sym(rb_intern("address")), rb_external_str_new(entry.address.data(), static_cast<long>(entry.address.size())));
|
6773
7222
|
if (entry.port > 0) {
|
6774
7223
|
rb_hash_aset(node, rb_id2sym(rb_intern("port")), UINT2NUM(entry.port));
|
6775
7224
|
}
|
@@ -6801,15 +7250,15 @@ cb_Backend_parse_connection_string(VALUE self, VALUE connection_string)
|
|
6801
7250
|
VALUE params = rb_hash_new();
|
6802
7251
|
for (const auto& param : connstr.params) {
|
6803
7252
|
rb_hash_aset(params,
|
6804
|
-
|
6805
|
-
|
7253
|
+
rb_external_str_new(param.first.data(), static_cast<long>(param.first.size())),
|
7254
|
+
rb_external_str_new(param.second.data(), static_cast<long>(param.second.size())));
|
6806
7255
|
}
|
6807
7256
|
rb_hash_aset(res, rb_id2sym(rb_intern("params")), params);
|
6808
7257
|
|
6809
7258
|
if (connstr.default_bucket_name) {
|
6810
7259
|
rb_hash_aset(res,
|
6811
7260
|
rb_id2sym(rb_intern("default_bucket_name")),
|
6812
|
-
|
7261
|
+
rb_external_str_new(connstr.default_bucket_name->data(), static_cast<long>(connstr.default_bucket_name->size())));
|
6813
7262
|
}
|
6814
7263
|
if (connstr.default_port > 0) {
|
6815
7264
|
rb_hash_aset(res, rb_id2sym(rb_intern("default_port")), UINT2NUM(connstr.default_port));
|
@@ -6825,7 +7274,8 @@ cb_Backend_parse_connection_string(VALUE self, VALUE connection_string)
|
|
6825
7274
|
break;
|
6826
7275
|
}
|
6827
7276
|
if (connstr.error) {
|
6828
|
-
rb_hash_aset(
|
7277
|
+
rb_hash_aset(
|
7278
|
+
res, rb_id2sym(rb_intern("error")), rb_external_str_new(connstr.error->data(), static_cast<long>(connstr.error->size())));
|
6829
7279
|
}
|
6830
7280
|
return res;
|
6831
7281
|
}
|
@@ -6869,15 +7319,15 @@ cb_Backend_view_index_get_all(VALUE self, VALUE bucket_name, VALUE name_space, V
|
|
6869
7319
|
backend->cluster->execute_http(
|
6870
7320
|
req, [barrier](couchbase::operations::view_index_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
6871
7321
|
auto resp = f.get();
|
6872
|
-
if (resp.ec) {
|
6873
|
-
exc = cb__map_error_code(resp.
|
7322
|
+
if (resp.ctx.ec) {
|
7323
|
+
exc = cb__map_error_code(resp.ctx, "unable to get list of the design documents");
|
6874
7324
|
break;
|
6875
7325
|
}
|
6876
7326
|
VALUE res = rb_ary_new_capa(static_cast<long>(resp.design_documents.size()));
|
6877
7327
|
for (const auto& entry : resp.design_documents) {
|
6878
7328
|
VALUE dd = rb_hash_new();
|
6879
|
-
rb_hash_aset(dd, rb_id2sym(rb_intern("name")),
|
6880
|
-
rb_hash_aset(dd, rb_id2sym(rb_intern("rev")),
|
7329
|
+
rb_hash_aset(dd, rb_id2sym(rb_intern("name")), rb_external_str_new(entry.name.data(), static_cast<long>(entry.name.size())));
|
7330
|
+
rb_hash_aset(dd, rb_id2sym(rb_intern("rev")), rb_external_str_new(entry.rev.data(), static_cast<long>(entry.rev.size())));
|
6881
7331
|
switch (entry.ns) {
|
6882
7332
|
case couchbase::operations::design_document::name_space::development:
|
6883
7333
|
rb_hash_aset(dd, rb_id2sym(rb_intern("namespace")), rb_id2sym(rb_intern("development")));
|
@@ -6888,18 +7338,19 @@ cb_Backend_view_index_get_all(VALUE self, VALUE bucket_name, VALUE name_space, V
|
|
6888
7338
|
}
|
6889
7339
|
VALUE views = rb_hash_new();
|
6890
7340
|
for (const auto& view_entry : entry.views) {
|
6891
|
-
VALUE view_name =
|
7341
|
+
VALUE view_name = rb_external_str_new(view_entry.first.data(), static_cast<long>(view_entry.first.size()));
|
6892
7342
|
VALUE view = rb_hash_new();
|
6893
7343
|
rb_hash_aset(view, rb_id2sym(rb_intern("name")), view_name);
|
6894
7344
|
if (view_entry.second.map) {
|
6895
7345
|
rb_hash_aset(view,
|
6896
7346
|
rb_id2sym(rb_intern("map")),
|
6897
|
-
|
7347
|
+
rb_external_str_new(view_entry.second.map->data(), static_cast<long>(view_entry.second.map->size())));
|
6898
7348
|
}
|
6899
7349
|
if (view_entry.second.reduce) {
|
6900
|
-
rb_hash_aset(
|
6901
|
-
|
6902
|
-
|
7350
|
+
rb_hash_aset(
|
7351
|
+
view,
|
7352
|
+
rb_id2sym(rb_intern("reduce")),
|
7353
|
+
rb_external_str_new(view_entry.second.reduce->data(), static_cast<long>(view_entry.second.reduce->size())));
|
6903
7354
|
}
|
6904
7355
|
rb_hash_aset(views, view_name, view);
|
6905
7356
|
}
|
@@ -6953,16 +7404,17 @@ cb_Backend_view_index_get(VALUE self, VALUE bucket_name, VALUE document_name, VA
|
|
6953
7404
|
backend->cluster->execute_http(
|
6954
7405
|
req, [barrier](couchbase::operations::view_index_get_response&& resp) mutable { barrier->set_value(resp); });
|
6955
7406
|
auto resp = f.get();
|
6956
|
-
if (resp.ec) {
|
7407
|
+
if (resp.ctx.ec) {
|
6957
7408
|
exc = cb__map_error_code(
|
6958
|
-
resp.
|
7409
|
+
resp.ctx,
|
6959
7410
|
fmt::format(R"(unable to get design document "{}" ({}) on bucket "{}")", req.document_name, req.name_space, req.bucket_name));
|
6960
7411
|
break;
|
6961
7412
|
}
|
6962
7413
|
VALUE res = rb_hash_new();
|
6963
7414
|
rb_hash_aset(
|
6964
|
-
res, rb_id2sym(rb_intern("name")),
|
6965
|
-
rb_hash_aset(
|
7415
|
+
res, rb_id2sym(rb_intern("name")), rb_external_str_new(resp.document.name.data(), static_cast<long>(resp.document.name.size())));
|
7416
|
+
rb_hash_aset(
|
7417
|
+
res, rb_id2sym(rb_intern("rev")), rb_external_str_new(resp.document.rev.data(), static_cast<long>(resp.document.rev.size())));
|
6966
7418
|
switch (resp.document.ns) {
|
6967
7419
|
case couchbase::operations::design_document::name_space::development:
|
6968
7420
|
rb_hash_aset(res, rb_id2sym(rb_intern("namespace")), rb_id2sym(rb_intern("development")));
|
@@ -6973,18 +7425,18 @@ cb_Backend_view_index_get(VALUE self, VALUE bucket_name, VALUE document_name, VA
|
|
6973
7425
|
}
|
6974
7426
|
VALUE views = rb_hash_new();
|
6975
7427
|
for (const auto& view_entry : resp.document.views) {
|
6976
|
-
VALUE view_name =
|
7428
|
+
VALUE view_name = rb_external_str_new(view_entry.first.data(), static_cast<long>(view_entry.first.size()));
|
6977
7429
|
VALUE view = rb_hash_new();
|
6978
7430
|
rb_hash_aset(view, rb_id2sym(rb_intern("name")), view_name);
|
6979
7431
|
if (view_entry.second.map) {
|
6980
7432
|
rb_hash_aset(view,
|
6981
7433
|
rb_id2sym(rb_intern("map")),
|
6982
|
-
|
7434
|
+
rb_external_str_new(view_entry.second.map->data(), static_cast<long>(view_entry.second.map->size())));
|
6983
7435
|
}
|
6984
7436
|
if (view_entry.second.reduce) {
|
6985
7437
|
rb_hash_aset(view,
|
6986
7438
|
rb_id2sym(rb_intern("reduce")),
|
6987
|
-
|
7439
|
+
rb_external_str_new(view_entry.second.reduce->data(), static_cast<long>(view_entry.second.reduce->size())));
|
6988
7440
|
}
|
6989
7441
|
rb_hash_aset(views, view_name, view);
|
6990
7442
|
}
|
@@ -7036,9 +7488,9 @@ cb_Backend_view_index_drop(VALUE self, VALUE bucket_name, VALUE document_name, V
|
|
7036
7488
|
backend->cluster->execute_http(
|
7037
7489
|
req, [barrier](couchbase::operations::view_index_drop_response&& resp) mutable { barrier->set_value(resp); });
|
7038
7490
|
auto resp = f.get();
|
7039
|
-
if (resp.ec) {
|
7491
|
+
if (resp.ctx.ec) {
|
7040
7492
|
exc = cb__map_error_code(
|
7041
|
-
resp.
|
7493
|
+
resp.ctx,
|
7042
7494
|
fmt::format(
|
7043
7495
|
R"(unable to drop design document "{}" ({}) on bucket "{}")", req.document_name, req.name_space, req.bucket_name));
|
7044
7496
|
break;
|
@@ -7117,9 +7569,9 @@ cb_Backend_view_index_upsert(VALUE self, VALUE bucket_name, VALUE document, VALU
|
|
7117
7569
|
backend->cluster->execute_http(
|
7118
7570
|
req, [barrier](couchbase::operations::view_index_upsert_response&& resp) mutable { barrier->set_value(resp); });
|
7119
7571
|
auto resp = f.get();
|
7120
|
-
if (resp.ec) {
|
7572
|
+
if (resp.ctx.ec) {
|
7121
7573
|
exc = cb__map_error_code(
|
7122
|
-
resp.
|
7574
|
+
resp.ctx,
|
7123
7575
|
fmt::format(
|
7124
7576
|
R"(unable to store design document "{}" ({}) on bucket "{}")", req.document.name, req.document.ns, req.bucket_name));
|
7125
7577
|
break;
|
@@ -7267,24 +7719,12 @@ cb_Backend_document_view(VALUE self, VALUE bucket_name, VALUE design_document_na
|
|
7267
7719
|
backend->cluster->execute_http(
|
7268
7720
|
req, [barrier](couchbase::operations::document_view_response&& resp) mutable { barrier->set_value(resp); });
|
7269
7721
|
auto resp = f.get();
|
7270
|
-
if (resp.ec) {
|
7722
|
+
if (resp.ctx.ec) {
|
7271
7723
|
if (resp.error) {
|
7272
|
-
exc = cb__map_error_code(
|
7273
|
-
|
7274
|
-
fmt::format(R"(unable to execute query for view "{}" of design document "{}" ({}) on bucket "{}": {} ({}))",
|
7275
|
-
req.view_name,
|
7276
|
-
req.document_name,
|
7277
|
-
req.name_space,
|
7278
|
-
req.bucket_name,
|
7279
|
-
resp.error->code,
|
7280
|
-
resp.error->message));
|
7724
|
+
exc = cb__map_error_code(resp.ctx,
|
7725
|
+
fmt::format(R"(unable to execute view query {} ({}))", resp.error->code, resp.error->message));
|
7281
7726
|
} else {
|
7282
|
-
exc = cb__map_error_code(resp.
|
7283
|
-
fmt::format(R"(unable to execute query for view "{}" of design document "{}" ({}) on bucket "{}")",
|
7284
|
-
req.view_name,
|
7285
|
-
req.document_name,
|
7286
|
-
req.name_space,
|
7287
|
-
req.bucket_name));
|
7727
|
+
exc = cb__map_error_code(resp.ctx, "unable to execute view query");
|
7288
7728
|
}
|
7289
7729
|
break;
|
7290
7730
|
}
|
@@ -7297,7 +7737,7 @@ cb_Backend_document_view(VALUE self, VALUE bucket_name, VALUE design_document_na
|
|
7297
7737
|
if (resp.meta_data.debug_info) {
|
7298
7738
|
rb_hash_aset(meta,
|
7299
7739
|
rb_id2sym(rb_intern("debug_info")),
|
7300
|
-
|
7740
|
+
rb_external_str_new(resp.meta_data.debug_info->data(), static_cast<long>(resp.meta_data.debug_info->size())));
|
7301
7741
|
}
|
7302
7742
|
rb_hash_aset(res, rb_id2sym(rb_intern("meta")), meta);
|
7303
7743
|
|
@@ -7305,10 +7745,11 @@ cb_Backend_document_view(VALUE self, VALUE bucket_name, VALUE design_document_na
|
|
7305
7745
|
for (const auto& entry : resp.rows) {
|
7306
7746
|
VALUE row = rb_hash_new();
|
7307
7747
|
if (entry.id) {
|
7308
|
-
rb_hash_aset(row, rb_id2sym(rb_intern("id")),
|
7748
|
+
rb_hash_aset(row, rb_id2sym(rb_intern("id")), rb_external_str_new(entry.id->data(), static_cast<long>(entry.id->size())));
|
7309
7749
|
}
|
7310
|
-
rb_hash_aset(row, rb_id2sym(rb_intern("key")),
|
7311
|
-
rb_hash_aset(
|
7750
|
+
rb_hash_aset(row, rb_id2sym(rb_intern("key")), rb_external_str_new(entry.key.data(), static_cast<long>(entry.key.size())));
|
7751
|
+
rb_hash_aset(
|
7752
|
+
row, rb_id2sym(rb_intern("value")), rb_external_str_new(entry.value.data(), static_cast<long>(entry.value.size())));
|
7312
7753
|
rb_ary_push(rows, row);
|
7313
7754
|
}
|
7314
7755
|
rb_hash_aset(res, rb_id2sym(rb_intern("rows")), rows);
|
@@ -7379,7 +7820,7 @@ cb_Backend_snappy_compress(VALUE self, VALUE data)
|
|
7379
7820
|
|
7380
7821
|
std::string compressed{};
|
7381
7822
|
std::size_t compressed_size = snappy::Compress(RSTRING_PTR(data), static_cast<std::size_t>(RSTRING_LEN(data)), &compressed);
|
7382
|
-
return
|
7823
|
+
return rb_external_str_new(compressed.data(), static_cast<long>(compressed_size));
|
7383
7824
|
}
|
7384
7825
|
|
7385
7826
|
static VALUE
|
@@ -7391,7 +7832,7 @@ cb_Backend_snappy_uncompress(VALUE self, VALUE data)
|
|
7391
7832
|
std::string uncompressed{};
|
7392
7833
|
bool success = snappy::Uncompress(RSTRING_PTR(data), static_cast<std::size_t>(RSTRING_LEN(data)), &uncompressed);
|
7393
7834
|
if (success) {
|
7394
|
-
return
|
7835
|
+
return rb_external_str_new(uncompressed.data(), static_cast<long>(uncompressed.size()));
|
7395
7836
|
}
|
7396
7837
|
rb_raise(rb_eArgError, "Unable to decompress buffer");
|
7397
7838
|
return Qnil;
|
@@ -7410,7 +7851,7 @@ cb_Backend_leb128_encode(VALUE self, VALUE number)
|
|
7410
7851
|
}
|
7411
7852
|
couchbase::protocol::unsigned_leb128<std::uint64_t> encoded(NUM2ULL(number));
|
7412
7853
|
std::string buf = encoded.get();
|
7413
|
-
return
|
7854
|
+
return rb_external_str_new(buf.data(), static_cast<long>(buf.size()));
|
7414
7855
|
}
|
7415
7856
|
|
7416
7857
|
static VALUE
|
@@ -7421,7 +7862,7 @@ cb_Backend_leb128_decode(VALUE self, VALUE data)
|
|
7421
7862
|
std::string buf(RSTRING_PTR(data), static_cast<std::size_t>(RSTRING_LEN(data)));
|
7422
7863
|
if (!buf.empty()) {
|
7423
7864
|
auto rv = couchbase::protocol::decode_unsigned_leb128<std::uint64_t>(buf, couchbase::protocol::Leb128NoThrow());
|
7424
|
-
if (rv.second.data()) {
|
7865
|
+
if (rv.second.data() != nullptr) {
|
7425
7866
|
return ULL2NUM(rv.first);
|
7426
7867
|
}
|
7427
7868
|
}
|
@@ -7554,7 +7995,10 @@ init_logger()
|
|
7554
7995
|
spdlog::cfg::helpers::load_levels(env_val);
|
7555
7996
|
}
|
7556
7997
|
|
7557
|
-
|
7998
|
+
env_val = spdlog::details::os::getenv("COUCHBASE_BACKEND_DONT_INSTALL_TERMINATE_HANDLER");
|
7999
|
+
if (env_val.empty()) {
|
8000
|
+
couchbase::platform::install_backtrace_terminate_handler();
|
8001
|
+
}
|
7558
8002
|
}
|
7559
8003
|
|
7560
8004
|
extern "C" {
|