couchbase 3.0.3-universal-darwin-20 → 3.1.1-universal-darwin-20
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 -3
- data/ext/CMakeLists.txt +4 -2
- data/ext/build_config.hxx.in +1 -1
- data/ext/build_version.hxx.in +2 -2
- data/ext/couchbase/bucket.hxx +1 -1
- data/ext/couchbase/capabilities.hxx +1 -1
- data/ext/couchbase/cluster.hxx +1 -1
- data/ext/couchbase/cluster_options.hxx +4 -1
- data/ext/couchbase/collections_manifest.hxx +1 -1
- data/ext/couchbase/configuration.hxx +1 -1
- data/ext/couchbase/couchbase.cxx +743 -927
- data/ext/couchbase/diagnostics.hxx +3 -3
- data/ext/couchbase/document_id.hxx +1 -1
- data/ext/couchbase/error_context/analytics.hxx +1 -1
- data/ext/couchbase/error_context/http.hxx +1 -1
- data/ext/couchbase/error_context/key_value.hxx +1 -1
- data/ext/couchbase/error_context/query.hxx +1 -1
- data/ext/couchbase/error_context/search.hxx +1 -1
- data/ext/couchbase/error_context/view.hxx +1 -1
- data/ext/couchbase/error_map.hxx +1 -1
- data/ext/couchbase/errors.hxx +1 -1
- data/ext/couchbase/io/dns_client.hxx +1 -1
- data/ext/couchbase/io/dns_codec.hxx +1 -1
- data/ext/couchbase/io/dns_config.hxx +1 -1
- data/ext/couchbase/io/dns_message.hxx +1 -1
- data/ext/couchbase/io/http_command.hxx +1 -1
- data/ext/couchbase/io/http_context.hxx +1 -1
- data/ext/couchbase/io/http_message.hxx +1 -1
- data/ext/couchbase/io/http_parser.hxx +1 -1
- data/ext/couchbase/io/http_session.hxx +1 -1
- data/ext/couchbase/io/http_session_manager.hxx +1 -1
- data/ext/couchbase/io/mcbp_command.hxx +1 -1
- data/ext/couchbase/io/mcbp_context.hxx +1 -1
- data/ext/couchbase/io/mcbp_message.hxx +1 -1
- data/ext/couchbase/io/mcbp_parser.hxx +1 -1
- data/ext/couchbase/io/mcbp_session.hxx +10 -1
- data/ext/couchbase/io/query_cache.hxx +1 -1
- data/ext/couchbase/io/retry_action.hxx +1 -1
- data/ext/couchbase/io/retry_context.hxx +1 -1
- data/ext/couchbase/io/retry_orchestrator.hxx +1 -1
- data/ext/couchbase/io/retry_reason.hxx +1 -1
- data/ext/couchbase/io/retry_strategy.hxx +1 -1
- data/ext/couchbase/io/streams.hxx +1 -1
- data/ext/couchbase/mutation_token.hxx +1 -1
- data/ext/couchbase/operations.hxx +1 -1
- data/ext/couchbase/operations/analytics_dataset_create.hxx +1 -1
- data/ext/couchbase/operations/analytics_dataset_drop.hxx +1 -1
- data/ext/couchbase/operations/analytics_dataset_get_all.hxx +1 -1
- data/ext/couchbase/operations/analytics_dataverse_create.hxx +1 -1
- data/ext/couchbase/operations/analytics_dataverse_drop.hxx +1 -1
- data/ext/couchbase/operations/analytics_get_pending_mutations.hxx +1 -1
- data/ext/couchbase/operations/analytics_index_create.hxx +1 -1
- data/ext/couchbase/operations/analytics_index_drop.hxx +1 -1
- data/ext/couchbase/operations/analytics_index_get_all.hxx +1 -1
- data/ext/couchbase/operations/analytics_link_connect.hxx +1 -1
- data/ext/couchbase/operations/analytics_link_disconnect.hxx +1 -1
- data/ext/couchbase/operations/bucket_create.hxx +1 -1
- data/ext/couchbase/operations/bucket_drop.hxx +1 -1
- data/ext/couchbase/operations/bucket_flush.hxx +1 -1
- data/ext/couchbase/operations/bucket_get.hxx +1 -1
- data/ext/couchbase/operations/bucket_get_all.hxx +1 -1
- data/ext/couchbase/operations/bucket_update.hxx +1 -1
- data/ext/couchbase/operations/cluster_developer_preview_enable.hxx +1 -1
- data/ext/couchbase/operations/collection_create.hxx +13 -9
- data/ext/couchbase/operations/collection_drop.hxx +11 -7
- data/ext/couchbase/operations/collections_manifest_get.hxx +1 -1
- data/ext/couchbase/operations/design_document.hxx +1 -1
- data/ext/couchbase/operations/document_analytics.hxx +1 -1
- data/ext/couchbase/operations/document_append.hxx +1 -1
- data/ext/couchbase/operations/document_decrement.hxx +5 -1
- data/ext/couchbase/operations/document_exists.hxx +1 -1
- data/ext/couchbase/operations/document_get.hxx +1 -1
- data/ext/couchbase/operations/document_get_and_lock.hxx +1 -1
- data/ext/couchbase/operations/document_get_and_touch.hxx +1 -1
- data/ext/couchbase/operations/document_get_projected.hxx +1 -1
- data/ext/couchbase/operations/document_increment.hxx +5 -1
- data/ext/couchbase/operations/document_insert.hxx +1 -1
- data/ext/couchbase/operations/document_lookup_in.hxx +1 -1
- data/ext/couchbase/operations/document_mutate_in.hxx +5 -1
- data/ext/couchbase/operations/document_prepend.hxx +1 -1
- data/ext/couchbase/operations/document_query.hxx +9 -1
- data/ext/couchbase/operations/document_remove.hxx +1 -1
- data/ext/couchbase/operations/document_replace.hxx +5 -1
- data/ext/couchbase/operations/document_search.hxx +1 -1
- data/ext/couchbase/operations/document_touch.hxx +1 -1
- data/ext/couchbase/operations/document_unlock.hxx +1 -1
- data/ext/couchbase/operations/document_upsert.hxx +5 -1
- data/ext/couchbase/operations/document_view.hxx +1 -1
- data/ext/couchbase/operations/group_drop.hxx +1 -1
- data/ext/couchbase/operations/group_get.hxx +1 -1
- data/ext/couchbase/operations/group_get_all.hxx +1 -1
- data/ext/couchbase/operations/group_upsert.hxx +1 -1
- data/ext/couchbase/operations/http_noop.hxx +1 -1
- data/ext/couchbase/operations/mcbp_noop.hxx +1 -1
- data/ext/couchbase/operations/query_index_build_deferred.hxx +1 -1
- data/ext/couchbase/operations/query_index_create.hxx +1 -1
- data/ext/couchbase/operations/query_index_drop.hxx +1 -1
- data/ext/couchbase/operations/query_index_get_all.hxx +1 -1
- data/ext/couchbase/operations/rbac.hxx +1 -1
- data/ext/couchbase/operations/role_get_all.hxx +1 -1
- data/ext/couchbase/operations/scope_create.hxx +9 -8
- data/ext/couchbase/operations/scope_drop.hxx +9 -6
- data/ext/couchbase/operations/scope_get_all.hxx +2 -2
- data/ext/couchbase/operations/search_get_stats.hxx +1 -1
- data/ext/couchbase/operations/search_index.hxx +1 -1
- data/ext/couchbase/operations/search_index_analyze_document.hxx +1 -1
- data/ext/couchbase/operations/search_index_control_ingest.hxx +1 -1
- data/ext/couchbase/operations/search_index_control_plan_freeze.hxx +1 -1
- data/ext/couchbase/operations/search_index_control_query.hxx +1 -1
- data/ext/couchbase/operations/search_index_drop.hxx +1 -1
- data/ext/couchbase/operations/search_index_get.hxx +1 -1
- data/ext/couchbase/operations/search_index_get_all.hxx +1 -1
- data/ext/couchbase/operations/search_index_get_documents_count.hxx +1 -1
- data/ext/couchbase/operations/search_index_get_stats.hxx +1 -1
- data/ext/couchbase/operations/search_index_upsert.hxx +1 -1
- data/ext/couchbase/operations/user_drop.hxx +1 -1
- data/ext/couchbase/operations/user_get.hxx +1 -1
- data/ext/couchbase/operations/user_get_all.hxx +1 -1
- data/ext/couchbase/operations/user_upsert.hxx +1 -1
- data/ext/couchbase/operations/view_index_drop.hxx +1 -1
- data/ext/couchbase/operations/view_index_get.hxx +1 -1
- data/ext/couchbase/operations/view_index_get_all.hxx +1 -1
- data/ext/couchbase/operations/view_index_upsert.hxx +1 -1
- data/ext/couchbase/origin.hxx +1 -1
- data/ext/couchbase/protocol/client_opcode.hxx +6 -1
- data/ext/couchbase/protocol/client_request.hxx +1 -1
- data/ext/couchbase/protocol/client_response.hxx +1 -1
- data/ext/couchbase/protocol/cmd_append.hxx +1 -1
- data/ext/couchbase/protocol/cmd_cluster_map_change_notification.hxx +1 -1
- data/ext/couchbase/protocol/cmd_decrement.hxx +19 -9
- data/ext/couchbase/protocol/cmd_exists.hxx +1 -1
- data/ext/couchbase/protocol/cmd_get.hxx +1 -1
- data/ext/couchbase/protocol/cmd_get_and_lock.hxx +1 -1
- data/ext/couchbase/protocol/cmd_get_and_touch.hxx +1 -1
- data/ext/couchbase/protocol/cmd_get_cluster_config.hxx +1 -1
- data/ext/couchbase/protocol/cmd_get_collection_id.hxx +7 -7
- data/ext/couchbase/protocol/cmd_get_collections_manifest.hxx +1 -1
- data/ext/couchbase/protocol/cmd_get_error_map.hxx +1 -1
- data/ext/couchbase/protocol/cmd_hello.hxx +17 -4
- data/ext/couchbase/protocol/cmd_increment.hxx +19 -9
- data/ext/couchbase/protocol/cmd_info.hxx +1 -1
- data/ext/couchbase/protocol/cmd_insert.hxx +1 -1
- data/ext/couchbase/protocol/cmd_lookup_in.hxx +1 -1
- data/ext/couchbase/protocol/cmd_mutate_in.hxx +18 -9
- data/ext/couchbase/protocol/cmd_noop.hxx +1 -1
- data/ext/couchbase/protocol/cmd_prepend.hxx +1 -1
- data/ext/couchbase/protocol/cmd_remove.hxx +1 -1
- data/ext/couchbase/protocol/cmd_replace.hxx +17 -8
- data/ext/couchbase/protocol/cmd_sasl_auth.hxx +1 -1
- data/ext/couchbase/protocol/cmd_sasl_list_mechs.hxx +1 -1
- data/ext/couchbase/protocol/cmd_sasl_step.hxx +1 -1
- data/ext/couchbase/protocol/cmd_select_bucket.hxx +1 -1
- data/ext/couchbase/protocol/cmd_touch.hxx +1 -1
- data/ext/couchbase/protocol/cmd_unlock.hxx +1 -1
- data/ext/couchbase/protocol/cmd_upsert.hxx +17 -8
- data/ext/couchbase/protocol/datatype.hxx +1 -1
- data/ext/couchbase/protocol/durability_level.hxx +1 -1
- data/ext/couchbase/protocol/enhanced_error_info.hxx +1 -1
- data/ext/couchbase/protocol/frame_info_id.hxx +2 -2
- data/ext/couchbase/protocol/hello_feature.hxx +1 -1
- data/ext/couchbase/protocol/magic.hxx +1 -1
- data/ext/couchbase/protocol/server_opcode.hxx +1 -1
- data/ext/couchbase/protocol/server_request.hxx +1 -1
- data/ext/couchbase/protocol/status.hxx +1 -1
- data/ext/couchbase/service_type.hxx +1 -1
- data/ext/couchbase/timeout_defaults.hxx +1 -1
- data/ext/couchbase/utils/byteswap.hxx +1 -1
- data/ext/couchbase/utils/connection_string.hxx +28 -1
- data/ext/couchbase/version.hxx +2 -2
- data/ext/extconf.rb +1 -1
- data/ext/test/test_helper.hxx +1 -1
- data/ext/test/test_helper_native.hxx +1 -1
- data/ext/test/test_helper_ruby.hxx +1 -1
- data/ext/test/test_native_binary_operations.cxx +1 -1
- data/ext/test/test_native_diagnostics.cxx +1 -1
- data/ext/test/test_native_trivial_crud.cxx +1 -1
- data/ext/test/test_ruby_trivial_crud.cxx +1 -1
- data/ext/test/test_ruby_trivial_query.cxx +1 -1
- data/lib/active_support/cache/couchbase_store.rb +2 -1
- data/lib/couchbase.rb +1 -1
- data/lib/couchbase/analytics_options.rb +1 -1
- data/lib/couchbase/authenticator.rb +1 -1
- data/lib/couchbase/binary_collection.rb +1 -1
- data/lib/couchbase/binary_collection_options.rb +1 -1
- data/lib/couchbase/bucket.rb +1 -1
- data/lib/couchbase/cluster.rb +2 -2
- data/lib/couchbase/collection.rb +1 -1
- data/lib/couchbase/collection_options.rb +25 -19
- data/lib/couchbase/configuration.rb +1 -1
- data/lib/couchbase/datastructures.rb +1 -1
- data/lib/couchbase/datastructures/couchbase_list.rb +1 -1
- data/lib/couchbase/datastructures/couchbase_map.rb +1 -1
- data/lib/couchbase/datastructures/couchbase_queue.rb +1 -1
- data/lib/couchbase/datastructures/couchbase_set.rb +1 -1
- data/lib/couchbase/diagnostics.rb +1 -1
- data/lib/couchbase/errors.rb +1 -1
- data/lib/couchbase/json_transcoder.rb +1 -1
- data/lib/couchbase/libcouchbase.bundle +0 -0
- data/lib/couchbase/logger.rb +1 -1
- data/lib/couchbase/management.rb +1 -1
- data/lib/couchbase/management/analytics_index_manager.rb +1 -1
- data/lib/couchbase/management/bucket_manager.rb +1 -1
- data/lib/couchbase/management/collection_manager.rb +8 -1
- data/lib/couchbase/management/query_index_manager.rb +1 -1
- data/lib/couchbase/management/search_index_manager.rb +1 -1
- data/lib/couchbase/management/user_manager.rb +1 -1
- data/lib/couchbase/management/view_index_manager.rb +1 -1
- data/lib/couchbase/mutation_state.rb +1 -1
- data/lib/couchbase/options.rb +49 -4
- data/lib/couchbase/query_options.rb +1 -1
- data/lib/couchbase/railtie.rb +1 -1
- data/lib/couchbase/scope.rb +7 -6
- data/lib/couchbase/search_options.rb +1 -1
- data/lib/couchbase/subdoc.rb +2 -2
- data/lib/couchbase/utils.rb +1 -1
- data/lib/couchbase/utils/time.rb +1 -1
- data/lib/couchbase/version.rb +9 -9
- data/lib/couchbase/view_options.rb +1 -1
- data/lib/rails/generators/couchbase/config/config_generator.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2ed2265468b3ab614f6e74a188015c2f96ce595116af1fc981ea30314e7d2ae3
|
4
|
+
data.tar.gz: bce8a86c7ea3f563e24b106dd981cace9bb558e9a6e70cb906e58df433b05201
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a14b4867628eea0bb6a52c0eaf4e683b44261306b897f194de9f195c5aa2105ecb646c62c961ceeb903c7aa728342d130bfb15005bee07ecf9a3ebc8155c776
|
7
|
+
data.tar.gz: e31a897199cae23cd47c945f99353019cfa94e4a176a4a235de834143944b14b84aec84c5c0f99c12cce8a711155375e7525187d4c0b6b945ff1d5434750e44f
|
data/README.md
CHANGED
@@ -5,7 +5,6 @@
|
|
5
5
|
[![commits](https://img.shields.io/github/commits-since/couchbase/couchbase-ruby-client/latest?color=brightgreen)](https://github.com/couchbase/couchbase-ruby-client/commits/master)
|
6
6
|
[![tests](https://img.shields.io/github/workflow/status/couchbase/couchbase-ruby-client/tests?label=tests)](https://github.com/couchbase/couchbase-ruby-client/actions?query=workflow%3Atests)
|
7
7
|
[![linters](https://img.shields.io/github/workflow/status/couchbase/couchbase-ruby-client/linters?label=linters)](https://github.com/couchbase/couchbase-ruby-client/actions?query=workflow%3Alinters)
|
8
|
-
[![jenkins](https://img.shields.io/jenkins/build?jobUrl=http%3A%2F%2Fsdk.jenkins.couchbase.com%2Fjob%2Fruby%2Fjob%2Fruby-nightly%2F&label=jenkins)](http://sdk.jenkins.couchbase.com/job/ruby/job/ruby-nightly/)
|
9
8
|
|
10
9
|
This repository contains the third generation of the official Couchbase SDK for Ruby (aka. SDKv3)
|
11
10
|
|
@@ -25,7 +24,7 @@ The library tested with the MRI 2.5, 2.6, 2.7 and 3.0. Supported platforms are L
|
|
25
24
|
Add this line to your application's Gemfile:
|
26
25
|
|
27
26
|
```ruby
|
28
|
-
gem "couchbase", "3.
|
27
|
+
gem "couchbase", "3.1.1"
|
29
28
|
```
|
30
29
|
|
31
30
|
And then execute:
|
@@ -116,7 +115,7 @@ Now the API reference is accessible using web browser (where `VERSION` is curren
|
|
116
115
|
|
117
116
|
The gem is available as open source under the terms of the [Apache2 License](https://opensource.org/licenses/Apache-2.0).
|
118
117
|
|
119
|
-
Copyright 2011-
|
118
|
+
Copyright 2011-2021 Couchbase, Inc.
|
120
119
|
|
121
120
|
Licensed under the Apache License, Version 2.0 (the "License");
|
122
121
|
you may not use this file except in compliance with the License.
|
data/ext/CMakeLists.txt
CHANGED
@@ -95,9 +95,11 @@ else()
|
|
95
95
|
message(STATUS "RUBY_VERSION: ${RUBY_VERSION}")
|
96
96
|
message(STATUS "RUBY_EXECUTABLE: ${RUBY_EXECUTABLE}")
|
97
97
|
endif()
|
98
|
-
message(STATUS "RUBY_INCLUDE_DIR: ${RUBY_INCLUDE_DIR}")
|
99
98
|
message(STATUS "RUBY_LIBRARY: ${RUBY_LIBRARY}")
|
100
|
-
|
99
|
+
if(RUBY_INCLUDE_DIR)
|
100
|
+
message(STATUS "RUBY_INCLUDE_DIR: ${RUBY_INCLUDE_DIR}")
|
101
|
+
include_directories(BEFORE SYSTEM "${RUBY_INCLUDE_DIR}")
|
102
|
+
endif()
|
101
103
|
|
102
104
|
add_library(couchbase SHARED couchbase/couchbase.cxx)
|
103
105
|
target_include_directories(couchbase PRIVATE ${PROJECT_BINARY_DIR}/generated)
|
data/ext/build_config.hxx.in
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
*
|
3
|
+
* Copyright 2020-2021 Couchbase, Inc.
|
4
4
|
*
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
* you may not use this file except in compliance with the License.
|
data/ext/build_version.hxx.in
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
*
|
3
|
+
* Copyright 2020-2021 Couchbase, Inc.
|
4
4
|
*
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
* you may not use this file except in compliance with the License.
|
@@ -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 = "a79d098eb238b3883e49e1738c35167642e8834f";
|
30
30
|
} // namespace couchbase
|
data/ext/couchbase/bucket.hxx
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
*
|
3
|
+
* Copyright 2020-2021 Couchbase, Inc.
|
4
4
|
*
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
* you may not use this file except in compliance with the License.
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
*
|
3
|
+
* Copyright 2020-2021 Couchbase, Inc.
|
4
4
|
*
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
* you may not use this file except in compliance with the License.
|
data/ext/couchbase/cluster.hxx
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
*
|
3
|
+
* Copyright 2020-2021 Couchbase, Inc.
|
4
4
|
*
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
* you may not use this file except in compliance with the License.
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
*
|
3
|
+
* Copyright 2020-2021 Couchbase, Inc.
|
4
4
|
*
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
* you may not use this file except in compliance with the License.
|
@@ -40,6 +40,9 @@ struct cluster_options {
|
|
40
40
|
bool force_ipv4{ false };
|
41
41
|
bool enable_dns_srv{ true };
|
42
42
|
bool show_queries{ false };
|
43
|
+
bool enable_unordered_execution{ true };
|
44
|
+
bool enable_clustermap_notification{ true };
|
45
|
+
bool enable_compression{ true };
|
43
46
|
std::string network{ "auto" };
|
44
47
|
|
45
48
|
std::chrono::milliseconds tcp_keep_alive_interval = timeout_defaults::tcp_keep_alive_interval;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
*
|
3
|
+
* Copyright 2020-2021 Couchbase, Inc.
|
4
4
|
*
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
* you may not use this file except in compliance with the License.
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
*
|
3
|
+
* Copyright 2020-2021 Couchbase, Inc.
|
4
4
|
*
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
* you may not use this file except in compliance with the License.
|
data/ext/couchbase/couchbase.cxx
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
2
|
/*
|
3
|
-
*
|
3
|
+
* Copyright 2020-2021 Couchbase, Inc.
|
4
4
|
*
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
* you may not use this file except in compliance with the License.
|
@@ -22,6 +22,7 @@
|
|
22
22
|
#include <openssl/crypto.h>
|
23
23
|
|
24
24
|
#include <spdlog/spdlog.h>
|
25
|
+
|
25
26
|
#include <spdlog/cfg/env.h>
|
26
27
|
|
27
28
|
#include <http_parser.h>
|
@@ -40,15 +41,22 @@
|
|
40
41
|
#if defined(HAVE_RUBY_VERSION_H)
|
41
42
|
#include <ruby/version.h>
|
42
43
|
#endif
|
44
|
+
#include <ruby/thread.h>
|
43
45
|
|
44
46
|
#if defined(RB_METHOD_DEFINITION_DECL) || RUBY_API_VERSION_MAJOR == 3
|
45
|
-
#define VALUE_FUNC(f)
|
46
|
-
#define INT_FUNC(f)
|
47
|
+
#define VALUE_FUNC(f) f
|
48
|
+
#define INT_FUNC(f) f
|
47
49
|
#else
|
48
50
|
#define VALUE_FUNC(f) reinterpret_cast<VALUE (*)(ANYARGS)>(f)
|
49
51
|
#define INT_FUNC(f) reinterpret_cast<int (*)(ANYARGS)>(f)
|
50
52
|
#endif
|
51
53
|
|
54
|
+
static inline VALUE
|
55
|
+
cb_str_new(const std::string& str)
|
56
|
+
{
|
57
|
+
return rb_external_str_new(str.data(), static_cast<long>(str.size()));
|
58
|
+
}
|
59
|
+
|
52
60
|
static void
|
53
61
|
init_versions(VALUE mCouchbase)
|
54
62
|
{
|
@@ -59,12 +67,10 @@ init_versions(VALUE mCouchbase)
|
|
59
67
|
cb_Version = rb_hash_new();
|
60
68
|
rb_const_set(mCouchbase, rb_intern("VERSION"), cb_Version);
|
61
69
|
}
|
62
|
-
#define VERSION_SPLIT_(VER) (VER) / 100000, (VER) / 100 % 1000, (VER) % 100
|
63
70
|
|
64
71
|
std::string ver;
|
65
72
|
ver = fmt::format("{}.{}.{}", couchbase::BACKEND_VERSION_MAJOR, couchbase::BACKEND_VERSION_MINOR, couchbase::BACKEND_VERSION_PATCH);
|
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()))));
|
73
|
+
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("backend")), rb_str_freeze(cb_str_new(ver)));
|
68
74
|
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("build_timestamp")), rb_str_freeze(rb_str_new_cstr(couchbase::BACKEND_BUILD_TIMESTAMP)));
|
69
75
|
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("revision")), rb_str_freeze(rb_str_new_cstr(couchbase::BACKEND_GIT_REVISION)));
|
70
76
|
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("platform")), rb_str_freeze(rb_str_new_cstr(couchbase::BACKEND_SYSTEM)));
|
@@ -73,19 +79,16 @@ init_versions(VALUE mCouchbase)
|
|
73
79
|
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("cxx")), rb_str_freeze(rb_str_new_cstr(couchbase::BACKEND_CXX_COMPILER)));
|
74
80
|
#if defined(HAVE_RUBY_VERSION_H)
|
75
81
|
ver = fmt::format("{}.{}.{}", RUBY_API_VERSION_MAJOR, RUBY_API_VERSION_MINOR, RUBY_API_VERSION_TEENY);
|
76
|
-
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("ruby")), rb_str_freeze(
|
82
|
+
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("ruby")), rb_str_freeze(cb_str_new(ver)));
|
77
83
|
#endif
|
78
84
|
ver = fmt::format("{}.{}.{}", SPDLOG_VER_MAJOR, SPDLOG_VER_MINOR, SPDLOG_VER_PATCH);
|
79
|
-
rb_hash_aset(
|
80
|
-
|
81
|
-
|
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()))));
|
85
|
+
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("spdlog")), rb_str_freeze(cb_str_new(ver)));
|
86
|
+
ver = fmt::format("{}.{}.{}", ASIO_VERSION / 100'000, ASIO_VERSION / 100 % 1000, ASIO_VERSION % 100);
|
87
|
+
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("asio")), rb_str_freeze(cb_str_new(ver)));
|
83
88
|
ver = fmt::format("{}.{}.{}", SNAPPY_MAJOR, SNAPPY_MINOR, SNAPPY_PATCHLEVEL);
|
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()))));
|
89
|
+
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("snappy")), rb_str_freeze(cb_str_new(ver)));
|
86
90
|
ver = fmt::format("{}.{}.{}", HTTP_PARSER_VERSION_MAJOR, HTTP_PARSER_VERSION_MINOR, HTTP_PARSER_VERSION_PATCH);
|
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()))));
|
91
|
+
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("http_parser")), rb_str_freeze(cb_str_new(ver)));
|
89
92
|
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("openssl_headers")), rb_str_freeze(rb_str_new_cstr(OPENSSL_VERSION_TEXT)));
|
90
93
|
#if defined(OPENSSL_VERSION)
|
91
94
|
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("openssl_runtime")), rb_str_freeze(rb_str_new_cstr(OpenSSL_version(OPENSSL_VERSION))));
|
@@ -93,8 +96,6 @@ init_versions(VALUE mCouchbase)
|
|
93
96
|
rb_hash_aset(cb_Version, rb_id2sym(rb_intern("openssl_runtime")), rb_str_freeze(rb_str_new_cstr(SSLeay_version(SSLEAY_VERSION))));
|
94
97
|
#endif
|
95
98
|
|
96
|
-
#undef VERSION_SPLIT_
|
97
|
-
|
98
99
|
VALUE version_info = rb_inspect(cb_Version);
|
99
100
|
spdlog::info("couchbase backend has been initialized: {}",
|
100
101
|
std::string_view(RSTRING_PTR(version_info), static_cast<std::size_t>(RSTRING_LEN(version_info))));
|
@@ -133,7 +134,7 @@ struct cb_backend_data {
|
|
133
134
|
};
|
134
135
|
|
135
136
|
static void
|
136
|
-
|
137
|
+
cb_backend_close(cb_backend_data* backend)
|
137
138
|
{
|
138
139
|
if (backend->cluster) {
|
139
140
|
auto barrier = std::make_shared<std::promise<void>>();
|
@@ -156,15 +157,15 @@ cb_Backend_mark(void* /* ptr */)
|
|
156
157
|
static void
|
157
158
|
cb_Backend_free(void* ptr)
|
158
159
|
{
|
159
|
-
auto* backend =
|
160
|
-
|
160
|
+
auto* backend = static_cast<cb_backend_data*>(ptr);
|
161
|
+
cb_backend_close(backend);
|
161
162
|
ruby_xfree(backend);
|
162
163
|
}
|
163
164
|
|
164
165
|
static size_t
|
165
166
|
cb_Backend_memsize(const void* ptr)
|
166
167
|
{
|
167
|
-
const auto* backend =
|
168
|
+
const auto* backend = static_cast<const cb_backend_data*>(ptr);
|
168
169
|
return sizeof(*backend) + sizeof(*backend->cluster);
|
169
170
|
}
|
170
171
|
|
@@ -196,8 +197,6 @@ cb_Backend_allocate(VALUE klass)
|
|
196
197
|
return obj;
|
197
198
|
}
|
198
199
|
|
199
|
-
static VALUE eCouchbaseError;
|
200
|
-
static VALUE eTimeout;
|
201
200
|
static VALUE eAmbiguousTimeout;
|
202
201
|
static VALUE eAuthenticationFailure;
|
203
202
|
static VALUE eBucketExists;
|
@@ -276,9 +275,9 @@ static void
|
|
276
275
|
init_exceptions(VALUE mCouchbase)
|
277
276
|
{
|
278
277
|
VALUE mError = rb_define_module_under(mCouchbase, "Error");
|
279
|
-
eCouchbaseError = rb_define_class_under(mError, "CouchbaseError", rb_eStandardError);
|
278
|
+
VALUE eCouchbaseError = rb_define_class_under(mError, "CouchbaseError", rb_eStandardError);
|
280
279
|
|
281
|
-
eTimeout = rb_define_class_under(mError, "Timeout", eCouchbaseError);
|
280
|
+
VALUE eTimeout = rb_define_class_under(mError, "Timeout", eCouchbaseError);
|
282
281
|
|
283
282
|
eAmbiguousTimeout = rb_define_class_under(mError, "AmbiguousTimeout", eTimeout);
|
284
283
|
eAuthenticationFailure = rb_define_class_under(mError, "AuthenticationFailure", eCouchbaseError);
|
@@ -356,7 +355,7 @@ init_exceptions(VALUE mCouchbase)
|
|
356
355
|
}
|
357
356
|
|
358
357
|
static VALUE
|
359
|
-
|
358
|
+
cb_map_error_code(std::error_code ec, const std::string& message)
|
360
359
|
{
|
361
360
|
if (ec.category() == couchbase::error::detail::get_common_category()) {
|
362
361
|
switch (static_cast<couchbase::error::common_errc>(ec.value())) {
|
@@ -589,44 +588,30 @@ cb__map_error_code(std::error_code ec, const std::string& message)
|
|
589
588
|
}
|
590
589
|
|
591
590
|
static VALUE
|
592
|
-
|
591
|
+
cb_map_error_code(const couchbase::error_context::key_value& ctx, const std::string& message)
|
593
592
|
{
|
594
|
-
VALUE exc =
|
593
|
+
VALUE exc = cb_map_error_code(ctx.ec, message);
|
595
594
|
VALUE error_context = rb_hash_new();
|
596
595
|
std::string error(fmt::format("{}, {}", ctx.ec.value(), ctx.ec.message()));
|
597
|
-
rb_hash_aset(error_context, rb_id2sym(rb_intern("error")),
|
598
|
-
rb_hash_aset(error_context, rb_id2sym(rb_intern("id")),
|
599
|
-
rb_hash_aset(error_context,
|
600
|
-
|
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())));
|
596
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("error")), cb_str_new(error));
|
597
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("id")), cb_str_new(ctx.id.key));
|
598
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("collection")), cb_str_new(ctx.id.collection));
|
599
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("bucket")), cb_str_new(ctx.id.bucket));
|
604
600
|
rb_hash_aset(error_context, rb_id2sym(rb_intern("opaque")), ULONG2NUM(ctx.opaque));
|
605
601
|
if (ctx.status_code) {
|
606
602
|
std::string status(fmt::format("{}", ctx.status_code.value()));
|
607
|
-
rb_hash_aset(error_context, rb_id2sym(rb_intern("status")),
|
603
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("status")), cb_str_new(status));
|
608
604
|
}
|
609
605
|
if (ctx.error_map_info) {
|
610
606
|
VALUE error_map_info = rb_hash_new();
|
611
|
-
rb_hash_aset(error_map_info,
|
612
|
-
|
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())));
|
607
|
+
rb_hash_aset(error_map_info, rb_id2sym(rb_intern("name")), cb_str_new(ctx.error_map_info->name));
|
608
|
+
rb_hash_aset(error_map_info, rb_id2sym(rb_intern("desc")), cb_str_new(ctx.error_map_info->description));
|
618
609
|
rb_hash_aset(error_context, rb_id2sym(rb_intern("error_map_info")), error_map_info);
|
619
610
|
}
|
620
611
|
if (ctx.enhanced_error_info) {
|
621
612
|
VALUE enhanced_error_info = rb_hash_new();
|
622
|
-
rb_hash_aset(
|
623
|
-
|
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())));
|
613
|
+
rb_hash_aset(enhanced_error_info, rb_id2sym(rb_intern("reference")), cb_str_new(ctx.enhanced_error_info->reference));
|
614
|
+
rb_hash_aset(enhanced_error_info, rb_id2sym(rb_intern("context")), cb_str_new(ctx.enhanced_error_info->context));
|
630
615
|
rb_hash_aset(error_context, rb_id2sym(rb_intern("extended_error_info")), enhanced_error_info);
|
631
616
|
}
|
632
617
|
if (ctx.retry_attempts > 0) {
|
@@ -641,39 +626,29 @@ cb__map_error_code(const couchbase::error_context::key_value& ctx, const std::st
|
|
641
626
|
}
|
642
627
|
}
|
643
628
|
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())));
|
629
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("last_dispatched_to")), cb_str_new(ctx.last_dispatched_to.value()));
|
647
630
|
}
|
648
631
|
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())));
|
632
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("last_dispatched_from")), cb_str_new(ctx.last_dispatched_from.value()));
|
652
633
|
}
|
653
634
|
rb_iv_set(exc, "@context", error_context);
|
654
635
|
return exc;
|
655
636
|
}
|
656
637
|
|
657
638
|
static VALUE
|
658
|
-
|
639
|
+
cb_map_error_code(const couchbase::error_context::query& ctx, const std::string& message)
|
659
640
|
{
|
660
|
-
VALUE exc =
|
641
|
+
VALUE exc = cb_map_error_code(ctx.ec, message);
|
661
642
|
VALUE error_context = rb_hash_new();
|
662
643
|
std::string error(fmt::format("{}, {}", ctx.ec.value(), ctx.ec.message()));
|
663
|
-
rb_hash_aset(error_context, rb_id2sym(rb_intern("error")),
|
664
|
-
rb_hash_aset(error_context,
|
665
|
-
|
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())));
|
644
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("error")), cb_str_new(error));
|
645
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("client_context_id")), cb_str_new(ctx.client_context_id));
|
646
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("statement")), cb_str_new(ctx.statement));
|
669
647
|
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())));
|
648
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("parameters")), cb_str_new(ctx.parameters.value()));
|
673
649
|
}
|
674
650
|
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())));
|
651
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("http_body")), cb_str_new(ctx.http_body));
|
677
652
|
if (ctx.retry_attempts > 0) {
|
678
653
|
rb_hash_aset(error_context, rb_id2sym(rb_intern("retry_attempts")), INT2FIX(ctx.retry_attempts));
|
679
654
|
if (!ctx.retry_reasons.empty()) {
|
@@ -686,39 +661,29 @@ cb__map_error_code(const couchbase::error_context::query& ctx, const std::string
|
|
686
661
|
}
|
687
662
|
}
|
688
663
|
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())));
|
664
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("last_dispatched_to")), cb_str_new(ctx.last_dispatched_to.value()));
|
692
665
|
}
|
693
666
|
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())));
|
667
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("last_dispatched_from")), cb_str_new(ctx.last_dispatched_from.value()));
|
697
668
|
}
|
698
669
|
rb_iv_set(exc, "@context", error_context);
|
699
670
|
return exc;
|
700
671
|
}
|
701
672
|
|
702
673
|
static VALUE
|
703
|
-
|
674
|
+
cb_map_error_code(const couchbase::error_context::analytics& ctx, const std::string& message)
|
704
675
|
{
|
705
|
-
VALUE exc =
|
676
|
+
VALUE exc = cb_map_error_code(ctx.ec, message);
|
706
677
|
VALUE error_context = rb_hash_new();
|
707
678
|
std::string error(fmt::format("{}, {}", ctx.ec.value(), ctx.ec.message()));
|
708
|
-
rb_hash_aset(error_context, rb_id2sym(rb_intern("error")),
|
709
|
-
rb_hash_aset(error_context,
|
710
|
-
|
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())));
|
679
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("error")), cb_str_new(error));
|
680
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("client_context_id")), cb_str_new(ctx.client_context_id));
|
681
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("statement")), cb_str_new(ctx.statement));
|
714
682
|
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())));
|
683
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("parameters")), cb_str_new(ctx.parameters.value()));
|
718
684
|
}
|
719
685
|
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())));
|
686
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("http_body")), cb_str_new(ctx.http_body));
|
722
687
|
if (ctx.retry_attempts > 0) {
|
723
688
|
rb_hash_aset(error_context, rb_id2sym(rb_intern("retry_attempts")), INT2FIX(ctx.retry_attempts));
|
724
689
|
if (!ctx.retry_reasons.empty()) {
|
@@ -731,44 +696,34 @@ cb__map_error_code(const couchbase::error_context::analytics& ctx, const std::st
|
|
731
696
|
}
|
732
697
|
}
|
733
698
|
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())));
|
699
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("last_dispatched_to")), cb_str_new(ctx.last_dispatched_to.value()));
|
737
700
|
}
|
738
701
|
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())));
|
702
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("last_dispatched_from")), cb_str_new(ctx.last_dispatched_from.value()));
|
742
703
|
}
|
743
704
|
rb_iv_set(exc, "@context", error_context);
|
744
705
|
return exc;
|
745
706
|
}
|
746
707
|
|
747
708
|
static VALUE
|
748
|
-
|
709
|
+
cb_map_error_code(const couchbase::error_context::view& ctx, const std::string& message)
|
749
710
|
{
|
750
|
-
VALUE exc =
|
711
|
+
VALUE exc = cb_map_error_code(ctx.ec, message);
|
751
712
|
VALUE error_context = rb_hash_new();
|
752
713
|
std::string error(fmt::format("{}, {}", ctx.ec.value(), ctx.ec.message()));
|
753
|
-
rb_hash_aset(error_context, rb_id2sym(rb_intern("error")),
|
754
|
-
rb_hash_aset(error_context,
|
755
|
-
|
756
|
-
|
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())));
|
714
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("error")), cb_str_new(error));
|
715
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("client_context_id")), cb_str_new(ctx.client_context_id));
|
716
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("design_document_name")), cb_str_new(ctx.design_document_name));
|
717
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("view_name")), cb_str_new(ctx.view_name));
|
762
718
|
if (!ctx.query_string.empty()) {
|
763
719
|
VALUE parameters = rb_ary_new_capa(static_cast<long>(ctx.query_string.size()));
|
764
720
|
for (const auto& param : ctx.query_string) {
|
765
|
-
rb_ary_push(parameters,
|
721
|
+
rb_ary_push(parameters, cb_str_new(param));
|
766
722
|
}
|
767
723
|
rb_hash_aset(error_context, rb_id2sym(rb_intern("parameters")), parameters);
|
768
724
|
}
|
769
725
|
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())));
|
726
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("http_body")), cb_str_new(ctx.http_body));
|
772
727
|
if (ctx.retry_attempts > 0) {
|
773
728
|
rb_hash_aset(error_context, rb_id2sym(rb_intern("retry_attempts")), INT2FIX(ctx.retry_attempts));
|
774
729
|
if (!ctx.retry_reasons.empty()) {
|
@@ -781,35 +736,27 @@ cb__map_error_code(const couchbase::error_context::view& ctx, const std::string&
|
|
781
736
|
}
|
782
737
|
}
|
783
738
|
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())));
|
739
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("last_dispatched_to")), cb_str_new(ctx.last_dispatched_to.value()));
|
787
740
|
}
|
788
741
|
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())));
|
742
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("last_dispatched_from")), cb_str_new(ctx.last_dispatched_from.value()));
|
792
743
|
}
|
793
744
|
rb_iv_set(exc, "@context", error_context);
|
794
745
|
return exc;
|
795
746
|
}
|
796
747
|
|
797
748
|
static VALUE
|
798
|
-
|
749
|
+
cb_map_error_code(const couchbase::error_context::http& ctx, const std::string& message)
|
799
750
|
{
|
800
|
-
VALUE exc =
|
751
|
+
VALUE exc = cb_map_error_code(ctx.ec, message);
|
801
752
|
VALUE error_context = rb_hash_new();
|
802
753
|
std::string error(fmt::format("{}, {}", ctx.ec.value(), ctx.ec.message()));
|
803
|
-
rb_hash_aset(error_context, rb_id2sym(rb_intern("error")),
|
804
|
-
rb_hash_aset(error_context,
|
805
|
-
|
806
|
-
|
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())));
|
754
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("error")), cb_str_new(error));
|
755
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("client_context_id")), cb_str_new(ctx.client_context_id));
|
756
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("method")), cb_str_new(ctx.method));
|
757
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("path")), cb_str_new(ctx.path));
|
810
758
|
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())));
|
759
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("http_body")), cb_str_new(ctx.http_body));
|
813
760
|
if (ctx.retry_attempts > 0) {
|
814
761
|
rb_hash_aset(error_context, rb_id2sym(rb_intern("retry_attempts")), INT2FIX(ctx.retry_attempts));
|
815
762
|
if (!ctx.retry_reasons.empty()) {
|
@@ -822,44 +769,32 @@ cb__map_error_code(const couchbase::error_context::http& ctx, const std::string&
|
|
822
769
|
}
|
823
770
|
}
|
824
771
|
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())));
|
772
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("last_dispatched_to")), cb_str_new(ctx.last_dispatched_to.value()));
|
828
773
|
}
|
829
774
|
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())));
|
775
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("last_dispatched_from")), cb_str_new(ctx.last_dispatched_from.value()));
|
833
776
|
}
|
834
777
|
rb_iv_set(exc, "@context", error_context);
|
835
778
|
return exc;
|
836
779
|
}
|
837
780
|
|
838
781
|
static VALUE
|
839
|
-
|
782
|
+
cb_map_error_code(const couchbase::error_context::search& ctx, const std::string& message)
|
840
783
|
{
|
841
|
-
VALUE exc =
|
784
|
+
VALUE exc = cb_map_error_code(ctx.ec, message);
|
842
785
|
VALUE error_context = rb_hash_new();
|
843
786
|
std::string error(fmt::format("{}, {}", ctx.ec.value(), ctx.ec.message()));
|
844
|
-
rb_hash_aset(error_context, rb_id2sym(rb_intern("error")),
|
845
|
-
rb_hash_aset(error_context,
|
846
|
-
|
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())));
|
787
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("error")), cb_str_new(error));
|
788
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("client_context_id")), cb_str_new(ctx.client_context_id));
|
789
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("index_name")), cb_str_new(ctx.index_name));
|
851
790
|
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())));
|
791
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("query")), cb_str_new(ctx.query.value()));
|
854
792
|
}
|
855
793
|
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())));
|
794
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("parameters")), cb_str_new(ctx.parameters.value()));
|
859
795
|
}
|
860
796
|
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())));
|
797
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("http_body")), cb_str_new(ctx.http_body));
|
863
798
|
if (ctx.retry_attempts > 0) {
|
864
799
|
rb_hash_aset(error_context, rb_id2sym(rb_intern("retry_attempts")), INT2FIX(ctx.retry_attempts));
|
865
800
|
if (!ctx.retry_reasons.empty()) {
|
@@ -872,19 +807,35 @@ cb__map_error_code(const couchbase::error_context::search& ctx, const std::strin
|
|
872
807
|
}
|
873
808
|
}
|
874
809
|
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())));
|
810
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("last_dispatched_to")), cb_str_new(ctx.last_dispatched_to.value()));
|
878
811
|
}
|
879
812
|
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())));
|
813
|
+
rb_hash_aset(error_context, rb_id2sym(rb_intern("last_dispatched_from")), cb_str_new(ctx.last_dispatched_from.value()));
|
883
814
|
}
|
884
815
|
rb_iv_set(exc, "@context", error_context);
|
885
816
|
return exc;
|
886
817
|
}
|
887
818
|
|
819
|
+
template<typename Future>
|
820
|
+
static auto
|
821
|
+
cb_wait_for_future(Future&& f) -> decltype(f.get())
|
822
|
+
{
|
823
|
+
struct arg_pack {
|
824
|
+
Future&& f;
|
825
|
+
decltype(f.get()) res{};
|
826
|
+
} arg{ f };
|
827
|
+
rb_thread_call_without_gvl(
|
828
|
+
[](void* param) -> void* {
|
829
|
+
auto* pack = static_cast<arg_pack*>(param);
|
830
|
+
pack->res = std::move(pack->f.get());
|
831
|
+
return nullptr;
|
832
|
+
},
|
833
|
+
&arg,
|
834
|
+
nullptr,
|
835
|
+
nullptr);
|
836
|
+
return std::move(arg.res);
|
837
|
+
}
|
838
|
+
|
888
839
|
static VALUE
|
889
840
|
cb_Backend_open(VALUE self, VALUE connection_string, VALUE credentials, VALUE options)
|
890
841
|
{
|
@@ -961,8 +912,8 @@ cb_Backend_open(VALUE self, VALUE connection_string, VALUE credentials, VALUE op
|
|
961
912
|
auto barrier = std::make_shared<std::promise<std::error_code>>();
|
962
913
|
auto f = barrier->get_future();
|
963
914
|
backend->cluster->open(origin, [barrier](std::error_code ec) mutable { barrier->set_value(ec); });
|
964
|
-
if (auto ec = f
|
965
|
-
exc =
|
915
|
+
if (auto ec = cb_wait_for_future(f)) {
|
916
|
+
exc = cb_map_error_code(ec, fmt::format("unable open cluster at {}", origin.next_address().first));
|
966
917
|
}
|
967
918
|
} while (false);
|
968
919
|
if (!NIL_P(exc)) {
|
@@ -977,7 +928,7 @@ cb_Backend_close(VALUE self)
|
|
977
928
|
{
|
978
929
|
cb_backend_data* backend = nullptr;
|
979
930
|
TypedData_Get_Struct(self, cb_backend_data, &cb_backend_type, backend);
|
980
|
-
|
931
|
+
cb_backend_close(backend);
|
981
932
|
return Qnil;
|
982
933
|
}
|
983
934
|
|
@@ -1004,11 +955,11 @@ cb_Backend_diagnostics(VALUE self, VALUE report_id)
|
|
1004
955
|
auto barrier = std::make_shared<std::promise<couchbase::diag::diagnostics_result>>();
|
1005
956
|
auto f = barrier->get_future();
|
1006
957
|
backend->cluster->diagnostics(id, [barrier](couchbase::diag::diagnostics_result&& resp) mutable { barrier->set_value(resp); });
|
1007
|
-
auto resp = f
|
958
|
+
auto resp = cb_wait_for_future(f);
|
1008
959
|
|
1009
960
|
VALUE res = rb_hash_new();
|
1010
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("id")),
|
1011
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("sdk")),
|
961
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("id")), cb_str_new(resp.id));
|
962
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("sdk")), cb_str_new(resp.sdk));
|
1012
963
|
rb_hash_aset(res, rb_id2sym(rb_intern("version")), INT2FIX(resp.version));
|
1013
964
|
VALUE services = rb_hash_new();
|
1014
965
|
rb_hash_aset(res, rb_id2sym(rb_intern("services")), services);
|
@@ -1041,11 +992,9 @@ cb_Backend_diagnostics(VALUE self, VALUE report_id)
|
|
1041
992
|
if (svc.last_activity) {
|
1042
993
|
rb_hash_aset(service, rb_id2sym(rb_intern("last_activity_us")), LL2NUM(svc.last_activity->count()));
|
1043
994
|
}
|
1044
|
-
rb_hash_aset(service, rb_id2sym(rb_intern("id")),
|
1045
|
-
rb_hash_aset(
|
1046
|
-
|
1047
|
-
rb_hash_aset(
|
1048
|
-
service, rb_id2sym(rb_intern("local")), rb_external_str_new(svc.local.data(), static_cast<long>(svc.local.size())));
|
995
|
+
rb_hash_aset(service, rb_id2sym(rb_intern("id")), cb_str_new(svc.id));
|
996
|
+
rb_hash_aset(service, rb_id2sym(rb_intern("remote")), cb_str_new(svc.remote));
|
997
|
+
rb_hash_aset(service, rb_id2sym(rb_intern("local")), cb_str_new(svc.local));
|
1049
998
|
VALUE state = Qnil;
|
1050
999
|
switch (svc.state) {
|
1051
1000
|
case couchbase::diag::endpoint_state::disconnected:
|
@@ -1062,9 +1011,7 @@ cb_Backend_diagnostics(VALUE self, VALUE report_id)
|
|
1062
1011
|
break;
|
1063
1012
|
}
|
1064
1013
|
if (svc.details) {
|
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())));
|
1014
|
+
rb_hash_aset(service, rb_id2sym(rb_intern("details")), cb_str_new(svc.details.value()));
|
1068
1015
|
}
|
1069
1016
|
rb_hash_aset(service, rb_id2sym(rb_intern("state")), state);
|
1070
1017
|
rb_ary_push(endpoints, service);
|
@@ -1098,11 +1045,11 @@ cb_Backend_open_bucket(VALUE self, VALUE bucket, VALUE wait_until_ready)
|
|
1098
1045
|
auto barrier = std::make_shared<std::promise<std::error_code>>();
|
1099
1046
|
auto f = barrier->get_future();
|
1100
1047
|
backend->cluster->open_bucket(name, [barrier](std::error_code ec) mutable { barrier->set_value(ec); });
|
1101
|
-
if (auto ec = f
|
1102
|
-
exc =
|
1048
|
+
if (auto ec = cb_wait_for_future(f)) {
|
1049
|
+
exc = cb_map_error_code(ec, fmt::format("unable open bucket \"{}\"", name));
|
1103
1050
|
}
|
1104
1051
|
} else {
|
1105
|
-
backend->cluster->open_bucket(name, [](std::error_code) {});
|
1052
|
+
backend->cluster->open_bucket(name, [](std::error_code /* ec */) {});
|
1106
1053
|
}
|
1107
1054
|
}
|
1108
1055
|
if (!NIL_P(exc)) {
|
@@ -1114,12 +1061,12 @@ cb_Backend_open_bucket(VALUE self, VALUE bucket, VALUE wait_until_ready)
|
|
1114
1061
|
|
1115
1062
|
template<typename Request>
|
1116
1063
|
[[nodiscard]] VALUE
|
1117
|
-
|
1064
|
+
cb_extract_timeout(Request& req, VALUE options)
|
1118
1065
|
{
|
1119
1066
|
if (!NIL_P(options)) {
|
1120
1067
|
switch (TYPE(options)) {
|
1121
1068
|
case T_HASH:
|
1122
|
-
return
|
1069
|
+
return cb_extract_timeout(req, rb_hash_aref(options, rb_id2sym(rb_intern("timeout"))));
|
1123
1070
|
case T_FIXNUM:
|
1124
1071
|
case T_BIGNUM:
|
1125
1072
|
req.timeout = std::chrono::milliseconds(NUM2ULL(options));
|
@@ -1132,12 +1079,12 @@ cb__extract_timeout(Request& req, VALUE options)
|
|
1132
1079
|
}
|
1133
1080
|
|
1134
1081
|
[[nodiscard]] VALUE
|
1135
|
-
|
1082
|
+
cb_extract_timeout(std::chrono::milliseconds& timeout, VALUE options)
|
1136
1083
|
{
|
1137
1084
|
if (!NIL_P(options)) {
|
1138
1085
|
switch (TYPE(options)) {
|
1139
1086
|
case T_HASH:
|
1140
|
-
return
|
1087
|
+
return cb_extract_timeout(timeout, rb_hash_aref(options, rb_id2sym(rb_intern("timeout"))));
|
1141
1088
|
case T_FIXNUM:
|
1142
1089
|
case T_BIGNUM:
|
1143
1090
|
timeout = std::chrono::milliseconds(NUM2ULL(options));
|
@@ -1150,7 +1097,7 @@ cb__extract_timeout(std::chrono::milliseconds& timeout, VALUE options)
|
|
1150
1097
|
}
|
1151
1098
|
|
1152
1099
|
[[nodiscard]] VALUE
|
1153
|
-
|
1100
|
+
cb_extract_option_bool(bool& field, VALUE options, const char* name)
|
1154
1101
|
{
|
1155
1102
|
if (!NIL_P(options) && TYPE(options) == T_HASH) {
|
1156
1103
|
VALUE val = rb_hash_aref(options, rb_id2sym(rb_intern(name)));
|
@@ -1172,7 +1119,7 @@ cb__extract_option_bool(bool& field, VALUE options, const char* name)
|
|
1172
1119
|
}
|
1173
1120
|
|
1174
1121
|
[[nodiscard]] VALUE
|
1175
|
-
|
1122
|
+
cb_extract_option_array(VALUE& val, VALUE options, const char* name)
|
1176
1123
|
{
|
1177
1124
|
if (!NIL_P(options) && TYPE(options) == T_HASH) {
|
1178
1125
|
val = rb_hash_aref(options, rb_id2sym(rb_intern(name)));
|
@@ -1188,7 +1135,7 @@ cb__extract_option_array(VALUE& val, VALUE options, const char* name)
|
|
1188
1135
|
}
|
1189
1136
|
|
1190
1137
|
[[nodiscard]] VALUE
|
1191
|
-
|
1138
|
+
cb_extract_array_of_ids(std::vector<couchbase::document_id>& ids, VALUE arg)
|
1192
1139
|
{
|
1193
1140
|
if (TYPE(arg) != T_ARRAY) {
|
1194
1141
|
return rb_exc_new_str(rb_eArgError, rb_sprintf("Type of IDs argument must be an Array, but given %+" PRIsVALUE, arg));
|
@@ -1227,7 +1174,7 @@ cb__extract_array_of_ids(std::vector<couchbase::document_id>& ids, VALUE arg)
|
|
1227
1174
|
}
|
1228
1175
|
|
1229
1176
|
[[nodiscard]] VALUE
|
1230
|
-
|
1177
|
+
cb_extract_array_of_id_content(std::vector<std::tuple<couchbase::document_id, std::string, std::uint32_t>>& id_content, VALUE arg)
|
1231
1178
|
{
|
1232
1179
|
if (TYPE(arg) != T_ARRAY) {
|
1233
1180
|
return rb_exc_new_str(rb_eArgError, rb_sprintf("Type of ID/content tuples must be an Array, but given %+" PRIsVALUE, arg));
|
@@ -1279,7 +1226,7 @@ cb__extract_array_of_id_content(std::vector<std::tuple<couchbase::document_id, s
|
|
1279
1226
|
}
|
1280
1227
|
|
1281
1228
|
[[nodiscard]] VALUE
|
1282
|
-
|
1229
|
+
cb_extract_array_of_id_cas(std::vector<std::pair<couchbase::document_id, std::uint64_t>>& id_cas, VALUE arg)
|
1283
1230
|
{
|
1284
1231
|
if (TYPE(arg) != T_ARRAY) {
|
1285
1232
|
return rb_exc_new_str(rb_eArgError, rb_sprintf("Type of ID/CAS tuples must be an Array, but given %+" PRIsVALUE, arg));
|
@@ -1334,7 +1281,7 @@ cb__extract_array_of_id_cas(std::vector<std::pair<couchbase::document_id, std::u
|
|
1334
1281
|
}
|
1335
1282
|
|
1336
1283
|
[[nodiscard]] VALUE
|
1337
|
-
|
1284
|
+
cb_extract_option_symbol(VALUE& val, VALUE options, const char* name)
|
1338
1285
|
{
|
1339
1286
|
if (!NIL_P(options) && TYPE(options) == T_HASH) {
|
1340
1287
|
val = rb_hash_aref(options, rb_id2sym(rb_intern(name)));
|
@@ -1350,7 +1297,7 @@ cb__extract_option_symbol(VALUE& val, VALUE options, const char* name)
|
|
1350
1297
|
}
|
1351
1298
|
|
1352
1299
|
[[nodiscard]] VALUE
|
1353
|
-
|
1300
|
+
cb_extract_option_string(VALUE& val, VALUE options, const char* name)
|
1354
1301
|
{
|
1355
1302
|
if (!NIL_P(options) && TYPE(options) == T_HASH) {
|
1356
1303
|
val = rb_hash_aref(options, rb_id2sym(rb_intern(name)));
|
@@ -1366,7 +1313,7 @@ cb__extract_option_string(VALUE& val, VALUE options, const char* name)
|
|
1366
1313
|
}
|
1367
1314
|
|
1368
1315
|
[[nodiscard]] VALUE
|
1369
|
-
|
1316
|
+
cb_extract_option_fixnum(VALUE& val, VALUE options, const char* name)
|
1370
1317
|
{
|
1371
1318
|
if (!NIL_P(options) && TYPE(options) == T_HASH) {
|
1372
1319
|
val = rb_hash_aref(options, rb_id2sym(rb_intern(name)));
|
@@ -1382,7 +1329,7 @@ cb__extract_option_fixnum(VALUE& val, VALUE options, const char* name)
|
|
1382
1329
|
}
|
1383
1330
|
|
1384
1331
|
[[nodiscard]] VALUE
|
1385
|
-
|
1332
|
+
cb_extract_option_bignum(VALUE& val, VALUE options, const char* name)
|
1386
1333
|
{
|
1387
1334
|
if (!NIL_P(options) && TYPE(options) == T_HASH) {
|
1388
1335
|
val = rb_hash_aref(options, rb_id2sym(rb_intern(name)));
|
@@ -1402,10 +1349,10 @@ cb__extract_option_bignum(VALUE& val, VALUE options, const char* name)
|
|
1402
1349
|
}
|
1403
1350
|
|
1404
1351
|
[[nodiscard]] VALUE
|
1405
|
-
|
1352
|
+
cb_extract_durability(couchbase::protocol::durability_level& output_level, std::optional<std::uint16_t>& output_timeout, VALUE options)
|
1406
1353
|
{
|
1407
1354
|
VALUE durability_level = Qnil;
|
1408
|
-
VALUE exc =
|
1355
|
+
VALUE exc = cb_extract_option_symbol(durability_level, options, "durability_level");
|
1409
1356
|
if (!NIL_P(exc)) {
|
1410
1357
|
return exc;
|
1411
1358
|
}
|
@@ -1423,7 +1370,7 @@ cb__extract_durability(couchbase::protocol::durability_level& output_level, std:
|
|
1423
1370
|
return rb_exc_new_str(eInvalidArgument, rb_sprintf("unknown durability level: %+" PRIsVALUE, durability_level));
|
1424
1371
|
}
|
1425
1372
|
VALUE durability_timeout = Qnil;
|
1426
|
-
exc =
|
1373
|
+
exc = cb_extract_option_fixnum(durability_timeout, options, "durability_timeout");
|
1427
1374
|
if (!NIL_P(exc)) {
|
1428
1375
|
return exc;
|
1429
1376
|
}
|
@@ -1436,9 +1383,9 @@ cb__extract_durability(couchbase::protocol::durability_level& output_level, std:
|
|
1436
1383
|
|
1437
1384
|
template<typename Request>
|
1438
1385
|
[[nodiscard]] VALUE
|
1439
|
-
|
1386
|
+
cb_extract_durability(Request& req, VALUE options)
|
1440
1387
|
{
|
1441
|
-
return
|
1388
|
+
return cb_extract_durability(req.durability_level, req.durability_timeout, options);
|
1442
1389
|
}
|
1443
1390
|
|
1444
1391
|
static VALUE
|
@@ -1462,7 +1409,7 @@ cb_Backend_ping(VALUE self, VALUE bucket, VALUE options)
|
|
1462
1409
|
VALUE exc = Qnil;
|
1463
1410
|
do {
|
1464
1411
|
VALUE id = Qnil;
|
1465
|
-
exc =
|
1412
|
+
exc = cb_extract_option_string(id, options, "report_id");
|
1466
1413
|
if (!NIL_P(exc)) {
|
1467
1414
|
break;
|
1468
1415
|
}
|
@@ -1475,7 +1422,7 @@ cb_Backend_ping(VALUE self, VALUE bucket, VALUE options)
|
|
1475
1422
|
bucket_name.emplace(std::string(RSTRING_PTR(bucket), static_cast<size_t>(RSTRING_LEN(bucket))));
|
1476
1423
|
}
|
1477
1424
|
VALUE services = Qnil;
|
1478
|
-
exc =
|
1425
|
+
exc = cb_extract_option_array(services, options, "service_types");
|
1479
1426
|
if (!NIL_P(exc)) {
|
1480
1427
|
break;
|
1481
1428
|
}
|
@@ -1501,11 +1448,11 @@ cb_Backend_ping(VALUE self, VALUE bucket, VALUE options)
|
|
1501
1448
|
auto f = barrier->get_future();
|
1502
1449
|
backend->cluster->ping(
|
1503
1450
|
report_id, bucket_name, selected_services, [barrier](couchbase::diag::ping_result&& resp) mutable { barrier->set_value(resp); });
|
1504
|
-
auto resp = f
|
1451
|
+
auto resp = cb_wait_for_future(f);
|
1505
1452
|
|
1506
1453
|
VALUE res = rb_hash_new();
|
1507
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("id")),
|
1508
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("sdk")),
|
1454
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("id")), cb_str_new(resp.id));
|
1455
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("sdk")), cb_str_new(resp.sdk));
|
1509
1456
|
rb_hash_aset(res, rb_id2sym(rb_intern("version")), INT2FIX(resp.version));
|
1510
1457
|
services = rb_hash_new();
|
1511
1458
|
rb_hash_aset(res, rb_id2sym(rb_intern("services")), services);
|
@@ -1536,11 +1483,9 @@ cb_Backend_ping(VALUE self, VALUE bucket, VALUE options)
|
|
1536
1483
|
for (const auto& svc : svcs.second) {
|
1537
1484
|
VALUE service = rb_hash_new();
|
1538
1485
|
rb_hash_aset(service, rb_id2sym(rb_intern("latency")), LL2NUM(svc.latency.count()));
|
1539
|
-
rb_hash_aset(service, rb_id2sym(rb_intern("id")),
|
1540
|
-
rb_hash_aset(
|
1541
|
-
|
1542
|
-
rb_hash_aset(
|
1543
|
-
service, rb_id2sym(rb_intern("local")), rb_external_str_new(svc.local.data(), static_cast<long>(svc.local.size())));
|
1486
|
+
rb_hash_aset(service, rb_id2sym(rb_intern("id")), cb_str_new(svc.id));
|
1487
|
+
rb_hash_aset(service, rb_id2sym(rb_intern("remote")), cb_str_new(svc.remote));
|
1488
|
+
rb_hash_aset(service, rb_id2sym(rb_intern("local")), cb_str_new(svc.local));
|
1544
1489
|
VALUE state = Qnil;
|
1545
1490
|
switch (svc.state) {
|
1546
1491
|
case couchbase::diag::ping_state::ok:
|
@@ -1552,9 +1497,7 @@ cb_Backend_ping(VALUE self, VALUE bucket, VALUE options)
|
|
1552
1497
|
case couchbase::diag::ping_state::error:
|
1553
1498
|
state = rb_id2sym(rb_intern("error"));
|
1554
1499
|
if (svc.error) {
|
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())));
|
1500
|
+
rb_hash_aset(service, rb_id2sym(rb_intern("error")), cb_str_new(svc.error.value()));
|
1558
1501
|
}
|
1559
1502
|
break;
|
1560
1503
|
}
|
@@ -1591,21 +1534,21 @@ cb_Backend_document_get(VALUE self, VALUE bucket, VALUE collection, VALUE id, VA
|
|
1591
1534
|
doc_id.key.assign(RSTRING_PTR(id), static_cast<size_t>(RSTRING_LEN(id)));
|
1592
1535
|
|
1593
1536
|
couchbase::operations::get_request req{ doc_id };
|
1594
|
-
exc =
|
1537
|
+
exc = cb_extract_timeout(req, options);
|
1595
1538
|
if (!NIL_P(exc)) {
|
1596
1539
|
break;
|
1597
1540
|
}
|
1598
1541
|
auto barrier = std::make_shared<std::promise<couchbase::operations::get_response>>();
|
1599
1542
|
auto f = barrier->get_future();
|
1600
1543
|
backend->cluster->execute(req, [barrier](couchbase::operations::get_response&& resp) mutable { barrier->set_value(resp); });
|
1601
|
-
auto resp = f
|
1544
|
+
auto resp = cb_wait_for_future(f);
|
1602
1545
|
if (resp.ctx.ec) {
|
1603
|
-
exc =
|
1546
|
+
exc = cb_map_error_code(resp.ctx, "unable to fetch document");
|
1604
1547
|
break;
|
1605
1548
|
}
|
1606
1549
|
|
1607
1550
|
VALUE res = rb_hash_new();
|
1608
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("content")),
|
1551
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("content")), cb_str_new(resp.value));
|
1609
1552
|
rb_hash_aset(res, rb_id2sym(rb_intern("cas")), ULL2NUM(resp.cas));
|
1610
1553
|
rb_hash_aset(res, rb_id2sym(rb_intern("flags")), UINT2NUM(resp.flags));
|
1611
1554
|
return res;
|
@@ -1628,13 +1571,13 @@ cb_Backend_document_get_multi(VALUE self, VALUE keys, VALUE options)
|
|
1628
1571
|
VALUE exc = Qnil;
|
1629
1572
|
do {
|
1630
1573
|
std::chrono::milliseconds timeout{ 0 };
|
1631
|
-
exc =
|
1574
|
+
exc = cb_extract_timeout(timeout, options);
|
1632
1575
|
if (!NIL_P(exc)) {
|
1633
1576
|
break;
|
1634
1577
|
}
|
1635
1578
|
|
1636
1579
|
std::vector<couchbase::document_id> ids{};
|
1637
|
-
exc =
|
1580
|
+
exc = cb_extract_array_of_ids(ids, keys);
|
1638
1581
|
if (!NIL_P(exc)) {
|
1639
1582
|
break;
|
1640
1583
|
}
|
@@ -1658,10 +1601,9 @@ cb_Backend_document_get_multi(VALUE self, VALUE keys, VALUE options)
|
|
1658
1601
|
auto resp = barrier->get_future().get();
|
1659
1602
|
VALUE entry = rb_hash_new();
|
1660
1603
|
if (resp.ctx.ec) {
|
1661
|
-
rb_hash_aset(entry, rb_id2sym(rb_intern("error")),
|
1604
|
+
rb_hash_aset(entry, rb_id2sym(rb_intern("error")), cb_map_error_code(resp.ctx, "unable to (multi)fetch document"));
|
1662
1605
|
}
|
1663
|
-
rb_hash_aset(
|
1664
|
-
entry, rb_id2sym(rb_intern("content")), rb_external_str_new(resp.value.data(), static_cast<long>(resp.value.size())));
|
1606
|
+
rb_hash_aset(entry, rb_id2sym(rb_intern("content")), cb_str_new(resp.value));
|
1665
1607
|
rb_hash_aset(entry, rb_id2sym(rb_intern("cas")), ULL2NUM(resp.cas));
|
1666
1608
|
rb_hash_aset(entry, rb_id2sym(rb_intern("flags")), UINT2NUM(resp.flags));
|
1667
1609
|
rb_ary_push(res, entry);
|
@@ -1698,20 +1640,20 @@ cb_Backend_document_get_projected(VALUE self, VALUE bucket, VALUE collection, VA
|
|
1698
1640
|
doc_id.key.assign(RSTRING_PTR(id), static_cast<size_t>(RSTRING_LEN(id)));
|
1699
1641
|
|
1700
1642
|
couchbase::operations::get_projected_request req{ doc_id };
|
1701
|
-
exc =
|
1643
|
+
exc = cb_extract_timeout(req, options);
|
1702
1644
|
if (!NIL_P(exc)) {
|
1703
1645
|
break;
|
1704
1646
|
}
|
1705
|
-
exc =
|
1647
|
+
exc = cb_extract_option_bool(req.with_expiry, options, "with_expiry");
|
1706
1648
|
if (!NIL_P(exc)) {
|
1707
1649
|
break;
|
1708
1650
|
}
|
1709
|
-
exc =
|
1651
|
+
exc = cb_extract_option_bool(req.preserve_array_indexes, options, "preserve_array_indexes");
|
1710
1652
|
if (!NIL_P(exc)) {
|
1711
1653
|
break;
|
1712
1654
|
}
|
1713
1655
|
VALUE projections = Qnil;
|
1714
|
-
exc =
|
1656
|
+
exc = cb_extract_option_array(projections, options, "projections");
|
1715
1657
|
if (!NIL_P(exc)) {
|
1716
1658
|
break;
|
1717
1659
|
}
|
@@ -1733,14 +1675,14 @@ cb_Backend_document_get_projected(VALUE self, VALUE bucket, VALUE collection, VA
|
|
1733
1675
|
auto f = barrier->get_future();
|
1734
1676
|
backend->cluster->execute(req,
|
1735
1677
|
[barrier](couchbase::operations::get_projected_response&& resp) mutable { barrier->set_value(resp); });
|
1736
|
-
auto resp = f
|
1678
|
+
auto resp = cb_wait_for_future(f);
|
1737
1679
|
if (resp.ctx.ec) {
|
1738
|
-
exc =
|
1680
|
+
exc = cb_map_error_code(resp.ctx, "unable fetch with projections");
|
1739
1681
|
break;
|
1740
1682
|
}
|
1741
1683
|
|
1742
1684
|
VALUE res = rb_hash_new();
|
1743
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("content")),
|
1685
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("content")), cb_str_new(resp.value));
|
1744
1686
|
rb_hash_aset(res, rb_id2sym(rb_intern("cas")), ULL2NUM(resp.cas));
|
1745
1687
|
rb_hash_aset(res, rb_id2sym(rb_intern("flags")), UINT2NUM(resp.flags));
|
1746
1688
|
if (resp.expiry) {
|
@@ -1779,7 +1721,7 @@ cb_Backend_document_get_and_lock(VALUE self, VALUE bucket, VALUE collection, VAL
|
|
1779
1721
|
doc_id.key.assign(RSTRING_PTR(id), static_cast<size_t>(RSTRING_LEN(id)));
|
1780
1722
|
|
1781
1723
|
couchbase::operations::get_and_lock_request req{ doc_id };
|
1782
|
-
exc =
|
1724
|
+
exc = cb_extract_timeout(req, options);
|
1783
1725
|
if (!NIL_P(exc)) {
|
1784
1726
|
break;
|
1785
1727
|
}
|
@@ -1789,14 +1731,14 @@ cb_Backend_document_get_and_lock(VALUE self, VALUE bucket, VALUE collection, VAL
|
|
1789
1731
|
auto f = barrier->get_future();
|
1790
1732
|
backend->cluster->execute(req,
|
1791
1733
|
[barrier](couchbase::operations::get_and_lock_response&& resp) mutable { barrier->set_value(resp); });
|
1792
|
-
auto resp = f
|
1734
|
+
auto resp = cb_wait_for_future(f);
|
1793
1735
|
if (resp.ctx.ec) {
|
1794
|
-
exc =
|
1736
|
+
exc = cb_map_error_code(resp.ctx, "unable lock and fetch");
|
1795
1737
|
break;
|
1796
1738
|
}
|
1797
1739
|
|
1798
1740
|
VALUE res = rb_hash_new();
|
1799
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("content")),
|
1741
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("content")), cb_str_new(resp.value));
|
1800
1742
|
rb_hash_aset(res, rb_id2sym(rb_intern("cas")), ULL2NUM(resp.cas));
|
1801
1743
|
rb_hash_aset(res, rb_id2sym(rb_intern("flags")), UINT2NUM(resp.flags));
|
1802
1744
|
return res;
|
@@ -1832,7 +1774,7 @@ cb_Backend_document_get_and_touch(VALUE self, VALUE bucket, VALUE collection, VA
|
|
1832
1774
|
doc_id.key.assign(RSTRING_PTR(id), static_cast<size_t>(RSTRING_LEN(id)));
|
1833
1775
|
|
1834
1776
|
couchbase::operations::get_and_touch_request req{ doc_id };
|
1835
|
-
exc =
|
1777
|
+
exc = cb_extract_timeout(req, options);
|
1836
1778
|
if (!NIL_P(exc)) {
|
1837
1779
|
break;
|
1838
1780
|
}
|
@@ -1842,14 +1784,14 @@ cb_Backend_document_get_and_touch(VALUE self, VALUE bucket, VALUE collection, VA
|
|
1842
1784
|
auto f = barrier->get_future();
|
1843
1785
|
backend->cluster->execute(req,
|
1844
1786
|
[barrier](couchbase::operations::get_and_touch_response&& resp) mutable { barrier->set_value(resp); });
|
1845
|
-
auto resp = f
|
1787
|
+
auto resp = cb_wait_for_future(f);
|
1846
1788
|
if (resp.ctx.ec) {
|
1847
|
-
exc =
|
1789
|
+
exc = cb_map_error_code(resp.ctx, "unable fetch and touch");
|
1848
1790
|
break;
|
1849
1791
|
}
|
1850
1792
|
|
1851
1793
|
VALUE res = rb_hash_new();
|
1852
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("content")),
|
1794
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("content")), cb_str_new(resp.value));
|
1853
1795
|
rb_hash_aset(res, rb_id2sym(rb_intern("cas")), ULL2NUM(resp.cas));
|
1854
1796
|
rb_hash_aset(res, rb_id2sym(rb_intern("flags")), UINT2NUM(resp.flags));
|
1855
1797
|
return res;
|
@@ -1860,7 +1802,7 @@ cb_Backend_document_get_and_touch(VALUE self, VALUE bucket, VALUE collection, VA
|
|
1860
1802
|
|
1861
1803
|
template<typename Response>
|
1862
1804
|
static VALUE
|
1863
|
-
|
1805
|
+
cb_extract_mutation_result(Response resp)
|
1864
1806
|
{
|
1865
1807
|
VALUE res = rb_hash_new();
|
1866
1808
|
rb_hash_aset(res, rb_id2sym(rb_intern("cas")), ULL2NUM(resp.cas));
|
@@ -1868,9 +1810,7 @@ cb__extract_mutation_result(Response resp)
|
|
1868
1810
|
rb_hash_aset(token, rb_id2sym(rb_intern("partition_uuid")), ULL2NUM(resp.token.partition_uuid));
|
1869
1811
|
rb_hash_aset(token, rb_id2sym(rb_intern("sequence_number")), ULL2NUM(resp.token.sequence_number));
|
1870
1812
|
rb_hash_aset(token, rb_id2sym(rb_intern("partition_id")), UINT2NUM(resp.token.partition_id));
|
1871
|
-
rb_hash_aset(token,
|
1872
|
-
rb_id2sym(rb_intern("bucket_name")),
|
1873
|
-
rb_external_str_new(resp.token.bucket_name.c_str(), static_cast<long>(resp.token.bucket_name.size())));
|
1813
|
+
rb_hash_aset(token, rb_id2sym(rb_intern("bucket_name")), cb_str_new(resp.token.bucket_name));
|
1874
1814
|
rb_hash_aset(res, rb_id2sym(rb_intern("mutation_token")), token);
|
1875
1815
|
return res;
|
1876
1816
|
}
|
@@ -1902,7 +1842,7 @@ cb_Backend_document_touch(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
1902
1842
|
doc_id.key.assign(RSTRING_PTR(id), static_cast<size_t>(RSTRING_LEN(id)));
|
1903
1843
|
|
1904
1844
|
couchbase::operations::touch_request req{ doc_id };
|
1905
|
-
exc =
|
1845
|
+
exc = cb_extract_timeout(req, options);
|
1906
1846
|
if (!NIL_P(exc)) {
|
1907
1847
|
break;
|
1908
1848
|
}
|
@@ -1911,9 +1851,9 @@ cb_Backend_document_touch(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
1911
1851
|
auto barrier = std::make_shared<std::promise<couchbase::operations::touch_response>>();
|
1912
1852
|
auto f = barrier->get_future();
|
1913
1853
|
backend->cluster->execute(req, [barrier](couchbase::operations::touch_response&& resp) mutable { barrier->set_value(resp); });
|
1914
|
-
auto resp = f
|
1854
|
+
auto resp = cb_wait_for_future(f);
|
1915
1855
|
if (resp.ctx.ec) {
|
1916
|
-
exc =
|
1856
|
+
exc = cb_map_error_code(resp.ctx, "unable to touch");
|
1917
1857
|
break;
|
1918
1858
|
}
|
1919
1859
|
|
@@ -1951,7 +1891,7 @@ cb_Backend_document_exists(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
1951
1891
|
doc_id.key.assign(RSTRING_PTR(id), static_cast<size_t>(RSTRING_LEN(id)));
|
1952
1892
|
|
1953
1893
|
couchbase::operations::exists_request req{ doc_id };
|
1954
|
-
exc =
|
1894
|
+
exc = cb_extract_timeout(req, options);
|
1955
1895
|
if (!NIL_P(exc)) {
|
1956
1896
|
break;
|
1957
1897
|
}
|
@@ -1959,9 +1899,9 @@ cb_Backend_document_exists(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
1959
1899
|
auto barrier = std::make_shared<std::promise<couchbase::operations::exists_response>>();
|
1960
1900
|
auto f = barrier->get_future();
|
1961
1901
|
backend->cluster->execute(req, [barrier](couchbase::operations::exists_response&& resp) mutable { barrier->set_value(resp); });
|
1962
|
-
auto resp = f
|
1902
|
+
auto resp = cb_wait_for_future(f);
|
1963
1903
|
if (resp.ctx.ec) {
|
1964
|
-
exc =
|
1904
|
+
exc = cb_map_error_code(resp.ctx, "unable to exists");
|
1965
1905
|
break;
|
1966
1906
|
}
|
1967
1907
|
|
@@ -2017,7 +1957,7 @@ cb_Backend_document_unlock(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
2017
1957
|
doc_id.key.assign(RSTRING_PTR(id), static_cast<size_t>(RSTRING_LEN(id)));
|
2018
1958
|
|
2019
1959
|
couchbase::operations::unlock_request req{ doc_id };
|
2020
|
-
exc =
|
1960
|
+
exc = cb_extract_timeout(req, options);
|
2021
1961
|
if (!NIL_P(exc)) {
|
2022
1962
|
break;
|
2023
1963
|
}
|
@@ -2036,9 +1976,9 @@ cb_Backend_document_unlock(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
2036
1976
|
auto barrier = std::make_shared<std::promise<couchbase::operations::unlock_response>>();
|
2037
1977
|
auto f = barrier->get_future();
|
2038
1978
|
backend->cluster->execute(req, [barrier](couchbase::operations::unlock_response&& resp) mutable { barrier->set_value(resp); });
|
2039
|
-
auto resp = f
|
1979
|
+
auto resp = cb_wait_for_future(f);
|
2040
1980
|
if (resp.ctx.ec) {
|
2041
|
-
exc =
|
1981
|
+
exc = cb_map_error_code(resp.ctx, "unable to unlock");
|
2042
1982
|
break;
|
2043
1983
|
}
|
2044
1984
|
|
@@ -2079,35 +2019,39 @@ cb_Backend_document_upsert(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
2079
2019
|
std::string value(RSTRING_PTR(content), static_cast<size_t>(RSTRING_LEN(content)));
|
2080
2020
|
|
2081
2021
|
couchbase::operations::upsert_request req{ doc_id, value };
|
2082
|
-
exc =
|
2022
|
+
exc = cb_extract_timeout(req, options);
|
2083
2023
|
if (!NIL_P(exc)) {
|
2084
2024
|
break;
|
2085
2025
|
}
|
2086
2026
|
req.flags = FIX2UINT(flags);
|
2087
2027
|
|
2088
|
-
exc =
|
2028
|
+
exc = cb_extract_durability(req, options);
|
2089
2029
|
if (!NIL_P(exc)) {
|
2090
2030
|
break;
|
2091
2031
|
}
|
2092
2032
|
VALUE expiry = Qnil;
|
2093
|
-
exc =
|
2033
|
+
exc = cb_extract_option_fixnum(expiry, options, "expiry");
|
2094
2034
|
if (!NIL_P(exc)) {
|
2095
2035
|
break;
|
2096
2036
|
}
|
2097
2037
|
if (!NIL_P(expiry)) {
|
2098
2038
|
req.expiry = FIX2UINT(expiry);
|
2099
2039
|
}
|
2040
|
+
exc = cb_extract_option_bool(req.preserve_expiry, options, "preserve_expiry");
|
2041
|
+
if (!NIL_P(exc)) {
|
2042
|
+
break;
|
2043
|
+
}
|
2100
2044
|
|
2101
2045
|
auto barrier = std::make_shared<std::promise<couchbase::operations::upsert_response>>();
|
2102
2046
|
auto f = barrier->get_future();
|
2103
2047
|
backend->cluster->execute(req, [barrier](couchbase::operations::upsert_response&& resp) mutable { barrier->set_value(resp); });
|
2104
|
-
auto resp = f
|
2048
|
+
auto resp = cb_wait_for_future(f);
|
2105
2049
|
if (resp.ctx.ec) {
|
2106
|
-
exc =
|
2050
|
+
exc = cb_map_error_code(resp.ctx, "unable to upsert");
|
2107
2051
|
break;
|
2108
2052
|
}
|
2109
2053
|
|
2110
|
-
return
|
2054
|
+
return cb_extract_mutation_result(resp);
|
2111
2055
|
} while (false);
|
2112
2056
|
rb_exc_raise(exc);
|
2113
2057
|
return Qnil;
|
@@ -2127,25 +2071,30 @@ cb_Backend_document_upsert_multi(VALUE self, VALUE id_content, VALUE options)
|
|
2127
2071
|
VALUE exc = Qnil;
|
2128
2072
|
do {
|
2129
2073
|
std::chrono::milliseconds timeout{ 0 };
|
2130
|
-
exc =
|
2074
|
+
exc = cb_extract_timeout(timeout, options);
|
2131
2075
|
if (!NIL_P(exc)) {
|
2132
2076
|
break;
|
2133
2077
|
}
|
2134
2078
|
|
2135
2079
|
couchbase::protocol::durability_level durability_level{ couchbase::protocol::durability_level::none };
|
2136
2080
|
std::optional<std::uint16_t> durability_timeout{ std::nullopt };
|
2137
|
-
exc =
|
2081
|
+
exc = cb_extract_durability(durability_level, durability_timeout, options);
|
2138
2082
|
if (!NIL_P(exc)) {
|
2139
2083
|
break;
|
2140
2084
|
}
|
2141
2085
|
VALUE expiry = Qnil;
|
2142
|
-
exc =
|
2086
|
+
exc = cb_extract_option_fixnum(expiry, options, "expiry");
|
2087
|
+
if (!NIL_P(exc)) {
|
2088
|
+
break;
|
2089
|
+
}
|
2090
|
+
bool preserve_expiry{ false };
|
2091
|
+
exc = cb_extract_option_bool(preserve_expiry, options, "preserve_expiry");
|
2143
2092
|
if (!NIL_P(exc)) {
|
2144
2093
|
break;
|
2145
2094
|
}
|
2146
2095
|
|
2147
2096
|
std::vector<std::tuple<couchbase::document_id, std::string, std::uint32_t>> tuples{};
|
2148
|
-
exc =
|
2097
|
+
exc = cb_extract_array_of_id_content(tuples, id_content);
|
2149
2098
|
if (!NIL_P(exc)) {
|
2150
2099
|
break;
|
2151
2100
|
}
|
@@ -2165,6 +2114,7 @@ cb_Backend_document_upsert_multi(VALUE self, VALUE id_content, VALUE options)
|
|
2165
2114
|
if (!NIL_P(expiry)) {
|
2166
2115
|
req.expiry = FIX2UINT(expiry);
|
2167
2116
|
}
|
2117
|
+
req.preserve_expiry = preserve_expiry;
|
2168
2118
|
auto barrier = std::make_shared<std::promise<couchbase::operations::upsert_response>>();
|
2169
2119
|
backend->cluster->execute(req, [barrier](couchbase::operations::upsert_response&& resp) mutable { barrier->set_value(resp); });
|
2170
2120
|
barriers.emplace_back(barrier);
|
@@ -2173,9 +2123,9 @@ cb_Backend_document_upsert_multi(VALUE self, VALUE id_content, VALUE options)
|
|
2173
2123
|
VALUE res = rb_ary_new_capa(static_cast<long>(num_of_tuples));
|
2174
2124
|
for (auto& barrier : barriers) {
|
2175
2125
|
auto resp = barrier->get_future().get();
|
2176
|
-
VALUE entry =
|
2126
|
+
VALUE entry = cb_extract_mutation_result(resp);
|
2177
2127
|
if (resp.ctx.ec) {
|
2178
|
-
rb_hash_aset(entry, rb_id2sym(rb_intern("error")),
|
2128
|
+
rb_hash_aset(entry, rb_id2sym(rb_intern("error")), cb_map_error_code(resp.ctx, "unable (multi)upsert"));
|
2179
2129
|
}
|
2180
2130
|
rb_ary_push(res, entry);
|
2181
2131
|
}
|
@@ -2213,11 +2163,11 @@ cb_Backend_document_append(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
2213
2163
|
std::string value(RSTRING_PTR(content), static_cast<size_t>(RSTRING_LEN(content)));
|
2214
2164
|
|
2215
2165
|
couchbase::operations::append_request req{ doc_id, value };
|
2216
|
-
exc =
|
2166
|
+
exc = cb_extract_timeout(req, options);
|
2217
2167
|
if (!NIL_P(exc)) {
|
2218
2168
|
break;
|
2219
2169
|
}
|
2220
|
-
exc =
|
2170
|
+
exc = cb_extract_durability(req, options);
|
2221
2171
|
if (!NIL_P(exc)) {
|
2222
2172
|
break;
|
2223
2173
|
}
|
@@ -2225,13 +2175,13 @@ cb_Backend_document_append(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
2225
2175
|
auto barrier = std::make_shared<std::promise<couchbase::operations::append_response>>();
|
2226
2176
|
auto f = barrier->get_future();
|
2227
2177
|
backend->cluster->execute(req, [barrier](couchbase::operations::append_response&& resp) mutable { barrier->set_value(resp); });
|
2228
|
-
auto resp = f
|
2178
|
+
auto resp = cb_wait_for_future(f);
|
2229
2179
|
if (resp.ctx.ec) {
|
2230
|
-
exc =
|
2180
|
+
exc = cb_map_error_code(resp.ctx, "unable to append");
|
2231
2181
|
break;
|
2232
2182
|
}
|
2233
2183
|
|
2234
|
-
return
|
2184
|
+
return cb_extract_mutation_result(resp);
|
2235
2185
|
} while (false);
|
2236
2186
|
rb_exc_raise(exc);
|
2237
2187
|
return Qnil;
|
@@ -2265,11 +2215,11 @@ cb_Backend_document_prepend(VALUE self, VALUE bucket, VALUE collection, VALUE id
|
|
2265
2215
|
std::string value(RSTRING_PTR(content), static_cast<size_t>(RSTRING_LEN(content)));
|
2266
2216
|
|
2267
2217
|
couchbase::operations::prepend_request req{ doc_id, value };
|
2268
|
-
exc =
|
2218
|
+
exc = cb_extract_timeout(req, options);
|
2269
2219
|
if (!NIL_P(exc)) {
|
2270
2220
|
break;
|
2271
2221
|
}
|
2272
|
-
exc =
|
2222
|
+
exc = cb_extract_durability(req, options);
|
2273
2223
|
if (!NIL_P(exc)) {
|
2274
2224
|
break;
|
2275
2225
|
}
|
@@ -2277,13 +2227,13 @@ cb_Backend_document_prepend(VALUE self, VALUE bucket, VALUE collection, VALUE id
|
|
2277
2227
|
auto barrier = std::make_shared<std::promise<couchbase::operations::prepend_response>>();
|
2278
2228
|
auto f = barrier->get_future();
|
2279
2229
|
backend->cluster->execute(req, [barrier](couchbase::operations::prepend_response&& resp) mutable { barrier->set_value(resp); });
|
2280
|
-
auto resp = f
|
2230
|
+
auto resp = cb_wait_for_future(f);
|
2281
2231
|
if (resp.ctx.ec) {
|
2282
|
-
exc =
|
2232
|
+
exc = cb_map_error_code(resp.ctx, "unable to prepend");
|
2283
2233
|
break;
|
2284
2234
|
}
|
2285
2235
|
|
2286
|
-
return
|
2236
|
+
return cb_extract_mutation_result(resp);
|
2287
2237
|
} while (false);
|
2288
2238
|
rb_exc_raise(exc);
|
2289
2239
|
return Qnil;
|
@@ -2318,26 +2268,30 @@ cb_Backend_document_replace(VALUE self, VALUE bucket, VALUE collection, VALUE id
|
|
2318
2268
|
std::string value(RSTRING_PTR(content), static_cast<size_t>(RSTRING_LEN(content)));
|
2319
2269
|
|
2320
2270
|
couchbase::operations::replace_request req{ doc_id, value };
|
2321
|
-
exc =
|
2271
|
+
exc = cb_extract_timeout(req, options);
|
2322
2272
|
if (!NIL_P(exc)) {
|
2323
2273
|
break;
|
2324
2274
|
}
|
2325
2275
|
req.flags = FIX2UINT(flags);
|
2326
2276
|
|
2327
|
-
exc =
|
2277
|
+
exc = cb_extract_durability(req, options);
|
2328
2278
|
if (!NIL_P(exc)) {
|
2329
2279
|
break;
|
2330
2280
|
}
|
2331
2281
|
VALUE expiry = Qnil;
|
2332
|
-
exc =
|
2282
|
+
exc = cb_extract_option_fixnum(expiry, options, "expiry");
|
2333
2283
|
if (!NIL_P(exc)) {
|
2334
2284
|
break;
|
2335
2285
|
}
|
2336
2286
|
if (!NIL_P(expiry)) {
|
2337
2287
|
req.expiry = FIX2UINT(expiry);
|
2338
2288
|
}
|
2289
|
+
exc = cb_extract_option_bool(req.preserve_expiry, options, "preserve_expiry");
|
2290
|
+
if (!NIL_P(exc)) {
|
2291
|
+
break;
|
2292
|
+
}
|
2339
2293
|
VALUE cas = Qnil;
|
2340
|
-
exc =
|
2294
|
+
exc = cb_extract_option_bignum(cas, options, "cas");
|
2341
2295
|
if (!NIL_P(exc)) {
|
2342
2296
|
break;
|
2343
2297
|
}
|
@@ -2348,13 +2302,13 @@ cb_Backend_document_replace(VALUE self, VALUE bucket, VALUE collection, VALUE id
|
|
2348
2302
|
auto barrier = std::make_shared<std::promise<couchbase::operations::replace_response>>();
|
2349
2303
|
auto f = barrier->get_future();
|
2350
2304
|
backend->cluster->execute(req, [barrier](couchbase::operations::replace_response&& resp) mutable { barrier->set_value(resp); });
|
2351
|
-
auto resp = f
|
2305
|
+
auto resp = cb_wait_for_future(f);
|
2352
2306
|
if (resp.ctx.ec) {
|
2353
|
-
exc =
|
2307
|
+
exc = cb_map_error_code(resp.ctx, "unable to replace");
|
2354
2308
|
break;
|
2355
2309
|
}
|
2356
2310
|
|
2357
|
-
return
|
2311
|
+
return cb_extract_mutation_result(resp);
|
2358
2312
|
} while (false);
|
2359
2313
|
rb_exc_raise(exc);
|
2360
2314
|
return Qnil;
|
@@ -2389,18 +2343,18 @@ cb_Backend_document_insert(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
2389
2343
|
std::string value(RSTRING_PTR(content), static_cast<size_t>(RSTRING_LEN(content)));
|
2390
2344
|
|
2391
2345
|
couchbase::operations::insert_request req{ doc_id, value };
|
2392
|
-
exc =
|
2346
|
+
exc = cb_extract_timeout(req, options);
|
2393
2347
|
if (!NIL_P(exc)) {
|
2394
2348
|
break;
|
2395
2349
|
}
|
2396
2350
|
req.flags = FIX2UINT(flags);
|
2397
2351
|
|
2398
|
-
exc =
|
2352
|
+
exc = cb_extract_durability(req, options);
|
2399
2353
|
if (!NIL_P(exc)) {
|
2400
2354
|
break;
|
2401
2355
|
}
|
2402
2356
|
VALUE expiry = Qnil;
|
2403
|
-
exc =
|
2357
|
+
exc = cb_extract_option_fixnum(expiry, options, "expiry");
|
2404
2358
|
if (!NIL_P(exc)) {
|
2405
2359
|
break;
|
2406
2360
|
}
|
@@ -2411,13 +2365,13 @@ cb_Backend_document_insert(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
2411
2365
|
auto barrier = std::make_shared<std::promise<couchbase::operations::insert_response>>();
|
2412
2366
|
auto f = barrier->get_future();
|
2413
2367
|
backend->cluster->execute(req, [barrier](couchbase::operations::insert_response&& resp) mutable { barrier->set_value(resp); });
|
2414
|
-
auto resp = f
|
2368
|
+
auto resp = cb_wait_for_future(f);
|
2415
2369
|
if (resp.ctx.ec) {
|
2416
|
-
exc =
|
2370
|
+
exc = cb_map_error_code(resp.ctx, "unable to insert");
|
2417
2371
|
break;
|
2418
2372
|
}
|
2419
2373
|
|
2420
|
-
return
|
2374
|
+
return cb_extract_mutation_result(resp);
|
2421
2375
|
} while (false);
|
2422
2376
|
rb_exc_raise(exc);
|
2423
2377
|
return Qnil;
|
@@ -2449,16 +2403,16 @@ cb_Backend_document_remove(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
2449
2403
|
doc_id.key.assign(RSTRING_PTR(id), static_cast<size_t>(RSTRING_LEN(id)));
|
2450
2404
|
|
2451
2405
|
couchbase::operations::remove_request req{ doc_id };
|
2452
|
-
exc =
|
2406
|
+
exc = cb_extract_timeout(req, options);
|
2453
2407
|
if (!NIL_P(exc)) {
|
2454
2408
|
break;
|
2455
2409
|
}
|
2456
|
-
exc =
|
2410
|
+
exc = cb_extract_durability(req, options);
|
2457
2411
|
if (!NIL_P(exc)) {
|
2458
2412
|
break;
|
2459
2413
|
}
|
2460
2414
|
VALUE cas = Qnil;
|
2461
|
-
exc =
|
2415
|
+
exc = cb_extract_option_bignum(cas, options, "cas");
|
2462
2416
|
if (!NIL_P(exc)) {
|
2463
2417
|
break;
|
2464
2418
|
}
|
@@ -2469,12 +2423,12 @@ cb_Backend_document_remove(VALUE self, VALUE bucket, VALUE collection, VALUE id,
|
|
2469
2423
|
auto barrier = std::make_shared<std::promise<couchbase::operations::remove_response>>();
|
2470
2424
|
auto f = barrier->get_future();
|
2471
2425
|
backend->cluster->execute(req, [barrier](couchbase::operations::remove_response&& resp) mutable { barrier->set_value(resp); });
|
2472
|
-
auto resp = f
|
2426
|
+
auto resp = cb_wait_for_future(f);
|
2473
2427
|
if (resp.ctx.ec) {
|
2474
|
-
exc =
|
2428
|
+
exc = cb_map_error_code(resp.ctx, "unable to remove");
|
2475
2429
|
break;
|
2476
2430
|
}
|
2477
|
-
return
|
2431
|
+
return cb_extract_mutation_result(resp);
|
2478
2432
|
} while (false);
|
2479
2433
|
rb_exc_raise(exc);
|
2480
2434
|
return Qnil;
|
@@ -2498,20 +2452,20 @@ cb_Backend_document_remove_multi(VALUE self, VALUE id_cas, VALUE options)
|
|
2498
2452
|
VALUE exc = Qnil;
|
2499
2453
|
do {
|
2500
2454
|
std::chrono::milliseconds timeout{ 0 };
|
2501
|
-
exc =
|
2455
|
+
exc = cb_extract_timeout(timeout, options);
|
2502
2456
|
if (!NIL_P(exc)) {
|
2503
2457
|
break;
|
2504
2458
|
}
|
2505
2459
|
|
2506
2460
|
couchbase::protocol::durability_level durability_level{ couchbase::protocol::durability_level::none };
|
2507
2461
|
std::optional<std::uint16_t> durability_timeout{ std::nullopt };
|
2508
|
-
exc =
|
2462
|
+
exc = cb_extract_durability(durability_level, durability_timeout, options);
|
2509
2463
|
if (!NIL_P(exc)) {
|
2510
2464
|
break;
|
2511
2465
|
}
|
2512
2466
|
|
2513
2467
|
std::vector<std::pair<couchbase::document_id, std::uint64_t>> tuples{};
|
2514
|
-
exc =
|
2468
|
+
exc = cb_extract_array_of_id_cas(tuples, id_cas);
|
2515
2469
|
if (!NIL_P(exc)) {
|
2516
2470
|
break;
|
2517
2471
|
}
|
@@ -2536,9 +2490,9 @@ cb_Backend_document_remove_multi(VALUE self, VALUE id_cas, VALUE options)
|
|
2536
2490
|
VALUE res = rb_ary_new_capa(static_cast<long>(num_of_tuples));
|
2537
2491
|
for (auto& barrier : barriers) {
|
2538
2492
|
auto resp = barrier->get_future().get();
|
2539
|
-
VALUE entry =
|
2493
|
+
VALUE entry = cb_extract_mutation_result(resp);
|
2540
2494
|
if (resp.ctx.ec) {
|
2541
|
-
rb_hash_aset(entry, rb_id2sym(rb_intern("error")),
|
2495
|
+
rb_hash_aset(entry, rb_id2sym(rb_intern("error")), cb_map_error_code(resp.ctx, "unable (multi)remove"));
|
2542
2496
|
}
|
2543
2497
|
rb_ary_push(res, entry);
|
2544
2498
|
}
|
@@ -2575,16 +2529,16 @@ cb_Backend_document_increment(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
2575
2529
|
doc_id.key.assign(RSTRING_PTR(id), static_cast<size_t>(RSTRING_LEN(id)));
|
2576
2530
|
|
2577
2531
|
couchbase::operations::increment_request req{ doc_id };
|
2578
|
-
exc =
|
2532
|
+
exc = cb_extract_timeout(req, options);
|
2579
2533
|
if (!NIL_P(exc)) {
|
2580
2534
|
break;
|
2581
2535
|
}
|
2582
|
-
exc =
|
2536
|
+
exc = cb_extract_durability(req, options);
|
2583
2537
|
if (!NIL_P(exc)) {
|
2584
2538
|
break;
|
2585
2539
|
}
|
2586
2540
|
VALUE delta = Qnil;
|
2587
|
-
exc =
|
2541
|
+
exc = cb_extract_option_bignum(delta, options, "delta");
|
2588
2542
|
if (!NIL_P(exc)) {
|
2589
2543
|
break;
|
2590
2544
|
}
|
@@ -2592,7 +2546,7 @@ cb_Backend_document_increment(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
2592
2546
|
req.delta = NUM2ULL(delta);
|
2593
2547
|
}
|
2594
2548
|
VALUE initial_value = Qnil;
|
2595
|
-
exc =
|
2549
|
+
exc = cb_extract_option_bignum(initial_value, options, "initial_value");
|
2596
2550
|
if (!NIL_P(exc)) {
|
2597
2551
|
break;
|
2598
2552
|
}
|
@@ -2600,23 +2554,27 @@ cb_Backend_document_increment(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
2600
2554
|
req.initial_value = NUM2ULL(initial_value);
|
2601
2555
|
}
|
2602
2556
|
VALUE expiry = Qnil;
|
2603
|
-
exc =
|
2557
|
+
exc = cb_extract_option_fixnum(expiry, options, "expiry");
|
2604
2558
|
if (!NIL_P(exc)) {
|
2605
2559
|
break;
|
2606
2560
|
}
|
2607
2561
|
if (!NIL_P(expiry)) {
|
2608
2562
|
req.expiry = FIX2UINT(expiry);
|
2609
2563
|
}
|
2564
|
+
exc = cb_extract_option_bool(req.preserve_expiry, options, "preserve_expiry");
|
2565
|
+
if (!NIL_P(exc)) {
|
2566
|
+
break;
|
2567
|
+
}
|
2610
2568
|
|
2611
2569
|
auto barrier = std::make_shared<std::promise<couchbase::operations::increment_response>>();
|
2612
2570
|
auto f = barrier->get_future();
|
2613
2571
|
backend->cluster->execute(req, [barrier](couchbase::operations::increment_response&& resp) mutable { barrier->set_value(resp); });
|
2614
|
-
auto resp = f
|
2572
|
+
auto resp = cb_wait_for_future(f);
|
2615
2573
|
if (resp.ctx.ec) {
|
2616
|
-
exc =
|
2574
|
+
exc = cb_map_error_code(resp.ctx.ec, fmt::format(R"(unable to increment by {})", req.delta));
|
2617
2575
|
break;
|
2618
2576
|
}
|
2619
|
-
VALUE res =
|
2577
|
+
VALUE res = cb_extract_mutation_result(resp);
|
2620
2578
|
rb_hash_aset(res, rb_id2sym(rb_intern("content")), ULL2NUM(resp.content));
|
2621
2579
|
return res;
|
2622
2580
|
} while (false);
|
@@ -2650,16 +2608,16 @@ cb_Backend_document_decrement(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
2650
2608
|
doc_id.key.assign(RSTRING_PTR(id), static_cast<size_t>(RSTRING_LEN(id)));
|
2651
2609
|
|
2652
2610
|
couchbase::operations::decrement_request req{ doc_id };
|
2653
|
-
exc =
|
2611
|
+
exc = cb_extract_timeout(req, options);
|
2654
2612
|
if (!NIL_P(exc)) {
|
2655
2613
|
break;
|
2656
2614
|
}
|
2657
|
-
exc =
|
2615
|
+
exc = cb_extract_durability(req, options);
|
2658
2616
|
if (!NIL_P(exc)) {
|
2659
2617
|
break;
|
2660
2618
|
}
|
2661
2619
|
VALUE delta = Qnil;
|
2662
|
-
exc =
|
2620
|
+
exc = cb_extract_option_bignum(delta, options, "delta");
|
2663
2621
|
if (!NIL_P(exc)) {
|
2664
2622
|
break;
|
2665
2623
|
}
|
@@ -2667,7 +2625,7 @@ cb_Backend_document_decrement(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
2667
2625
|
req.delta = NUM2ULL(delta);
|
2668
2626
|
}
|
2669
2627
|
VALUE initial_value = Qnil;
|
2670
|
-
exc =
|
2628
|
+
exc = cb_extract_option_bignum(initial_value, options, "initial_value");
|
2671
2629
|
if (!NIL_P(exc)) {
|
2672
2630
|
break;
|
2673
2631
|
}
|
@@ -2675,23 +2633,27 @@ cb_Backend_document_decrement(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
2675
2633
|
req.initial_value = NUM2ULL(initial_value);
|
2676
2634
|
}
|
2677
2635
|
VALUE expiry = Qnil;
|
2678
|
-
exc =
|
2636
|
+
exc = cb_extract_option_fixnum(expiry, options, "expiry");
|
2679
2637
|
if (!NIL_P(exc)) {
|
2680
2638
|
break;
|
2681
2639
|
}
|
2682
2640
|
if (!NIL_P(expiry)) {
|
2683
2641
|
req.expiry = FIX2UINT(expiry);
|
2684
2642
|
}
|
2643
|
+
exc = cb_extract_option_bool(req.preserve_expiry, options, "preserve_expiry");
|
2644
|
+
if (!NIL_P(exc)) {
|
2645
|
+
break;
|
2646
|
+
}
|
2685
2647
|
|
2686
2648
|
auto barrier = std::make_shared<std::promise<couchbase::operations::decrement_response>>();
|
2687
2649
|
auto f = barrier->get_future();
|
2688
2650
|
backend->cluster->execute(req, [barrier](couchbase::operations::decrement_response&& resp) mutable { barrier->set_value(resp); });
|
2689
|
-
auto resp = f
|
2651
|
+
auto resp = cb_wait_for_future(f);
|
2690
2652
|
if (resp.ctx.ec) {
|
2691
|
-
exc =
|
2653
|
+
exc = cb_map_error_code(resp.ctx, fmt::format(R"(unable to decrement by {})", req.delta));
|
2692
2654
|
break;
|
2693
2655
|
}
|
2694
|
-
VALUE res =
|
2656
|
+
VALUE res = cb_extract_mutation_result(resp);
|
2695
2657
|
rb_hash_aset(res, rb_id2sym(rb_intern("content")), ULL2NUM(resp.content));
|
2696
2658
|
return res;
|
2697
2659
|
} while (false);
|
@@ -2700,7 +2662,7 @@ cb_Backend_document_decrement(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
2700
2662
|
}
|
2701
2663
|
|
2702
2664
|
static VALUE
|
2703
|
-
|
2665
|
+
cb_map_subdoc_opcode(couchbase::protocol::subdoc_opcode opcode)
|
2704
2666
|
{
|
2705
2667
|
switch (opcode) {
|
2706
2668
|
case couchbase::protocol::subdoc_opcode::get:
|
@@ -2745,6 +2707,9 @@ cb__map_subdoc_opcode(couchbase::protocol::subdoc_opcode opcode)
|
|
2745
2707
|
case couchbase::protocol::subdoc_opcode::set_doc:
|
2746
2708
|
return rb_id2sym(rb_intern("set_doc"));
|
2747
2709
|
|
2710
|
+
case couchbase::protocol::subdoc_opcode::remove_doc:
|
2711
|
+
return rb_id2sym(rb_intern("remove_doc"));
|
2712
|
+
|
2748
2713
|
case couchbase::protocol::subdoc_opcode::replace_body_with_xattr:
|
2749
2714
|
return rb_id2sym(rb_intern("replace_body_with_xattr"));
|
2750
2715
|
}
|
@@ -2752,7 +2717,7 @@ cb__map_subdoc_opcode(couchbase::protocol::subdoc_opcode opcode)
|
|
2752
2717
|
}
|
2753
2718
|
|
2754
2719
|
static void
|
2755
|
-
|
2720
|
+
cb_map_subdoc_status(couchbase::protocol::status status, std::size_t index, const std::string& path, VALUE entry)
|
2756
2721
|
{
|
2757
2722
|
switch (status) {
|
2758
2723
|
case couchbase::protocol::status::success:
|
@@ -2867,7 +2832,7 @@ cb__map_subdoc_status(couchbase::protocol::status status, std::size_t index, con
|
|
2867
2832
|
rb_hash_aset(
|
2868
2833
|
entry,
|
2869
2834
|
rb_id2sym(rb_intern("error")),
|
2870
|
-
rb_exc_new_cstr(
|
2835
|
+
rb_exc_new_cstr(eBackendError,
|
2871
2836
|
fmt::format("unknown subdocument error status={}, index={}, path={}", status, index, path).c_str()));
|
2872
2837
|
return;
|
2873
2838
|
}
|
@@ -2904,11 +2869,11 @@ cb_Backend_document_lookup_in(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
2904
2869
|
doc_id.key.assign(RSTRING_PTR(id), static_cast<size_t>(RSTRING_LEN(id)));
|
2905
2870
|
|
2906
2871
|
couchbase::operations::lookup_in_request req{ doc_id };
|
2907
|
-
exc =
|
2872
|
+
exc = cb_extract_timeout(req, options);
|
2908
2873
|
if (!NIL_P(exc)) {
|
2909
2874
|
break;
|
2910
2875
|
}
|
2911
|
-
exc =
|
2876
|
+
exc = cb_extract_option_bool(req.access_deleted, options, "access_deleted");
|
2912
2877
|
if (!NIL_P(exc)) {
|
2913
2878
|
break;
|
2914
2879
|
}
|
@@ -2945,9 +2910,9 @@ cb_Backend_document_lookup_in(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
2945
2910
|
auto barrier = std::make_shared<std::promise<couchbase::operations::lookup_in_response>>();
|
2946
2911
|
auto f = barrier->get_future();
|
2947
2912
|
backend->cluster->execute(req, [barrier](couchbase::operations::lookup_in_response&& resp) mutable { barrier->set_value(resp); });
|
2948
|
-
auto resp = f
|
2913
|
+
auto resp = cb_wait_for_future(f);
|
2949
2914
|
if (resp.ctx.ec) {
|
2950
|
-
exc =
|
2915
|
+
exc = cb_map_error_code(resp.ctx, "unable fetch");
|
2951
2916
|
break;
|
2952
2917
|
}
|
2953
2918
|
|
@@ -2962,17 +2927,13 @@ cb_Backend_document_lookup_in(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
2962
2927
|
VALUE entry = rb_hash_new();
|
2963
2928
|
rb_hash_aset(entry, rb_id2sym(rb_intern("index")), ULL2NUM(i));
|
2964
2929
|
rb_hash_aset(entry, rb_id2sym(rb_intern("exists")), resp.fields[i].exists ? Qtrue : Qfalse);
|
2965
|
-
rb_hash_aset(entry,
|
2966
|
-
|
2967
|
-
|
2968
|
-
rb_hash_aset(entry,
|
2969
|
-
rb_id2sym(rb_intern("value")),
|
2970
|
-
rb_external_str_new(resp.fields[i].value.data(), static_cast<long>(resp.fields[i].value.size())));
|
2971
|
-
cb__map_subdoc_status(resp.fields[i].status, i, resp.fields[i].path, entry);
|
2930
|
+
rb_hash_aset(entry, rb_id2sym(rb_intern("path")), cb_str_new(resp.fields[i].path));
|
2931
|
+
rb_hash_aset(entry, rb_id2sym(rb_intern("value")), cb_str_new(resp.fields[i].value));
|
2932
|
+
cb_map_subdoc_status(resp.fields[i].status, i, resp.fields[i].path, entry);
|
2972
2933
|
if (resp.fields[i].opcode == couchbase::protocol::subdoc_opcode::get && resp.fields[i].path.empty()) {
|
2973
2934
|
rb_hash_aset(entry, rb_id2sym(rb_intern("type")), rb_id2sym(rb_intern("get_doc")));
|
2974
2935
|
} else {
|
2975
|
-
rb_hash_aset(entry, rb_id2sym(rb_intern("type")),
|
2936
|
+
rb_hash_aset(entry, rb_id2sym(rb_intern("type")), cb_map_subdoc_opcode(resp.fields[i].opcode));
|
2976
2937
|
}
|
2977
2938
|
rb_ary_store(fields, static_cast<long>(i), entry);
|
2978
2939
|
}
|
@@ -3013,16 +2974,16 @@ cb_Backend_document_mutate_in(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
3013
2974
|
doc_id.key.assign(RSTRING_PTR(id), static_cast<size_t>(RSTRING_LEN(id)));
|
3014
2975
|
|
3015
2976
|
couchbase::operations::mutate_in_request req{ doc_id };
|
3016
|
-
exc =
|
2977
|
+
exc = cb_extract_timeout(req, options);
|
3017
2978
|
if (!NIL_P(exc)) {
|
3018
2979
|
break;
|
3019
2980
|
}
|
3020
|
-
exc =
|
2981
|
+
exc = cb_extract_durability(req, options);
|
3021
2982
|
if (!NIL_P(exc)) {
|
3022
2983
|
break;
|
3023
2984
|
}
|
3024
2985
|
VALUE cas = Qnil;
|
3025
|
-
exc =
|
2986
|
+
exc = cb_extract_option_bignum(cas, options, "cas");
|
3026
2987
|
if (!NIL_P(exc)) {
|
3027
2988
|
break;
|
3028
2989
|
}
|
@@ -3030,23 +2991,27 @@ cb_Backend_document_mutate_in(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
3030
2991
|
req.cas = NUM2ULL(cas);
|
3031
2992
|
}
|
3032
2993
|
VALUE expiry = Qnil;
|
3033
|
-
exc =
|
2994
|
+
exc = cb_extract_option_fixnum(expiry, options, "expiry");
|
3034
2995
|
if (!NIL_P(exc)) {
|
3035
2996
|
break;
|
3036
2997
|
}
|
3037
2998
|
if (!NIL_P(expiry)) {
|
3038
2999
|
req.expiry = FIX2UINT(expiry);
|
3039
3000
|
}
|
3040
|
-
exc =
|
3001
|
+
exc = cb_extract_option_bool(req.preserve_expiry, options, "preserve_expiry");
|
3041
3002
|
if (!NIL_P(exc)) {
|
3042
3003
|
break;
|
3043
3004
|
}
|
3044
|
-
exc =
|
3005
|
+
exc = cb_extract_option_bool(req.access_deleted, options, "access_deleted");
|
3006
|
+
if (!NIL_P(exc)) {
|
3007
|
+
break;
|
3008
|
+
}
|
3009
|
+
exc = cb_extract_option_bool(req.create_as_deleted, options, "create_as_deleted");
|
3045
3010
|
if (!NIL_P(exc)) {
|
3046
3011
|
break;
|
3047
3012
|
}
|
3048
3013
|
VALUE store_semantics = Qnil;
|
3049
|
-
exc =
|
3014
|
+
exc = cb_extract_option_symbol(store_semantics, options, "store_semantics");
|
3050
3015
|
if (!NIL_P(exc)) {
|
3051
3016
|
break;
|
3052
3017
|
}
|
@@ -3087,6 +3052,8 @@ cb_Backend_document_mutate_in(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
3087
3052
|
opcode = couchbase::protocol::subdoc_opcode::counter;
|
3088
3053
|
} else if (operation_id == rb_intern("set_doc")) {
|
3089
3054
|
opcode = couchbase::protocol::subdoc_opcode::set_doc;
|
3055
|
+
} else if (operation_id == rb_intern("remove_doc")) {
|
3056
|
+
opcode = couchbase::protocol::subdoc_opcode::remove_doc;
|
3090
3057
|
} else {
|
3091
3058
|
exc =
|
3092
3059
|
rb_exc_new_str(eInvalidArgument, rb_sprintf("unsupported operation for subdocument mutation: %+" PRIsVALUE, operation));
|
@@ -3125,13 +3092,13 @@ cb_Backend_document_mutate_in(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
3125
3092
|
auto barrier = std::make_shared<std::promise<couchbase::operations::mutate_in_response>>();
|
3126
3093
|
auto f = barrier->get_future();
|
3127
3094
|
backend->cluster->execute(req, [barrier](couchbase::operations::mutate_in_response&& resp) mutable { barrier->set_value(resp); });
|
3128
|
-
auto resp = f
|
3095
|
+
auto resp = cb_wait_for_future(f);
|
3129
3096
|
if (resp.ctx.ec) {
|
3130
|
-
exc =
|
3097
|
+
exc = cb_map_error_code(resp.ctx, "unable to mutate");
|
3131
3098
|
break;
|
3132
3099
|
}
|
3133
3100
|
|
3134
|
-
VALUE res =
|
3101
|
+
VALUE res = cb_extract_mutation_result(resp);
|
3135
3102
|
if (resp.first_error_index) {
|
3136
3103
|
rb_hash_aset(res, rb_id2sym(rb_intern("first_error_index")), ULL2NUM(resp.first_error_index.value()));
|
3137
3104
|
}
|
@@ -3143,9 +3110,7 @@ cb_Backend_document_mutate_in(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
3143
3110
|
for (size_t i = 0; i < resp.fields.size(); ++i) {
|
3144
3111
|
VALUE entry = rb_hash_new();
|
3145
3112
|
rb_hash_aset(entry, rb_id2sym(rb_intern("index")), ULL2NUM(i));
|
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())));
|
3113
|
+
rb_hash_aset(entry, rb_id2sym(rb_intern("path")), cb_str_new(resp.fields[i].path));
|
3149
3114
|
if (resp.fields[i].status == couchbase::protocol::status::success ||
|
3150
3115
|
resp.fields[i].status == couchbase::protocol::status::subdoc_success_deleted) {
|
3151
3116
|
if (resp.fields[i].opcode == couchbase::protocol::subdoc_opcode::counter) {
|
@@ -3153,13 +3118,11 @@ cb_Backend_document_mutate_in(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
3153
3118
|
rb_hash_aset(entry, rb_id2sym(rb_intern("value")), LL2NUM(std::stoll(resp.fields[i].value)));
|
3154
3119
|
}
|
3155
3120
|
} else {
|
3156
|
-
rb_hash_aset(entry,
|
3157
|
-
rb_id2sym(rb_intern("value")),
|
3158
|
-
rb_external_str_new(resp.fields[i].value.data(), static_cast<long>(resp.fields[i].value.size())));
|
3121
|
+
rb_hash_aset(entry, rb_id2sym(rb_intern("value")), cb_str_new(resp.fields[i].value));
|
3159
3122
|
}
|
3160
3123
|
}
|
3161
|
-
|
3162
|
-
rb_hash_aset(entry, rb_id2sym(rb_intern("type")),
|
3124
|
+
cb_map_subdoc_status(resp.fields[i].status, i, resp.fields[i].path, entry);
|
3125
|
+
rb_hash_aset(entry, rb_id2sym(rb_intern("type")), cb_map_subdoc_opcode(resp.fields[i].opcode));
|
3163
3126
|
rb_ary_store(fields, static_cast<long>(i), entry);
|
3164
3127
|
}
|
3165
3128
|
return res;
|
@@ -3169,7 +3132,7 @@ cb_Backend_document_mutate_in(VALUE self, VALUE bucket, VALUE collection, VALUE
|
|
3169
3132
|
}
|
3170
3133
|
|
3171
3134
|
static int
|
3172
|
-
|
3135
|
+
cb_for_each_named_param(VALUE key, VALUE value, VALUE arg)
|
3173
3136
|
{
|
3174
3137
|
auto* preq = reinterpret_cast<couchbase::operations::query_request*>(arg);
|
3175
3138
|
Check_Type(key, T_STRING);
|
@@ -3203,7 +3166,7 @@ cb_Backend_document_query(VALUE self, VALUE statement, VALUE options)
|
|
3203
3166
|
Check_Type(client_context_id, T_STRING);
|
3204
3167
|
req.client_context_id.assign(RSTRING_PTR(client_context_id), static_cast<size_t>(RSTRING_LEN(client_context_id)));
|
3205
3168
|
}
|
3206
|
-
exc =
|
3169
|
+
exc = cb_extract_timeout(req, options);
|
3207
3170
|
if (!NIL_P(exc)) {
|
3208
3171
|
break;
|
3209
3172
|
}
|
@@ -3286,7 +3249,7 @@ cb_Backend_document_query(VALUE self, VALUE statement, VALUE options)
|
|
3286
3249
|
VALUE named_params = rb_hash_aref(options, rb_id2sym(rb_intern("named_parameters")));
|
3287
3250
|
if (!NIL_P(named_params)) {
|
3288
3251
|
Check_Type(named_params, T_HASH);
|
3289
|
-
rb_hash_foreach(named_params, INT_FUNC(
|
3252
|
+
rb_hash_foreach(named_params, INT_FUNC(cb_for_each_named_param), reinterpret_cast<VALUE>(&req));
|
3290
3253
|
}
|
3291
3254
|
VALUE scan_consistency = rb_hash_aref(options, rb_id2sym(rb_intern("scan_consistency")));
|
3292
3255
|
if (!NIL_P(scan_consistency)) {
|
@@ -3337,19 +3300,19 @@ cb_Backend_document_query(VALUE self, VALUE statement, VALUE options)
|
|
3337
3300
|
VALUE raw_params = rb_hash_aref(options, rb_id2sym(rb_intern("raw_parameters")));
|
3338
3301
|
if (!NIL_P(raw_params)) {
|
3339
3302
|
Check_Type(raw_params, T_HASH);
|
3340
|
-
rb_hash_foreach(raw_params, INT_FUNC(
|
3303
|
+
rb_hash_foreach(raw_params, INT_FUNC(cb_for_each_named_param), reinterpret_cast<VALUE>(&req));
|
3341
3304
|
}
|
3342
3305
|
|
3343
3306
|
auto barrier = std::make_shared<std::promise<couchbase::operations::query_response>>();
|
3344
3307
|
auto f = barrier->get_future();
|
3345
3308
|
backend->cluster->execute_http(req, [barrier](couchbase::operations::query_response&& resp) mutable { barrier->set_value(resp); });
|
3346
|
-
auto resp = f
|
3309
|
+
auto resp = cb_wait_for_future(f);
|
3347
3310
|
if (resp.ctx.ec) {
|
3348
3311
|
if (resp.payload.meta_data.errors && !resp.payload.meta_data.errors->empty()) {
|
3349
3312
|
const auto& first_error = resp.payload.meta_data.errors->front();
|
3350
|
-
exc =
|
3313
|
+
exc = cb_map_error_code(resp.ctx, fmt::format(R"(unable to query ({}: {}))", first_error.code, first_error.message));
|
3351
3314
|
} else {
|
3352
|
-
exc =
|
3315
|
+
exc = cb_map_error_code(resp.ctx, "unable to query");
|
3353
3316
|
}
|
3354
3317
|
break;
|
3355
3318
|
}
|
@@ -3357,46 +3320,28 @@ cb_Backend_document_query(VALUE self, VALUE statement, VALUE options)
|
|
3357
3320
|
VALUE rows = rb_ary_new_capa(static_cast<long>(resp.payload.rows.size()));
|
3358
3321
|
rb_hash_aset(res, rb_id2sym(rb_intern("rows")), rows);
|
3359
3322
|
for (auto& row : resp.payload.rows) {
|
3360
|
-
rb_ary_push(rows,
|
3323
|
+
rb_ary_push(rows, cb_str_new(row));
|
3361
3324
|
}
|
3362
3325
|
VALUE meta = rb_hash_new();
|
3363
3326
|
rb_hash_aset(res, rb_id2sym(rb_intern("meta")), meta);
|
3364
3327
|
rb_hash_aset(meta,
|
3365
3328
|
rb_id2sym(rb_intern("status")),
|
3366
3329
|
rb_id2sym(rb_intern2(resp.payload.meta_data.status.data(), static_cast<long>(resp.payload.meta_data.status.size()))));
|
3367
|
-
rb_hash_aset(
|
3368
|
-
|
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())));
|
3330
|
+
rb_hash_aset(meta, rb_id2sym(rb_intern("request_id")), cb_str_new(resp.payload.meta_data.request_id));
|
3331
|
+
rb_hash_aset(meta, rb_id2sym(rb_intern("client_context_id")), cb_str_new(resp.payload.meta_data.client_context_id));
|
3375
3332
|
if (resp.payload.meta_data.signature) {
|
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())));
|
3333
|
+
rb_hash_aset(meta, rb_id2sym(rb_intern("signature")), cb_str_new(resp.payload.meta_data.signature.value()));
|
3380
3334
|
}
|
3381
3335
|
if (resp.payload.meta_data.profile) {
|
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())));
|
3336
|
+
rb_hash_aset(meta, rb_id2sym(rb_intern("profile")), cb_str_new(resp.payload.meta_data.profile.value()));
|
3386
3337
|
}
|
3387
3338
|
metrics = rb_hash_new();
|
3388
3339
|
rb_hash_aset(meta, rb_id2sym(rb_intern("metrics")), metrics);
|
3389
3340
|
if (!resp.payload.meta_data.metrics.elapsed_time.empty()) {
|
3390
|
-
rb_hash_aset(metrics,
|
3391
|
-
rb_id2sym(rb_intern("elapsed_time")),
|
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())));
|
3341
|
+
rb_hash_aset(metrics, rb_id2sym(rb_intern("elapsed_time")), cb_str_new(resp.payload.meta_data.metrics.elapsed_time));
|
3394
3342
|
}
|
3395
3343
|
if (!resp.payload.meta_data.metrics.execution_time.empty()) {
|
3396
|
-
rb_hash_aset(metrics,
|
3397
|
-
rb_id2sym(rb_intern("execution_time")),
|
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())));
|
3344
|
+
rb_hash_aset(metrics, rb_id2sym(rb_intern("execution_time")), cb_str_new(resp.payload.meta_data.metrics.execution_time));
|
3400
3345
|
}
|
3401
3346
|
rb_hash_aset(metrics, rb_id2sym(rb_intern("result_count")), ULL2NUM(resp.payload.meta_data.metrics.result_count));
|
3402
3347
|
rb_hash_aset(metrics, rb_id2sym(rb_intern("result_size")), ULL2NUM(resp.payload.meta_data.metrics.result_size));
|
@@ -3420,7 +3365,7 @@ cb_Backend_document_query(VALUE self, VALUE statement, VALUE options)
|
|
3420
3365
|
}
|
3421
3366
|
|
3422
3367
|
static VALUE
|
3423
|
-
|
3368
|
+
cb_generate_bucket_settings(VALUE bucket, couchbase::operations::bucket_settings& entry, bool is_create)
|
3424
3369
|
{
|
3425
3370
|
{
|
3426
3371
|
VALUE bucket_type = rb_hash_aref(bucket, rb_id2sym(rb_intern("bucket_type")));
|
@@ -3586,11 +3531,11 @@ cb_Backend_bucket_create(VALUE self, VALUE bucket_settings, VALUE timeout)
|
|
3586
3531
|
VALUE exc = Qnil;
|
3587
3532
|
do {
|
3588
3533
|
couchbase::operations::bucket_create_request req{};
|
3589
|
-
exc =
|
3534
|
+
exc = cb_extract_timeout(req, timeout);
|
3590
3535
|
if (!NIL_P(exc)) {
|
3591
3536
|
break;
|
3592
3537
|
}
|
3593
|
-
exc =
|
3538
|
+
exc = cb_generate_bucket_settings(bucket_settings, req.bucket, true);
|
3594
3539
|
if (!NIL_P(exc)) {
|
3595
3540
|
break;
|
3596
3541
|
}
|
@@ -3598,10 +3543,10 @@ cb_Backend_bucket_create(VALUE self, VALUE bucket_settings, VALUE timeout)
|
|
3598
3543
|
auto f = barrier->get_future();
|
3599
3544
|
backend->cluster->execute_http(
|
3600
3545
|
req, [barrier](couchbase::operations::bucket_create_response&& resp) mutable { barrier->set_value(resp); });
|
3601
|
-
auto resp = f
|
3546
|
+
auto resp = cb_wait_for_future(f);
|
3602
3547
|
if (resp.ctx.ec) {
|
3603
|
-
exc =
|
3604
|
-
|
3548
|
+
exc = cb_map_error_code(resp.ctx,
|
3549
|
+
fmt::format("unable to create bucket \"{}\" on the cluster ({})", req.bucket.name, resp.error_message));
|
3605
3550
|
break;
|
3606
3551
|
}
|
3607
3552
|
|
@@ -3626,11 +3571,11 @@ cb_Backend_bucket_update(VALUE self, VALUE bucket_settings, VALUE timeout)
|
|
3626
3571
|
VALUE exc = Qnil;
|
3627
3572
|
do {
|
3628
3573
|
couchbase::operations::bucket_update_request req{};
|
3629
|
-
exc =
|
3574
|
+
exc = cb_extract_timeout(req, timeout);
|
3630
3575
|
if (!NIL_P(exc)) {
|
3631
3576
|
break;
|
3632
3577
|
}
|
3633
|
-
exc =
|
3578
|
+
exc = cb_generate_bucket_settings(bucket_settings, req.bucket, false);
|
3634
3579
|
if (!NIL_P(exc)) {
|
3635
3580
|
break;
|
3636
3581
|
}
|
@@ -3638,10 +3583,10 @@ cb_Backend_bucket_update(VALUE self, VALUE bucket_settings, VALUE timeout)
|
|
3638
3583
|
auto f = barrier->get_future();
|
3639
3584
|
backend->cluster->execute_http(
|
3640
3585
|
req, [barrier](couchbase::operations::bucket_update_response&& resp) mutable { barrier->set_value(resp); });
|
3641
|
-
auto resp = f
|
3586
|
+
auto resp = cb_wait_for_future(f);
|
3642
3587
|
if (resp.ctx.ec) {
|
3643
|
-
exc =
|
3644
|
-
|
3588
|
+
exc = cb_map_error_code(resp.ctx,
|
3589
|
+
fmt::format("unable to update bucket \"{}\" on the cluster ({})", req.bucket.name, resp.error_message));
|
3645
3590
|
break;
|
3646
3591
|
}
|
3647
3592
|
return Qtrue;
|
@@ -3666,7 +3611,7 @@ cb_Backend_bucket_drop(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
3666
3611
|
VALUE exc = Qnil;
|
3667
3612
|
do {
|
3668
3613
|
couchbase::operations::bucket_drop_request req{};
|
3669
|
-
exc =
|
3614
|
+
exc = cb_extract_timeout(req, timeout);
|
3670
3615
|
if (!NIL_P(exc)) {
|
3671
3616
|
break;
|
3672
3617
|
}
|
@@ -3675,9 +3620,9 @@ cb_Backend_bucket_drop(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
3675
3620
|
auto f = barrier->get_future();
|
3676
3621
|
backend->cluster->execute_http(req,
|
3677
3622
|
[barrier](couchbase::operations::bucket_drop_response&& resp) mutable { barrier->set_value(resp); });
|
3678
|
-
auto resp = f
|
3623
|
+
auto resp = cb_wait_for_future(f);
|
3679
3624
|
if (resp.ctx.ec) {
|
3680
|
-
exc =
|
3625
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to remove bucket \"{}\" on the cluster", req.name));
|
3681
3626
|
break;
|
3682
3627
|
}
|
3683
3628
|
return Qtrue;
|
@@ -3702,7 +3647,7 @@ cb_Backend_bucket_flush(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
3702
3647
|
VALUE exc = Qnil;
|
3703
3648
|
do {
|
3704
3649
|
couchbase::operations::bucket_flush_request req{};
|
3705
|
-
exc =
|
3650
|
+
exc = cb_extract_timeout(req, timeout);
|
3706
3651
|
if (!NIL_P(exc)) {
|
3707
3652
|
break;
|
3708
3653
|
}
|
@@ -3711,9 +3656,9 @@ cb_Backend_bucket_flush(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
3711
3656
|
auto f = barrier->get_future();
|
3712
3657
|
backend->cluster->execute_http(
|
3713
3658
|
req, [barrier](couchbase::operations::bucket_flush_response&& resp) mutable { barrier->set_value(resp); });
|
3714
|
-
auto resp = f
|
3659
|
+
auto resp = cb_wait_for_future(f);
|
3715
3660
|
if (resp.ctx.ec) {
|
3716
|
-
exc =
|
3661
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to flush bucket \"{}\" on the cluster", req.name));
|
3717
3662
|
break;
|
3718
3663
|
}
|
3719
3664
|
|
@@ -3724,7 +3669,7 @@ cb_Backend_bucket_flush(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
3724
3669
|
}
|
3725
3670
|
|
3726
3671
|
static void
|
3727
|
-
|
3672
|
+
cb_extract_bucket_settings(const couchbase::operations::bucket_settings& entry, VALUE bucket)
|
3728
3673
|
{
|
3729
3674
|
switch (entry.bucket_type) {
|
3730
3675
|
case couchbase::operations::bucket_settings::bucket_type::couchbase:
|
@@ -3740,8 +3685,8 @@ cb__extract_bucket_settings(const couchbase::operations::bucket_settings& entry,
|
|
3740
3685
|
rb_hash_aset(bucket, rb_id2sym(rb_intern("bucket_type")), Qnil);
|
3741
3686
|
break;
|
3742
3687
|
}
|
3743
|
-
rb_hash_aset(bucket, rb_id2sym(rb_intern("name")),
|
3744
|
-
rb_hash_aset(bucket, rb_id2sym(rb_intern("uuid")),
|
3688
|
+
rb_hash_aset(bucket, rb_id2sym(rb_intern("name")), cb_str_new(entry.name));
|
3689
|
+
rb_hash_aset(bucket, rb_id2sym(rb_intern("uuid")), cb_str_new(entry.uuid));
|
3745
3690
|
rb_hash_aset(bucket, rb_id2sym(rb_intern("ram_quota_mb")), ULL2NUM(entry.ram_quota_mb));
|
3746
3691
|
rb_hash_aset(bucket, rb_id2sym(rb_intern("max_expiry")), ULONG2NUM(entry.max_expiry));
|
3747
3692
|
switch (entry.compression_mode) {
|
@@ -3808,15 +3753,15 @@ cb__extract_bucket_settings(const couchbase::operations::bucket_settings& entry,
|
|
3808
3753
|
}
|
3809
3754
|
VALUE capabilities = rb_ary_new_capa(static_cast<long>(entry.capabilities.size()));
|
3810
3755
|
for (const auto& capa : entry.capabilities) {
|
3811
|
-
rb_ary_push(capabilities,
|
3756
|
+
rb_ary_push(capabilities, cb_str_new(capa));
|
3812
3757
|
}
|
3813
3758
|
rb_hash_aset(bucket, rb_id2sym(rb_intern("capabilities")), capabilities);
|
3814
3759
|
VALUE nodes = rb_ary_new_capa(static_cast<long>(entry.nodes.size()));
|
3815
3760
|
for (const auto& n : entry.nodes) {
|
3816
3761
|
VALUE node = rb_hash_new();
|
3817
|
-
rb_hash_aset(node, rb_id2sym(rb_intern("status")),
|
3818
|
-
rb_hash_aset(node, rb_id2sym(rb_intern("hostname")),
|
3819
|
-
rb_hash_aset(node, rb_id2sym(rb_intern("version")),
|
3762
|
+
rb_hash_aset(node, rb_id2sym(rb_intern("status")), cb_str_new(n.status));
|
3763
|
+
rb_hash_aset(node, rb_id2sym(rb_intern("hostname")), cb_str_new(n.hostname));
|
3764
|
+
rb_hash_aset(node, rb_id2sym(rb_intern("version")), cb_str_new(n.version));
|
3820
3765
|
rb_ary_push(nodes, node);
|
3821
3766
|
}
|
3822
3767
|
rb_hash_aset(bucket, rb_id2sym(rb_intern("nodes")), nodes);
|
@@ -3836,7 +3781,7 @@ cb_Backend_bucket_get_all(VALUE self, VALUE timeout)
|
|
3836
3781
|
VALUE exc = Qnil;
|
3837
3782
|
do {
|
3838
3783
|
couchbase::operations::bucket_get_all_request req{};
|
3839
|
-
exc =
|
3784
|
+
exc = cb_extract_timeout(req, timeout);
|
3840
3785
|
if (!NIL_P(exc)) {
|
3841
3786
|
break;
|
3842
3787
|
}
|
@@ -3844,16 +3789,16 @@ cb_Backend_bucket_get_all(VALUE self, VALUE timeout)
|
|
3844
3789
|
auto f = barrier->get_future();
|
3845
3790
|
backend->cluster->execute_http(
|
3846
3791
|
req, [barrier](couchbase::operations::bucket_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
3847
|
-
auto resp = f
|
3792
|
+
auto resp = cb_wait_for_future(f);
|
3848
3793
|
if (resp.ctx.ec) {
|
3849
|
-
exc =
|
3794
|
+
exc = cb_map_error_code(resp.ctx, "unable to get list of the buckets of the cluster");
|
3850
3795
|
break;
|
3851
3796
|
}
|
3852
3797
|
|
3853
3798
|
VALUE res = rb_ary_new_capa(static_cast<long>(resp.buckets.size()));
|
3854
3799
|
for (const auto& entry : resp.buckets) {
|
3855
3800
|
VALUE bucket = rb_hash_new();
|
3856
|
-
|
3801
|
+
cb_extract_bucket_settings(entry, bucket);
|
3857
3802
|
rb_ary_push(res, bucket);
|
3858
3803
|
}
|
3859
3804
|
|
@@ -3879,7 +3824,7 @@ cb_Backend_bucket_get(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
3879
3824
|
VALUE exc = Qnil;
|
3880
3825
|
do {
|
3881
3826
|
couchbase::operations::bucket_get_request req{};
|
3882
|
-
exc =
|
3827
|
+
exc = cb_extract_timeout(req, timeout);
|
3883
3828
|
if (!NIL_P(exc)) {
|
3884
3829
|
break;
|
3885
3830
|
}
|
@@ -3888,14 +3833,14 @@ cb_Backend_bucket_get(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
3888
3833
|
auto f = barrier->get_future();
|
3889
3834
|
backend->cluster->execute_http(req,
|
3890
3835
|
[barrier](couchbase::operations::bucket_get_response&& resp) mutable { barrier->set_value(resp); });
|
3891
|
-
auto resp = f
|
3836
|
+
auto resp = cb_wait_for_future(f);
|
3892
3837
|
if (resp.ctx.ec) {
|
3893
|
-
exc =
|
3838
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to locate bucket \"{}\" on the cluster", req.name));
|
3894
3839
|
break;
|
3895
3840
|
}
|
3896
3841
|
|
3897
3842
|
VALUE res = rb_hash_new();
|
3898
|
-
|
3843
|
+
cb_extract_bucket_settings(resp.bucket, res);
|
3899
3844
|
|
3900
3845
|
return res;
|
3901
3846
|
} while (false);
|
@@ -3904,26 +3849,19 @@ cb_Backend_bucket_get(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
3904
3849
|
}
|
3905
3850
|
|
3906
3851
|
static void
|
3907
|
-
|
3908
|
-
{
|
3909
|
-
rb_hash_aset(role, rb_id2sym(rb_intern("name")),
|
3910
|
-
rb_hash_aset(role,
|
3911
|
-
|
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())));
|
3852
|
+
cb_extract_role(const couchbase::operations::rbac::role_and_description& entry, VALUE role)
|
3853
|
+
{
|
3854
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("name")), cb_str_new(entry.name));
|
3855
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("display_name")), cb_str_new(entry.display_name));
|
3856
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("description")), cb_str_new(entry.description));
|
3916
3857
|
if (entry.bucket) {
|
3917
|
-
rb_hash_aset(
|
3918
|
-
role, rb_id2sym(rb_intern("bucket")), rb_external_str_new(entry.bucket->data(), static_cast<long>(entry.bucket->size())));
|
3858
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("bucket")), cb_str_new(entry.bucket.value()));
|
3919
3859
|
}
|
3920
3860
|
if (entry.scope) {
|
3921
|
-
rb_hash_aset(role, rb_id2sym(rb_intern("scope")),
|
3861
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("scope")), cb_str_new(entry.scope.value()));
|
3922
3862
|
}
|
3923
3863
|
if (entry.collection) {
|
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())));
|
3864
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("collection")), cb_str_new(entry.collection.value()));
|
3927
3865
|
}
|
3928
3866
|
}
|
3929
3867
|
|
@@ -3941,7 +3879,7 @@ cb_Backend_role_get_all(VALUE self, VALUE timeout)
|
|
3941
3879
|
VALUE exc = Qnil;
|
3942
3880
|
do {
|
3943
3881
|
couchbase::operations::role_get_all_request req{};
|
3944
|
-
exc =
|
3882
|
+
exc = cb_extract_timeout(req, timeout);
|
3945
3883
|
if (!NIL_P(exc)) {
|
3946
3884
|
break;
|
3947
3885
|
}
|
@@ -3949,16 +3887,16 @@ cb_Backend_role_get_all(VALUE self, VALUE timeout)
|
|
3949
3887
|
auto f = barrier->get_future();
|
3950
3888
|
backend->cluster->execute_http(
|
3951
3889
|
req, [barrier](couchbase::operations::role_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
3952
|
-
auto resp = f
|
3890
|
+
auto resp = cb_wait_for_future(f);
|
3953
3891
|
if (resp.ctx.ec) {
|
3954
|
-
exc =
|
3892
|
+
exc = cb_map_error_code(resp.ctx, "unable to fetch roles");
|
3955
3893
|
break;
|
3956
3894
|
}
|
3957
3895
|
|
3958
3896
|
VALUE res = rb_ary_new_capa(static_cast<long>(resp.roles.size()));
|
3959
3897
|
for (const auto& entry : resp.roles) {
|
3960
3898
|
VALUE role = rb_hash_new();
|
3961
|
-
|
3899
|
+
cb_extract_role(entry, role);
|
3962
3900
|
rb_ary_push(res, role);
|
3963
3901
|
}
|
3964
3902
|
return res;
|
@@ -3968,10 +3906,9 @@ cb_Backend_role_get_all(VALUE self, VALUE timeout)
|
|
3968
3906
|
}
|
3969
3907
|
|
3970
3908
|
static void
|
3971
|
-
|
3909
|
+
cb_extract_user(const couchbase::operations::rbac::user_and_metadata& entry, VALUE user)
|
3972
3910
|
{
|
3973
|
-
rb_hash_aset(
|
3974
|
-
user, rb_id2sym(rb_intern("username")), rb_external_str_new(entry.username.data(), static_cast<long>(entry.username.size())));
|
3911
|
+
rb_hash_aset(user, rb_id2sym(rb_intern("username")), cb_str_new(entry.username));
|
3975
3912
|
switch (entry.domain) {
|
3976
3913
|
case couchbase::operations::rbac::auth_domain::local:
|
3977
3914
|
rb_hash_aset(user, rb_id2sym(rb_intern("domain")), rb_id2sym(rb_intern("local")));
|
@@ -3984,47 +3921,39 @@ cb__extract_user(const couchbase::operations::rbac::user_and_metadata& entry, VA
|
|
3984
3921
|
}
|
3985
3922
|
VALUE external_groups = rb_ary_new_capa(static_cast<long>(entry.external_groups.size()));
|
3986
3923
|
for (const auto& group : entry.external_groups) {
|
3987
|
-
rb_ary_push(external_groups,
|
3924
|
+
rb_ary_push(external_groups, cb_str_new(group));
|
3988
3925
|
}
|
3989
3926
|
rb_hash_aset(user, rb_id2sym(rb_intern("external_groups")), external_groups);
|
3990
3927
|
VALUE groups = rb_ary_new_capa(static_cast<long>(entry.groups.size()));
|
3991
3928
|
for (const auto& group : entry.groups) {
|
3992
|
-
rb_ary_push(groups,
|
3929
|
+
rb_ary_push(groups, cb_str_new(group));
|
3993
3930
|
}
|
3994
3931
|
rb_hash_aset(user, rb_id2sym(rb_intern("groups")), groups);
|
3995
3932
|
if (entry.display_name) {
|
3996
|
-
rb_hash_aset(user,
|
3997
|
-
rb_id2sym(rb_intern("display_name")),
|
3998
|
-
rb_external_str_new(entry.display_name->data(), static_cast<long>(entry.display_name->size())));
|
3933
|
+
rb_hash_aset(user, rb_id2sym(rb_intern("display_name")), cb_str_new(entry.display_name.value()));
|
3999
3934
|
}
|
4000
3935
|
if (entry.password_changed) {
|
4001
|
-
rb_hash_aset(user,
|
4002
|
-
rb_id2sym(rb_intern("password_changed")),
|
4003
|
-
rb_external_str_new(entry.password_changed->data(), static_cast<long>(entry.password_changed->size())));
|
3936
|
+
rb_hash_aset(user, rb_id2sym(rb_intern("password_changed")), cb_str_new(entry.password_changed.value()));
|
4004
3937
|
}
|
4005
3938
|
VALUE effective_roles = rb_ary_new_capa(static_cast<long>(entry.effective_roles.size()));
|
4006
3939
|
for (const auto& er : entry.effective_roles) {
|
4007
3940
|
VALUE role = rb_hash_new();
|
4008
|
-
rb_hash_aset(role, rb_id2sym(rb_intern("name")),
|
3941
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("name")), cb_str_new(er.name));
|
4009
3942
|
if (er.bucket) {
|
4010
|
-
rb_hash_aset(
|
4011
|
-
role, rb_id2sym(rb_intern("bucket")), rb_external_str_new(er.bucket->data(), static_cast<long>(er.bucket->size())));
|
3943
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("bucket")), cb_str_new(er.bucket.value()));
|
4012
3944
|
}
|
4013
3945
|
if (er.scope) {
|
4014
|
-
rb_hash_aset(role, rb_id2sym(rb_intern("scope")),
|
3946
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("scope")), cb_str_new(er.scope.value()));
|
4015
3947
|
}
|
4016
3948
|
if (er.collection) {
|
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())));
|
3949
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("collection")), cb_str_new(er.collection.value()));
|
4020
3950
|
}
|
4021
3951
|
VALUE origins = rb_ary_new_capa(static_cast<long>(er.origins.size()));
|
4022
3952
|
for (const auto& orig : er.origins) {
|
4023
3953
|
VALUE origin = rb_hash_new();
|
4024
|
-
rb_hash_aset(origin, rb_id2sym(rb_intern("type")),
|
3954
|
+
rb_hash_aset(origin, rb_id2sym(rb_intern("type")), cb_str_new(orig.type));
|
4025
3955
|
if (orig.name) {
|
4026
|
-
rb_hash_aset(
|
4027
|
-
origin, rb_id2sym(rb_intern("name")), rb_external_str_new(orig.name->data(), static_cast<long>(orig.name->size())));
|
3956
|
+
rb_hash_aset(origin, rb_id2sym(rb_intern("name")), cb_str_new(orig.name.value()));
|
4028
3957
|
}
|
4029
3958
|
rb_ary_push(origins, origin);
|
4030
3959
|
}
|
@@ -4036,18 +3965,15 @@ cb__extract_user(const couchbase::operations::rbac::user_and_metadata& entry, VA
|
|
4036
3965
|
VALUE roles = rb_ary_new_capa(static_cast<long>(entry.roles.size()));
|
4037
3966
|
for (const auto& er : entry.roles) {
|
4038
3967
|
VALUE role = rb_hash_new();
|
4039
|
-
rb_hash_aset(role, rb_id2sym(rb_intern("name")),
|
3968
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("name")), cb_str_new(er.name));
|
4040
3969
|
if (er.bucket) {
|
4041
|
-
rb_hash_aset(
|
4042
|
-
role, rb_id2sym(rb_intern("bucket")), rb_external_str_new(er.bucket->data(), static_cast<long>(er.bucket->size())));
|
3970
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("bucket")), cb_str_new(er.bucket.value()));
|
4043
3971
|
}
|
4044
3972
|
if (er.scope) {
|
4045
|
-
rb_hash_aset(role, rb_id2sym(rb_intern("scope")),
|
3973
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("scope")), cb_str_new(er.scope.value()));
|
4046
3974
|
}
|
4047
3975
|
if (er.collection) {
|
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())));
|
3976
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("collection")), cb_str_new(er.collection.value()));
|
4051
3977
|
}
|
4052
3978
|
rb_ary_push(roles, role);
|
4053
3979
|
}
|
@@ -4070,7 +3996,7 @@ cb_Backend_user_get_all(VALUE self, VALUE domain, VALUE timeout)
|
|
4070
3996
|
VALUE exc = Qnil;
|
4071
3997
|
do {
|
4072
3998
|
couchbase::operations::user_get_all_request req{};
|
4073
|
-
exc =
|
3999
|
+
exc = cb_extract_timeout(req, timeout);
|
4074
4000
|
if (!NIL_P(exc)) {
|
4075
4001
|
break;
|
4076
4002
|
}
|
@@ -4086,16 +4012,16 @@ cb_Backend_user_get_all(VALUE self, VALUE domain, VALUE timeout)
|
|
4086
4012
|
auto f = barrier->get_future();
|
4087
4013
|
backend->cluster->execute_http(
|
4088
4014
|
req, [barrier](couchbase::operations::user_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
4089
|
-
auto resp = f
|
4015
|
+
auto resp = cb_wait_for_future(f);
|
4090
4016
|
if (resp.ctx.ec) {
|
4091
|
-
exc =
|
4017
|
+
exc = cb_map_error_code(resp.ctx, "unable to fetch users");
|
4092
4018
|
break;
|
4093
4019
|
}
|
4094
4020
|
|
4095
4021
|
VALUE res = rb_ary_new_capa(static_cast<long>(resp.users.size()));
|
4096
4022
|
for (const auto& entry : resp.users) {
|
4097
4023
|
VALUE user = rb_hash_new();
|
4098
|
-
|
4024
|
+
cb_extract_user(entry, user);
|
4099
4025
|
rb_ary_push(res, user);
|
4100
4026
|
}
|
4101
4027
|
return res;
|
@@ -4121,7 +4047,7 @@ cb_Backend_user_get(VALUE self, VALUE domain, VALUE username, VALUE timeout)
|
|
4121
4047
|
VALUE exc = Qnil;
|
4122
4048
|
do {
|
4123
4049
|
couchbase::operations::user_get_request req{};
|
4124
|
-
exc =
|
4050
|
+
exc = cb_extract_timeout(req, timeout);
|
4125
4051
|
if (!NIL_P(exc)) {
|
4126
4052
|
break;
|
4127
4053
|
}
|
@@ -4138,14 +4064,14 @@ cb_Backend_user_get(VALUE self, VALUE domain, VALUE username, VALUE timeout)
|
|
4138
4064
|
auto f = barrier->get_future();
|
4139
4065
|
backend->cluster->execute_http(req,
|
4140
4066
|
[barrier](couchbase::operations::user_get_response&& resp) mutable { barrier->set_value(resp); });
|
4141
|
-
auto resp = f
|
4067
|
+
auto resp = cb_wait_for_future(f);
|
4142
4068
|
if (resp.ctx.ec) {
|
4143
|
-
exc =
|
4069
|
+
exc = cb_map_error_code(resp.ctx, fmt::format(R"(unable to fetch user "{}")", req.username));
|
4144
4070
|
break;
|
4145
4071
|
}
|
4146
4072
|
|
4147
4073
|
VALUE res = rb_hash_new();
|
4148
|
-
|
4074
|
+
cb_extract_user(resp.user, res);
|
4149
4075
|
return res;
|
4150
4076
|
} while (false);
|
4151
4077
|
rb_exc_raise(exc);
|
@@ -4169,7 +4095,7 @@ cb_Backend_user_drop(VALUE self, VALUE domain, VALUE username, VALUE timeout)
|
|
4169
4095
|
VALUE exc = Qnil;
|
4170
4096
|
do {
|
4171
4097
|
couchbase::operations::user_drop_request req{};
|
4172
|
-
exc =
|
4098
|
+
exc = cb_extract_timeout(req, timeout);
|
4173
4099
|
if (!NIL_P(exc)) {
|
4174
4100
|
break;
|
4175
4101
|
}
|
@@ -4186,9 +4112,9 @@ cb_Backend_user_drop(VALUE self, VALUE domain, VALUE username, VALUE timeout)
|
|
4186
4112
|
auto f = barrier->get_future();
|
4187
4113
|
backend->cluster->execute_http(req,
|
4188
4114
|
[barrier](couchbase::operations::user_drop_response&& resp) mutable { barrier->set_value(resp); });
|
4189
|
-
auto resp = f
|
4115
|
+
auto resp = cb_wait_for_future(f);
|
4190
4116
|
if (resp.ctx.ec) {
|
4191
|
-
exc =
|
4117
|
+
exc = cb_map_error_code(resp.ctx, fmt::format(R"(unable to fetch user "{}")", req.username));
|
4192
4118
|
break;
|
4193
4119
|
}
|
4194
4120
|
|
@@ -4215,7 +4141,7 @@ cb_Backend_user_upsert(VALUE self, VALUE domain, VALUE user, VALUE timeout)
|
|
4215
4141
|
VALUE exc = Qnil;
|
4216
4142
|
do {
|
4217
4143
|
couchbase::operations::user_upsert_request req{};
|
4218
|
-
exc =
|
4144
|
+
exc = cb_extract_timeout(req, timeout);
|
4219
4145
|
if (!NIL_P(exc)) {
|
4220
4146
|
break;
|
4221
4147
|
}
|
@@ -4282,10 +4208,10 @@ cb_Backend_user_upsert(VALUE self, VALUE domain, VALUE user, VALUE timeout)
|
|
4282
4208
|
auto f = barrier->get_future();
|
4283
4209
|
backend->cluster->execute_http(req,
|
4284
4210
|
[barrier](couchbase::operations::user_upsert_response&& resp) mutable { barrier->set_value(resp); });
|
4285
|
-
auto resp = f
|
4211
|
+
auto resp = cb_wait_for_future(f);
|
4286
4212
|
if (resp.ctx.ec) {
|
4287
|
-
exc =
|
4288
|
-
|
4213
|
+
exc = cb_map_error_code(resp.ctx,
|
4214
|
+
fmt::format(R"(unable to upsert user "{}" ({}))", req.user.username, fmt::join(resp.errors, ", ")));
|
4289
4215
|
break;
|
4290
4216
|
}
|
4291
4217
|
|
@@ -4296,34 +4222,27 @@ cb_Backend_user_upsert(VALUE self, VALUE domain, VALUE user, VALUE timeout)
|
|
4296
4222
|
}
|
4297
4223
|
|
4298
4224
|
static void
|
4299
|
-
|
4225
|
+
cb_extract_group(const couchbase::operations::rbac::group& entry, VALUE group)
|
4300
4226
|
{
|
4301
|
-
rb_hash_aset(group, rb_id2sym(rb_intern("name")),
|
4227
|
+
rb_hash_aset(group, rb_id2sym(rb_intern("name")), cb_str_new(entry.name));
|
4302
4228
|
if (entry.description) {
|
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())));
|
4229
|
+
rb_hash_aset(group, rb_id2sym(rb_intern("description")), cb_str_new(entry.description.value()));
|
4306
4230
|
}
|
4307
4231
|
if (entry.ldap_group_reference) {
|
4308
|
-
rb_hash_aset(group,
|
4309
|
-
rb_id2sym(rb_intern("ldap_group_reference")),
|
4310
|
-
rb_external_str_new(entry.ldap_group_reference->data(), static_cast<long>(entry.ldap_group_reference->size())));
|
4232
|
+
rb_hash_aset(group, rb_id2sym(rb_intern("ldap_group_reference")), cb_str_new(entry.ldap_group_reference.value()));
|
4311
4233
|
}
|
4312
4234
|
VALUE roles = rb_ary_new_capa(static_cast<long>(entry.roles.size()));
|
4313
4235
|
for (const auto& er : entry.roles) {
|
4314
4236
|
VALUE role = rb_hash_new();
|
4315
|
-
rb_hash_aset(role, rb_id2sym(rb_intern("name")),
|
4237
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("name")), cb_str_new(er.name));
|
4316
4238
|
if (er.bucket) {
|
4317
|
-
rb_hash_aset(
|
4318
|
-
role, rb_id2sym(rb_intern("bucket")), rb_external_str_new(er.bucket->data(), static_cast<long>(er.bucket->size())));
|
4239
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("bucket")), cb_str_new(er.bucket.value()));
|
4319
4240
|
}
|
4320
4241
|
if (er.scope) {
|
4321
|
-
rb_hash_aset(role, rb_id2sym(rb_intern("scope")),
|
4242
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("scope")), cb_str_new(er.scope.value()));
|
4322
4243
|
}
|
4323
4244
|
if (er.collection) {
|
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())));
|
4245
|
+
rb_hash_aset(role, rb_id2sym(rb_intern("collection")), cb_str_new(er.collection.value()));
|
4327
4246
|
}
|
4328
4247
|
rb_ary_push(roles, role);
|
4329
4248
|
}
|
@@ -4344,7 +4263,7 @@ cb_Backend_group_get_all(VALUE self, VALUE timeout)
|
|
4344
4263
|
VALUE exc = Qnil;
|
4345
4264
|
do {
|
4346
4265
|
couchbase::operations::group_get_all_request req{};
|
4347
|
-
exc =
|
4266
|
+
exc = cb_extract_timeout(req, timeout);
|
4348
4267
|
if (!NIL_P(exc)) {
|
4349
4268
|
break;
|
4350
4269
|
}
|
@@ -4352,16 +4271,16 @@ cb_Backend_group_get_all(VALUE self, VALUE timeout)
|
|
4352
4271
|
auto f = barrier->get_future();
|
4353
4272
|
backend->cluster->execute_http(
|
4354
4273
|
req, [barrier](couchbase::operations::group_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
4355
|
-
auto resp = f
|
4274
|
+
auto resp = cb_wait_for_future(f);
|
4356
4275
|
if (resp.ctx.ec) {
|
4357
|
-
exc =
|
4276
|
+
exc = cb_map_error_code(resp.ctx, "unable to fetch groups");
|
4358
4277
|
break;
|
4359
4278
|
}
|
4360
4279
|
|
4361
4280
|
VALUE res = rb_ary_new_capa(static_cast<long>(resp.groups.size()));
|
4362
4281
|
for (const auto& entry : resp.groups) {
|
4363
4282
|
VALUE group = rb_hash_new();
|
4364
|
-
|
4283
|
+
cb_extract_group(entry, group);
|
4365
4284
|
rb_ary_push(res, group);
|
4366
4285
|
}
|
4367
4286
|
return res;
|
@@ -4386,7 +4305,7 @@ cb_Backend_group_get(VALUE self, VALUE name, VALUE timeout)
|
|
4386
4305
|
VALUE exc = Qnil;
|
4387
4306
|
do {
|
4388
4307
|
couchbase::operations::group_get_request req{};
|
4389
|
-
exc =
|
4308
|
+
exc = cb_extract_timeout(req, timeout);
|
4390
4309
|
if (!NIL_P(exc)) {
|
4391
4310
|
break;
|
4392
4311
|
}
|
@@ -4395,14 +4314,14 @@ cb_Backend_group_get(VALUE self, VALUE name, VALUE timeout)
|
|
4395
4314
|
auto f = barrier->get_future();
|
4396
4315
|
backend->cluster->execute_http(req,
|
4397
4316
|
[barrier](couchbase::operations::group_get_response&& resp) mutable { barrier->set_value(resp); });
|
4398
|
-
auto resp = f
|
4317
|
+
auto resp = cb_wait_for_future(f);
|
4399
4318
|
if (resp.ctx.ec) {
|
4400
|
-
exc =
|
4319
|
+
exc = cb_map_error_code(resp.ctx, fmt::format(R"(unable to fetch group "{}")", req.name));
|
4401
4320
|
break;
|
4402
4321
|
}
|
4403
4322
|
|
4404
4323
|
VALUE res = rb_hash_new();
|
4405
|
-
|
4324
|
+
cb_extract_group(resp.group, res);
|
4406
4325
|
return res;
|
4407
4326
|
} while (false);
|
4408
4327
|
rb_exc_raise(exc);
|
@@ -4425,7 +4344,7 @@ cb_Backend_group_drop(VALUE self, VALUE name, VALUE timeout)
|
|
4425
4344
|
VALUE exc = Qnil;
|
4426
4345
|
do {
|
4427
4346
|
couchbase::operations::group_drop_request req{};
|
4428
|
-
exc =
|
4347
|
+
exc = cb_extract_timeout(req, timeout);
|
4429
4348
|
if (!NIL_P(exc)) {
|
4430
4349
|
break;
|
4431
4350
|
}
|
@@ -4434,9 +4353,9 @@ cb_Backend_group_drop(VALUE self, VALUE name, VALUE timeout)
|
|
4434
4353
|
auto f = barrier->get_future();
|
4435
4354
|
backend->cluster->execute_http(req,
|
4436
4355
|
[barrier](couchbase::operations::group_drop_response&& resp) mutable { barrier->set_value(resp); });
|
4437
|
-
auto resp = f
|
4356
|
+
auto resp = cb_wait_for_future(f);
|
4438
4357
|
if (resp.ctx.ec) {
|
4439
|
-
exc =
|
4358
|
+
exc = cb_map_error_code(resp.ctx, fmt::format(R"(unable to drop group "{}")", req.name));
|
4440
4359
|
break;
|
4441
4360
|
}
|
4442
4361
|
|
@@ -4462,7 +4381,7 @@ cb_Backend_group_upsert(VALUE self, VALUE group, VALUE timeout)
|
|
4462
4381
|
VALUE exc = Qnil;
|
4463
4382
|
do {
|
4464
4383
|
couchbase::operations::group_upsert_request req{};
|
4465
|
-
exc =
|
4384
|
+
exc = cb_extract_timeout(req, timeout);
|
4466
4385
|
if (!NIL_P(exc)) {
|
4467
4386
|
break;
|
4468
4387
|
}
|
@@ -4510,10 +4429,10 @@ cb_Backend_group_upsert(VALUE self, VALUE group, VALUE timeout)
|
|
4510
4429
|
auto f = barrier->get_future();
|
4511
4430
|
backend->cluster->execute_http(
|
4512
4431
|
req, [barrier](couchbase::operations::group_upsert_response&& resp) mutable { barrier->set_value(resp); });
|
4513
|
-
auto resp = f
|
4432
|
+
auto resp = cb_wait_for_future(f);
|
4514
4433
|
if (resp.ctx.ec) {
|
4515
|
-
exc =
|
4516
|
-
|
4434
|
+
exc =
|
4435
|
+
cb_map_error_code(resp.ctx, fmt::format(R"(unable to upsert group "{}" ({}))", req.group.name, fmt::join(resp.errors, ", ")));
|
4517
4436
|
break;
|
4518
4437
|
}
|
4519
4438
|
|
@@ -4541,9 +4460,9 @@ cb_Backend_cluster_enable_developer_preview(VALUE self)
|
|
4541
4460
|
auto f = barrier->get_future();
|
4542
4461
|
backend->cluster->execute_http(
|
4543
4462
|
req, [barrier](couchbase::operations::cluster_developer_preview_enable_response&& resp) mutable { barrier->set_value(resp); });
|
4544
|
-
auto resp = f
|
4463
|
+
auto resp = cb_wait_for_future(f);
|
4545
4464
|
if (resp.ctx.ec) {
|
4546
|
-
exc =
|
4465
|
+
exc = cb_map_error_code(resp.ctx, "unable to enable developer preview for this cluster");
|
4547
4466
|
break;
|
4548
4467
|
}
|
4549
4468
|
spdlog::critical(
|
@@ -4571,7 +4490,7 @@ cb_Backend_scope_get_all(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
4571
4490
|
VALUE exc = Qnil;
|
4572
4491
|
do {
|
4573
4492
|
couchbase::operations::scope_get_all_request req{};
|
4574
|
-
exc =
|
4493
|
+
exc = cb_extract_timeout(req, timeout);
|
4575
4494
|
if (!NIL_P(exc)) {
|
4576
4495
|
break;
|
4577
4496
|
}
|
@@ -4580,9 +4499,9 @@ cb_Backend_scope_get_all(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
4580
4499
|
auto f = barrier->get_future();
|
4581
4500
|
backend->cluster->execute_http(
|
4582
4501
|
req, [barrier](couchbase::operations::scope_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
4583
|
-
auto resp = f
|
4502
|
+
auto resp = cb_wait_for_future(f);
|
4584
4503
|
if (resp.ctx.ec) {
|
4585
|
-
exc =
|
4504
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to get list of the scopes of the bucket \"{}\"", req.bucket_name));
|
4586
4505
|
break;
|
4587
4506
|
}
|
4588
4507
|
|
@@ -4592,13 +4511,12 @@ cb_Backend_scope_get_all(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
4592
4511
|
for (const auto& s : resp.manifest.scopes) {
|
4593
4512
|
VALUE scope = rb_hash_new();
|
4594
4513
|
rb_hash_aset(scope, rb_id2sym(rb_intern("uid")), ULL2NUM(s.uid));
|
4595
|
-
rb_hash_aset(scope, rb_id2sym(rb_intern("name")),
|
4514
|
+
rb_hash_aset(scope, rb_id2sym(rb_intern("name")), cb_str_new(s.name));
|
4596
4515
|
VALUE collections = rb_ary_new_capa(static_cast<long>(s.collections.size()));
|
4597
4516
|
for (const auto& c : s.collections) {
|
4598
4517
|
VALUE collection = rb_hash_new();
|
4599
4518
|
rb_hash_aset(collection, rb_id2sym(rb_intern("uid")), ULL2NUM(c.uid));
|
4600
|
-
rb_hash_aset(
|
4601
|
-
collection, rb_id2sym(rb_intern("name")), rb_external_str_new(c.name.data(), static_cast<long>(c.name.size())));
|
4519
|
+
rb_hash_aset(collection, rb_id2sym(rb_intern("name")), cb_str_new(c.name));
|
4602
4520
|
rb_ary_push(collections, collection);
|
4603
4521
|
}
|
4604
4522
|
rb_hash_aset(scope, rb_id2sym(rb_intern("collections")), collections);
|
@@ -4628,7 +4546,7 @@ cb_Backend_collections_manifest_get(VALUE self, VALUE bucket_name, VALUE timeout
|
|
4628
4546
|
VALUE exc = Qnil;
|
4629
4547
|
do {
|
4630
4548
|
couchbase::operations::collections_manifest_get_request req{};
|
4631
|
-
exc =
|
4549
|
+
exc = cb_extract_timeout(req, timeout);
|
4632
4550
|
if (!NIL_P(exc)) {
|
4633
4551
|
break;
|
4634
4552
|
}
|
@@ -4637,9 +4555,9 @@ cb_Backend_collections_manifest_get(VALUE self, VALUE bucket_name, VALUE timeout
|
|
4637
4555
|
auto f = barrier->get_future();
|
4638
4556
|
backend->cluster->execute(
|
4639
4557
|
req, [barrier](couchbase::operations::collections_manifest_get_response&& resp) mutable { barrier->set_value(resp); });
|
4640
|
-
auto resp = f
|
4558
|
+
auto resp = cb_wait_for_future(f);
|
4641
4559
|
if (resp.ctx.ec) {
|
4642
|
-
exc =
|
4560
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to get collections manifest of the bucket \"{}\"", req.id.bucket));
|
4643
4561
|
break;
|
4644
4562
|
}
|
4645
4563
|
|
@@ -4649,13 +4567,12 @@ cb_Backend_collections_manifest_get(VALUE self, VALUE bucket_name, VALUE timeout
|
|
4649
4567
|
for (const auto& s : resp.manifest.scopes) {
|
4650
4568
|
VALUE scope = rb_hash_new();
|
4651
4569
|
rb_hash_aset(scope, rb_id2sym(rb_intern("uid")), ULL2NUM(s.uid));
|
4652
|
-
rb_hash_aset(scope, rb_id2sym(rb_intern("name")),
|
4570
|
+
rb_hash_aset(scope, rb_id2sym(rb_intern("name")), cb_str_new(s.name));
|
4653
4571
|
VALUE collections = rb_ary_new_capa(static_cast<long>(s.collections.size()));
|
4654
4572
|
for (const auto& c : s.collections) {
|
4655
4573
|
VALUE collection = rb_hash_new();
|
4656
4574
|
rb_hash_aset(collection, rb_id2sym(rb_intern("uid")), ULL2NUM(c.uid));
|
4657
|
-
rb_hash_aset(
|
4658
|
-
collection, rb_id2sym(rb_intern("name")), rb_external_str_new(c.name.data(), static_cast<long>(c.name.size())));
|
4575
|
+
rb_hash_aset(collection, rb_id2sym(rb_intern("name")), cb_str_new(c.name));
|
4659
4576
|
rb_ary_push(collections, collection);
|
4660
4577
|
}
|
4661
4578
|
rb_hash_aset(scope, rb_id2sym(rb_intern("collections")), collections);
|
@@ -4686,7 +4603,7 @@ cb_Backend_scope_create(VALUE self, VALUE bucket_name, VALUE scope_name, VALUE t
|
|
4686
4603
|
VALUE exc = Qnil;
|
4687
4604
|
do {
|
4688
4605
|
couchbase::operations::scope_create_request req{};
|
4689
|
-
exc =
|
4606
|
+
exc = cb_extract_timeout(req, timeout);
|
4690
4607
|
if (!NIL_P(exc)) {
|
4691
4608
|
break;
|
4692
4609
|
}
|
@@ -4696,10 +4613,10 @@ cb_Backend_scope_create(VALUE self, VALUE bucket_name, VALUE scope_name, VALUE t
|
|
4696
4613
|
auto f = barrier->get_future();
|
4697
4614
|
backend->cluster->execute_http(
|
4698
4615
|
req, [barrier](couchbase::operations::scope_create_response&& resp) mutable { barrier->set_value(resp); });
|
4699
|
-
auto resp = f
|
4616
|
+
auto resp = cb_wait_for_future(f);
|
4700
4617
|
if (resp.ctx.ec) {
|
4701
|
-
exc =
|
4702
|
-
|
4618
|
+
exc = cb_map_error_code(resp.ctx,
|
4619
|
+
fmt::format(R"(unable to create the scope "{}" on the bucket "{}")", req.scope_name, req.bucket_name));
|
4703
4620
|
break;
|
4704
4621
|
}
|
4705
4622
|
return ULL2NUM(resp.uid);
|
@@ -4725,7 +4642,7 @@ cb_Backend_scope_drop(VALUE self, VALUE bucket_name, VALUE scope_name, VALUE tim
|
|
4725
4642
|
VALUE exc = Qnil;
|
4726
4643
|
do {
|
4727
4644
|
couchbase::operations::scope_drop_request req{};
|
4728
|
-
exc =
|
4645
|
+
exc = cb_extract_timeout(req, timeout);
|
4729
4646
|
if (!NIL_P(exc)) {
|
4730
4647
|
break;
|
4731
4648
|
}
|
@@ -4735,10 +4652,10 @@ cb_Backend_scope_drop(VALUE self, VALUE bucket_name, VALUE scope_name, VALUE tim
|
|
4735
4652
|
auto f = barrier->get_future();
|
4736
4653
|
backend->cluster->execute_http(req,
|
4737
4654
|
[barrier](couchbase::operations::scope_drop_response&& resp) mutable { barrier->set_value(resp); });
|
4738
|
-
auto resp = f
|
4655
|
+
auto resp = cb_wait_for_future(f);
|
4739
4656
|
if (resp.ctx.ec) {
|
4740
|
-
exc =
|
4741
|
-
|
4657
|
+
exc = cb_map_error_code(resp.ctx,
|
4658
|
+
fmt::format(R"(unable to drop the scope "{}" on the bucket "{}")", req.scope_name, req.bucket_name));
|
4742
4659
|
break;
|
4743
4660
|
}
|
4744
4661
|
return ULL2NUM(resp.uid);
|
@@ -4765,7 +4682,7 @@ cb_Backend_collection_create(VALUE self, VALUE bucket_name, VALUE scope_name, VA
|
|
4765
4682
|
VALUE exc = Qnil;
|
4766
4683
|
do {
|
4767
4684
|
couchbase::operations::collection_create_request req{};
|
4768
|
-
exc =
|
4685
|
+
exc = cb_extract_timeout(req, timeout);
|
4769
4686
|
if (!NIL_P(exc)) {
|
4770
4687
|
break;
|
4771
4688
|
}
|
@@ -4781,9 +4698,9 @@ cb_Backend_collection_create(VALUE self, VALUE bucket_name, VALUE scope_name, VA
|
|
4781
4698
|
auto f = barrier->get_future();
|
4782
4699
|
backend->cluster->execute_http(
|
4783
4700
|
req, [barrier](couchbase::operations::collection_create_response&& resp) mutable { barrier->set_value(resp); });
|
4784
|
-
auto resp = f
|
4701
|
+
auto resp = cb_wait_for_future(f);
|
4785
4702
|
if (resp.ctx.ec) {
|
4786
|
-
exc =
|
4703
|
+
exc = cb_map_error_code(
|
4787
4704
|
resp.ctx,
|
4788
4705
|
fmt::format(
|
4789
4706
|
R"(unable create the collection "{}.{}" on the bucket "{}")", req.scope_name, req.collection_name, req.bucket_name));
|
@@ -4813,7 +4730,7 @@ cb_Backend_collection_drop(VALUE self, VALUE bucket_name, VALUE scope_name, VALU
|
|
4813
4730
|
VALUE exc = Qnil;
|
4814
4731
|
do {
|
4815
4732
|
couchbase::operations::collection_drop_request req{};
|
4816
|
-
exc =
|
4733
|
+
exc = cb_extract_timeout(req, timeout);
|
4817
4734
|
if (!NIL_P(exc)) {
|
4818
4735
|
break;
|
4819
4736
|
}
|
@@ -4825,9 +4742,9 @@ cb_Backend_collection_drop(VALUE self, VALUE bucket_name, VALUE scope_name, VALU
|
|
4825
4742
|
auto f = barrier->get_future();
|
4826
4743
|
backend->cluster->execute_http(
|
4827
4744
|
req, [barrier](couchbase::operations::collection_drop_response&& resp) mutable { barrier->set_value(resp); });
|
4828
|
-
auto resp = f
|
4745
|
+
auto resp = cb_wait_for_future(f);
|
4829
4746
|
if (resp.ctx.ec) {
|
4830
|
-
exc =
|
4747
|
+
exc = cb_map_error_code(
|
4831
4748
|
resp.ctx,
|
4832
4749
|
fmt::format(
|
4833
4750
|
R"(unable to drop the collection "{}.{}" on the bucket "{}")", req.scope_name, req.collection_name, req.bucket_name));
|
@@ -4855,7 +4772,7 @@ cb_Backend_query_index_get_all(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
4855
4772
|
VALUE exc = Qnil;
|
4856
4773
|
do {
|
4857
4774
|
couchbase::operations::query_index_get_all_request req{};
|
4858
|
-
exc =
|
4775
|
+
exc = cb_extract_timeout(req, timeout);
|
4859
4776
|
if (!NIL_P(exc)) {
|
4860
4777
|
break;
|
4861
4778
|
}
|
@@ -4864,50 +4781,38 @@ cb_Backend_query_index_get_all(VALUE self, VALUE bucket_name, VALUE timeout)
|
|
4864
4781
|
auto f = barrier->get_future();
|
4865
4782
|
backend->cluster->execute_http(
|
4866
4783
|
req, [barrier](couchbase::operations::query_index_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
4867
|
-
auto resp = f
|
4784
|
+
auto resp = cb_wait_for_future(f);
|
4868
4785
|
if (resp.ctx.ec) {
|
4869
|
-
exc =
|
4786
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to get list of the indexes of the bucket \"{}\"", req.bucket_name));
|
4870
4787
|
break;
|
4871
4788
|
}
|
4872
4789
|
|
4873
4790
|
VALUE res = rb_hash_new();
|
4874
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
4791
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), cb_str_new(resp.status));
|
4875
4792
|
VALUE indexes = rb_ary_new_capa(static_cast<long>(resp.indexes.size()));
|
4876
4793
|
for (const auto& idx : resp.indexes) {
|
4877
4794
|
VALUE index = rb_hash_new();
|
4878
|
-
rb_hash_aset(index, rb_id2sym(rb_intern("id")),
|
4879
|
-
rb_hash_aset(index, rb_id2sym(rb_intern("state")),
|
4880
|
-
rb_hash_aset(index, rb_id2sym(rb_intern("name")),
|
4881
|
-
rb_hash_aset(index,
|
4882
|
-
|
4883
|
-
|
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())));
|
4795
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("id")), cb_str_new(idx.id));
|
4796
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("state")), cb_str_new(idx.state));
|
4797
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("name")), cb_str_new(idx.name));
|
4798
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("datastore_id")), cb_str_new(idx.datastore_id));
|
4799
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("keyspace_id")), cb_str_new(idx.keyspace_id));
|
4800
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("namespace_id")), cb_str_new(idx.namespace_id));
|
4801
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("type")), cb_str_new(idx.type));
|
4891
4802
|
rb_hash_aset(index, rb_id2sym(rb_intern("is_primary")), idx.is_primary ? Qtrue : Qfalse);
|
4892
4803
|
VALUE index_key = rb_ary_new_capa(static_cast<long>(idx.index_key.size()));
|
4893
4804
|
for (const auto& key : idx.index_key) {
|
4894
|
-
rb_ary_push(index_key,
|
4805
|
+
rb_ary_push(index_key, cb_str_new(key));
|
4895
4806
|
}
|
4896
4807
|
rb_hash_aset(index, rb_id2sym(rb_intern("index_key")), index_key);
|
4897
4808
|
if (idx.scope_id) {
|
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())));
|
4809
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("scope_id")), cb_str_new(idx.scope_id.value()));
|
4901
4810
|
}
|
4902
4811
|
if (idx.bucket_id) {
|
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())));
|
4812
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("bucket_id")), cb_str_new(idx.bucket_id.value()));
|
4906
4813
|
}
|
4907
4814
|
if (idx.condition) {
|
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())));
|
4815
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("condition")), cb_str_new(idx.condition.value()));
|
4911
4816
|
}
|
4912
4817
|
rb_ary_push(indexes, index);
|
4913
4818
|
}
|
@@ -4938,7 +4843,7 @@ cb_Backend_query_index_create(VALUE self, VALUE bucket_name, VALUE index_name, V
|
|
4938
4843
|
VALUE exc = Qnil;
|
4939
4844
|
do {
|
4940
4845
|
couchbase::operations::query_index_create_request req{};
|
4941
|
-
exc =
|
4846
|
+
exc = cb_extract_timeout(req, timeout);
|
4942
4847
|
if (!NIL_P(exc)) {
|
4943
4848
|
break;
|
4944
4849
|
}
|
@@ -4987,31 +4892,30 @@ cb_Backend_query_index_create(VALUE self, VALUE bucket_name, VALUE index_name, V
|
|
4987
4892
|
auto f = barrier->get_future();
|
4988
4893
|
backend->cluster->execute_http(
|
4989
4894
|
req, [barrier](couchbase::operations::query_index_create_response&& resp) mutable { barrier->set_value(resp); });
|
4990
|
-
auto resp = f
|
4895
|
+
auto resp = cb_wait_for_future(f);
|
4991
4896
|
if (resp.ctx.ec) {
|
4992
4897
|
if (!resp.errors.empty()) {
|
4993
4898
|
const auto& first_error = resp.errors.front();
|
4994
|
-
exc =
|
4995
|
-
|
4996
|
-
|
4997
|
-
|
4998
|
-
|
4999
|
-
|
4899
|
+
exc = cb_map_error_code(resp.ctx,
|
4900
|
+
fmt::format(R"(unable to create index "{}" on the bucket "{}" ({}: {}))",
|
4901
|
+
req.index_name,
|
4902
|
+
req.bucket_name,
|
4903
|
+
first_error.code,
|
4904
|
+
first_error.message));
|
5000
4905
|
} else {
|
5001
|
-
exc =
|
5002
|
-
|
4906
|
+
exc = cb_map_error_code(resp.ctx,
|
4907
|
+
fmt::format(R"(unable to create index "{}" on the bucket "{}")", req.index_name, req.bucket_name));
|
5003
4908
|
}
|
5004
4909
|
break;
|
5005
4910
|
}
|
5006
4911
|
VALUE res = rb_hash_new();
|
5007
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
4912
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), cb_str_new(resp.status));
|
5008
4913
|
if (!resp.errors.empty()) {
|
5009
4914
|
VALUE errors = rb_ary_new_capa(static_cast<long>(resp.errors.size()));
|
5010
4915
|
for (const auto& err : resp.errors) {
|
5011
4916
|
VALUE error = rb_hash_new();
|
5012
4917
|
rb_hash_aset(error, rb_id2sym(rb_intern("code")), ULL2NUM(err.code));
|
5013
|
-
rb_hash_aset(
|
5014
|
-
error, rb_id2sym(rb_intern("message")), rb_external_str_new(err.message.data(), static_cast<long>(err.message.size())));
|
4918
|
+
rb_hash_aset(error, rb_id2sym(rb_intern("message")), cb_str_new(err.message));
|
5015
4919
|
rb_ary_push(errors, error);
|
5016
4920
|
}
|
5017
4921
|
rb_hash_aset(res, rb_id2sym(rb_intern("errors")), errors);
|
@@ -5039,7 +4943,7 @@ cb_Backend_query_index_drop(VALUE self, VALUE bucket_name, VALUE index_name, VAL
|
|
5039
4943
|
VALUE exc = Qnil;
|
5040
4944
|
do {
|
5041
4945
|
couchbase::operations::query_index_drop_request req{};
|
5042
|
-
exc =
|
4946
|
+
exc = cb_extract_timeout(req, timeout);
|
5043
4947
|
if (!NIL_P(exc)) {
|
5044
4948
|
break;
|
5045
4949
|
}
|
@@ -5067,31 +4971,30 @@ cb_Backend_query_index_drop(VALUE self, VALUE bucket_name, VALUE index_name, VAL
|
|
5067
4971
|
auto f = barrier->get_future();
|
5068
4972
|
backend->cluster->execute_http(
|
5069
4973
|
req, [barrier](couchbase::operations::query_index_drop_response&& resp) mutable { barrier->set_value(resp); });
|
5070
|
-
auto resp = f
|
4974
|
+
auto resp = cb_wait_for_future(f);
|
5071
4975
|
if (resp.ctx.ec) {
|
5072
4976
|
if (!resp.errors.empty()) {
|
5073
4977
|
const auto& first_error = resp.errors.front();
|
5074
|
-
exc =
|
5075
|
-
|
5076
|
-
|
5077
|
-
|
5078
|
-
|
5079
|
-
|
4978
|
+
exc = cb_map_error_code(resp.ctx,
|
4979
|
+
fmt::format(R"(unable to drop index "{}" on the bucket "{}" ({}: {}))",
|
4980
|
+
req.index_name,
|
4981
|
+
req.bucket_name,
|
4982
|
+
first_error.code,
|
4983
|
+
first_error.message));
|
5080
4984
|
} else {
|
5081
|
-
exc =
|
5082
|
-
|
4985
|
+
exc = cb_map_error_code(resp.ctx,
|
4986
|
+
fmt::format(R"(unable to drop index "{}" on the bucket "{}")", req.index_name, req.bucket_name));
|
5083
4987
|
}
|
5084
4988
|
break;
|
5085
4989
|
}
|
5086
4990
|
VALUE res = rb_hash_new();
|
5087
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
4991
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), cb_str_new(resp.status));
|
5088
4992
|
if (!resp.errors.empty()) {
|
5089
4993
|
VALUE errors = rb_ary_new_capa(static_cast<long>(resp.errors.size()));
|
5090
4994
|
for (const auto& err : resp.errors) {
|
5091
4995
|
VALUE error = rb_hash_new();
|
5092
4996
|
rb_hash_aset(error, rb_id2sym(rb_intern("code")), ULL2NUM(err.code));
|
5093
|
-
rb_hash_aset(
|
5094
|
-
error, rb_id2sym(rb_intern("message")), rb_external_str_new(err.message.data(), static_cast<long>(err.message.size())));
|
4997
|
+
rb_hash_aset(error, rb_id2sym(rb_intern("message")), cb_str_new(err.message));
|
5095
4998
|
rb_ary_push(errors, error);
|
5096
4999
|
}
|
5097
5000
|
rb_hash_aset(res, rb_id2sym(rb_intern("errors")), errors);
|
@@ -5121,7 +5024,7 @@ cb_Backend_query_index_create_primary(VALUE self, VALUE bucket_name, VALUE optio
|
|
5121
5024
|
VALUE exc = Qnil;
|
5122
5025
|
do {
|
5123
5026
|
couchbase::operations::query_index_create_request req{};
|
5124
|
-
exc =
|
5027
|
+
exc = cb_extract_timeout(req, timeout);
|
5125
5028
|
if (!NIL_P(exc)) {
|
5126
5029
|
break;
|
5127
5030
|
}
|
@@ -5163,30 +5066,29 @@ cb_Backend_query_index_create_primary(VALUE self, VALUE bucket_name, VALUE optio
|
|
5163
5066
|
auto f = barrier->get_future();
|
5164
5067
|
backend->cluster->execute_http(
|
5165
5068
|
req, [barrier](couchbase::operations::query_index_create_response&& resp) mutable { barrier->set_value(resp); });
|
5166
|
-
auto resp = f
|
5069
|
+
auto resp = cb_wait_for_future(f);
|
5167
5070
|
if (resp.ctx.ec) {
|
5168
5071
|
if (!resp.errors.empty()) {
|
5169
5072
|
const auto& first_error = resp.errors.front();
|
5170
|
-
exc =
|
5171
|
-
|
5172
|
-
|
5173
|
-
|
5174
|
-
|
5073
|
+
exc = cb_map_error_code(resp.ctx,
|
5074
|
+
fmt::format(R"(unable to create primary index on the bucket "{}" ({}: {}))",
|
5075
|
+
req.bucket_name,
|
5076
|
+
first_error.code,
|
5077
|
+
first_error.message));
|
5175
5078
|
} else {
|
5176
|
-
exc =
|
5079
|
+
exc = cb_map_error_code(
|
5177
5080
|
resp.ctx, fmt::format(R"(unable to create primary index on the bucket "{}")", req.index_name, req.bucket_name));
|
5178
5081
|
}
|
5179
5082
|
break;
|
5180
5083
|
}
|
5181
5084
|
VALUE res = rb_hash_new();
|
5182
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5085
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), cb_str_new(resp.status));
|
5183
5086
|
if (!resp.errors.empty()) {
|
5184
5087
|
VALUE errors = rb_ary_new_capa(static_cast<long>(resp.errors.size()));
|
5185
5088
|
for (const auto& err : resp.errors) {
|
5186
5089
|
VALUE error = rb_hash_new();
|
5187
5090
|
rb_hash_aset(error, rb_id2sym(rb_intern("code")), ULL2NUM(err.code));
|
5188
|
-
rb_hash_aset(
|
5189
|
-
error, rb_id2sym(rb_intern("message")), rb_external_str_new(err.message.data(), static_cast<long>(err.message.size())));
|
5091
|
+
rb_hash_aset(error, rb_id2sym(rb_intern("message")), cb_str_new(err.message));
|
5190
5092
|
rb_ary_push(errors, error);
|
5191
5093
|
}
|
5192
5094
|
rb_hash_aset(res, rb_id2sym(rb_intern("errors")), errors);
|
@@ -5213,7 +5115,7 @@ cb_Backend_query_index_drop_primary(VALUE self, VALUE bucket_name, VALUE options
|
|
5213
5115
|
VALUE exc = Qnil;
|
5214
5116
|
do {
|
5215
5117
|
couchbase::operations::query_index_drop_request req{};
|
5216
|
-
exc =
|
5118
|
+
exc = cb_extract_timeout(req, timeout);
|
5217
5119
|
if (!NIL_P(exc)) {
|
5218
5120
|
break;
|
5219
5121
|
}
|
@@ -5247,28 +5149,27 @@ cb_Backend_query_index_drop_primary(VALUE self, VALUE bucket_name, VALUE options
|
|
5247
5149
|
auto f = barrier->get_future();
|
5248
5150
|
backend->cluster->execute_http(
|
5249
5151
|
req, [barrier](couchbase::operations::query_index_drop_response&& resp) mutable { barrier->set_value(resp); });
|
5250
|
-
auto resp = f
|
5152
|
+
auto resp = cb_wait_for_future(f);
|
5251
5153
|
if (resp.ctx.ec) {
|
5252
5154
|
if (!resp.errors.empty()) {
|
5253
5155
|
const auto& first_error = resp.errors.front();
|
5254
|
-
exc =
|
5156
|
+
exc = cb_map_error_code(
|
5255
5157
|
resp.ctx,
|
5256
5158
|
fmt::format(
|
5257
5159
|
R"(unable to drop primary index on the bucket "{}" ({}: {}))", req.bucket_name, first_error.code, first_error.message));
|
5258
5160
|
} else {
|
5259
|
-
exc =
|
5161
|
+
exc = cb_map_error_code(resp.ctx, fmt::format(R"(unable to drop primary index on the bucket "{}")", req.bucket_name));
|
5260
5162
|
}
|
5261
5163
|
break;
|
5262
5164
|
}
|
5263
5165
|
VALUE res = rb_hash_new();
|
5264
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5166
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), cb_str_new(resp.status));
|
5265
5167
|
if (!resp.errors.empty()) {
|
5266
5168
|
VALUE errors = rb_ary_new_capa(static_cast<long>(resp.errors.size()));
|
5267
5169
|
for (const auto& err : resp.errors) {
|
5268
5170
|
VALUE error = rb_hash_new();
|
5269
5171
|
rb_hash_aset(error, rb_id2sym(rb_intern("code")), ULL2NUM(err.code));
|
5270
|
-
rb_hash_aset(
|
5271
|
-
error, rb_id2sym(rb_intern("message")), rb_external_str_new(err.message.data(), static_cast<long>(err.message.size())));
|
5172
|
+
rb_hash_aset(error, rb_id2sym(rb_intern("message")), cb_str_new(err.message));
|
5272
5173
|
rb_ary_push(errors, error);
|
5273
5174
|
}
|
5274
5175
|
rb_hash_aset(res, rb_id2sym(rb_intern("errors")), errors);
|
@@ -5295,7 +5196,7 @@ cb_Backend_query_index_build_deferred(VALUE self, VALUE bucket_name, VALUE timeo
|
|
5295
5196
|
VALUE exc = Qnil;
|
5296
5197
|
do {
|
5297
5198
|
couchbase::operations::query_index_build_deferred_request req{};
|
5298
|
-
exc =
|
5199
|
+
exc = cb_extract_timeout(req, timeout);
|
5299
5200
|
if (!NIL_P(exc)) {
|
5300
5201
|
break;
|
5301
5202
|
}
|
@@ -5304,18 +5205,18 @@ cb_Backend_query_index_build_deferred(VALUE self, VALUE bucket_name, VALUE timeo
|
|
5304
5205
|
auto f = barrier->get_future();
|
5305
5206
|
backend->cluster->execute_http(
|
5306
5207
|
req, [barrier](couchbase::operations::query_index_build_deferred_response&& resp) mutable { barrier->set_value(resp); });
|
5307
|
-
auto resp = f
|
5208
|
+
auto resp = cb_wait_for_future(f);
|
5308
5209
|
if (resp.ctx.ec) {
|
5309
5210
|
if (!resp.errors.empty()) {
|
5310
5211
|
const auto& first_error = resp.errors.front();
|
5311
|
-
exc =
|
5212
|
+
exc = cb_map_error_code(
|
5312
5213
|
resp.ctx,
|
5313
5214
|
fmt::format(
|
5314
5215
|
R"(unable to drop primary index on the bucket "{}" ({}: {}))", req.bucket_name, first_error.code, first_error.message));
|
5315
5216
|
|
5316
5217
|
} else {
|
5317
|
-
exc =
|
5318
|
-
|
5218
|
+
exc = cb_map_error_code(resp.ctx,
|
5219
|
+
fmt::format("unable to trigger build for deferred indexes for the bucket \"{}\"", req.bucket_name));
|
5319
5220
|
}
|
5320
5221
|
break;
|
5321
5222
|
}
|
@@ -5347,37 +5248,27 @@ cb_Backend_query_index_watch(VALUE self, VALUE bucket_name, VALUE index_names, V
|
|
5347
5248
|
}
|
5348
5249
|
|
5349
5250
|
static void
|
5350
|
-
|
5251
|
+
cb_extract_search_index(VALUE index, const couchbase::operations::search_index& idx)
|
5351
5252
|
{
|
5352
|
-
rb_hash_aset(index, rb_id2sym(rb_intern("uuid")),
|
5353
|
-
rb_hash_aset(index, rb_id2sym(rb_intern("name")),
|
5354
|
-
rb_hash_aset(index, rb_id2sym(rb_intern("type")),
|
5253
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("uuid")), cb_str_new(idx.uuid));
|
5254
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("name")), cb_str_new(idx.name));
|
5255
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("type")), cb_str_new(idx.type));
|
5355
5256
|
if (!idx.params_json.empty()) {
|
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())));
|
5257
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("params")), cb_str_new(idx.params_json));
|
5358
5258
|
}
|
5359
5259
|
|
5360
5260
|
if (!idx.source_uuid.empty()) {
|
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())));
|
5261
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("source_uuid")), cb_str_new(idx.source_uuid));
|
5364
5262
|
}
|
5365
5263
|
if (!idx.source_name.empty()) {
|
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())));
|
5264
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("source_name")), cb_str_new(idx.source_name));
|
5369
5265
|
}
|
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())));
|
5266
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("source_type")), cb_str_new(idx.source_type));
|
5372
5267
|
if (!idx.source_params_json.empty()) {
|
5373
|
-
rb_hash_aset(index,
|
5374
|
-
rb_id2sym(rb_intern("source_params")),
|
5375
|
-
rb_external_str_new(idx.source_params_json.data(), static_cast<long>(idx.source_params_json.size())));
|
5268
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("source_params")), cb_str_new(idx.source_params_json));
|
5376
5269
|
}
|
5377
5270
|
if (!idx.plan_params_json.empty()) {
|
5378
|
-
rb_hash_aset(index,
|
5379
|
-
rb_id2sym(rb_intern("plan_params")),
|
5380
|
-
rb_external_str_new(idx.plan_params_json.data(), static_cast<long>(idx.plan_params_json.size())));
|
5271
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("plan_params")), cb_str_new(idx.plan_params_json));
|
5381
5272
|
}
|
5382
5273
|
}
|
5383
5274
|
|
@@ -5395,7 +5286,7 @@ cb_Backend_search_index_get_all(VALUE self, VALUE timeout)
|
|
5395
5286
|
VALUE exc = Qnil;
|
5396
5287
|
do {
|
5397
5288
|
couchbase::operations::search_index_get_all_request req{};
|
5398
|
-
exc =
|
5289
|
+
exc = cb_extract_timeout(req, timeout);
|
5399
5290
|
if (!NIL_P(exc)) {
|
5400
5291
|
break;
|
5401
5292
|
}
|
@@ -5403,20 +5294,18 @@ cb_Backend_search_index_get_all(VALUE self, VALUE timeout)
|
|
5403
5294
|
auto f = barrier->get_future();
|
5404
5295
|
backend->cluster->execute_http(
|
5405
5296
|
req, [barrier](couchbase::operations::search_index_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
5406
|
-
auto resp = f
|
5297
|
+
auto resp = cb_wait_for_future(f);
|
5407
5298
|
if (resp.ctx.ec) {
|
5408
|
-
exc =
|
5299
|
+
exc = cb_map_error_code(resp.ctx, "unable to get list of the search indexes");
|
5409
5300
|
break;
|
5410
5301
|
}
|
5411
5302
|
VALUE res = rb_hash_new();
|
5412
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
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())));
|
5303
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), cb_str_new(resp.status));
|
5304
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("impl_version")), cb_str_new(resp.impl_version));
|
5416
5305
|
VALUE indexes = rb_ary_new_capa(static_cast<long>(resp.indexes.size()));
|
5417
5306
|
for (const auto& idx : resp.indexes) {
|
5418
5307
|
VALUE index = rb_hash_new();
|
5419
|
-
|
5308
|
+
cb_extract_search_index(index, idx);
|
5420
5309
|
rb_ary_push(indexes, index);
|
5421
5310
|
}
|
5422
5311
|
rb_hash_aset(res, rb_id2sym(rb_intern("indexes")), indexes);
|
@@ -5441,7 +5330,7 @@ cb_Backend_search_index_get(VALUE self, VALUE index_name, VALUE timeout)
|
|
5441
5330
|
VALUE exc = Qnil;
|
5442
5331
|
do {
|
5443
5332
|
couchbase::operations::search_index_get_request req{};
|
5444
|
-
exc =
|
5333
|
+
exc = cb_extract_timeout(req, timeout);
|
5445
5334
|
if (!NIL_P(exc)) {
|
5446
5335
|
break;
|
5447
5336
|
}
|
@@ -5450,17 +5339,17 @@ cb_Backend_search_index_get(VALUE self, VALUE index_name, VALUE timeout)
|
|
5450
5339
|
auto f = barrier->get_future();
|
5451
5340
|
backend->cluster->execute_http(
|
5452
5341
|
req, [barrier](couchbase::operations::search_index_get_response&& resp) mutable { barrier->set_value(resp); });
|
5453
|
-
auto resp = f
|
5342
|
+
auto resp = cb_wait_for_future(f);
|
5454
5343
|
if (resp.ctx.ec) {
|
5455
5344
|
if (resp.error.empty()) {
|
5456
|
-
exc =
|
5345
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to get search index \"{}\"", req.index_name));
|
5457
5346
|
} else {
|
5458
|
-
exc =
|
5347
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to get search index \"{}\": {}", req.index_name, resp.error));
|
5459
5348
|
}
|
5460
5349
|
break;
|
5461
5350
|
}
|
5462
5351
|
VALUE res = rb_hash_new();
|
5463
|
-
|
5352
|
+
cb_extract_search_index(res, resp.index);
|
5464
5353
|
return res;
|
5465
5354
|
} while (false);
|
5466
5355
|
rb_exc_raise(exc);
|
@@ -5482,7 +5371,7 @@ cb_Backend_search_index_upsert(VALUE self, VALUE index_definition, VALUE timeout
|
|
5482
5371
|
VALUE exc = Qnil;
|
5483
5372
|
do {
|
5484
5373
|
couchbase::operations::search_index_upsert_request req{};
|
5485
|
-
exc =
|
5374
|
+
exc = cb_extract_timeout(req, timeout);
|
5486
5375
|
if (!NIL_P(exc)) {
|
5487
5376
|
break;
|
5488
5377
|
}
|
@@ -5539,17 +5428,17 @@ cb_Backend_search_index_upsert(VALUE self, VALUE index_definition, VALUE timeout
|
|
5539
5428
|
auto f = barrier->get_future();
|
5540
5429
|
backend->cluster->execute_http(
|
5541
5430
|
req, [barrier](couchbase::operations::search_index_upsert_response&& resp) mutable { barrier->set_value(resp); });
|
5542
|
-
auto resp = f
|
5431
|
+
auto resp = cb_wait_for_future(f);
|
5543
5432
|
if (resp.ctx.ec) {
|
5544
5433
|
if (resp.error.empty()) {
|
5545
|
-
exc =
|
5434
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to upsert the search index \"{}\"", req.index.name));
|
5546
5435
|
} else {
|
5547
|
-
exc =
|
5436
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to upsert the search index \"{}\": {}", req.index.name, resp.error));
|
5548
5437
|
}
|
5549
5438
|
break;
|
5550
5439
|
}
|
5551
5440
|
VALUE res = rb_hash_new();
|
5552
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5441
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), cb_str_new(resp.status));
|
5553
5442
|
return res;
|
5554
5443
|
} while (false);
|
5555
5444
|
rb_exc_raise(exc);
|
@@ -5571,7 +5460,7 @@ cb_Backend_search_index_drop(VALUE self, VALUE index_name, VALUE timeout)
|
|
5571
5460
|
VALUE exc = Qnil;
|
5572
5461
|
do {
|
5573
5462
|
couchbase::operations::search_index_drop_request req{};
|
5574
|
-
exc =
|
5463
|
+
exc = cb_extract_timeout(req, timeout);
|
5575
5464
|
if (!NIL_P(exc)) {
|
5576
5465
|
break;
|
5577
5466
|
}
|
@@ -5580,17 +5469,17 @@ cb_Backend_search_index_drop(VALUE self, VALUE index_name, VALUE timeout)
|
|
5580
5469
|
auto f = barrier->get_future();
|
5581
5470
|
backend->cluster->execute_http(
|
5582
5471
|
req, [barrier](couchbase::operations::search_index_drop_response&& resp) mutable { barrier->set_value(resp); });
|
5583
|
-
auto resp = f
|
5472
|
+
auto resp = cb_wait_for_future(f);
|
5584
5473
|
if (resp.ctx.ec) {
|
5585
5474
|
if (resp.error.empty()) {
|
5586
|
-
exc =
|
5475
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to drop the search index \"{}\"", req.index_name));
|
5587
5476
|
} else {
|
5588
|
-
exc =
|
5477
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to drop the search index \"{}\": {}", req.index_name, resp.error));
|
5589
5478
|
}
|
5590
5479
|
break;
|
5591
5480
|
}
|
5592
5481
|
VALUE res = rb_hash_new();
|
5593
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5482
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), cb_str_new(resp.status));
|
5594
5483
|
return res;
|
5595
5484
|
} while (false);
|
5596
5485
|
rb_exc_raise(exc);
|
@@ -5612,7 +5501,7 @@ cb_Backend_search_index_get_documents_count(VALUE self, VALUE index_name, VALUE
|
|
5612
5501
|
VALUE exc = Qnil;
|
5613
5502
|
do {
|
5614
5503
|
couchbase::operations::search_index_get_documents_count_request req{};
|
5615
|
-
exc =
|
5504
|
+
exc = cb_extract_timeout(req, timeout);
|
5616
5505
|
if (!NIL_P(exc)) {
|
5617
5506
|
break;
|
5618
5507
|
}
|
@@ -5621,20 +5510,20 @@ cb_Backend_search_index_get_documents_count(VALUE self, VALUE index_name, VALUE
|
|
5621
5510
|
auto f = barrier->get_future();
|
5622
5511
|
backend->cluster->execute_http(
|
5623
5512
|
req, [barrier](couchbase::operations::search_index_get_documents_count_response&& resp) mutable { barrier->set_value(resp); });
|
5624
|
-
auto resp = f
|
5513
|
+
auto resp = cb_wait_for_future(f);
|
5625
5514
|
if (resp.ctx.ec) {
|
5626
5515
|
if (resp.error.empty()) {
|
5627
|
-
exc =
|
5516
|
+
exc = cb_map_error_code(
|
5628
5517
|
resp.ctx, fmt::format("unable to get number of the indexed documents for the search index \"{}\"", req.index_name));
|
5629
5518
|
} else {
|
5630
|
-
exc =
|
5519
|
+
exc = cb_map_error_code(
|
5631
5520
|
resp.ctx,
|
5632
5521
|
fmt::format("unable to get number of the indexed documents for the search index \"{}\": {}", req.index_name, resp.error));
|
5633
5522
|
}
|
5634
5523
|
break;
|
5635
5524
|
}
|
5636
5525
|
VALUE res = rb_hash_new();
|
5637
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5526
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), cb_str_new(resp.status));
|
5638
5527
|
rb_hash_aset(res, rb_id2sym(rb_intern("count")), ULL2NUM(resp.count));
|
5639
5528
|
return res;
|
5640
5529
|
} while (false);
|
@@ -5657,7 +5546,7 @@ cb_Backend_search_index_get_stats(VALUE self, VALUE index_name, VALUE timeout)
|
|
5657
5546
|
VALUE exc = Qnil;
|
5658
5547
|
do {
|
5659
5548
|
couchbase::operations::search_index_get_stats_request req{};
|
5660
|
-
exc =
|
5549
|
+
exc = cb_extract_timeout(req, timeout);
|
5661
5550
|
if (!NIL_P(exc)) {
|
5662
5551
|
break;
|
5663
5552
|
}
|
@@ -5666,17 +5555,17 @@ cb_Backend_search_index_get_stats(VALUE self, VALUE index_name, VALUE timeout)
|
|
5666
5555
|
auto f = barrier->get_future();
|
5667
5556
|
backend->cluster->execute_http(
|
5668
5557
|
req, [barrier](couchbase::operations::search_index_get_stats_response&& resp) mutable { barrier->set_value(resp); });
|
5669
|
-
auto resp = f
|
5558
|
+
auto resp = cb_wait_for_future(f);
|
5670
5559
|
if (resp.ctx.ec) {
|
5671
5560
|
if (resp.error.empty()) {
|
5672
|
-
exc =
|
5561
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to get stats for the search index \"{}\"", req.index_name));
|
5673
5562
|
} else {
|
5674
|
-
exc =
|
5675
|
-
|
5563
|
+
exc = cb_map_error_code(resp.ctx,
|
5564
|
+
fmt::format("unable to get stats for the search index \"{}\": {}", req.index_name, resp.error));
|
5676
5565
|
}
|
5677
5566
|
break;
|
5678
5567
|
}
|
5679
|
-
return
|
5568
|
+
return cb_str_new(resp.stats);
|
5680
5569
|
} while (false);
|
5681
5570
|
rb_exc_raise(exc);
|
5682
5571
|
return Qnil;
|
@@ -5696,7 +5585,7 @@ cb_Backend_search_get_stats(VALUE self, VALUE timeout)
|
|
5696
5585
|
VALUE exc = Qnil;
|
5697
5586
|
do {
|
5698
5587
|
couchbase::operations::search_index_stats_request req{};
|
5699
|
-
exc =
|
5588
|
+
exc = cb_extract_timeout(req, timeout);
|
5700
5589
|
if (!NIL_P(exc)) {
|
5701
5590
|
break;
|
5702
5591
|
}
|
@@ -5704,12 +5593,12 @@ cb_Backend_search_get_stats(VALUE self, VALUE timeout)
|
|
5704
5593
|
auto f = barrier->get_future();
|
5705
5594
|
backend->cluster->execute_http(
|
5706
5595
|
req, [barrier](couchbase::operations::search_index_stats_response&& resp) mutable { barrier->set_value(resp); });
|
5707
|
-
auto resp = f
|
5596
|
+
auto resp = cb_wait_for_future(f);
|
5708
5597
|
if (resp.ctx.ec) {
|
5709
|
-
exc =
|
5598
|
+
exc = cb_map_error_code(resp.ctx, "unable to get stats for the search service");
|
5710
5599
|
break;
|
5711
5600
|
}
|
5712
|
-
return
|
5601
|
+
return cb_str_new(resp.stats);
|
5713
5602
|
} while (false);
|
5714
5603
|
rb_exc_raise(exc);
|
5715
5604
|
return Qnil;
|
@@ -5730,7 +5619,7 @@ cb_Backend_search_index_pause_ingest(VALUE self, VALUE index_name, VALUE timeout
|
|
5730
5619
|
VALUE exc = Qnil;
|
5731
5620
|
do {
|
5732
5621
|
couchbase::operations::search_index_control_ingest_request req{};
|
5733
|
-
exc =
|
5622
|
+
exc = cb_extract_timeout(req, timeout);
|
5734
5623
|
if (!NIL_P(exc)) {
|
5735
5624
|
break;
|
5736
5625
|
}
|
@@ -5740,18 +5629,18 @@ cb_Backend_search_index_pause_ingest(VALUE self, VALUE index_name, VALUE timeout
|
|
5740
5629
|
auto f = barrier->get_future();
|
5741
5630
|
backend->cluster->execute_http(
|
5742
5631
|
req, [barrier](couchbase::operations::search_index_control_ingest_response&& resp) mutable { barrier->set_value(resp); });
|
5743
|
-
auto resp = f
|
5632
|
+
auto resp = cb_wait_for_future(f);
|
5744
5633
|
if (resp.ctx.ec) {
|
5745
5634
|
if (resp.error.empty()) {
|
5746
|
-
exc =
|
5635
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to pause ingest for the search index \"{}\"", req.index_name));
|
5747
5636
|
} else {
|
5748
|
-
exc =
|
5749
|
-
|
5637
|
+
exc = cb_map_error_code(resp.ctx,
|
5638
|
+
fmt::format("unable to pause ingest for the search index \"{}\": {}", req.index_name, resp.error));
|
5750
5639
|
}
|
5751
5640
|
break;
|
5752
5641
|
}
|
5753
5642
|
VALUE res = rb_hash_new();
|
5754
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5643
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), cb_str_new(resp.status));
|
5755
5644
|
return res;
|
5756
5645
|
} while (false);
|
5757
5646
|
rb_exc_raise(exc);
|
@@ -5773,7 +5662,7 @@ cb_Backend_search_index_resume_ingest(VALUE self, VALUE index_name, VALUE timeou
|
|
5773
5662
|
VALUE exc = Qnil;
|
5774
5663
|
do {
|
5775
5664
|
couchbase::operations::search_index_control_ingest_request req{};
|
5776
|
-
exc =
|
5665
|
+
exc = cb_extract_timeout(req, timeout);
|
5777
5666
|
if (!NIL_P(exc)) {
|
5778
5667
|
break;
|
5779
5668
|
}
|
@@ -5783,18 +5672,18 @@ cb_Backend_search_index_resume_ingest(VALUE self, VALUE index_name, VALUE timeou
|
|
5783
5672
|
auto f = barrier->get_future();
|
5784
5673
|
backend->cluster->execute_http(
|
5785
5674
|
req, [barrier](couchbase::operations::search_index_control_ingest_response&& resp) mutable { barrier->set_value(resp); });
|
5786
|
-
auto resp = f
|
5675
|
+
auto resp = cb_wait_for_future(f);
|
5787
5676
|
if (resp.ctx.ec) {
|
5788
5677
|
if (resp.error.empty()) {
|
5789
|
-
exc =
|
5678
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to resume ingest for the search index \"{}\"", req.index_name));
|
5790
5679
|
} else {
|
5791
|
-
exc =
|
5792
|
-
|
5680
|
+
exc = cb_map_error_code(resp.ctx,
|
5681
|
+
fmt::format("unable to resume ingest for the search index \"{}\": {}", req.index_name, resp.error));
|
5793
5682
|
}
|
5794
5683
|
break;
|
5795
5684
|
}
|
5796
5685
|
VALUE res = rb_hash_new();
|
5797
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5686
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), cb_str_new(resp.status));
|
5798
5687
|
return res;
|
5799
5688
|
} while (false);
|
5800
5689
|
rb_exc_raise(exc);
|
@@ -5816,7 +5705,7 @@ cb_Backend_search_index_allow_querying(VALUE self, VALUE index_name, VALUE timeo
|
|
5816
5705
|
VALUE exc = Qnil;
|
5817
5706
|
do {
|
5818
5707
|
couchbase::operations::search_index_control_query_request req{};
|
5819
|
-
exc =
|
5708
|
+
exc = cb_extract_timeout(req, timeout);
|
5820
5709
|
if (!NIL_P(exc)) {
|
5821
5710
|
break;
|
5822
5711
|
}
|
@@ -5826,18 +5715,18 @@ cb_Backend_search_index_allow_querying(VALUE self, VALUE index_name, VALUE timeo
|
|
5826
5715
|
auto f = barrier->get_future();
|
5827
5716
|
backend->cluster->execute_http(
|
5828
5717
|
req, [barrier](couchbase::operations::search_index_control_query_response&& resp) mutable { barrier->set_value(resp); });
|
5829
|
-
auto resp = f
|
5718
|
+
auto resp = cb_wait_for_future(f);
|
5830
5719
|
if (resp.ctx.ec) {
|
5831
5720
|
if (resp.error.empty()) {
|
5832
|
-
exc =
|
5721
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to allow querying for the search index \"{}\"", req.index_name));
|
5833
5722
|
} else {
|
5834
|
-
exc =
|
5723
|
+
exc = cb_map_error_code(
|
5835
5724
|
resp.ctx, fmt::format("unable to allow querying for the search index \"{}\": {}", req.index_name, resp.error));
|
5836
5725
|
}
|
5837
5726
|
break;
|
5838
5727
|
}
|
5839
5728
|
VALUE res = rb_hash_new();
|
5840
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5729
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), cb_str_new(resp.status));
|
5841
5730
|
return res;
|
5842
5731
|
} while (false);
|
5843
5732
|
rb_exc_raise(exc);
|
@@ -5859,7 +5748,7 @@ cb_Backend_search_index_disallow_querying(VALUE self, VALUE index_name, VALUE ti
|
|
5859
5748
|
VALUE exc = Qnil;
|
5860
5749
|
do {
|
5861
5750
|
couchbase::operations::search_index_control_query_request req{};
|
5862
|
-
exc =
|
5751
|
+
exc = cb_extract_timeout(req, timeout);
|
5863
5752
|
if (!NIL_P(exc)) {
|
5864
5753
|
break;
|
5865
5754
|
}
|
@@ -5869,18 +5758,18 @@ cb_Backend_search_index_disallow_querying(VALUE self, VALUE index_name, VALUE ti
|
|
5869
5758
|
auto f = barrier->get_future();
|
5870
5759
|
backend->cluster->execute_http(
|
5871
5760
|
req, [barrier](couchbase::operations::search_index_control_query_response&& resp) mutable { barrier->set_value(resp); });
|
5872
|
-
auto resp = f
|
5761
|
+
auto resp = cb_wait_for_future(f);
|
5873
5762
|
if (resp.ctx.ec) {
|
5874
5763
|
if (resp.error.empty()) {
|
5875
|
-
exc =
|
5764
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to disallow querying for the search index \"{}\"", req.index_name));
|
5876
5765
|
} else {
|
5877
|
-
exc =
|
5766
|
+
exc = cb_map_error_code(
|
5878
5767
|
resp.ctx, fmt::format("unable to disallow querying for the search index \"{}\": {}", req.index_name, resp.error));
|
5879
5768
|
}
|
5880
5769
|
break;
|
5881
5770
|
}
|
5882
5771
|
VALUE res = rb_hash_new();
|
5883
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5772
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), cb_str_new(resp.status));
|
5884
5773
|
return res;
|
5885
5774
|
} while (false);
|
5886
5775
|
rb_exc_raise(exc);
|
@@ -5902,7 +5791,7 @@ cb_Backend_search_index_freeze_plan(VALUE self, VALUE index_name, VALUE timeout)
|
|
5902
5791
|
VALUE exc = Qnil;
|
5903
5792
|
do {
|
5904
5793
|
couchbase::operations::search_index_control_plan_freeze_request req{};
|
5905
|
-
exc =
|
5794
|
+
exc = cb_extract_timeout(req, timeout);
|
5906
5795
|
if (!NIL_P(exc)) {
|
5907
5796
|
break;
|
5908
5797
|
}
|
@@ -5912,18 +5801,18 @@ cb_Backend_search_index_freeze_plan(VALUE self, VALUE index_name, VALUE timeout)
|
|
5912
5801
|
auto f = barrier->get_future();
|
5913
5802
|
backend->cluster->execute_http(
|
5914
5803
|
req, [barrier](couchbase::operations::search_index_control_plan_freeze_response&& resp) mutable { barrier->set_value(resp); });
|
5915
|
-
auto resp = f
|
5804
|
+
auto resp = cb_wait_for_future(f);
|
5916
5805
|
if (resp.ctx.ec) {
|
5917
5806
|
if (resp.error.empty()) {
|
5918
|
-
exc =
|
5807
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to freeze for the search index \"{}\"", req.index_name));
|
5919
5808
|
} else {
|
5920
5809
|
exc =
|
5921
|
-
|
5810
|
+
cb_map_error_code(resp.ctx, fmt::format("unable to freeze for the search index \"{}\": {}", req.index_name, resp.error));
|
5922
5811
|
}
|
5923
5812
|
break;
|
5924
5813
|
}
|
5925
5814
|
VALUE res = rb_hash_new();
|
5926
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5815
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), cb_str_new(resp.status));
|
5927
5816
|
return res;
|
5928
5817
|
} while (false);
|
5929
5818
|
rb_exc_raise(exc);
|
@@ -5945,7 +5834,7 @@ cb_Backend_search_index_unfreeze_plan(VALUE self, VALUE index_name, VALUE timeou
|
|
5945
5834
|
VALUE exc = Qnil;
|
5946
5835
|
do {
|
5947
5836
|
couchbase::operations::search_index_control_plan_freeze_request req{};
|
5948
|
-
exc =
|
5837
|
+
exc = cb_extract_timeout(req, timeout);
|
5949
5838
|
if (!NIL_P(exc)) {
|
5950
5839
|
break;
|
5951
5840
|
}
|
@@ -5955,18 +5844,18 @@ cb_Backend_search_index_unfreeze_plan(VALUE self, VALUE index_name, VALUE timeou
|
|
5955
5844
|
auto f = barrier->get_future();
|
5956
5845
|
backend->cluster->execute_http(
|
5957
5846
|
req, [barrier](couchbase::operations::search_index_control_plan_freeze_response&& resp) mutable { barrier->set_value(resp); });
|
5958
|
-
auto resp = f
|
5847
|
+
auto resp = cb_wait_for_future(f);
|
5959
5848
|
if (resp.ctx.ec) {
|
5960
5849
|
if (resp.error.empty()) {
|
5961
|
-
exc =
|
5850
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to unfreeze plan for the search index \"{}\"", req.index_name));
|
5962
5851
|
} else {
|
5963
|
-
exc =
|
5964
|
-
|
5852
|
+
exc = cb_map_error_code(resp.ctx,
|
5853
|
+
fmt::format("unable to unfreeze for the search index \"{}\": {}", req.index_name, resp.error));
|
5965
5854
|
}
|
5966
5855
|
break;
|
5967
5856
|
}
|
5968
5857
|
VALUE res = rb_hash_new();
|
5969
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
5858
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), cb_str_new(resp.status));
|
5970
5859
|
return res;
|
5971
5860
|
} while (false);
|
5972
5861
|
rb_exc_raise(exc);
|
@@ -5989,7 +5878,7 @@ cb_Backend_search_index_analyze_document(VALUE self, VALUE index_name, VALUE enc
|
|
5989
5878
|
VALUE exc = Qnil;
|
5990
5879
|
do {
|
5991
5880
|
couchbase::operations::search_index_analyze_document_request req{};
|
5992
|
-
exc =
|
5881
|
+
exc = cb_extract_timeout(req, timeout);
|
5993
5882
|
if (!NIL_P(exc)) {
|
5994
5883
|
break;
|
5995
5884
|
}
|
@@ -6001,20 +5890,19 @@ cb_Backend_search_index_analyze_document(VALUE self, VALUE index_name, VALUE enc
|
|
6001
5890
|
auto f = barrier->get_future();
|
6002
5891
|
backend->cluster->execute_http(
|
6003
5892
|
req, [barrier](couchbase::operations::search_index_analyze_document_response&& resp) mutable { barrier->set_value(resp); });
|
6004
|
-
auto resp = f
|
5893
|
+
auto resp = cb_wait_for_future(f);
|
6005
5894
|
if (resp.ctx.ec) {
|
6006
5895
|
if (resp.error.empty()) {
|
6007
|
-
exc =
|
5896
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to analyze document using the search index \"{}\"", req.index_name));
|
6008
5897
|
} else {
|
6009
|
-
exc =
|
5898
|
+
exc = cb_map_error_code(
|
6010
5899
|
resp.ctx, fmt::format("unable to analyze document using the search index \"{}\": {}", req.index_name, resp.error));
|
6011
5900
|
}
|
6012
5901
|
break;
|
6013
5902
|
}
|
6014
5903
|
VALUE res = rb_hash_new();
|
6015
|
-
rb_hash_aset(res, rb_id2sym(rb_intern("status")),
|
6016
|
-
rb_hash_aset(
|
6017
|
-
res, rb_id2sym(rb_intern("analysis")), rb_external_str_new(resp.analysis.data(), static_cast<long>(resp.analysis.size())));
|
5904
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("status")), cb_str_new(resp.status));
|
5905
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("analysis")), cb_str_new(resp.analysis));
|
6018
5906
|
return res;
|
6019
5907
|
} while (false);
|
6020
5908
|
rb_exc_raise(exc);
|
@@ -6044,7 +5932,7 @@ cb_Backend_document_search(VALUE self, VALUE index_name, VALUE query, VALUE opti
|
|
6044
5932
|
Check_Type(client_context_id, T_STRING);
|
6045
5933
|
req.client_context_id.assign(RSTRING_PTR(client_context_id), static_cast<size_t>(RSTRING_LEN(client_context_id)));
|
6046
5934
|
}
|
6047
|
-
exc =
|
5935
|
+
exc = cb_extract_timeout(req, options);
|
6048
5936
|
if (!NIL_P(exc)) {
|
6049
5937
|
break;
|
6050
5938
|
}
|
@@ -6182,25 +6070,22 @@ cb_Backend_document_search(VALUE self, VALUE index_name, VALUE query, VALUE opti
|
|
6182
6070
|
VALUE raw_params = rb_hash_aref(options, rb_id2sym(rb_intern("raw_parameters")));
|
6183
6071
|
if (!NIL_P(raw_params)) {
|
6184
6072
|
Check_Type(raw_params, T_HASH);
|
6185
|
-
rb_hash_foreach(raw_params, INT_FUNC(
|
6073
|
+
rb_hash_foreach(raw_params, INT_FUNC(cb_for_each_named_param), reinterpret_cast<VALUE>(&req));
|
6186
6074
|
}
|
6187
6075
|
|
6188
6076
|
auto barrier = std::make_shared<std::promise<couchbase::operations::search_response>>();
|
6189
6077
|
auto f = barrier->get_future();
|
6190
6078
|
backend->cluster->execute_http(req, [barrier](couchbase::operations::search_response&& resp) mutable { barrier->set_value(resp); });
|
6191
|
-
auto resp = f
|
6079
|
+
auto resp = cb_wait_for_future(f);
|
6192
6080
|
if (resp.ctx.ec) {
|
6193
6081
|
exc =
|
6194
|
-
|
6082
|
+
cb_map_error_code(resp.ctx, fmt::format("unable to perform search query for index \"{}\": {}", req.index_name, resp.error));
|
6195
6083
|
break;
|
6196
6084
|
}
|
6197
6085
|
VALUE res = rb_hash_new();
|
6198
6086
|
|
6199
6087
|
VALUE meta_data = rb_hash_new();
|
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())));
|
6088
|
+
rb_hash_aset(meta_data, rb_id2sym(rb_intern("client_context_id")), cb_str_new(resp.meta_data.client_context_id));
|
6204
6089
|
|
6205
6090
|
VALUE metrics = rb_hash_new();
|
6206
6091
|
rb_hash_aset(metrics,
|
@@ -6214,10 +6099,8 @@ cb_Backend_document_search(VALUE self, VALUE index_name, VALUE query, VALUE opti
|
|
6214
6099
|
|
6215
6100
|
if (!resp.meta_data.errors.empty()) {
|
6216
6101
|
VALUE errors = rb_hash_new();
|
6217
|
-
for (auto err : resp.meta_data.errors) {
|
6218
|
-
rb_hash_aset(errors,
|
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())));
|
6102
|
+
for (const auto& err : resp.meta_data.errors) {
|
6103
|
+
rb_hash_aset(errors, cb_str_new(err.first), cb_str_new(err.second));
|
6221
6104
|
}
|
6222
6105
|
rb_hash_aset(meta_data, rb_id2sym(rb_intern("errors")), errors);
|
6223
6106
|
}
|
@@ -6227,16 +6110,14 @@ cb_Backend_document_search(VALUE self, VALUE index_name, VALUE query, VALUE opti
|
|
6227
6110
|
VALUE rows = rb_ary_new_capa(static_cast<long>(resp.rows.size()));
|
6228
6111
|
for (const auto& entry : resp.rows) {
|
6229
6112
|
VALUE row = rb_hash_new();
|
6230
|
-
rb_hash_aset(
|
6231
|
-
|
6232
|
-
rb_hash_aset(row, rb_id2sym(rb_intern("id")), rb_external_str_new(entry.id.data(), static_cast<long>(entry.id.size())));
|
6113
|
+
rb_hash_aset(row, rb_id2sym(rb_intern("index")), cb_str_new(entry.index));
|
6114
|
+
rb_hash_aset(row, rb_id2sym(rb_intern("id")), cb_str_new(entry.id));
|
6233
6115
|
rb_hash_aset(row, rb_id2sym(rb_intern("score")), DBL2NUM(entry.score));
|
6234
6116
|
VALUE locations = rb_ary_new_capa(static_cast<long>(entry.locations.size()));
|
6235
6117
|
for (const auto& loc : entry.locations) {
|
6236
6118
|
VALUE location = rb_hash_new();
|
6237
|
-
rb_hash_aset(
|
6238
|
-
|
6239
|
-
rb_hash_aset(row, rb_id2sym(rb_intern("term")), rb_external_str_new(loc.term.data(), static_cast<long>(loc.term.size())));
|
6119
|
+
rb_hash_aset(row, rb_id2sym(rb_intern("field")), cb_str_new(loc.field));
|
6120
|
+
rb_hash_aset(row, rb_id2sym(rb_intern("term")), cb_str_new(loc.term));
|
6240
6121
|
rb_hash_aset(row, rb_id2sym(rb_intern("pos")), ULL2NUM(loc.position));
|
6241
6122
|
rb_hash_aset(row, rb_id2sym(rb_intern("start_offset")), ULL2NUM(loc.start_offset));
|
6242
6123
|
rb_hash_aset(row, rb_id2sym(rb_intern("end_offset")), ULL2NUM(loc.end_offset));
|
@@ -6255,22 +6136,17 @@ cb_Backend_document_search(VALUE self, VALUE index_name, VALUE query, VALUE opti
|
|
6255
6136
|
for (const auto& field_fragments : entry.fragments) {
|
6256
6137
|
VALUE fragments_list = rb_ary_new_capa(static_cast<long>(field_fragments.second.size()));
|
6257
6138
|
for (const auto& fragment : field_fragments.second) {
|
6258
|
-
rb_ary_push(fragments_list,
|
6139
|
+
rb_ary_push(fragments_list, cb_str_new(fragment));
|
6259
6140
|
}
|
6260
|
-
rb_hash_aset(fragments,
|
6261
|
-
rb_external_str_new(field_fragments.first.data(), static_cast<long>(field_fragments.first.size())),
|
6262
|
-
fragments_list);
|
6141
|
+
rb_hash_aset(fragments, cb_str_new(field_fragments.first), fragments_list);
|
6263
6142
|
}
|
6264
6143
|
rb_hash_aset(row, rb_id2sym(rb_intern("fragments")), fragments);
|
6265
6144
|
}
|
6266
6145
|
if (!entry.fields.empty()) {
|
6267
|
-
rb_hash_aset(
|
6268
|
-
row, rb_id2sym(rb_intern("fields")), rb_external_str_new(entry.fields.data(), static_cast<long>(entry.fields.size())));
|
6146
|
+
rb_hash_aset(row, rb_id2sym(rb_intern("fields")), cb_str_new(entry.fields));
|
6269
6147
|
}
|
6270
6148
|
if (!entry.explanation.empty()) {
|
6271
|
-
rb_hash_aset(row,
|
6272
|
-
rb_id2sym(rb_intern("explanation")),
|
6273
|
-
rb_external_str_new(entry.explanation.data(), static_cast<long>(entry.explanation.size())));
|
6149
|
+
rb_hash_aset(row, rb_id2sym(rb_intern("explanation")), cb_str_new(entry.explanation));
|
6274
6150
|
}
|
6275
6151
|
rb_ary_push(rows, row);
|
6276
6152
|
}
|
@@ -6280,10 +6156,9 @@ cb_Backend_document_search(VALUE self, VALUE index_name, VALUE query, VALUE opti
|
|
6280
6156
|
VALUE result_facets = rb_hash_new();
|
6281
6157
|
for (const auto& entry : resp.facets) {
|
6282
6158
|
VALUE facet = rb_hash_new();
|
6283
|
-
VALUE facet_name =
|
6159
|
+
VALUE facet_name = cb_str_new(entry.name);
|
6284
6160
|
rb_hash_aset(facet, rb_id2sym(rb_intern("name")), facet_name);
|
6285
|
-
rb_hash_aset(
|
6286
|
-
facet, rb_id2sym(rb_intern("field")), rb_external_str_new(entry.field.data(), static_cast<long>(entry.field.size())));
|
6161
|
+
rb_hash_aset(facet, rb_id2sym(rb_intern("field")), cb_str_new(entry.field));
|
6287
6162
|
rb_hash_aset(facet, rb_id2sym(rb_intern("total")), ULL2NUM(entry.total));
|
6288
6163
|
rb_hash_aset(facet, rb_id2sym(rb_intern("missing")), ULL2NUM(entry.missing));
|
6289
6164
|
rb_hash_aset(facet, rb_id2sym(rb_intern("other")), ULL2NUM(entry.other));
|
@@ -6291,8 +6166,7 @@ cb_Backend_document_search(VALUE self, VALUE index_name, VALUE query, VALUE opti
|
|
6291
6166
|
VALUE terms = rb_ary_new_capa(static_cast<long>(entry.terms.size()));
|
6292
6167
|
for (const auto& item : entry.terms) {
|
6293
6168
|
VALUE term = rb_hash_new();
|
6294
|
-
rb_hash_aset(
|
6295
|
-
term, rb_id2sym(rb_intern("term")), rb_external_str_new(item.term.data(), static_cast<long>(item.term.size())));
|
6169
|
+
rb_hash_aset(term, rb_id2sym(rb_intern("term")), cb_str_new(item.term));
|
6296
6170
|
rb_hash_aset(term, rb_id2sym(rb_intern("count")), ULL2NUM(item.count));
|
6297
6171
|
rb_ary_push(terms, term);
|
6298
6172
|
}
|
@@ -6301,19 +6175,13 @@ cb_Backend_document_search(VALUE self, VALUE index_name, VALUE query, VALUE opti
|
|
6301
6175
|
VALUE date_ranges = rb_ary_new_capa(static_cast<long>(entry.date_ranges.size()));
|
6302
6176
|
for (const auto& item : entry.date_ranges) {
|
6303
6177
|
VALUE date_range = rb_hash_new();
|
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())));
|
6178
|
+
rb_hash_aset(date_range, rb_id2sym(rb_intern("name")), cb_str_new(item.name));
|
6307
6179
|
rb_hash_aset(date_range, rb_id2sym(rb_intern("count")), ULL2NUM(item.count));
|
6308
6180
|
if (item.start) {
|
6309
|
-
rb_hash_aset(date_range,
|
6310
|
-
rb_id2sym(rb_intern("start_time")),
|
6311
|
-
rb_external_str_new(item.start->data(), static_cast<long>(item.start->size())));
|
6181
|
+
rb_hash_aset(date_range, rb_id2sym(rb_intern("start_time")), cb_str_new(item.start.value()));
|
6312
6182
|
}
|
6313
6183
|
if (item.end) {
|
6314
|
-
rb_hash_aset(date_range,
|
6315
|
-
rb_id2sym(rb_intern("end_time")),
|
6316
|
-
rb_external_str_new(item.end->data(), static_cast<long>(item.end->size())));
|
6184
|
+
rb_hash_aset(date_range, rb_id2sym(rb_intern("end_time")), cb_str_new(item.end.value()));
|
6317
6185
|
}
|
6318
6186
|
rb_ary_push(date_ranges, date_range);
|
6319
6187
|
}
|
@@ -6322,9 +6190,7 @@ cb_Backend_document_search(VALUE self, VALUE index_name, VALUE query, VALUE opti
|
|
6322
6190
|
VALUE numeric_ranges = rb_ary_new_capa(static_cast<long>(entry.numeric_ranges.size()));
|
6323
6191
|
for (const auto& item : entry.numeric_ranges) {
|
6324
6192
|
VALUE numeric_range = rb_hash_new();
|
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())));
|
6193
|
+
rb_hash_aset(numeric_range, rb_id2sym(rb_intern("name")), cb_str_new(item.name));
|
6328
6194
|
rb_hash_aset(numeric_range, rb_id2sym(rb_intern("count")), ULL2NUM(item.count));
|
6329
6195
|
if (std::holds_alternative<double>(item.min)) {
|
6330
6196
|
rb_hash_aset(numeric_range, rb_id2sym(rb_intern("min")), DBL2NUM(std::get<double>(item.min)));
|
@@ -6385,18 +6251,16 @@ cb_Backend_dns_srv(VALUE self, VALUE hostname, VALUE service)
|
|
6385
6251
|
barrier->set_value(resp);
|
6386
6252
|
});
|
6387
6253
|
ctx.run();
|
6388
|
-
auto resp = f
|
6254
|
+
auto resp = cb_wait_for_future(f);
|
6389
6255
|
if (resp.ec) {
|
6390
|
-
exc =
|
6256
|
+
exc = cb_map_error_code(resp.ec, fmt::format("DNS SRV query failure for name \"{}\" (service: {})", host_name, service_name));
|
6391
6257
|
break;
|
6392
6258
|
}
|
6393
6259
|
|
6394
6260
|
VALUE res = rb_ary_new();
|
6395
6261
|
for (const auto& target : resp.targets) {
|
6396
6262
|
VALUE addr = rb_hash_new();
|
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())));
|
6263
|
+
rb_hash_aset(addr, rb_id2sym(rb_intern("hostname")), cb_str_new(target.hostname));
|
6400
6264
|
rb_hash_aset(addr, rb_id2sym(rb_intern("port")), UINT2NUM(target.port));
|
6401
6265
|
rb_ary_push(res, addr);
|
6402
6266
|
}
|
@@ -6420,7 +6284,7 @@ cb_Backend_analytics_get_pending_mutations(VALUE self, VALUE timeout)
|
|
6420
6284
|
VALUE exc = Qnil;
|
6421
6285
|
do {
|
6422
6286
|
couchbase::operations::analytics_get_pending_mutations_request req{};
|
6423
|
-
exc =
|
6287
|
+
exc = cb_extract_timeout(req, timeout);
|
6424
6288
|
if (!NIL_P(exc)) {
|
6425
6289
|
break;
|
6426
6290
|
}
|
@@ -6428,13 +6292,13 @@ cb_Backend_analytics_get_pending_mutations(VALUE self, VALUE timeout)
|
|
6428
6292
|
auto f = barrier->get_future();
|
6429
6293
|
backend->cluster->execute_http(
|
6430
6294
|
req, [barrier](couchbase::operations::analytics_get_pending_mutations_response&& resp) mutable { barrier->set_value(resp); });
|
6431
|
-
auto resp = f
|
6295
|
+
auto resp = cb_wait_for_future(f);
|
6432
6296
|
if (resp.ctx.ec) {
|
6433
6297
|
if (resp.errors.empty()) {
|
6434
|
-
exc =
|
6298
|
+
exc = cb_map_error_code(resp.ctx, "unable to get pending mutations for the analytics service");
|
6435
6299
|
} else {
|
6436
6300
|
const auto& first_error = resp.errors.front();
|
6437
|
-
exc =
|
6301
|
+
exc = cb_map_error_code(
|
6438
6302
|
resp.ctx,
|
6439
6303
|
fmt::format("unable to get pending mutations for the analytics service ({}: {})", first_error.code, first_error.message));
|
6440
6304
|
}
|
@@ -6442,7 +6306,7 @@ cb_Backend_analytics_get_pending_mutations(VALUE self, VALUE timeout)
|
|
6442
6306
|
}
|
6443
6307
|
VALUE res = rb_hash_new();
|
6444
6308
|
for (const auto& entry : resp.stats) {
|
6445
|
-
rb_hash_aset(res,
|
6309
|
+
rb_hash_aset(res, cb_str_new(entry.first), ULL2NUM(entry.second));
|
6446
6310
|
}
|
6447
6311
|
return res;
|
6448
6312
|
} while (false);
|
@@ -6464,7 +6328,7 @@ cb_Backend_analytics_dataset_get_all(VALUE self, VALUE timeout)
|
|
6464
6328
|
VALUE exc = Qnil;
|
6465
6329
|
do {
|
6466
6330
|
couchbase::operations::analytics_dataset_get_all_request req{};
|
6467
|
-
exc =
|
6331
|
+
exc = cb_extract_timeout(req, timeout);
|
6468
6332
|
if (!NIL_P(exc)) {
|
6469
6333
|
break;
|
6470
6334
|
}
|
@@ -6472,29 +6336,24 @@ cb_Backend_analytics_dataset_get_all(VALUE self, VALUE timeout)
|
|
6472
6336
|
auto f = barrier->get_future();
|
6473
6337
|
backend->cluster->execute_http(
|
6474
6338
|
req, [barrier](couchbase::operations::analytics_dataset_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
6475
|
-
auto resp = f
|
6339
|
+
auto resp = cb_wait_for_future(f);
|
6476
6340
|
if (resp.ctx.ec) {
|
6477
6341
|
if (resp.errors.empty()) {
|
6478
|
-
exc =
|
6342
|
+
exc = cb_map_error_code(resp.ctx, "unable to fetch all datasets");
|
6479
6343
|
} else {
|
6480
6344
|
const auto& first_error = resp.errors.front();
|
6481
6345
|
exc =
|
6482
|
-
|
6346
|
+
cb_map_error_code(resp.ctx, fmt::format("unable to fetch all datasets ({}: {})", first_error.code, first_error.message));
|
6483
6347
|
}
|
6484
6348
|
break;
|
6485
6349
|
}
|
6486
6350
|
VALUE res = rb_ary_new_capa(static_cast<long>(resp.datasets.size()));
|
6487
6351
|
for (const auto& ds : resp.datasets) {
|
6488
6352
|
VALUE dataset = rb_hash_new();
|
6489
|
-
rb_hash_aset(dataset, rb_id2sym(rb_intern("name")),
|
6490
|
-
rb_hash_aset(dataset,
|
6491
|
-
|
6492
|
-
|
6493
|
-
rb_hash_aset(
|
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())));
|
6353
|
+
rb_hash_aset(dataset, rb_id2sym(rb_intern("name")), cb_str_new(ds.name));
|
6354
|
+
rb_hash_aset(dataset, rb_id2sym(rb_intern("dataverse_name")), cb_str_new(ds.dataverse_name));
|
6355
|
+
rb_hash_aset(dataset, rb_id2sym(rb_intern("link_name")), cb_str_new(ds.link_name));
|
6356
|
+
rb_hash_aset(dataset, rb_id2sym(rb_intern("bucket_name")), cb_str_new(ds.bucket_name));
|
6498
6357
|
rb_ary_push(res, dataset);
|
6499
6358
|
}
|
6500
6359
|
return res;
|
@@ -6522,7 +6381,7 @@ cb_Backend_analytics_dataset_drop(VALUE self, VALUE dataset_name, VALUE datavers
|
|
6522
6381
|
VALUE exc = Qnil;
|
6523
6382
|
do {
|
6524
6383
|
couchbase::operations::analytics_dataset_drop_request req{};
|
6525
|
-
exc =
|
6384
|
+
exc = cb_extract_timeout(req, timeout);
|
6526
6385
|
if (!NIL_P(exc)) {
|
6527
6386
|
break;
|
6528
6387
|
}
|
@@ -6537,18 +6396,18 @@ cb_Backend_analytics_dataset_drop(VALUE self, VALUE dataset_name, VALUE datavers
|
|
6537
6396
|
auto f = barrier->get_future();
|
6538
6397
|
backend->cluster->execute_http(
|
6539
6398
|
req, [barrier](couchbase::operations::analytics_dataset_drop_response&& resp) mutable { barrier->set_value(resp); });
|
6540
|
-
auto resp = f
|
6399
|
+
auto resp = cb_wait_for_future(f);
|
6541
6400
|
if (resp.ctx.ec) {
|
6542
6401
|
if (resp.errors.empty()) {
|
6543
|
-
exc =
|
6402
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to drop dataset `{}`.`{}`", req.dataverse_name, req.dataset_name));
|
6544
6403
|
} else {
|
6545
6404
|
const auto& first_error = resp.errors.front();
|
6546
|
-
exc =
|
6547
|
-
|
6548
|
-
|
6549
|
-
|
6550
|
-
|
6551
|
-
|
6405
|
+
exc = cb_map_error_code(resp.ctx,
|
6406
|
+
fmt::format("unable to drop dataset `{}`.`{}` ({}: {})",
|
6407
|
+
req.dataverse_name,
|
6408
|
+
req.dataset_name,
|
6409
|
+
first_error.code,
|
6410
|
+
first_error.message));
|
6552
6411
|
}
|
6553
6412
|
break;
|
6554
6413
|
}
|
@@ -6587,7 +6446,7 @@ cb_Backend_analytics_dataset_create(VALUE self,
|
|
6587
6446
|
VALUE exc = Qnil;
|
6588
6447
|
do {
|
6589
6448
|
couchbase::operations::analytics_dataset_create_request req{};
|
6590
|
-
exc =
|
6449
|
+
exc = cb_extract_timeout(req, timeout);
|
6591
6450
|
if (!NIL_P(exc)) {
|
6592
6451
|
break;
|
6593
6452
|
}
|
@@ -6606,18 +6465,18 @@ cb_Backend_analytics_dataset_create(VALUE self,
|
|
6606
6465
|
auto f = barrier->get_future();
|
6607
6466
|
backend->cluster->execute_http(
|
6608
6467
|
req, [barrier](couchbase::operations::analytics_dataset_create_response&& resp) mutable { barrier->set_value(resp); });
|
6609
|
-
auto resp = f
|
6468
|
+
auto resp = cb_wait_for_future(f);
|
6610
6469
|
if (resp.ctx.ec) {
|
6611
6470
|
if (resp.errors.empty()) {
|
6612
|
-
exc =
|
6471
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to create dataset `{}`.`{}`", req.dataverse_name, req.dataset_name));
|
6613
6472
|
} else {
|
6614
6473
|
const auto& first_error = resp.errors.front();
|
6615
|
-
exc =
|
6616
|
-
|
6617
|
-
|
6618
|
-
|
6619
|
-
|
6620
|
-
|
6474
|
+
exc = cb_map_error_code(resp.ctx,
|
6475
|
+
fmt::format("unable to create dataset `{}`.`{}` ({}: {})",
|
6476
|
+
req.dataverse_name,
|
6477
|
+
req.dataset_name,
|
6478
|
+
first_error.code,
|
6479
|
+
first_error.message));
|
6621
6480
|
}
|
6622
6481
|
break;
|
6623
6482
|
}
|
@@ -6643,7 +6502,7 @@ cb_Backend_analytics_dataverse_drop(VALUE self, VALUE dataverse_name, VALUE igno
|
|
6643
6502
|
VALUE exc = Qnil;
|
6644
6503
|
do {
|
6645
6504
|
couchbase::operations::analytics_dataverse_drop_request req{};
|
6646
|
-
exc =
|
6505
|
+
exc = cb_extract_timeout(req, timeout);
|
6647
6506
|
if (!NIL_P(exc)) {
|
6648
6507
|
break;
|
6649
6508
|
}
|
@@ -6655,13 +6514,13 @@ cb_Backend_analytics_dataverse_drop(VALUE self, VALUE dataverse_name, VALUE igno
|
|
6655
6514
|
auto f = barrier->get_future();
|
6656
6515
|
backend->cluster->execute_http(
|
6657
6516
|
req, [barrier](couchbase::operations::analytics_dataverse_drop_response&& resp) mutable { barrier->set_value(resp); });
|
6658
|
-
auto resp = f
|
6517
|
+
auto resp = cb_wait_for_future(f);
|
6659
6518
|
if (resp.ctx.ec) {
|
6660
6519
|
if (resp.errors.empty()) {
|
6661
|
-
exc =
|
6520
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to drop dataverse `{}`", req.dataverse_name));
|
6662
6521
|
} else {
|
6663
6522
|
const auto& first_error = resp.errors.front();
|
6664
|
-
exc =
|
6523
|
+
exc = cb_map_error_code(
|
6665
6524
|
resp.ctx,
|
6666
6525
|
fmt::format("unable to drop dataverse `{}` ({}: {})", req.dataverse_name, first_error.code, first_error.message));
|
6667
6526
|
}
|
@@ -6692,7 +6551,7 @@ cb_Backend_analytics_dataverse_create(VALUE self, VALUE dataverse_name, VALUE ig
|
|
6692
6551
|
VALUE exc = Qnil;
|
6693
6552
|
do {
|
6694
6553
|
couchbase::operations::analytics_dataverse_create_request req{};
|
6695
|
-
exc =
|
6554
|
+
exc = cb_extract_timeout(req, timeout);
|
6696
6555
|
if (!NIL_P(exc)) {
|
6697
6556
|
break;
|
6698
6557
|
}
|
@@ -6704,13 +6563,13 @@ cb_Backend_analytics_dataverse_create(VALUE self, VALUE dataverse_name, VALUE ig
|
|
6704
6563
|
auto f = barrier->get_future();
|
6705
6564
|
backend->cluster->execute_http(
|
6706
6565
|
req, [barrier](couchbase::operations::analytics_dataverse_create_response&& resp) mutable { barrier->set_value(resp); });
|
6707
|
-
auto resp = f
|
6566
|
+
auto resp = cb_wait_for_future(f);
|
6708
6567
|
if (resp.ctx.ec) {
|
6709
6568
|
if (resp.errors.empty()) {
|
6710
|
-
exc =
|
6569
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to create dataverse `{}`", req.dataverse_name));
|
6711
6570
|
} else {
|
6712
6571
|
const auto& first_error = resp.errors.front();
|
6713
|
-
exc =
|
6572
|
+
exc = cb_map_error_code(
|
6714
6573
|
resp.ctx,
|
6715
6574
|
fmt::format("unable to create dataverse `{}` ({}: {})", req.dataverse_name, first_error.code, first_error.message));
|
6716
6575
|
}
|
@@ -6736,7 +6595,7 @@ cb_Backend_analytics_index_get_all(VALUE self, VALUE timeout)
|
|
6736
6595
|
VALUE exc = Qnil;
|
6737
6596
|
do {
|
6738
6597
|
couchbase::operations::analytics_index_get_all_request req{};
|
6739
|
-
exc =
|
6598
|
+
exc = cb_extract_timeout(req, timeout);
|
6740
6599
|
if (!NIL_P(exc)) {
|
6741
6600
|
break;
|
6742
6601
|
}
|
@@ -6744,27 +6603,23 @@ cb_Backend_analytics_index_get_all(VALUE self, VALUE timeout)
|
|
6744
6603
|
auto f = barrier->get_future();
|
6745
6604
|
backend->cluster->execute_http(
|
6746
6605
|
req, [barrier](couchbase::operations::analytics_index_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
6747
|
-
auto resp = f
|
6606
|
+
auto resp = cb_wait_for_future(f);
|
6748
6607
|
if (resp.ctx.ec) {
|
6749
6608
|
if (resp.errors.empty()) {
|
6750
|
-
exc =
|
6609
|
+
exc = cb_map_error_code(resp.ctx, "unable to fetch all indexes");
|
6751
6610
|
} else {
|
6752
6611
|
const auto& first_error = resp.errors.front();
|
6753
6612
|
exc =
|
6754
|
-
|
6613
|
+
cb_map_error_code(resp.ctx, fmt::format("unable to fetch all indexes ({}: {})", first_error.code, first_error.message));
|
6755
6614
|
}
|
6756
6615
|
break;
|
6757
6616
|
}
|
6758
6617
|
VALUE res = rb_ary_new_capa(static_cast<long>(resp.indexes.size()));
|
6759
6618
|
for (const auto& idx : resp.indexes) {
|
6760
6619
|
VALUE index = rb_hash_new();
|
6761
|
-
rb_hash_aset(index, rb_id2sym(rb_intern("name")),
|
6762
|
-
rb_hash_aset(index,
|
6763
|
-
|
6764
|
-
rb_external_str_new(idx.dataset_name.data(), static_cast<long>(idx.dataset_name.size())));
|
6765
|
-
rb_hash_aset(index,
|
6766
|
-
rb_id2sym(rb_intern("dataverse_name")),
|
6767
|
-
rb_external_str_new(idx.dataverse_name.data(), static_cast<long>(idx.dataverse_name.size())));
|
6620
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("name")), cb_str_new(idx.name));
|
6621
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("dataset_name")), cb_str_new(idx.dataset_name));
|
6622
|
+
rb_hash_aset(index, rb_id2sym(rb_intern("dataverse_name")), cb_str_new(idx.dataverse_name));
|
6768
6623
|
rb_hash_aset(index, rb_id2sym(rb_intern("is_primary")), idx.is_primary ? Qtrue : Qfalse);
|
6769
6624
|
rb_ary_push(res, index);
|
6770
6625
|
}
|
@@ -6801,7 +6656,7 @@ cb_Backend_analytics_index_create(VALUE self,
|
|
6801
6656
|
VALUE exc = Qnil;
|
6802
6657
|
do {
|
6803
6658
|
couchbase::operations::analytics_index_create_request req{};
|
6804
|
-
exc =
|
6659
|
+
exc = cb_extract_timeout(req, timeout);
|
6805
6660
|
if (!NIL_P(exc)) {
|
6806
6661
|
break;
|
6807
6662
|
}
|
@@ -6828,20 +6683,20 @@ cb_Backend_analytics_index_create(VALUE self,
|
|
6828
6683
|
auto f = barrier->get_future();
|
6829
6684
|
backend->cluster->execute_http(
|
6830
6685
|
req, [barrier](couchbase::operations::analytics_index_create_response&& resp) mutable { barrier->set_value(resp); });
|
6831
|
-
auto resp = f
|
6686
|
+
auto resp = cb_wait_for_future(f);
|
6832
6687
|
if (resp.ctx.ec) {
|
6833
6688
|
if (resp.errors.empty()) {
|
6834
|
-
exc =
|
6689
|
+
exc = cb_map_error_code(
|
6835
6690
|
resp.ctx, fmt::format("unable to create index `{}` on `{}`.`{}`", req.index_name, req.dataverse_name, req.dataset_name));
|
6836
6691
|
} else {
|
6837
6692
|
const auto& first_error = resp.errors.front();
|
6838
|
-
exc =
|
6839
|
-
|
6840
|
-
|
6841
|
-
|
6842
|
-
|
6843
|
-
|
6844
|
-
|
6693
|
+
exc = cb_map_error_code(resp.ctx,
|
6694
|
+
fmt::format("unable to create index `{}` on `{}`.`{}` ({}: {})",
|
6695
|
+
req.index_name,
|
6696
|
+
req.dataverse_name,
|
6697
|
+
req.dataset_name,
|
6698
|
+
first_error.code,
|
6699
|
+
first_error.message));
|
6845
6700
|
}
|
6846
6701
|
break;
|
6847
6702
|
}
|
@@ -6876,7 +6731,7 @@ cb_Backend_analytics_index_drop(VALUE self,
|
|
6876
6731
|
VALUE exc = Qnil;
|
6877
6732
|
do {
|
6878
6733
|
couchbase::operations::analytics_index_drop_request req{};
|
6879
|
-
exc =
|
6734
|
+
exc = cb_extract_timeout(req, timeout);
|
6880
6735
|
if (!NIL_P(exc)) {
|
6881
6736
|
break;
|
6882
6737
|
}
|
@@ -6892,20 +6747,20 @@ cb_Backend_analytics_index_drop(VALUE self,
|
|
6892
6747
|
auto f = barrier->get_future();
|
6893
6748
|
backend->cluster->execute_http(
|
6894
6749
|
req, [barrier](couchbase::operations::analytics_index_drop_response&& resp) mutable { barrier->set_value(resp); });
|
6895
|
-
auto resp = f
|
6750
|
+
auto resp = cb_wait_for_future(f);
|
6896
6751
|
if (resp.ctx.ec) {
|
6897
6752
|
if (resp.errors.empty()) {
|
6898
|
-
exc =
|
6753
|
+
exc = cb_map_error_code(
|
6899
6754
|
resp.ctx, fmt::format("unable to drop index `{}`.`{}`.`{}`", req.dataverse_name, req.dataset_name, req.index_name));
|
6900
6755
|
} else {
|
6901
6756
|
const auto& first_error = resp.errors.front();
|
6902
|
-
exc =
|
6903
|
-
|
6904
|
-
|
6905
|
-
|
6906
|
-
|
6907
|
-
|
6908
|
-
|
6757
|
+
exc = cb_map_error_code(resp.ctx,
|
6758
|
+
fmt::format("unable to drop index `{}`.`{}`.`{}` ({}: {})",
|
6759
|
+
req.dataverse_name,
|
6760
|
+
req.dataset_name,
|
6761
|
+
req.index_name,
|
6762
|
+
first_error.code,
|
6763
|
+
first_error.message));
|
6909
6764
|
}
|
6910
6765
|
break;
|
6911
6766
|
}
|
@@ -6934,7 +6789,7 @@ cb_Backend_analytics_link_connect(VALUE self, VALUE link_name, VALUE force, VALU
|
|
6934
6789
|
VALUE exc = Qnil;
|
6935
6790
|
do {
|
6936
6791
|
couchbase::operations::analytics_link_connect_request req{};
|
6937
|
-
exc =
|
6792
|
+
exc = cb_extract_timeout(req, timeout);
|
6938
6793
|
if (!NIL_P(exc)) {
|
6939
6794
|
break;
|
6940
6795
|
}
|
@@ -6949,18 +6804,18 @@ cb_Backend_analytics_link_connect(VALUE self, VALUE link_name, VALUE force, VALU
|
|
6949
6804
|
auto f = barrier->get_future();
|
6950
6805
|
backend->cluster->execute_http(
|
6951
6806
|
req, [barrier](couchbase::operations::analytics_link_connect_response&& resp) mutable { barrier->set_value(resp); });
|
6952
|
-
auto resp = f
|
6807
|
+
auto resp = cb_wait_for_future(f);
|
6953
6808
|
if (resp.ctx.ec) {
|
6954
6809
|
if (resp.errors.empty()) {
|
6955
|
-
exc =
|
6810
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to connect link `{}` on `{}`", req.link_name, req.dataverse_name));
|
6956
6811
|
} else {
|
6957
6812
|
const auto& first_error = resp.errors.front();
|
6958
|
-
exc =
|
6959
|
-
|
6960
|
-
|
6961
|
-
|
6962
|
-
|
6963
|
-
|
6813
|
+
exc = cb_map_error_code(resp.ctx,
|
6814
|
+
fmt::format("unable to connect link `{}` on `{}` ({}: {})",
|
6815
|
+
req.link_name,
|
6816
|
+
req.dataverse_name,
|
6817
|
+
first_error.code,
|
6818
|
+
first_error.message));
|
6964
6819
|
}
|
6965
6820
|
break;
|
6966
6821
|
}
|
@@ -6989,7 +6844,7 @@ cb_Backend_analytics_link_disconnect(VALUE self, VALUE link_name, VALUE datavers
|
|
6989
6844
|
VALUE exc = Qnil;
|
6990
6845
|
do {
|
6991
6846
|
couchbase::operations::analytics_link_disconnect_request req{};
|
6992
|
-
exc =
|
6847
|
+
exc = cb_extract_timeout(req, timeout);
|
6993
6848
|
if (!NIL_P(exc)) {
|
6994
6849
|
break;
|
6995
6850
|
}
|
@@ -7001,19 +6856,18 @@ cb_Backend_analytics_link_disconnect(VALUE self, VALUE link_name, VALUE datavers
|
|
7001
6856
|
auto f = barrier->get_future();
|
7002
6857
|
backend->cluster->execute_http(
|
7003
6858
|
req, [barrier](couchbase::operations::analytics_link_disconnect_response&& resp) mutable { barrier->set_value(resp); });
|
7004
|
-
auto resp = f
|
6859
|
+
auto resp = cb_wait_for_future(f);
|
7005
6860
|
if (resp.ctx.ec) {
|
7006
6861
|
if (resp.errors.empty()) {
|
7007
|
-
exc =
|
7008
|
-
cb__map_error_code(resp.ctx, fmt::format("unable to disconnect link `{}` on `{}`", req.link_name, req.dataverse_name));
|
6862
|
+
exc = cb_map_error_code(resp.ctx, fmt::format("unable to disconnect link `{}` on `{}`", req.link_name, req.dataverse_name));
|
7009
6863
|
} else {
|
7010
6864
|
const auto& first_error = resp.errors.front();
|
7011
|
-
exc =
|
7012
|
-
|
7013
|
-
|
7014
|
-
|
7015
|
-
|
7016
|
-
|
6865
|
+
exc = cb_map_error_code(resp.ctx,
|
6866
|
+
fmt::format("unable to disconnect link `{}` on `{}` ({}: {})",
|
6867
|
+
req.link_name,
|
6868
|
+
req.dataverse_name,
|
6869
|
+
first_error.code,
|
6870
|
+
first_error.message));
|
7017
6871
|
}
|
7018
6872
|
break;
|
7019
6873
|
}
|
@@ -7024,7 +6878,7 @@ cb_Backend_analytics_link_disconnect(VALUE self, VALUE link_name, VALUE datavers
|
|
7024
6878
|
}
|
7025
6879
|
|
7026
6880
|
static int
|
7027
|
-
|
6881
|
+
cb_for_each_named_param_analytics(VALUE key, VALUE value, VALUE arg)
|
7028
6882
|
{
|
7029
6883
|
auto* preq = reinterpret_cast<couchbase::operations::analytics_request*>(arg);
|
7030
6884
|
Check_Type(key, T_STRING);
|
@@ -7058,7 +6912,7 @@ cb_Backend_document_analytics(VALUE self, VALUE statement, VALUE options)
|
|
7058
6912
|
Check_Type(client_context_id, T_STRING);
|
7059
6913
|
req.client_context_id.assign(RSTRING_PTR(client_context_id), static_cast<size_t>(RSTRING_LEN(client_context_id)));
|
7060
6914
|
}
|
7061
|
-
exc =
|
6915
|
+
exc = cb_extract_timeout(req, options);
|
7062
6916
|
if (!NIL_P(exc)) {
|
7063
6917
|
break;
|
7064
6918
|
}
|
@@ -7085,7 +6939,7 @@ cb_Backend_document_analytics(VALUE self, VALUE statement, VALUE options)
|
|
7085
6939
|
VALUE named_params = rb_hash_aref(options, rb_id2sym(rb_intern("named_parameters")));
|
7086
6940
|
if (!NIL_P(named_params)) {
|
7087
6941
|
Check_Type(named_params, T_HASH);
|
7088
|
-
rb_hash_foreach(named_params, INT_FUNC(
|
6942
|
+
rb_hash_foreach(named_params, INT_FUNC(cb_for_each_named_param_analytics), reinterpret_cast<VALUE>(&req));
|
7089
6943
|
}
|
7090
6944
|
VALUE scan_consistency = rb_hash_aref(options, rb_id2sym(rb_intern("scan_consistency")));
|
7091
6945
|
if (!NIL_P(scan_consistency)) {
|
@@ -7118,21 +6972,21 @@ cb_Backend_document_analytics(VALUE self, VALUE statement, VALUE options)
|
|
7118
6972
|
VALUE raw_params = rb_hash_aref(options, rb_id2sym(rb_intern("raw_parameters")));
|
7119
6973
|
if (!NIL_P(raw_params)) {
|
7120
6974
|
Check_Type(raw_params, T_HASH);
|
7121
|
-
rb_hash_foreach(raw_params, INT_FUNC(
|
6975
|
+
rb_hash_foreach(raw_params, INT_FUNC(cb_for_each_named_param_analytics), reinterpret_cast<VALUE>(&req));
|
7122
6976
|
}
|
7123
6977
|
|
7124
6978
|
auto barrier = std::make_shared<std::promise<couchbase::operations::analytics_response>>();
|
7125
6979
|
auto f = barrier->get_future();
|
7126
6980
|
backend->cluster->execute_http(req,
|
7127
6981
|
[barrier](couchbase::operations::analytics_response&& resp) mutable { barrier->set_value(resp); });
|
7128
|
-
auto resp = f
|
6982
|
+
auto resp = cb_wait_for_future(f);
|
7129
6983
|
if (resp.ctx.ec) {
|
7130
6984
|
if (resp.payload.meta_data.errors && !resp.payload.meta_data.errors->empty()) {
|
7131
6985
|
const auto& first_error = resp.payload.meta_data.errors->front();
|
7132
|
-
exc =
|
7133
|
-
|
6986
|
+
exc = cb_map_error_code(resp.ctx,
|
6987
|
+
fmt::format("unable to execute analytics query ({}: {})", first_error.code, first_error.message));
|
7134
6988
|
} else {
|
7135
|
-
exc =
|
6989
|
+
exc = cb_map_error_code(resp.ctx, "unable to execute analytics query");
|
7136
6990
|
}
|
7137
6991
|
break;
|
7138
6992
|
}
|
@@ -7140,43 +6994,25 @@ cb_Backend_document_analytics(VALUE self, VALUE statement, VALUE options)
|
|
7140
6994
|
VALUE rows = rb_ary_new_capa(static_cast<long>(resp.payload.rows.size()));
|
7141
6995
|
rb_hash_aset(res, rb_id2sym(rb_intern("rows")), rows);
|
7142
6996
|
for (auto& row : resp.payload.rows) {
|
7143
|
-
rb_ary_push(rows,
|
6997
|
+
rb_ary_push(rows, cb_str_new(row));
|
7144
6998
|
}
|
7145
6999
|
VALUE meta = rb_hash_new();
|
7146
7000
|
rb_hash_aset(res, rb_id2sym(rb_intern("meta")), meta);
|
7147
7001
|
rb_hash_aset(meta,
|
7148
7002
|
rb_id2sym(rb_intern("status")),
|
7149
7003
|
rb_id2sym(rb_intern2(resp.payload.meta_data.status.data(), static_cast<long>(resp.payload.meta_data.status.size()))));
|
7150
|
-
rb_hash_aset(
|
7151
|
-
|
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())));
|
7004
|
+
rb_hash_aset(meta, rb_id2sym(rb_intern("request_id")), cb_str_new(resp.payload.meta_data.request_id));
|
7005
|
+
rb_hash_aset(meta, rb_id2sym(rb_intern("client_context_id")), cb_str_new(resp.payload.meta_data.client_context_id));
|
7158
7006
|
if (resp.payload.meta_data.signature) {
|
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())));
|
7007
|
+
rb_hash_aset(meta, rb_id2sym(rb_intern("signature")), cb_str_new(resp.payload.meta_data.signature.value()));
|
7163
7008
|
}
|
7164
7009
|
if (resp.payload.meta_data.profile) {
|
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())));
|
7010
|
+
rb_hash_aset(meta, rb_id2sym(rb_intern("profile")), cb_str_new(resp.payload.meta_data.profile.value()));
|
7169
7011
|
}
|
7170
7012
|
VALUE metrics = rb_hash_new();
|
7171
7013
|
rb_hash_aset(meta, rb_id2sym(rb_intern("metrics")), metrics);
|
7172
|
-
rb_hash_aset(metrics,
|
7173
|
-
|
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())));
|
7176
|
-
rb_hash_aset(metrics,
|
7177
|
-
rb_id2sym(rb_intern("execution_time")),
|
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())));
|
7014
|
+
rb_hash_aset(metrics, rb_id2sym(rb_intern("elapsed_time")), cb_str_new(resp.payload.meta_data.metrics.elapsed_time));
|
7015
|
+
rb_hash_aset(metrics, rb_id2sym(rb_intern("execution_time")), cb_str_new(resp.payload.meta_data.metrics.execution_time));
|
7180
7016
|
rb_hash_aset(metrics, rb_id2sym(rb_intern("result_count")), ULL2NUM(resp.payload.meta_data.metrics.result_count));
|
7181
7017
|
rb_hash_aset(metrics, rb_id2sym(rb_intern("result_size")), ULL2NUM(resp.payload.meta_data.metrics.result_count));
|
7182
7018
|
if (resp.payload.meta_data.metrics.sort_count) {
|
@@ -7209,16 +7045,14 @@ cb_Backend_parse_connection_string(VALUE self, VALUE connection_string)
|
|
7209
7045
|
|
7210
7046
|
VALUE res = rb_hash_new();
|
7211
7047
|
if (!connstr.scheme.empty()) {
|
7212
|
-
rb_hash_aset(
|
7213
|
-
res, rb_id2sym(rb_intern("scheme")), rb_external_str_new(connstr.scheme.data(), static_cast<long>(connstr.scheme.size())));
|
7048
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("scheme")), cb_str_new(connstr.scheme));
|
7214
7049
|
rb_hash_aset(res, rb_id2sym(rb_intern("tls")), connstr.tls ? Qtrue : Qfalse);
|
7215
7050
|
}
|
7216
7051
|
|
7217
7052
|
VALUE nodes = rb_ary_new_capa(static_cast<long>(connstr.bootstrap_nodes.size()));
|
7218
7053
|
for (const auto& entry : connstr.bootstrap_nodes) {
|
7219
7054
|
VALUE node = rb_hash_new();
|
7220
|
-
rb_hash_aset(
|
7221
|
-
node, rb_id2sym(rb_intern("address")), rb_external_str_new(entry.address.data(), static_cast<long>(entry.address.size())));
|
7055
|
+
rb_hash_aset(node, rb_id2sym(rb_intern("address")), cb_str_new(entry.address));
|
7222
7056
|
if (entry.port > 0) {
|
7223
7057
|
rb_hash_aset(node, rb_id2sym(rb_intern("port")), UINT2NUM(entry.port));
|
7224
7058
|
}
|
@@ -7249,16 +7083,12 @@ cb_Backend_parse_connection_string(VALUE self, VALUE connection_string)
|
|
7249
7083
|
|
7250
7084
|
VALUE params = rb_hash_new();
|
7251
7085
|
for (const auto& param : connstr.params) {
|
7252
|
-
rb_hash_aset(params,
|
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())));
|
7086
|
+
rb_hash_aset(params, cb_str_new(param.first), cb_str_new(param.second));
|
7255
7087
|
}
|
7256
7088
|
rb_hash_aset(res, rb_id2sym(rb_intern("params")), params);
|
7257
7089
|
|
7258
7090
|
if (connstr.default_bucket_name) {
|
7259
|
-
rb_hash_aset(res,
|
7260
|
-
rb_id2sym(rb_intern("default_bucket_name")),
|
7261
|
-
rb_external_str_new(connstr.default_bucket_name->data(), static_cast<long>(connstr.default_bucket_name->size())));
|
7091
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("default_bucket_name")), cb_str_new(connstr.default_bucket_name.value()));
|
7262
7092
|
}
|
7263
7093
|
if (connstr.default_port > 0) {
|
7264
7094
|
rb_hash_aset(res, rb_id2sym(rb_intern("default_port")), UINT2NUM(connstr.default_port));
|
@@ -7274,8 +7104,7 @@ cb_Backend_parse_connection_string(VALUE self, VALUE connection_string)
|
|
7274
7104
|
break;
|
7275
7105
|
}
|
7276
7106
|
if (connstr.error) {
|
7277
|
-
rb_hash_aset(
|
7278
|
-
res, rb_id2sym(rb_intern("error")), rb_external_str_new(connstr.error->data(), static_cast<long>(connstr.error->size())));
|
7107
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("error")), cb_str_new(connstr.error.value()));
|
7279
7108
|
}
|
7280
7109
|
return res;
|
7281
7110
|
}
|
@@ -7310,7 +7139,7 @@ cb_Backend_view_index_get_all(VALUE self, VALUE bucket_name, VALUE name_space, V
|
|
7310
7139
|
couchbase::operations::view_index_get_all_request req{};
|
7311
7140
|
req.bucket_name.assign(RSTRING_PTR(bucket_name), static_cast<size_t>(RSTRING_LEN(bucket_name)));
|
7312
7141
|
req.name_space = ns;
|
7313
|
-
exc =
|
7142
|
+
exc = cb_extract_timeout(req, timeout);
|
7314
7143
|
if (!NIL_P(exc)) {
|
7315
7144
|
break;
|
7316
7145
|
}
|
@@ -7318,16 +7147,16 @@ cb_Backend_view_index_get_all(VALUE self, VALUE bucket_name, VALUE name_space, V
|
|
7318
7147
|
auto f = barrier->get_future();
|
7319
7148
|
backend->cluster->execute_http(
|
7320
7149
|
req, [barrier](couchbase::operations::view_index_get_all_response&& resp) mutable { barrier->set_value(resp); });
|
7321
|
-
auto resp = f
|
7150
|
+
auto resp = cb_wait_for_future(f);
|
7322
7151
|
if (resp.ctx.ec) {
|
7323
|
-
exc =
|
7152
|
+
exc = cb_map_error_code(resp.ctx, "unable to get list of the design documents");
|
7324
7153
|
break;
|
7325
7154
|
}
|
7326
7155
|
VALUE res = rb_ary_new_capa(static_cast<long>(resp.design_documents.size()));
|
7327
7156
|
for (const auto& entry : resp.design_documents) {
|
7328
7157
|
VALUE dd = rb_hash_new();
|
7329
|
-
rb_hash_aset(dd, rb_id2sym(rb_intern("name")),
|
7330
|
-
rb_hash_aset(dd, rb_id2sym(rb_intern("rev")),
|
7158
|
+
rb_hash_aset(dd, rb_id2sym(rb_intern("name")), cb_str_new(entry.name));
|
7159
|
+
rb_hash_aset(dd, rb_id2sym(rb_intern("rev")), cb_str_new(entry.rev));
|
7331
7160
|
switch (entry.ns) {
|
7332
7161
|
case couchbase::operations::design_document::name_space::development:
|
7333
7162
|
rb_hash_aset(dd, rb_id2sym(rb_intern("namespace")), rb_id2sym(rb_intern("development")));
|
@@ -7338,19 +7167,14 @@ cb_Backend_view_index_get_all(VALUE self, VALUE bucket_name, VALUE name_space, V
|
|
7338
7167
|
}
|
7339
7168
|
VALUE views = rb_hash_new();
|
7340
7169
|
for (const auto& view_entry : entry.views) {
|
7341
|
-
VALUE view_name =
|
7170
|
+
VALUE view_name = cb_str_new(view_entry.first);
|
7342
7171
|
VALUE view = rb_hash_new();
|
7343
7172
|
rb_hash_aset(view, rb_id2sym(rb_intern("name")), view_name);
|
7344
7173
|
if (view_entry.second.map) {
|
7345
|
-
rb_hash_aset(view,
|
7346
|
-
rb_id2sym(rb_intern("map")),
|
7347
|
-
rb_external_str_new(view_entry.second.map->data(), static_cast<long>(view_entry.second.map->size())));
|
7174
|
+
rb_hash_aset(view, rb_id2sym(rb_intern("map")), cb_str_new(view_entry.second.map.value()));
|
7348
7175
|
}
|
7349
7176
|
if (view_entry.second.reduce) {
|
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())));
|
7177
|
+
rb_hash_aset(view, rb_id2sym(rb_intern("reduce")), cb_str_new(view_entry.second.reduce.value()));
|
7354
7178
|
}
|
7355
7179
|
rb_hash_aset(views, view_name, view);
|
7356
7180
|
}
|
@@ -7395,7 +7219,7 @@ cb_Backend_view_index_get(VALUE self, VALUE bucket_name, VALUE document_name, VA
|
|
7395
7219
|
req.bucket_name.assign(RSTRING_PTR(bucket_name), static_cast<size_t>(RSTRING_LEN(bucket_name)));
|
7396
7220
|
req.document_name.assign(RSTRING_PTR(document_name), static_cast<size_t>(RSTRING_LEN(document_name)));
|
7397
7221
|
req.name_space = ns;
|
7398
|
-
exc =
|
7222
|
+
exc = cb_extract_timeout(req, timeout);
|
7399
7223
|
if (!NIL_P(exc)) {
|
7400
7224
|
break;
|
7401
7225
|
}
|
@@ -7403,18 +7227,16 @@ cb_Backend_view_index_get(VALUE self, VALUE bucket_name, VALUE document_name, VA
|
|
7403
7227
|
auto f = barrier->get_future();
|
7404
7228
|
backend->cluster->execute_http(
|
7405
7229
|
req, [barrier](couchbase::operations::view_index_get_response&& resp) mutable { barrier->set_value(resp); });
|
7406
|
-
auto resp = f
|
7230
|
+
auto resp = cb_wait_for_future(f);
|
7407
7231
|
if (resp.ctx.ec) {
|
7408
|
-
exc =
|
7232
|
+
exc = cb_map_error_code(
|
7409
7233
|
resp.ctx,
|
7410
7234
|
fmt::format(R"(unable to get design document "{}" ({}) on bucket "{}")", req.document_name, req.name_space, req.bucket_name));
|
7411
7235
|
break;
|
7412
7236
|
}
|
7413
7237
|
VALUE res = rb_hash_new();
|
7414
|
-
rb_hash_aset(
|
7415
|
-
|
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())));
|
7238
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("name")), cb_str_new(resp.document.name));
|
7239
|
+
rb_hash_aset(res, rb_id2sym(rb_intern("rev")), cb_str_new(resp.document.rev));
|
7418
7240
|
switch (resp.document.ns) {
|
7419
7241
|
case couchbase::operations::design_document::name_space::development:
|
7420
7242
|
rb_hash_aset(res, rb_id2sym(rb_intern("namespace")), rb_id2sym(rb_intern("development")));
|
@@ -7425,18 +7247,14 @@ cb_Backend_view_index_get(VALUE self, VALUE bucket_name, VALUE document_name, VA
|
|
7425
7247
|
}
|
7426
7248
|
VALUE views = rb_hash_new();
|
7427
7249
|
for (const auto& view_entry : resp.document.views) {
|
7428
|
-
VALUE view_name =
|
7250
|
+
VALUE view_name = cb_str_new(view_entry.first);
|
7429
7251
|
VALUE view = rb_hash_new();
|
7430
7252
|
rb_hash_aset(view, rb_id2sym(rb_intern("name")), view_name);
|
7431
7253
|
if (view_entry.second.map) {
|
7432
|
-
rb_hash_aset(view,
|
7433
|
-
rb_id2sym(rb_intern("map")),
|
7434
|
-
rb_external_str_new(view_entry.second.map->data(), static_cast<long>(view_entry.second.map->size())));
|
7254
|
+
rb_hash_aset(view, rb_id2sym(rb_intern("map")), cb_str_new(view_entry.second.map.value()));
|
7435
7255
|
}
|
7436
7256
|
if (view_entry.second.reduce) {
|
7437
|
-
rb_hash_aset(view,
|
7438
|
-
rb_id2sym(rb_intern("reduce")),
|
7439
|
-
rb_external_str_new(view_entry.second.reduce->data(), static_cast<long>(view_entry.second.reduce->size())));
|
7257
|
+
rb_hash_aset(view, rb_id2sym(rb_intern("reduce")), cb_str_new(view_entry.second.reduce.value()));
|
7440
7258
|
}
|
7441
7259
|
rb_hash_aset(views, view_name, view);
|
7442
7260
|
}
|
@@ -7479,7 +7297,7 @@ cb_Backend_view_index_drop(VALUE self, VALUE bucket_name, VALUE document_name, V
|
|
7479
7297
|
req.bucket_name.assign(RSTRING_PTR(bucket_name), static_cast<size_t>(RSTRING_LEN(bucket_name)));
|
7480
7298
|
req.document_name.assign(RSTRING_PTR(document_name), static_cast<size_t>(RSTRING_LEN(document_name)));
|
7481
7299
|
req.name_space = ns;
|
7482
|
-
exc =
|
7300
|
+
exc = cb_extract_timeout(req, timeout);
|
7483
7301
|
if (!NIL_P(exc)) {
|
7484
7302
|
break;
|
7485
7303
|
}
|
@@ -7487,9 +7305,9 @@ cb_Backend_view_index_drop(VALUE self, VALUE bucket_name, VALUE document_name, V
|
|
7487
7305
|
auto f = barrier->get_future();
|
7488
7306
|
backend->cluster->execute_http(
|
7489
7307
|
req, [barrier](couchbase::operations::view_index_drop_response&& resp) mutable { barrier->set_value(resp); });
|
7490
|
-
auto resp = f
|
7308
|
+
auto resp = cb_wait_for_future(f);
|
7491
7309
|
if (resp.ctx.ec) {
|
7492
|
-
exc =
|
7310
|
+
exc = cb_map_error_code(
|
7493
7311
|
resp.ctx,
|
7494
7312
|
fmt::format(
|
7495
7313
|
R"(unable to drop design document "{}" ({}) on bucket "{}")", req.document_name, req.name_space, req.bucket_name));
|
@@ -7560,7 +7378,7 @@ cb_Backend_view_index_upsert(VALUE self, VALUE bucket_name, VALUE document, VALU
|
|
7560
7378
|
}
|
7561
7379
|
}
|
7562
7380
|
|
7563
|
-
exc =
|
7381
|
+
exc = cb_extract_timeout(req, timeout);
|
7564
7382
|
if (!NIL_P(exc)) {
|
7565
7383
|
break;
|
7566
7384
|
}
|
@@ -7568,9 +7386,9 @@ cb_Backend_view_index_upsert(VALUE self, VALUE bucket_name, VALUE document, VALU
|
|
7568
7386
|
auto f = barrier->get_future();
|
7569
7387
|
backend->cluster->execute_http(
|
7570
7388
|
req, [barrier](couchbase::operations::view_index_upsert_response&& resp) mutable { barrier->set_value(resp); });
|
7571
|
-
auto resp = f
|
7389
|
+
auto resp = cb_wait_for_future(f);
|
7572
7390
|
if (resp.ctx.ec) {
|
7573
|
-
exc =
|
7391
|
+
exc = cb_map_error_code(
|
7574
7392
|
resp.ctx,
|
7575
7393
|
fmt::format(
|
7576
7394
|
R"(unable to store design document "{}" ({}) on bucket "{}")", req.document.name, req.document.ns, req.bucket_name));
|
@@ -7618,7 +7436,7 @@ cb_Backend_document_view(VALUE self, VALUE bucket_name, VALUE design_document_na
|
|
7618
7436
|
req.document_name.assign(RSTRING_PTR(design_document_name), static_cast<size_t>(RSTRING_LEN(design_document_name)));
|
7619
7437
|
req.view_name.assign(RSTRING_PTR(view_name), static_cast<size_t>(RSTRING_LEN(view_name)));
|
7620
7438
|
req.name_space = ns;
|
7621
|
-
exc =
|
7439
|
+
exc = cb_extract_timeout(req, options);
|
7622
7440
|
if (!NIL_P(exc)) {
|
7623
7441
|
break;
|
7624
7442
|
}
|
@@ -7718,13 +7536,13 @@ cb_Backend_document_view(VALUE self, VALUE bucket_name, VALUE design_document_na
|
|
7718
7536
|
auto f = barrier->get_future();
|
7719
7537
|
backend->cluster->execute_http(
|
7720
7538
|
req, [barrier](couchbase::operations::document_view_response&& resp) mutable { barrier->set_value(resp); });
|
7721
|
-
auto resp = f
|
7539
|
+
auto resp = cb_wait_for_future(f);
|
7722
7540
|
if (resp.ctx.ec) {
|
7723
7541
|
if (resp.error) {
|
7724
|
-
exc =
|
7725
|
-
|
7542
|
+
exc = cb_map_error_code(resp.ctx,
|
7543
|
+
fmt::format(R"(unable to execute view query {} ({}))", resp.error->code, resp.error->message));
|
7726
7544
|
} else {
|
7727
|
-
exc =
|
7545
|
+
exc = cb_map_error_code(resp.ctx, "unable to execute view query");
|
7728
7546
|
}
|
7729
7547
|
break;
|
7730
7548
|
}
|
@@ -7735,9 +7553,7 @@ cb_Backend_document_view(VALUE self, VALUE bucket_name, VALUE design_document_na
|
|
7735
7553
|
rb_hash_aset(meta, rb_id2sym(rb_intern("total_rows")), ULL2NUM(*resp.meta_data.total_rows));
|
7736
7554
|
}
|
7737
7555
|
if (resp.meta_data.debug_info) {
|
7738
|
-
rb_hash_aset(meta,
|
7739
|
-
rb_id2sym(rb_intern("debug_info")),
|
7740
|
-
rb_external_str_new(resp.meta_data.debug_info->data(), static_cast<long>(resp.meta_data.debug_info->size())));
|
7556
|
+
rb_hash_aset(meta, rb_id2sym(rb_intern("debug_info")), cb_str_new(resp.meta_data.debug_info.value()));
|
7741
7557
|
}
|
7742
7558
|
rb_hash_aset(res, rb_id2sym(rb_intern("meta")), meta);
|
7743
7559
|
|
@@ -7745,11 +7561,10 @@ cb_Backend_document_view(VALUE self, VALUE bucket_name, VALUE design_document_na
|
|
7745
7561
|
for (const auto& entry : resp.rows) {
|
7746
7562
|
VALUE row = rb_hash_new();
|
7747
7563
|
if (entry.id) {
|
7748
|
-
rb_hash_aset(row, rb_id2sym(rb_intern("id")),
|
7564
|
+
rb_hash_aset(row, rb_id2sym(rb_intern("id")), cb_str_new(entry.id.value()));
|
7749
7565
|
}
|
7750
|
-
rb_hash_aset(row, rb_id2sym(rb_intern("key")),
|
7751
|
-
rb_hash_aset(
|
7752
|
-
row, rb_id2sym(rb_intern("value")), rb_external_str_new(entry.value.data(), static_cast<long>(entry.value.size())));
|
7566
|
+
rb_hash_aset(row, rb_id2sym(rb_intern("key")), cb_str_new(entry.key));
|
7567
|
+
rb_hash_aset(row, rb_id2sym(rb_intern("value")), cb_str_new(entry.value));
|
7753
7568
|
rb_ary_push(rows, row);
|
7754
7569
|
}
|
7755
7570
|
rb_hash_aset(res, rb_id2sym(rb_intern("rows")), rows);
|
@@ -7820,6 +7635,7 @@ cb_Backend_snappy_compress(VALUE self, VALUE data)
|
|
7820
7635
|
|
7821
7636
|
std::string compressed{};
|
7822
7637
|
std::size_t compressed_size = snappy::Compress(RSTRING_PTR(data), static_cast<std::size_t>(RSTRING_LEN(data)), &compressed);
|
7638
|
+
|
7823
7639
|
return rb_external_str_new(compressed.data(), static_cast<long>(compressed_size));
|
7824
7640
|
}
|
7825
7641
|
|
@@ -7832,7 +7648,7 @@ cb_Backend_snappy_uncompress(VALUE self, VALUE data)
|
|
7832
7648
|
std::string uncompressed{};
|
7833
7649
|
bool success = snappy::Uncompress(RSTRING_PTR(data), static_cast<std::size_t>(RSTRING_LEN(data)), &uncompressed);
|
7834
7650
|
if (success) {
|
7835
|
-
return
|
7651
|
+
return cb_str_new(uncompressed);
|
7836
7652
|
}
|
7837
7653
|
rb_raise(rb_eArgError, "Unable to decompress buffer");
|
7838
7654
|
return Qnil;
|
@@ -7851,7 +7667,7 @@ cb_Backend_leb128_encode(VALUE self, VALUE number)
|
|
7851
7667
|
}
|
7852
7668
|
couchbase::protocol::unsigned_leb128<std::uint64_t> encoded(NUM2ULL(number));
|
7853
7669
|
std::string buf = encoded.get();
|
7854
|
-
return
|
7670
|
+
return cb_str_new(buf);
|
7855
7671
|
}
|
7856
7672
|
|
7857
7673
|
static VALUE
|