couchbase 4.2.5-dev.3 → 4.2.6-dev
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +81 -9
- package/deps/couchbase-cxx-client/CMakeLists.txt +9 -1
- package/deps/couchbase-cxx-client/bin/api.rb +234 -0
- package/deps/couchbase-cxx-client/bin/create-search-index +18 -135
- package/deps/couchbase-cxx-client/bin/init-cluster +17 -139
- package/deps/couchbase-cxx-client/bin/load-sample-buckets +54 -0
- package/deps/couchbase-cxx-client/core/cluster.hxx +33 -12
- package/deps/couchbase-cxx-client/core/cluster_options.hxx +3 -0
- package/deps/couchbase-cxx-client/core/crud_component.cxx +51 -22
- package/deps/couchbase-cxx-client/core/impl/build_deferred_query_indexes.cxx +115 -50
- package/deps/couchbase-cxx-client/core/impl/cluster.cxx +6 -0
- package/deps/couchbase-cxx-client/core/impl/create_bucket.cxx +155 -0
- package/deps/couchbase-cxx-client/core/impl/create_query_index.cxx +172 -59
- package/deps/couchbase-cxx-client/core/impl/dns_srv_tracker.cxx +2 -1
- package/deps/couchbase-cxx-client/core/impl/drop_bucket.cxx +66 -0
- package/deps/couchbase-cxx-client/core/impl/drop_query_index.cxx +138 -59
- package/deps/couchbase-cxx-client/core/impl/flush_bucket.cxx +66 -0
- package/deps/couchbase-cxx-client/core/impl/get_all_buckets.cxx +163 -0
- package/deps/couchbase-cxx-client/core/impl/get_all_query_indexes.cxx +67 -37
- package/deps/couchbase-cxx-client/core/impl/get_bucket.cxx +153 -0
- package/deps/couchbase-cxx-client/core/impl/internal_manager_error_context.cxx +113 -0
- package/deps/couchbase-cxx-client/core/impl/internal_manager_error_context.hxx +60 -0
- package/deps/couchbase-cxx-client/core/impl/key_value_error_category.cxx +2 -4
- package/deps/couchbase-cxx-client/core/impl/manager_error_context.cxx +100 -0
- package/deps/couchbase-cxx-client/core/impl/query.cxx +1 -0
- package/deps/couchbase-cxx-client/core/impl/update_bucket.cxx +130 -0
- package/deps/couchbase-cxx-client/core/impl/watch_query_indexes.cxx +53 -29
- package/deps/couchbase-cxx-client/core/io/dns_client.cxx +71 -38
- package/deps/couchbase-cxx-client/core/io/dns_config.cxx +5 -4
- package/deps/couchbase-cxx-client/core/io/mcbp_session.cxx +5 -6
- package/deps/couchbase-cxx-client/core/meta/features.hxx +6 -0
- package/deps/couchbase-cxx-client/core/operations/document_query.cxx +11 -0
- package/deps/couchbase-cxx-client/core/operations/document_query.hxx +1 -0
- package/deps/couchbase-cxx-client/core/origin.cxx +270 -0
- package/deps/couchbase-cxx-client/core/origin.hxx +2 -0
- package/deps/couchbase-cxx-client/core/protocol/status.cxx +2 -2
- package/deps/couchbase-cxx-client/core/range_scan_options.cxx +3 -27
- package/deps/couchbase-cxx-client/core/range_scan_options.hxx +13 -17
- package/deps/couchbase-cxx-client/core/range_scan_orchestrator.cxx +367 -170
- package/deps/couchbase-cxx-client/core/range_scan_orchestrator.hxx +13 -2
- package/deps/couchbase-cxx-client/core/range_scan_orchestrator_options.hxx +5 -3
- package/deps/couchbase-cxx-client/core/scan_options.hxx +0 -19
- package/deps/couchbase-cxx-client/core/scan_result.cxx +19 -5
- package/deps/couchbase-cxx-client/core/scan_result.hxx +5 -2
- package/deps/couchbase-cxx-client/core/timeout_defaults.hxx +2 -3
- package/deps/couchbase-cxx-client/core/topology/capabilities.hxx +1 -0
- package/deps/couchbase-cxx-client/core/topology/capabilities_fmt.hxx +2 -0
- package/deps/couchbase-cxx-client/core/topology/collections_manifest_fmt.hxx +1 -1
- package/deps/couchbase-cxx-client/core/topology/configuration.hxx +5 -0
- package/deps/couchbase-cxx-client/core/topology/configuration_json.hxx +2 -0
- package/deps/couchbase-cxx-client/core/utils/connection_string.cxx +4 -0
- package/deps/couchbase-cxx-client/couchbase/behavior_options.hxx +19 -2
- package/deps/couchbase-cxx-client/couchbase/bucket_manager.hxx +135 -0
- package/deps/couchbase-cxx-client/couchbase/build_query_index_options.hxx +0 -30
- package/deps/couchbase-cxx-client/couchbase/cluster.hxx +14 -0
- package/deps/couchbase-cxx-client/couchbase/collection_query_index_manager.hxx +7 -48
- package/deps/couchbase-cxx-client/couchbase/create_bucket_options.hxx +41 -0
- package/deps/couchbase-cxx-client/couchbase/create_primary_query_index_options.hxx +0 -29
- package/deps/couchbase-cxx-client/couchbase/create_query_index_options.hxx +0 -33
- package/deps/couchbase-cxx-client/couchbase/drop_bucket_options.hxx +41 -0
- package/deps/couchbase-cxx-client/couchbase/drop_primary_query_index_options.hxx +0 -30
- package/deps/couchbase-cxx-client/couchbase/drop_query_index_options.hxx +0 -31
- package/deps/couchbase-cxx-client/couchbase/error_codes.hxx +1 -2
- package/deps/couchbase-cxx-client/couchbase/flush_bucket_options.hxx +41 -0
- package/deps/couchbase-cxx-client/couchbase/get_all_buckets_options.hxx +44 -0
- package/deps/couchbase-cxx-client/couchbase/get_all_query_indexes_options.hxx +0 -30
- package/deps/couchbase-cxx-client/couchbase/get_bucket_options.hxx +43 -0
- package/deps/couchbase-cxx-client/couchbase/management/bucket_settings.hxx +116 -0
- package/deps/couchbase-cxx-client/couchbase/manager_error_context.hxx +29 -53
- package/deps/couchbase-cxx-client/couchbase/query_index_manager.hxx +16 -83
- package/deps/couchbase-cxx-client/couchbase/query_options.hxx +18 -0
- package/deps/couchbase-cxx-client/couchbase/security_options.hxx +15 -0
- package/deps/couchbase-cxx-client/couchbase/update_bucket_options.hxx +41 -0
- package/deps/couchbase-cxx-client/couchbase/watch_query_indexes_options.hxx +0 -31
- package/deps/couchbase-cxx-client/docs/cbc-analytics.md +1 -0
- package/deps/couchbase-cxx-client/docs/cbc-get.md +1 -0
- package/deps/couchbase-cxx-client/docs/cbc-pillowfight.md +1 -0
- package/deps/couchbase-cxx-client/docs/cbc-query.md +1 -0
- package/deps/couchbase-cxx-client/docs/cbc.md +10 -0
- package/deps/couchbase-cxx-client/test/CMakeLists.txt +1 -0
- package/deps/couchbase-cxx-client/test/test_integration_collections.cxx +6 -0
- package/deps/couchbase-cxx-client/test/test_integration_crud.cxx +5 -0
- package/deps/couchbase-cxx-client/test/test_integration_examples.cxx +137 -1
- package/deps/couchbase-cxx-client/test/test_integration_management.cxx +709 -266
- package/deps/couchbase-cxx-client/test/test_integration_query.cxx +19 -7
- package/deps/couchbase-cxx-client/test/test_integration_range_scan.cxx +351 -112
- package/deps/couchbase-cxx-client/test/test_integration_search.cxx +10 -1
- package/deps/couchbase-cxx-client/test/test_transaction_public_async_api.cxx +13 -12
- package/deps/couchbase-cxx-client/test/test_transaction_public_blocking_api.cxx +27 -21
- package/deps/couchbase-cxx-client/test/test_unit_query.cxx +75 -0
- package/deps/couchbase-cxx-client/test/utils/server_version.hxx +5 -0
- package/deps/couchbase-cxx-client/test/utils/wait_until.cxx +29 -10
- package/deps/couchbase-cxx-client/test/utils/wait_until.hxx +3 -1
- package/deps/couchbase-cxx-client/tools/utils.cxx +4 -1
- package/dist/binding.d.ts +21 -16
- package/dist/binding.js +1 -4
- package/dist/bindingutilities.d.ts +6 -1
- package/dist/bindingutilities.js +36 -1
- package/dist/collection.d.ts +65 -3
- package/dist/collection.js +107 -0
- package/dist/crudoptypes.d.ts +34 -0
- package/dist/crudoptypes.js +18 -1
- package/dist/queryexecutor.js +1 -0
- package/dist/querytypes.d.ts +7 -0
- package/dist/rangeScan.d.ts +107 -0
- package/dist/rangeScan.js +91 -0
- package/dist/streamablepromises.d.ts +6 -0
- package/dist/streamablepromises.js +25 -1
- package/package.json +13 -14
- package/scripts/createPlatformPackages.js +1 -4
- package/src/addondata.hpp +1 -0
- package/src/binding.cpp +5 -2
- package/src/connection.cpp +108 -2
- package/src/connection.hpp +1 -0
- package/src/constants.cpp +2 -12
- package/src/jstocbpp_autogen.hpp +49 -22
- package/src/jstocbpp_basic.hpp +2 -8
- package/src/mutationtoken.cpp +13 -0
- package/src/scan_iterator.cpp +90 -0
- package/src/scan_iterator.hpp +30 -0
- package/tools/gen-bindings-json.py +9 -8
- package/deps/couchbase-cxx-client/core/impl/collection_query_index_manager.cxx +0 -93
@@ -61,19 +61,11 @@ class query_index_manager
|
|
61
61
|
*/
|
62
62
|
void get_all_indexes(std::string bucket_name,
|
63
63
|
const get_all_query_indexes_options& options,
|
64
|
-
get_all_query_indexes_handler&& handler) const
|
65
|
-
|
66
|
-
return core::impl::initiate_get_all_query_indexes(
|
67
|
-
core_, std::move(bucket_name), options.build(), std::forward<get_all_query_indexes_handler>(handler));
|
68
|
-
}
|
64
|
+
get_all_query_indexes_handler&& handler) const;
|
65
|
+
|
69
66
|
[[nodiscard]] auto get_all_indexes(std::string bucket_name, const get_all_query_indexes_options& options) const
|
70
|
-
-> std::future<std::pair<manager_error_context, std::vector<couchbase::management::query::index
|
71
|
-
|
72
|
-
auto barrier = std::make_shared<std::promise<std::pair<manager_error_context, std::vector<couchbase::management::query::index>>>>();
|
73
|
-
auto future = barrier->get_future();
|
74
|
-
get_all_indexes(std::move(bucket_name), options, [barrier](auto ctx, auto resp) { barrier->set_value({ ctx, resp }); });
|
75
|
-
return future;
|
76
|
-
}
|
67
|
+
-> std::future<std::pair<manager_error_context, std::vector<couchbase::management::query::index>>>;
|
68
|
+
|
77
69
|
/**
|
78
70
|
* Create an index on a bucket.
|
79
71
|
*
|
@@ -90,23 +82,12 @@ class query_index_manager
|
|
90
82
|
std::string index_name,
|
91
83
|
std::vector<std::string> fields,
|
92
84
|
const create_query_index_options& options,
|
93
|
-
create_query_index_handler&& handler) const
|
94
|
-
{
|
95
|
-
core::impl::initiate_create_query_index(
|
96
|
-
core_, std::move(bucket_name), std::move(index_name), std::move(fields), options.build(), std::move(handler));
|
97
|
-
}
|
85
|
+
create_query_index_handler&& handler) const;
|
98
86
|
|
99
87
|
[[nodiscard]] auto create_index(std::string bucket_name,
|
100
88
|
std::string index_name,
|
101
89
|
std::vector<std::string> fields,
|
102
|
-
const create_query_index_options& options) const -> std::future<manager_error_context
|
103
|
-
{
|
104
|
-
auto barrier = std::make_shared<std::promise<manager_error_context>>();
|
105
|
-
auto future = barrier->get_future();
|
106
|
-
create_index(
|
107
|
-
std::move(bucket_name), std::move(index_name), std::move(fields), options, [barrier](auto ctx) { barrier->set_value(ctx); });
|
108
|
-
return future;
|
109
|
-
}
|
90
|
+
const create_query_index_options& options) const -> std::future<manager_error_context>;
|
110
91
|
|
111
92
|
/**
|
112
93
|
* Create a primary index on a bucket.
|
@@ -120,19 +101,10 @@ class query_index_manager
|
|
120
101
|
*/
|
121
102
|
void create_primary_index(std::string bucket_name,
|
122
103
|
const create_primary_query_index_options& options,
|
123
|
-
create_query_index_handler&& handler)
|
124
|
-
{
|
125
|
-
return core::impl::initiate_create_primary_query_index(core_, std::move(bucket_name), options.build(), std::move(handler));
|
126
|
-
}
|
104
|
+
create_query_index_handler&& handler);
|
127
105
|
|
128
106
|
[[nodiscard]] auto create_primary_index(std::string bucket_name, const create_primary_query_index_options& options)
|
129
|
-
-> std::future<manager_error_context
|
130
|
-
{
|
131
|
-
auto barrier = std::make_shared<std::promise<manager_error_context>>();
|
132
|
-
auto future = barrier->get_future();
|
133
|
-
create_primary_index(std::move(bucket_name), options, [barrier](auto ctx) { barrier->set_value(ctx); });
|
134
|
-
return future;
|
135
|
-
}
|
107
|
+
-> std::future<manager_error_context>;
|
136
108
|
/**
|
137
109
|
* Drop primary index on a bucket.
|
138
110
|
*
|
@@ -143,19 +115,10 @@ class query_index_manager
|
|
143
115
|
* @since 1.0.0
|
144
116
|
* @committed
|
145
117
|
*/
|
146
|
-
void drop_primary_index(std::string bucket_name, const drop_primary_query_index_options& options, drop_query_index_handler&& handler)
|
147
|
-
{
|
148
|
-
return core::impl::initiate_drop_primary_query_index(core_, std::move(bucket_name), options.build(), std::move(handler));
|
149
|
-
}
|
118
|
+
void drop_primary_index(std::string bucket_name, const drop_primary_query_index_options& options, drop_query_index_handler&& handler);
|
150
119
|
|
151
120
|
[[nodiscard]] auto drop_primary_index(std::string bucket_name, const drop_primary_query_index_options& options)
|
152
|
-
-> std::future<manager_error_context
|
153
|
-
{
|
154
|
-
auto barrier = std::make_shared<std::promise<manager_error_context>>();
|
155
|
-
auto future = barrier->get_future();
|
156
|
-
drop_primary_index(std::move(bucket_name), options, [barrier](auto ctx) { barrier->set_value(ctx); });
|
157
|
-
return future;
|
158
|
-
}
|
121
|
+
-> std::future<manager_error_context>;
|
159
122
|
|
160
123
|
/**
|
161
124
|
*
|
@@ -170,20 +133,10 @@ class query_index_manager
|
|
170
133
|
void drop_index(std::string bucket_name,
|
171
134
|
std::string index_name,
|
172
135
|
const drop_query_index_options& options,
|
173
|
-
drop_query_index_handler&& handler)
|
174
|
-
{
|
175
|
-
return core::impl::initiate_drop_query_index(
|
176
|
-
core_, std::move(bucket_name), std::move(index_name), options.build(), std::move(handler));
|
177
|
-
}
|
136
|
+
drop_query_index_handler&& handler);
|
178
137
|
|
179
138
|
[[nodiscard]] auto drop_index(std::string bucket_name, std::string index_name, const drop_query_index_options& options)
|
180
|
-
-> std::future<manager_error_context
|
181
|
-
{
|
182
|
-
auto barrier = std::make_shared<std::promise<manager_error_context>>();
|
183
|
-
auto future = barrier->get_future();
|
184
|
-
drop_index(std::move(bucket_name), std::move(index_name), options, [barrier](auto ctx) { barrier->set_value(ctx); });
|
185
|
-
return future;
|
186
|
-
}
|
139
|
+
-> std::future<manager_error_context>;
|
187
140
|
/**
|
188
141
|
* Builds all currently deferred indexes.
|
189
142
|
*
|
@@ -198,20 +151,10 @@ class query_index_manager
|
|
198
151
|
*/
|
199
152
|
void build_deferred_indexes(std::string bucket_name,
|
200
153
|
const build_query_index_options& options,
|
201
|
-
build_deferred_query_indexes_handler&& handler) const
|
202
|
-
{
|
203
|
-
return core::impl::initiate_build_deferred_indexes(
|
204
|
-
core_, std::move(bucket_name), options.build(), std::forward<build_deferred_query_indexes_handler>(handler));
|
205
|
-
}
|
154
|
+
build_deferred_query_indexes_handler&& handler) const;
|
206
155
|
|
207
156
|
[[nodiscard]] auto build_deferred_indexes(std::string bucket_name, const build_query_index_options& options) const
|
208
|
-
-> std::future<manager_error_context
|
209
|
-
{
|
210
|
-
auto barrier = std::make_shared<std::promise<manager_error_context>>();
|
211
|
-
auto future = barrier->get_future();
|
212
|
-
build_deferred_indexes(std::move(bucket_name), options, [barrier](auto ctx) { barrier->set_value(std::move(ctx)); });
|
213
|
-
return future;
|
214
|
-
}
|
157
|
+
-> std::future<manager_error_context>;
|
215
158
|
|
216
159
|
/**
|
217
160
|
* Polls the state of a set of indexes, until they all are online.
|
@@ -227,21 +170,11 @@ class query_index_manager
|
|
227
170
|
void watch_indexes(std::string bucket_name,
|
228
171
|
std::vector<std::string> index_names,
|
229
172
|
const watch_query_indexes_options& options,
|
230
|
-
watch_query_indexes_handler&& handler)
|
231
|
-
{
|
232
|
-
return core::impl::initiate_watch_query_indexes(
|
233
|
-
core_, std::move(bucket_name), std::move(index_names), options.build(), std::move(handler));
|
234
|
-
}
|
173
|
+
watch_query_indexes_handler&& handler);
|
235
174
|
|
236
175
|
[[nodiscard]] auto watch_indexes(std::string bucket_name,
|
237
176
|
std::vector<std::string> index_names,
|
238
|
-
const watch_query_indexes_options& options)
|
239
|
-
{
|
240
|
-
auto barrier = std::make_shared<std::promise<manager_error_context>>();
|
241
|
-
auto future = barrier->get_future();
|
242
|
-
watch_indexes(std::move(bucket_name), std::move(index_names), options, [barrier](auto ctx) { barrier->set_value(ctx); });
|
243
|
-
return future;
|
244
|
-
}
|
177
|
+
const watch_query_indexes_options& options) -> std::future<manager_error_context>;
|
245
178
|
|
246
179
|
private:
|
247
180
|
friend class cluster;
|
@@ -51,6 +51,7 @@ struct query_options : public common_options<query_options> {
|
|
51
51
|
const bool readonly;
|
52
52
|
const bool flex_index;
|
53
53
|
const bool preserve_expiry;
|
54
|
+
std::optional<bool> use_replica;
|
54
55
|
std::optional<std::uint64_t> max_parallelism;
|
55
56
|
std::optional<std::uint64_t> scan_cap;
|
56
57
|
std::optional<std::chrono::milliseconds> scan_wait;
|
@@ -84,6 +85,7 @@ struct query_options : public common_options<query_options> {
|
|
84
85
|
readonly_,
|
85
86
|
flex_index_,
|
86
87
|
preserve_expiry_,
|
88
|
+
use_replica_,
|
87
89
|
max_parallelism_,
|
88
90
|
scan_cap_,
|
89
91
|
scan_wait_,
|
@@ -225,6 +227,21 @@ struct query_options : public common_options<query_options> {
|
|
225
227
|
return self();
|
226
228
|
}
|
227
229
|
|
230
|
+
/**
|
231
|
+
* Specifies that the query engine should use replica nodes for KV fetches if the active node is down.
|
232
|
+
*
|
233
|
+
* @param use_replica whether replica nodes should be used if the active node is down. If not provided, the server default will be used.
|
234
|
+
* @return the options builder for chaining purposes.
|
235
|
+
*
|
236
|
+
* @since 1.0.0
|
237
|
+
* @committed
|
238
|
+
*/
|
239
|
+
auto use_replica(bool use_replica) -> query_options&
|
240
|
+
{
|
241
|
+
use_replica_ = use_replica;
|
242
|
+
return self();
|
243
|
+
}
|
244
|
+
|
228
245
|
/**
|
229
246
|
* Allows overriding the default maximum parallelism for the query execution on the server side.
|
230
247
|
*
|
@@ -529,6 +546,7 @@ struct query_options : public common_options<query_options> {
|
|
529
546
|
bool readonly_{ false };
|
530
547
|
bool flex_index_{ false };
|
531
548
|
bool preserve_expiry_{ false };
|
549
|
+
std::optional<bool> use_replica_{};
|
532
550
|
std::optional<std::uint64_t> max_parallelism_{};
|
533
551
|
std::optional<std::uint64_t> scan_cap_{};
|
534
552
|
std::optional<std::uint64_t> pipeline_batch_{};
|
@@ -45,11 +45,20 @@ class security_options
|
|
45
45
|
return *this;
|
46
46
|
}
|
47
47
|
|
48
|
+
auto trust_certificate_value(std::string certificate_value) -> security_options&
|
49
|
+
{
|
50
|
+
trust_certificate_value_ = certificate_value;
|
51
|
+
return *this;
|
52
|
+
}
|
53
|
+
|
48
54
|
struct built {
|
49
55
|
bool enabled;
|
50
56
|
tls_verify_mode tls_verify;
|
51
57
|
std::optional<std::string> trust_certificate;
|
58
|
+
std::optional<std::string> trust_certificate_value;
|
52
59
|
bool disable_mozilla_ca_certificates;
|
60
|
+
bool disable_deprecated_protocols;
|
61
|
+
bool disable_tls_v1_2;
|
53
62
|
};
|
54
63
|
|
55
64
|
[[nodiscard]] auto build() const -> built
|
@@ -58,7 +67,10 @@ class security_options
|
|
58
67
|
enabled_,
|
59
68
|
tls_verify_,
|
60
69
|
trust_certificate_,
|
70
|
+
trust_certificate_value_,
|
61
71
|
disable_mozilla_ca_certificates_,
|
72
|
+
disable_deprecated_protocols,
|
73
|
+
disable_tls_v1_2,
|
62
74
|
};
|
63
75
|
}
|
64
76
|
|
@@ -66,6 +78,9 @@ class security_options
|
|
66
78
|
bool enabled_{ true };
|
67
79
|
tls_verify_mode tls_verify_{ tls_verify_mode::peer };
|
68
80
|
std::optional<std::string> trust_certificate_{};
|
81
|
+
std::optional<std::string> trust_certificate_value_{};
|
69
82
|
bool disable_mozilla_ca_certificates_{ false };
|
83
|
+
bool disable_deprecated_protocols{ true };
|
84
|
+
bool disable_tls_v1_2{ false };
|
70
85
|
};
|
71
86
|
} // namespace couchbase
|
@@ -0,0 +1,41 @@
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
2
|
+
/*
|
3
|
+
* Copyright 2020-Present Couchbase, Inc.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*/
|
17
|
+
|
18
|
+
#pragma once
|
19
|
+
|
20
|
+
#include <functional>
|
21
|
+
#include <memory>
|
22
|
+
#include <optional>
|
23
|
+
#include <string>
|
24
|
+
|
25
|
+
namespace couchbase
|
26
|
+
{
|
27
|
+
struct update_bucket_options : public common_options<update_bucket_options> {
|
28
|
+
public:
|
29
|
+
struct built : public common_options<update_bucket_options>::built {
|
30
|
+
};
|
31
|
+
|
32
|
+
[[nodiscard]] auto build() const -> built
|
33
|
+
{
|
34
|
+
return { build_common_options() };
|
35
|
+
}
|
36
|
+
|
37
|
+
private:
|
38
|
+
};
|
39
|
+
|
40
|
+
using update_bucket_handler = std::function<void(couchbase::manager_error_context)>;
|
41
|
+
} // namespace couchbase
|
@@ -81,35 +81,4 @@ class watch_query_indexes_options : public common_options<watch_query_indexes_op
|
|
81
81
|
*/
|
82
82
|
|
83
83
|
using watch_query_indexes_handler = std::function<void(couchbase::manager_error_context)>;
|
84
|
-
|
85
|
-
#ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
|
86
|
-
namespace core
|
87
|
-
{
|
88
|
-
class cluster;
|
89
|
-
class query_context;
|
90
|
-
namespace impl
|
91
|
-
{
|
92
|
-
|
93
|
-
/**
|
94
|
-
* @since 1.0.0
|
95
|
-
* @internal
|
96
|
-
*/
|
97
|
-
void
|
98
|
-
initiate_watch_query_indexes(std::shared_ptr<couchbase::core::cluster> core,
|
99
|
-
std::string bucket_name,
|
100
|
-
std::vector<std::string> index_names,
|
101
|
-
couchbase::watch_query_indexes_options::built options,
|
102
|
-
query_context query_ctx,
|
103
|
-
std::string collection_name,
|
104
|
-
watch_query_indexes_handler&& handler);
|
105
|
-
void
|
106
|
-
initiate_watch_query_indexes(std::shared_ptr<couchbase::core::cluster> core,
|
107
|
-
std::string bucket_name,
|
108
|
-
std::vector<std::string> index_names,
|
109
|
-
couchbase::watch_query_indexes_options::built options,
|
110
|
-
watch_query_indexes_handler&& handler);
|
111
|
-
|
112
|
-
#endif
|
113
|
-
} // namespace impl
|
114
|
-
} // namespace core
|
115
84
|
} // namespace couchbase
|
@@ -141,6 +141,7 @@ Execute one or more Analytics queries and print results to standard output.
|
|
141
141
|
|
142
142
|
<dl>
|
143
143
|
<dt>`--user-agent-extra=STRING`</dt><dd>Append extra string SDK identifiers. [default: `cbc`].</dd>
|
144
|
+
<dt>`--network=STRING`</dt><dd>Network (a.k.a. Alternate Addresses) to use. [default: `auto`]</dd>
|
144
145
|
<dt>`--show-queries`</dt><dd>Log queries on INFO level.</dd>
|
145
146
|
<dt>`--enable-clustermap-notifications`</dt><dd>Allow server to send notifications when cluster configuration changes.</dd>
|
146
147
|
<dt>`--disable-mutation-tokens`</dt><dd>Do not request Key/Value service to send mutation tokens.</dd>
|
@@ -141,6 +141,7 @@ Retrieve one or more documents from the server and print them to standard output
|
|
141
141
|
|
142
142
|
<dl>
|
143
143
|
<dt>`--user-agent-extra=STRING`</dt><dd>Append extra string SDK identifiers. [default: `cbc`].</dd>
|
144
|
+
<dt>`--network=STRING`</dt><dd>Network (a.k.a. Alternate Addresses) to use. [default: `auto`]</dd>
|
144
145
|
<dt>`--show-queries`</dt><dd>Log queries on INFO level.</dd>
|
145
146
|
<dt>`--enable-clustermap-notifications`</dt><dd>Allow server to send notifications when cluster configuration changes.</dd>
|
146
147
|
<dt>`--disable-mutation-tokens`</dt><dd>Do not request Key/Value service to send mutation tokens.</dd>
|
@@ -148,6 +148,7 @@ Run simple workload generator that sends GET/UPSERT requests with optional N1QL
|
|
148
148
|
|
149
149
|
<dl>
|
150
150
|
<dt>`--user-agent-extra=STRING`</dt><dd>Append extra string SDK identifiers. [default: `cbc`].</dd>
|
151
|
+
<dt>`--network=STRING`</dt><dd>Network (a.k.a. Alternate Addresses) to use. [default: `auto`]</dd>
|
151
152
|
<dt>`--show-queries`</dt><dd>Log queries on INFO level.</dd>
|
152
153
|
<dt>`--enable-clustermap-notifications`</dt><dd>Allow server to send notifications when cluster configuration changes.</dd>
|
153
154
|
<dt>`--disable-mutation-tokens`</dt><dd>Do not request Key/Value service to send mutation tokens.</dd>
|
@@ -149,6 +149,7 @@ Execute one or more N1QL queries and print results to standard output.
|
|
149
149
|
|
150
150
|
<dl>
|
151
151
|
<dt>`--user-agent-extra=STRING`</dt><dd>Append extra string SDK identifiers. [default: `cbc`].</dd>
|
152
|
+
<dt>`--network=STRING`</dt><dd>Network (a.k.a. Alternate Addresses) to use. [default: `auto`]</dd>
|
152
153
|
<dt>`--show-queries`</dt><dd>Log queries on INFO level.</dd>
|
153
154
|
<dt>`--enable-clustermap-notifications`</dt><dd>Allow server to send notifications when cluster configuration changes.</dd>
|
154
155
|
<dt>`--disable-mutation-tokens`</dt><dd>Do not request Key/Value service to send mutation tokens.</dd>
|
@@ -32,6 +32,16 @@ Retrieve document from the server. See [cbc-get](md_docs_2cbc-get) for more info
|
|
32
32
|
<dd>
|
33
33
|
Perform N1QL query. See [cbc-query](md_docs_2cbc-query) for more information.
|
34
34
|
</dd>
|
35
|
+
|
36
|
+
<dt>analytics</dt>
|
37
|
+
<dd>
|
38
|
+
Perform Analytics query. See [cbc-analytics](md_docs_2cbc-analytics) for more information.
|
39
|
+
</dd>
|
40
|
+
|
41
|
+
<dt>pillowfight</dt>
|
42
|
+
<dd>
|
43
|
+
Run simple workload generator. See [cbc-pillowfight](md_docs_2cbc-pillowfight) for more information.
|
44
|
+
</dd>
|
35
45
|
</dl>
|
36
46
|
|
37
47
|
### OPTIONS
|
@@ -113,6 +113,12 @@ TEST_CASE("integration: get and insert non default scope and collection", "[inte
|
|
113
113
|
REQUIRE_SUCCESS(resp.ctx.ec());
|
114
114
|
REQUIRE(resp.value == couchbase::core::utils::to_binary(key));
|
115
115
|
}
|
116
|
+
|
117
|
+
{
|
118
|
+
couchbase::core::operations::management::scope_drop_request req{ integration.ctx.bucket, scope_name };
|
119
|
+
auto resp = test::utils::execute(integration.cluster, req);
|
120
|
+
REQUIRE_SUCCESS(resp.ctx.ec);
|
121
|
+
}
|
116
122
|
}
|
117
123
|
|
118
124
|
TEST_CASE("integration: insert into dropped scope", "[integration]")
|
@@ -315,6 +315,11 @@ TEST_CASE("integration: lock/unlock without lock time", "[integration]")
|
|
315
315
|
TEST_CASE("integration: touch with zero expiry resets expiry", "[integration]")
|
316
316
|
{
|
317
317
|
test::utils::integration_test_guard integration;
|
318
|
+
|
319
|
+
if (integration.ctx.deployment == test::utils::deployment_type::elixir) {
|
320
|
+
SKIP("Timeout is too strict for sanity test env");
|
321
|
+
}
|
322
|
+
|
318
323
|
test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
|
319
324
|
|
320
325
|
couchbase::core::document_id id{ integration.ctx.bucket, "_default", "_default", test::utils::uniq_id("get_reset_expiry_key") };
|
@@ -132,6 +132,9 @@ row: {"airline":{"callsign":"MILE-AIR","country":"United States","iata":"Q5","ic
|
|
132
132
|
TEST_CASE("example: start using", "[integration]")
|
133
133
|
{
|
134
134
|
test::utils::integration_test_guard integration;
|
135
|
+
if (integration.cluster_version().is_capella()) {
|
136
|
+
SKIP("Capella does not allow to use REST API to load sample buckets");
|
137
|
+
}
|
135
138
|
if (!integration.cluster_version().supports_collections()) {
|
136
139
|
SKIP("cluster does not support collections");
|
137
140
|
}
|
@@ -438,8 +441,12 @@ row: {"airline":{"callsign":"MILE-AIR","country":"United States","iata":"Q5","ic
|
|
438
441
|
TEST_CASE("example: search", "[integration]")
|
439
442
|
{
|
440
443
|
test::utils::integration_test_guard integration;
|
444
|
+
|
445
|
+
if (integration.cluster_version().is_capella()) {
|
446
|
+
SKIP("Capella does not allow to use REST API to load sample buckets");
|
447
|
+
}
|
441
448
|
if (!integration.cluster_version().supports_collections()) {
|
442
|
-
|
449
|
+
SKIP("cluster does not support collections");
|
443
450
|
}
|
444
451
|
|
445
452
|
const auto env = test::utils::test_context::load_from_environment();
|
@@ -452,3 +459,132 @@ TEST_CASE("example: search", "[integration]")
|
|
452
459
|
|
453
460
|
REQUIRE(example_search::main(4, argv) == 0);
|
454
461
|
}
|
462
|
+
|
463
|
+
namespace example_buckets
|
464
|
+
{
|
465
|
+
//! [example-buckets]
|
466
|
+
#include <couchbase/cluster.hxx>
|
467
|
+
|
468
|
+
int
|
469
|
+
main(int argc, const char* argv[])
|
470
|
+
{
|
471
|
+
if (argc != 4) {
|
472
|
+
fmt::print("USAGE: ./example_buckets couchbase://127.0.0.1 Administrator password\n");
|
473
|
+
return 1;
|
474
|
+
}
|
475
|
+
|
476
|
+
std::string connection_string{ argv[1] }; // "couchbase://127.0.0.1"
|
477
|
+
std::string username{ argv[2] }; // "Administrator"
|
478
|
+
std::string password{ argv[3] }; // "password"
|
479
|
+
std::string bucket_name{ "travel-sample" };
|
480
|
+
|
481
|
+
// run IO context on separate thread
|
482
|
+
asio::io_context io;
|
483
|
+
auto guard = asio::make_work_guard(io);
|
484
|
+
std::thread io_thread([&io]() { io.run(); });
|
485
|
+
|
486
|
+
auto options = couchbase::cluster_options(username, password);
|
487
|
+
// customize through the 'options'.
|
488
|
+
// For example, optimize timeouts for WAN
|
489
|
+
options.apply_profile("wan_development");
|
490
|
+
|
491
|
+
auto [cluster, ec] = couchbase::cluster::connect(io, connection_string, options).get();
|
492
|
+
if (ec) {
|
493
|
+
fmt::print("unable to connect to the cluster: {}\n", ec.message());
|
494
|
+
return 1;
|
495
|
+
}
|
496
|
+
auto manager = cluster.buckets();
|
497
|
+
|
498
|
+
couchbase::management::cluster::bucket_settings bucket_settings{};
|
499
|
+
std::string test_bucket_name = "cxx_test_integration_examples_bucket";
|
500
|
+
bucket_settings.name = test_bucket_name;
|
501
|
+
bucket_settings.ram_quota_mb = 150;
|
502
|
+
bucket_settings.bucket_type = couchbase::management::cluster::bucket_type::couchbase;
|
503
|
+
bucket_settings.eviction_policy = couchbase::management::cluster::bucket_eviction_policy::value_only;
|
504
|
+
bucket_settings.flush_enabled = true;
|
505
|
+
bucket_settings.replica_indexes = true;
|
506
|
+
bucket_settings.conflict_resolution_type = couchbase::management::cluster::bucket_conflict_resolution::sequence_number;
|
507
|
+
{
|
508
|
+
fmt::print("--- create bucket\n");
|
509
|
+
auto ctx = manager.create_bucket(bucket_settings).get();
|
510
|
+
if (ctx.ec()) {
|
511
|
+
if (ctx.ec() == couchbase::errc::common::invalid_argument) {
|
512
|
+
fmt::print("bucket already exists\n");
|
513
|
+
} else {
|
514
|
+
fmt::print("unable to create the bucket: {}\n", ctx.ec().message());
|
515
|
+
return 1;
|
516
|
+
}
|
517
|
+
} else {
|
518
|
+
fmt::print("--- bucket has been successfully created\n");
|
519
|
+
}
|
520
|
+
}
|
521
|
+
{
|
522
|
+
fmt::print("--- get bucket\n");
|
523
|
+
auto [ctx, bucket] = manager.get_bucket(bucket_name).get();
|
524
|
+
if (ctx.ec()) {
|
525
|
+
fmt::print("unable to get the bucket: {}\n", ctx.ec().message());
|
526
|
+
return 1;
|
527
|
+
}
|
528
|
+
fmt::print("name of fetched bucket: {}\n", bucket.name);
|
529
|
+
}
|
530
|
+
{
|
531
|
+
fmt::print("--- get all buckets\n");
|
532
|
+
auto [ctx, buckets] = manager.get_all_buckets().get();
|
533
|
+
if (ctx.ec()) {
|
534
|
+
fmt::print("unable to get all buckets: {}\n", ctx.ec().message());
|
535
|
+
return 1;
|
536
|
+
}
|
537
|
+
for (const auto& fetched_bucket : buckets) {
|
538
|
+
fmt::print("Bucket name: {}\n", fetched_bucket.name);
|
539
|
+
}
|
540
|
+
}
|
541
|
+
{
|
542
|
+
fmt::print("--- update bucket\n");
|
543
|
+
bucket_settings.ram_quota_mb = 150;
|
544
|
+
auto ctx = manager.update_bucket(bucket_settings).get();
|
545
|
+
if (ctx.ec()) {
|
546
|
+
fmt::print("unable to update the bucket: {}\n", ctx.ec().message());
|
547
|
+
return 1;
|
548
|
+
}
|
549
|
+
fmt::print("bucket has been updated\n");
|
550
|
+
}
|
551
|
+
{
|
552
|
+
fmt::print("--- drop bucket\n");
|
553
|
+
auto ctx = manager.drop_bucket(test_bucket_name).get();
|
554
|
+
if (ctx.ec()) {
|
555
|
+
fmt::print("unable to drop the bucket: {}\n", ctx.ec().message());
|
556
|
+
return 1;
|
557
|
+
}
|
558
|
+
fmt::print("bucket has been dropped\n");
|
559
|
+
}
|
560
|
+
|
561
|
+
// close cluster connection
|
562
|
+
cluster.close();
|
563
|
+
guard.reset();
|
564
|
+
|
565
|
+
io_thread.join();
|
566
|
+
return 0;
|
567
|
+
}
|
568
|
+
|
569
|
+
//! [example-buckets]
|
570
|
+
} // namespace example_buckets
|
571
|
+
|
572
|
+
TEST_CASE("example: bucket management", "[integration]")
|
573
|
+
{
|
574
|
+
test::utils::integration_test_guard integration;
|
575
|
+
|
576
|
+
if (integration.cluster_version().is_capella()) {
|
577
|
+
SKIP("Capella does not allow to use REST API to load sample buckets");
|
578
|
+
}
|
579
|
+
|
580
|
+
const auto env = test::utils::test_context::load_from_environment();
|
581
|
+
|
582
|
+
const char* argv[] = {
|
583
|
+
"example_buckets", // name of the "executable"
|
584
|
+
env.connection_string.c_str(),
|
585
|
+
env.username.c_str(),
|
586
|
+
env.password.c_str(),
|
587
|
+
};
|
588
|
+
|
589
|
+
REQUIRE(example_buckets::main(4, argv) == 0);
|
590
|
+
}
|