couchbase 4.2.1 → 4.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CMakeLists.txt +1 -0
- package/deps/couchbase-cxx-client/.gitmodules +3 -0
- package/deps/couchbase-cxx-client/.idea/misc.xml +1 -0
- package/deps/couchbase-cxx-client/.idea/vcs.xml +1 -0
- package/deps/couchbase-cxx-client/CMakeLists.txt +11 -1
- package/deps/couchbase-cxx-client/README.md +3 -3
- package/deps/couchbase-cxx-client/cmake/CompilerWarnings.cmake +4 -1
- package/deps/couchbase-cxx-client/cmake/VersionInfo.cmake +13 -1
- package/deps/couchbase-cxx-client/cmake/build_version.hxx.in +1 -0
- package/deps/couchbase-cxx-client/core/cluster.hxx +15 -5
- package/deps/couchbase-cxx-client/core/impl/build_deferred_query_indexes.cxx +17 -6
- package/deps/couchbase-cxx-client/core/impl/cluster.cxx +1 -1
- package/deps/couchbase-cxx-client/core/impl/collection_query_index_manager.cxx +93 -0
- package/deps/couchbase-cxx-client/core/impl/configuration_profiles_registry.cxx +11 -0
- package/deps/couchbase-cxx-client/core/impl/create_query_index.cxx +119 -0
- package/deps/couchbase-cxx-client/core/impl/drop_query_index.cxx +108 -0
- package/deps/couchbase-cxx-client/core/impl/get.cxx +1 -1
- package/deps/couchbase-cxx-client/core/impl/get_all_query_indexes.cxx +76 -0
- package/deps/couchbase-cxx-client/core/impl/query.cxx +5 -7
- package/deps/couchbase-cxx-client/core/impl/watch_query_indexes.cxx +168 -0
- package/deps/couchbase-cxx-client/core/io/mcbp_session.cxx +15 -1
- package/deps/couchbase-cxx-client/core/logger/configuration.hxx +3 -0
- package/deps/couchbase-cxx-client/core/logger/level.hxx +21 -0
- package/deps/couchbase-cxx-client/core/logger/logger.hxx +4 -6
- package/deps/couchbase-cxx-client/core/meta/CMakeLists.txt +4 -2
- package/deps/couchbase-cxx-client/core/meta/features.hxx +31 -0
- package/deps/couchbase-cxx-client/core/meta/version.cxx +67 -5
- package/deps/couchbase-cxx-client/core/meta/version.hxx +12 -1
- package/deps/couchbase-cxx-client/core/metrics/CMakeLists.txt +4 -1
- package/deps/couchbase-cxx-client/core/metrics/logging_meter.cxx +46 -5
- package/deps/couchbase-cxx-client/core/metrics/logging_meter.hxx +10 -26
- package/deps/couchbase-cxx-client/core/operations/document_get_projected.cxx +3 -2
- package/deps/couchbase-cxx-client/core/operations/document_query.cxx +10 -12
- package/deps/couchbase-cxx-client/core/operations/document_query.hxx +1 -3
- package/deps/couchbase-cxx-client/core/operations/management/query_index_build.cxx +8 -14
- package/deps/couchbase-cxx-client/core/operations/management/query_index_build.hxx +2 -1
- package/deps/couchbase-cxx-client/core/operations/management/query_index_build_deferred.hxx +15 -8
- package/deps/couchbase-cxx-client/core/operations/management/query_index_create.cxx +7 -14
- package/deps/couchbase-cxx-client/core/operations/management/query_index_create.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/query_index_drop.cxx +11 -16
- package/deps/couchbase-cxx-client/core/operations/management/query_index_drop.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/query_index_get_all.cxx +8 -12
- package/deps/couchbase-cxx-client/core/operations/management/query_index_get_all.hxx +4 -3
- package/deps/couchbase-cxx-client/core/operations/management/query_index_get_all_deferred.cxx +21 -12
- package/deps/couchbase-cxx-client/core/operations/management/query_index_get_all_deferred.hxx +3 -2
- package/deps/couchbase-cxx-client/core/origin.hxx +1 -1
- package/deps/couchbase-cxx-client/core/platform/uuid.cc +1 -2
- package/deps/couchbase-cxx-client/core/protocol/cmd_hello.hxx +5 -1
- package/deps/couchbase-cxx-client/core/query_context.hxx +79 -0
- package/deps/couchbase-cxx-client/core/tracing/CMakeLists.txt +3 -1
- package/deps/couchbase-cxx-client/core/tracing/threshold_logging_tracer.cxx +19 -4
- package/deps/couchbase-cxx-client/core/tracing/threshold_logging_tracer.hxx +2 -2
- package/deps/couchbase-cxx-client/core/transactions/async_attempt_context.hxx +10 -4
- package/deps/couchbase-cxx-client/core/transactions/atr_cleanup_entry.cxx +52 -63
- package/deps/couchbase-cxx-client/core/transactions/attempt_context.hxx +8 -3
- package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.cxx +163 -126
- package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.hxx +24 -37
- package/deps/couchbase-cxx-client/core/transactions/forward_compat.hxx +4 -4
- package/deps/couchbase-cxx-client/core/transactions/internal/atr_cleanup_entry.hxx +51 -13
- package/deps/couchbase-cxx-client/core/transactions/internal/client_record.hxx +26 -1
- package/deps/couchbase-cxx-client/core/transactions/internal/doc_record.hxx +21 -0
- package/deps/couchbase-cxx-client/core/transactions/internal/logging.hxx +40 -18
- package/deps/couchbase-cxx-client/core/transactions/internal/transaction_context.hxx +5 -0
- package/deps/couchbase-cxx-client/core/transactions/result.hxx +26 -0
- package/deps/couchbase-cxx-client/core/transactions/staged_mutation.cxx +48 -47
- package/deps/couchbase-cxx-client/core/transactions/staged_mutation.hxx +6 -6
- package/deps/couchbase-cxx-client/core/transactions/transaction_context.cxx +33 -19
- package/deps/couchbase-cxx-client/core/transactions/transaction_get_result.hxx +18 -2
- package/deps/couchbase-cxx-client/core/transactions/transaction_links.hxx +25 -2
- package/deps/couchbase-cxx-client/core/transactions/transactions.cxx +4 -4
- package/deps/couchbase-cxx-client/core/transactions/transactions_cleanup.cxx +49 -56
- package/deps/couchbase-cxx-client/core/transactions/waitable_op_list.hxx +7 -7
- package/deps/couchbase-cxx-client/core/transactions.hxx +0 -12
- package/deps/couchbase-cxx-client/core/utils/binary.hxx +1 -1
- package/deps/couchbase-cxx-client/core/utils/keyspace.hxx +55 -0
- package/deps/couchbase-cxx-client/couchbase/build_query_index_options.hxx +12 -45
- package/deps/couchbase-cxx-client/couchbase/cluster.hxx +1 -1
- package/deps/couchbase-cxx-client/couchbase/cluster_options.hxx +6 -7
- package/deps/couchbase-cxx-client/couchbase/collection.hxx +8 -0
- package/deps/couchbase-cxx-client/couchbase/collection_query_index_manager.hxx +218 -0
- package/deps/couchbase-cxx-client/couchbase/configuration_profiles_registry.hxx +3 -0
- package/deps/couchbase-cxx-client/couchbase/create_primary_query_index_options.hxx +166 -0
- package/deps/couchbase-cxx-client/couchbase/create_query_index_options.hxx +172 -0
- package/deps/couchbase-cxx-client/couchbase/drop_primary_query_index_options.hxx +129 -0
- package/deps/couchbase-cxx-client/couchbase/drop_query_index_options.hxx +116 -0
- package/deps/couchbase-cxx-client/couchbase/fmt/cas.hxx +1 -1
- package/deps/couchbase-cxx-client/couchbase/fmt/query_scan_consistency.hxx +46 -0
- package/deps/couchbase-cxx-client/couchbase/fmt/query_status.hxx +70 -0
- package/deps/couchbase-cxx-client/couchbase/fmt/tls_verify_mode.hxx +46 -0
- package/deps/couchbase-cxx-client/couchbase/get_all_query_indexes_options.hxx +100 -0
- package/deps/couchbase-cxx-client/{core → couchbase}/management/query_index.hxx +2 -2
- package/deps/couchbase-cxx-client/couchbase/metrics/meter.hxx +16 -0
- package/deps/couchbase-cxx-client/couchbase/query_index_manager.hxx +178 -6
- package/deps/couchbase-cxx-client/couchbase/query_options.hxx +1 -18
- package/deps/couchbase-cxx-client/couchbase/scope.hxx +5 -2
- package/deps/couchbase-cxx-client/couchbase/tracing/request_tracer.hxx +16 -0
- package/deps/couchbase-cxx-client/couchbase/transactions/async_attempt_context.hxx +11 -4
- package/deps/couchbase-cxx-client/couchbase/transactions/attempt_context.hxx +5 -3
- package/deps/couchbase-cxx-client/couchbase/transactions/transaction_keyspace.hxx +16 -0
- package/deps/couchbase-cxx-client/couchbase/transactions/transaction_query_options.hxx +0 -6
- package/deps/couchbase-cxx-client/couchbase/watch_query_indexes_options.hxx +115 -0
- package/deps/couchbase-cxx-client/examples/minimal.cxx +3 -1
- package/deps/couchbase-cxx-client/test/test_integration_crud.cxx +72 -0
- package/deps/couchbase-cxx-client/test/test_integration_management.cxx +727 -310
- package/deps/couchbase-cxx-client/test/test_integration_query.cxx +4 -8
- package/deps/couchbase-cxx-client/test/test_integration_transcoders.cxx +14 -0
- package/deps/couchbase-cxx-client/test/test_transaction_transaction_public_blocking_api.cxx +34 -19
- package/deps/couchbase-cxx-client/test/test_unit_transaction_logging.cxx +66 -22
- package/deps/couchbase-cxx-client/test/test_unit_utils.cxx +51 -0
- package/deps/couchbase-cxx-client/test/tools/tool_kv_loader.cxx +2 -2
- package/deps/couchbase-cxx-client/test/utils/integration_test_guard.cxx +2 -0
- package/deps/couchbase-cxx-client/test/utils/wait_until.cxx +4 -4
- package/deps/couchbase-cxx-client/third_party/docopt/.travis.yml +103 -0
- package/deps/couchbase-cxx-client/third_party/docopt/CMakeLists.txt +129 -0
- package/deps/couchbase-cxx-client/third_party/docopt/LICENSE-Boost-1.0 +23 -0
- package/deps/couchbase-cxx-client/third_party/docopt/LICENSE-MIT +23 -0
- package/deps/couchbase-cxx-client/third_party/docopt/README.rst +479 -0
- package/deps/couchbase-cxx-client/third_party/docopt/docopt-config.cmake +1 -0
- package/deps/couchbase-cxx-client/third_party/docopt/docopt.cpp +687 -0
- package/deps/couchbase-cxx-client/third_party/docopt/docopt.h +98 -0
- package/deps/couchbase-cxx-client/third_party/docopt/docopt.pc.in +9 -0
- package/deps/couchbase-cxx-client/third_party/docopt/docopt_private.h +676 -0
- package/deps/couchbase-cxx-client/third_party/docopt/docopt_util.h +122 -0
- package/deps/couchbase-cxx-client/third_party/docopt/docopt_value.h +341 -0
- package/deps/couchbase-cxx-client/third_party/docopt/examples/naval_fate.cpp +36 -0
- package/deps/couchbase-cxx-client/third_party/docopt/main.cpp +16 -0
- package/deps/couchbase-cxx-client/third_party/docopt/run_testcase.cpp +40 -0
- package/deps/couchbase-cxx-client/third_party/docopt/run_tests.py +72 -0
- package/deps/couchbase-cxx-client/third_party/docopt/testcases.docopt +957 -0
- package/deps/couchbase-cxx-client/tools/CMakeLists.txt +14 -0
- package/deps/couchbase-cxx-client/tools/cbc.cxx +65 -0
- package/deps/couchbase-cxx-client/tools/command.hxx +31 -0
- package/deps/couchbase-cxx-client/tools/command_registry.cxx +43 -0
- package/deps/couchbase-cxx-client/tools/command_registry.hxx +39 -0
- package/deps/couchbase-cxx-client/tools/get.cxx +267 -0
- package/deps/couchbase-cxx-client/tools/get.hxx +26 -0
- package/deps/couchbase-cxx-client/tools/query.cxx +441 -0
- package/deps/couchbase-cxx-client/tools/query.hxx +26 -0
- package/deps/couchbase-cxx-client/tools/utils.cxx +418 -0
- package/deps/couchbase-cxx-client/tools/utils.hxx +150 -0
- package/deps/couchbase-cxx-client/tools/version.cxx +82 -0
- package/deps/couchbase-cxx-client/tools/version.hxx +26 -0
- package/dist/authenticators.d.ts +2 -2
- package/dist/authenticators.js +1 -2
- package/dist/binding.d.ts +32 -16
- package/dist/cluster.js +14 -7
- package/dist/collection.d.ts +6 -0
- package/dist/collection.js +8 -0
- package/dist/queryexecutor.js +1 -1
- package/dist/queryindexmanager.d.ts +100 -4
- package/dist/queryindexmanager.js +344 -118
- package/dist/transactions.js +0 -2
- package/package.json +1 -1
- package/src/connection.cpp +2 -0
- package/src/connection.hpp +1 -0
- package/src/connection_autogen.cpp +16 -0
- package/src/jstocbpp_autogen.hpp +93 -23
- package/src/jstocbpp_basic.hpp +24 -0
- package/src/jstocbpp_transactions.hpp +0 -8
- package/tools/gen-bindings-js.js +1 -0
- package/tools/gen-bindings-json.py +4 -2
- package/deps/couchbase-cxx-client/core/transactions/logging.cxx +0 -107
|
@@ -29,45 +29,29 @@ namespace couchbase::core::metrics
|
|
|
29
29
|
{
|
|
30
30
|
class logging_value_recorder;
|
|
31
31
|
|
|
32
|
-
class logging_meter
|
|
32
|
+
class logging_meter
|
|
33
|
+
: public couchbase::metrics::meter
|
|
34
|
+
, public std::enable_shared_from_this<logging_meter>
|
|
33
35
|
{
|
|
34
36
|
private:
|
|
35
37
|
asio::steady_timer emit_report_;
|
|
36
38
|
logging_meter_options options_;
|
|
37
39
|
std::mutex recorders_mutex_{};
|
|
40
|
+
// service name -> operation name -> recorder
|
|
38
41
|
std::map<std::string, std::map<std::string, std::shared_ptr<logging_value_recorder>>> recorders_{};
|
|
39
42
|
|
|
40
43
|
void log_report() const;
|
|
41
44
|
|
|
42
|
-
void rearm_reporter()
|
|
43
|
-
{
|
|
44
|
-
emit_report_.expires_after(options_.emit_interval);
|
|
45
|
-
emit_report_.async_wait([this](std::error_code ec) {
|
|
46
|
-
if (ec == asio::error::operation_aborted) {
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
log_report();
|
|
50
|
-
rearm_reporter();
|
|
51
|
-
});
|
|
52
|
-
}
|
|
45
|
+
void rearm_reporter();
|
|
53
46
|
|
|
54
47
|
public:
|
|
55
|
-
logging_meter(asio::io_context& ctx, logging_meter_options options)
|
|
56
|
-
: emit_report_(ctx)
|
|
57
|
-
, options_(options)
|
|
58
|
-
{
|
|
59
|
-
}
|
|
48
|
+
logging_meter(asio::io_context& ctx, logging_meter_options options);
|
|
60
49
|
|
|
61
|
-
~logging_meter() override
|
|
62
|
-
{
|
|
63
|
-
emit_report_.cancel();
|
|
64
|
-
log_report();
|
|
65
|
-
}
|
|
50
|
+
~logging_meter() override;
|
|
66
51
|
|
|
67
|
-
void start()
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
52
|
+
void start() override;
|
|
53
|
+
|
|
54
|
+
void stop() override;
|
|
71
55
|
|
|
72
56
|
std::shared_ptr<couchbase::metrics::value_recorder> get_value_recorder(const std::string& name,
|
|
73
57
|
const std::map<std::string, std::string>& tags) override;
|
|
@@ -224,8 +224,9 @@ get_projected_request::make_response(key_value_error_context&& ctx, const encode
|
|
|
224
224
|
return response;
|
|
225
225
|
}
|
|
226
226
|
subdoc_apply_projection(new_doc, projection, value_to_apply, preserve_array_indexes);
|
|
227
|
-
} else {
|
|
228
|
-
response.ctx.override_ec(
|
|
227
|
+
} else if (field.status != key_value_status_code::subdoc_path_not_found) {
|
|
228
|
+
response.ctx.override_ec(
|
|
229
|
+
protocol::map_status_code(protocol::client_opcode::subdoc_multi_lookup, static_cast<std::uint16_t>(field.status)));
|
|
229
230
|
return response;
|
|
230
231
|
}
|
|
231
232
|
}
|
|
@@ -138,14 +138,8 @@ query_request::encode_to(query_request::encoded_request_type& encoded, http_cont
|
|
|
138
138
|
body["scan_wait"] = fmt::format("{}ms", scan_wait.value().count());
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
if (
|
|
142
|
-
body["query_context"] =
|
|
143
|
-
} else if (bucket_name) {
|
|
144
|
-
if (scope_name) {
|
|
145
|
-
body["query_context"] = fmt::format("default:`{}`.`{}`", *bucket_name, *scope_name);
|
|
146
|
-
} else {
|
|
147
|
-
body["query_context"] = fmt::format("default:`{}`", *bucket_name);
|
|
148
|
-
}
|
|
141
|
+
if (query_context) {
|
|
142
|
+
body["query_context"] = query_context.value();
|
|
149
143
|
}
|
|
150
144
|
for (const auto& [name, value] : raw) {
|
|
151
145
|
body[name] = utils::json::parse(value);
|
|
@@ -166,16 +160,20 @@ query_request::encode_to(query_request::encoded_request_type& encoded, http_cont
|
|
|
166
160
|
if (!prep.is_string()) {
|
|
167
161
|
prep = false;
|
|
168
162
|
}
|
|
163
|
+
body.erase("statement");
|
|
164
|
+
body.erase("prepared");
|
|
169
165
|
if (ctx_->options.show_queries) {
|
|
170
|
-
CB_LOG_INFO("QUERY: client_context_id=\"{}\", prep={}, {}",
|
|
166
|
+
CB_LOG_INFO("QUERY: client_context_id=\"{}\", prep={}, {}, options={}",
|
|
171
167
|
encoded.client_context_id,
|
|
172
168
|
utils::json::generate(prep),
|
|
173
|
-
utils::json::generate(stmt)
|
|
169
|
+
utils::json::generate(stmt),
|
|
170
|
+
utils::json::generate(body));
|
|
174
171
|
} else {
|
|
175
|
-
CB_LOG_DEBUG("QUERY: client_context_id=\"{}\", prep={}, {}",
|
|
172
|
+
CB_LOG_DEBUG("QUERY: client_context_id=\"{}\", prep={}, {}, options={}",
|
|
176
173
|
encoded.client_context_id,
|
|
177
174
|
utils::json::generate(prep),
|
|
178
|
-
utils::json::generate(stmt)
|
|
175
|
+
utils::json::generate(stmt),
|
|
176
|
+
utils::json::generate(body));
|
|
179
177
|
}
|
|
180
178
|
if (row_callback) {
|
|
181
179
|
encoded.streaming.emplace(couchbase::core::io::streaming_settings{
|
|
@@ -92,9 +92,7 @@ struct query_request {
|
|
|
92
92
|
std::optional<std::uint64_t> pipeline_cap{};
|
|
93
93
|
std::optional<query_scan_consistency> scan_consistency{};
|
|
94
94
|
std::vector<mutation_token> mutation_state{};
|
|
95
|
-
std::optional<std::string>
|
|
96
|
-
std::optional<std::string> scope_name{};
|
|
97
|
-
std::optional<std::string> scope_qualifier{};
|
|
95
|
+
std::optional<std::string> query_context{};
|
|
98
96
|
std::optional<std::string> client_context_id{};
|
|
99
97
|
std::optional<std::chrono::milliseconds> timeout{};
|
|
100
98
|
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
#include "core/utils/join_strings.hxx"
|
|
21
21
|
#include "core/utils/json.hxx"
|
|
22
|
+
#include "core/utils/keyspace.hxx"
|
|
22
23
|
#include "error_utils.hxx"
|
|
23
24
|
|
|
24
25
|
namespace couchbase::core::operations::management
|
|
@@ -44,23 +45,16 @@ quote_and_join_strings(const Range& values, const std::string& sep)
|
|
|
44
45
|
std::error_code
|
|
45
46
|
query_index_build_request::encode_to(encoded_request_type& encoded, http_context& /* context */) const
|
|
46
47
|
{
|
|
47
|
-
if (
|
|
48
|
+
if (!utils::check_query_management_request(*this)) {
|
|
48
49
|
return errc::common::invalid_argument;
|
|
49
50
|
}
|
|
50
|
-
|
|
51
|
-
std::string statement;
|
|
52
|
-
if (!scope_name.empty() && !collection_name.empty()) {
|
|
53
|
-
statement = fmt::format(
|
|
54
|
-
R"(BUILD INDEX ON `{}`.`{}`.`{}` ({}))", bucket_name, scope_name, collection_name, quote_and_join_strings(index_names, ","));
|
|
55
|
-
query_context += ".`" + scope_name + "`";
|
|
56
|
-
} else {
|
|
57
|
-
statement = fmt::format(R"(BUILD INDEX ON {} ({}))", query_context, quote_and_join_strings(index_names, ","));
|
|
58
|
-
query_context += fmt::format(".`{}`", couchbase::scope::default_name);
|
|
59
|
-
}
|
|
51
|
+
auto keyspace = core::utils::build_keyspace(*this);
|
|
52
|
+
std::string statement = fmt::format(R"(BUILD INDEX ON {} ({}))", keyspace, quote_and_join_strings(index_names, ","));
|
|
60
53
|
encoded.headers["content-type"] = "application/json";
|
|
61
|
-
tao::json::value body{ { "statement", statement },
|
|
62
|
-
|
|
63
|
-
|
|
54
|
+
tao::json::value body{ { "statement", statement }, { "client_context_id", encoded.client_context_id } };
|
|
55
|
+
if (query_ctx.has_value()) {
|
|
56
|
+
body["query_context"] = query_ctx.value();
|
|
57
|
+
}
|
|
64
58
|
encoded.method = "POST";
|
|
65
59
|
encoded.path = "/query/service";
|
|
66
60
|
encoded.body = utils::json::generate(body);
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
#include "core/io/http_context.hxx"
|
|
22
22
|
#include "core/io/http_message.hxx"
|
|
23
23
|
#include "core/platform/uuid.h"
|
|
24
|
+
#include "core/query_context.hxx"
|
|
24
25
|
#include "core/timeout_defaults.hxx"
|
|
25
26
|
|
|
26
27
|
namespace couchbase::core::operations::management
|
|
@@ -47,7 +48,7 @@ struct query_index_build_request {
|
|
|
47
48
|
std::string bucket_name;
|
|
48
49
|
std::string scope_name;
|
|
49
50
|
std::string collection_name;
|
|
50
|
-
|
|
51
|
+
query_context query_ctx;
|
|
51
52
|
std::vector<std::string> index_names;
|
|
52
53
|
|
|
53
54
|
std::optional<std::string> client_context_id{};
|
|
@@ -18,10 +18,11 @@
|
|
|
18
18
|
#pragma once
|
|
19
19
|
|
|
20
20
|
#include "core/error_context/http.hxx"
|
|
21
|
-
#include "core/management/query_index.hxx"
|
|
22
21
|
#include "core/operations/management/query_index_build.hxx"
|
|
23
22
|
#include "core/operations/management/query_index_get_all_deferred.hxx"
|
|
24
23
|
#include "core/operations/operation_traits.hxx"
|
|
24
|
+
#include "core/query_context.hxx"
|
|
25
|
+
#include "couchbase/management/query_index.hxx"
|
|
25
26
|
|
|
26
27
|
namespace couchbase::core::operations
|
|
27
28
|
{
|
|
@@ -48,6 +49,7 @@ struct query_index_build_deferred_request {
|
|
|
48
49
|
std::string bucket_name;
|
|
49
50
|
std::optional<std::string> scope_name;
|
|
50
51
|
std::optional<std::string> collection_name;
|
|
52
|
+
query_context query_ctx;
|
|
51
53
|
|
|
52
54
|
std::optional<std::string> client_context_id{};
|
|
53
55
|
std::optional<std::chrono::milliseconds> timeout{};
|
|
@@ -79,24 +81,29 @@ struct query_index_build_deferred_request {
|
|
|
79
81
|
{
|
|
80
82
|
core->execute(
|
|
81
83
|
query_index_get_all_deferred_request{
|
|
82
|
-
bucket_name, scope_name.value_or(""), collection_name.value_or(""), client_context_id, timeout },
|
|
84
|
+
bucket_name, scope_name.value_or(""), collection_name.value_or(""), query_ctx, client_context_id, timeout },
|
|
83
85
|
[core,
|
|
84
86
|
handler = std::move(handler),
|
|
85
87
|
bucket_name = bucket_name,
|
|
86
88
|
scope_name = scope_name.value_or(""),
|
|
87
89
|
collection_name = collection_name.value_or(""),
|
|
90
|
+
query_ctx = query_ctx,
|
|
88
91
|
client_context_id = client_context_id,
|
|
89
92
|
timeout = timeout](query_index_get_all_deferred_response resp1) mutable {
|
|
90
93
|
auto list_resp = std::move(resp1);
|
|
91
94
|
if (list_resp.ctx.ec || list_resp.index_names.empty()) {
|
|
92
95
|
return handler(convert_response(std::move(list_resp)));
|
|
93
96
|
}
|
|
94
|
-
core->execute(
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
core->execute(query_index_build_request{ std::move(bucket_name),
|
|
98
|
+
scope_name,
|
|
99
|
+
collection_name,
|
|
100
|
+
query_ctx,
|
|
101
|
+
std::move(list_resp.index_names),
|
|
102
|
+
client_context_id,
|
|
103
|
+
timeout },
|
|
104
|
+
[handler = std::move(handler)](query_index_build_response build_resp) mutable {
|
|
105
|
+
return handler(convert_response(std::move(build_resp)));
|
|
106
|
+
});
|
|
100
107
|
});
|
|
101
108
|
}
|
|
102
109
|
};
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
#include "core/utils/join_strings.hxx"
|
|
21
21
|
#include "core/utils/json.hxx"
|
|
22
|
+
#include "core/utils/keyspace.hxx"
|
|
22
23
|
#include "error_utils.hxx"
|
|
23
24
|
|
|
24
25
|
namespace couchbase::core::operations::management
|
|
@@ -26,7 +27,7 @@ namespace couchbase::core::operations::management
|
|
|
26
27
|
std::error_code
|
|
27
28
|
query_index_create_request::encode_to(encoded_request_type& encoded, http_context& /* context */) const
|
|
28
29
|
{
|
|
29
|
-
if (
|
|
30
|
+
if (!core::utils::check_query_management_request(*this)) {
|
|
30
31
|
return errc::common::invalid_argument;
|
|
31
32
|
}
|
|
32
33
|
encoded.headers["content-type"] = "application/json";
|
|
@@ -45,17 +46,7 @@ query_index_create_request::encode_to(encoded_request_type& encoded, http_contex
|
|
|
45
46
|
if (with) {
|
|
46
47
|
with_clause = fmt::format("WITH {}", utils::json::generate(with));
|
|
47
48
|
}
|
|
48
|
-
std::string keyspace =
|
|
49
|
-
auto query_context = keyspace;
|
|
50
|
-
if (!scope_name.empty()) {
|
|
51
|
-
keyspace += ".`" + scope_name + "`";
|
|
52
|
-
query_context += ".`" + scope_name + "`";
|
|
53
|
-
} else {
|
|
54
|
-
query_context += fmt::format(".`{}`", couchbase::scope::default_name);
|
|
55
|
-
}
|
|
56
|
-
if (!collection_name.empty()) {
|
|
57
|
-
keyspace += ".`" + collection_name + "`";
|
|
58
|
-
}
|
|
49
|
+
std::string keyspace = utils::build_keyspace(*this);
|
|
59
50
|
tao::json::value body{ { "statement",
|
|
60
51
|
is_primary ? fmt::format(R"(CREATE PRIMARY INDEX {} ON {} USING GSI {})",
|
|
61
52
|
index_name.empty() ? "" : fmt::format("`{}`", index_name),
|
|
@@ -67,8 +58,10 @@ query_index_create_request::encode_to(encoded_request_type& encoded, http_contex
|
|
|
67
58
|
utils::join_strings(fields, ", "),
|
|
68
59
|
where_clause,
|
|
69
60
|
with_clause) },
|
|
70
|
-
{ "client_context_id", encoded.client_context_id }
|
|
71
|
-
|
|
61
|
+
{ "client_context_id", encoded.client_context_id } };
|
|
62
|
+
if (query_ctx.has_value()) {
|
|
63
|
+
body["query_context"] = query_ctx.value();
|
|
64
|
+
}
|
|
72
65
|
encoded.method = "POST";
|
|
73
66
|
encoded.path = "/query/service";
|
|
74
67
|
encoded.body = utils::json::generate(body);
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
#include "core/io/http_context.hxx"
|
|
22
22
|
#include "core/io/http_message.hxx"
|
|
23
23
|
#include "core/platform/uuid.h"
|
|
24
|
+
#include "core/query_context.hxx"
|
|
24
25
|
#include "core/timeout_defaults.hxx"
|
|
25
26
|
|
|
26
27
|
namespace couchbase::core::operations::management
|
|
@@ -49,6 +50,7 @@ struct query_index_create_request {
|
|
|
49
50
|
std::string collection_name;
|
|
50
51
|
std::string index_name{};
|
|
51
52
|
std::vector<std::string> fields;
|
|
53
|
+
query_context query_ctx;
|
|
52
54
|
bool is_primary{ false };
|
|
53
55
|
bool ignore_if_exists{ false };
|
|
54
56
|
std::optional<std::string> condition{};
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
#include "query_index_drop.hxx"
|
|
19
19
|
|
|
20
20
|
#include "core/utils/json.hxx"
|
|
21
|
+
#include "core/utils/keyspace.hxx"
|
|
21
22
|
#include "error_utils.hxx"
|
|
22
23
|
|
|
23
24
|
namespace couchbase::core::operations::management
|
|
@@ -25,31 +26,25 @@ namespace couchbase::core::operations::management
|
|
|
25
26
|
std::error_code
|
|
26
27
|
query_index_drop_request::encode_to(encoded_request_type& encoded, http_context& /*context*/) const
|
|
27
28
|
{
|
|
28
|
-
if (
|
|
29
|
+
if (!utils::check_query_management_request(*this)) {
|
|
29
30
|
return errc::common::invalid_argument;
|
|
30
31
|
}
|
|
31
32
|
encoded.headers["content-type"] = "application/json";
|
|
32
|
-
|
|
33
|
-
auto keyspace = query_context;
|
|
34
|
-
if (!scope_name.empty()) {
|
|
35
|
-
query_context += ".`" + scope_name + "`";
|
|
36
|
-
keyspace += ".`" + scope_name + "`";
|
|
37
|
-
} else {
|
|
38
|
-
query_context += fmt::format(".`{}`", couchbase::scope::default_name);
|
|
39
|
-
}
|
|
40
|
-
if (!collection_name.empty()) {
|
|
41
|
-
keyspace += ".`" + collection_name + "`";
|
|
42
|
-
}
|
|
33
|
+
auto keyspace = utils::build_keyspace(*this);
|
|
43
34
|
std::string drop_index_stmt;
|
|
44
35
|
if (is_primary && index_name.empty()) {
|
|
45
36
|
drop_index_stmt = fmt::format(R"(DROP PRIMARY INDEX ON {} USING GSI)", keyspace);
|
|
46
|
-
} else {
|
|
37
|
+
} else if (bucket_name.empty() || (!collection_name.empty() && !scope_name.empty())) {
|
|
47
38
|
drop_index_stmt = fmt::format(R"(DROP INDEX `{}` ON {} USING GSI)", index_name, keyspace);
|
|
39
|
+
} else {
|
|
40
|
+
// this works on 6.6 and earlier
|
|
41
|
+
drop_index_stmt = fmt::format(R"(DROP INDEX `{}`.`{}` USING GSI)", bucket_name, index_name);
|
|
48
42
|
}
|
|
49
43
|
|
|
50
|
-
tao::json::value body{ { "statement", drop_index_stmt },
|
|
51
|
-
|
|
52
|
-
|
|
44
|
+
tao::json::value body{ { "statement", drop_index_stmt }, { "client_context_id", encoded.client_context_id } };
|
|
45
|
+
if (query_ctx.has_value()) {
|
|
46
|
+
body["query_context"] = query_ctx.value();
|
|
47
|
+
}
|
|
53
48
|
encoded.method = "POST";
|
|
54
49
|
encoded.path = "/query/service";
|
|
55
50
|
encoded.body = utils::json::generate(body);
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
#include "core/io/http_context.hxx"
|
|
22
22
|
#include "core/io/http_message.hxx"
|
|
23
23
|
#include "core/platform/uuid.h"
|
|
24
|
+
#include "core/query_context.hxx"
|
|
24
25
|
#include "core/timeout_defaults.hxx"
|
|
25
26
|
|
|
26
27
|
namespace couchbase::core::operations::management
|
|
@@ -48,6 +49,7 @@ struct query_index_drop_request {
|
|
|
48
49
|
std::string scope_name;
|
|
49
50
|
std::string collection_name;
|
|
50
51
|
std::string index_name;
|
|
52
|
+
query_context query_ctx;
|
|
51
53
|
bool is_primary{ false };
|
|
52
54
|
bool ignore_if_does_not_exist{ false };
|
|
53
55
|
|
|
@@ -38,13 +38,6 @@ query_index_get_all_request::encode_to(encoded_request_type& encoded, couchbase:
|
|
|
38
38
|
where = bucket_cond;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
std::string query_context = fmt::format("{}:`{}`", namespace_id, bucket_name);
|
|
42
|
-
if (!scope_name.empty()) {
|
|
43
|
-
query_context += ".`" + scope_name + "`";
|
|
44
|
-
} else {
|
|
45
|
-
query_context += fmt::format(".`{}`", couchbase::scope::default_name);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
41
|
if (collection_name == "_default" || collection_name.empty()) {
|
|
49
42
|
std::string default_collection_cond = "(bucket_id IS MISSING AND keyspace_id = $bucket_name)";
|
|
50
43
|
where = "(" + where + " OR " + default_collection_cond + ")";
|
|
@@ -59,10 +52,13 @@ query_index_get_all_request::encode_to(encoded_request_type& encoded, couchbase:
|
|
|
59
52
|
encoded.headers["content-type"] = "application/json";
|
|
60
53
|
tao::json::value body{ { "statement", statement },
|
|
61
54
|
{ "client_context_id", encoded.client_context_id },
|
|
62
|
-
{ "$bucket_name", bucket_name },
|
|
63
|
-
{ "$scope_name", scope_name },
|
|
64
|
-
{ "$collection_name", collection_name }
|
|
65
|
-
|
|
55
|
+
{ "$bucket_name", query_ctx.has_value() ? query_ctx.bucket_name() : bucket_name },
|
|
56
|
+
{ "$scope_name", query_ctx.has_value() ? query_ctx.scope_name() : scope_name },
|
|
57
|
+
{ "$collection_name", collection_name } };
|
|
58
|
+
|
|
59
|
+
if (query_ctx.has_value()) {
|
|
60
|
+
body["query_context"] = query_ctx.value();
|
|
61
|
+
}
|
|
66
62
|
encoded.method = "POST";
|
|
67
63
|
encoded.path = "/query/service";
|
|
68
64
|
encoded.body = utils::json::generate(body);
|
|
@@ -90,7 +86,7 @@ query_index_get_all_request::make_response(couchbase::core::error_context::http&
|
|
|
90
86
|
return response;
|
|
91
87
|
}
|
|
92
88
|
for (const auto& entry : payload.at("results").get_array()) {
|
|
93
|
-
couchbase::
|
|
89
|
+
couchbase::management::query::index index;
|
|
94
90
|
index.type = entry.at("using").get_string();
|
|
95
91
|
index.name = entry.at("name").get_string();
|
|
96
92
|
index.state = entry.at("state").get_string();
|
|
@@ -20,16 +20,17 @@
|
|
|
20
20
|
#include "core/error_context/http.hxx"
|
|
21
21
|
#include "core/io/http_context.hxx"
|
|
22
22
|
#include "core/io/http_message.hxx"
|
|
23
|
-
#include "core/management/query_index.hxx"
|
|
24
23
|
#include "core/platform/uuid.h"
|
|
24
|
+
#include "core/query_context.hxx"
|
|
25
25
|
#include "core/timeout_defaults.hxx"
|
|
26
|
+
#include "couchbase/management/query_index.hxx"
|
|
26
27
|
|
|
27
28
|
namespace couchbase::core::operations::management
|
|
28
29
|
{
|
|
29
30
|
struct query_index_get_all_response {
|
|
30
31
|
error_context::http ctx;
|
|
31
32
|
std::string status{};
|
|
32
|
-
std::vector<couchbase::
|
|
33
|
+
std::vector<couchbase::management::query::index> indexes{};
|
|
33
34
|
};
|
|
34
35
|
|
|
35
36
|
struct query_index_get_all_request {
|
|
@@ -44,7 +45,7 @@ struct query_index_get_all_request {
|
|
|
44
45
|
std::string bucket_name;
|
|
45
46
|
std::string scope_name;
|
|
46
47
|
std::string collection_name;
|
|
47
|
-
|
|
48
|
+
query_context query_ctx;
|
|
48
49
|
std::optional<std::string> client_context_id{};
|
|
49
50
|
std::optional<std::chrono::milliseconds> timeout{};
|
|
50
51
|
|
package/deps/couchbase-cxx-client/core/operations/management/query_index_get_all_deferred.cxx
CHANGED
|
@@ -25,18 +25,25 @@ namespace couchbase::core::operations::management
|
|
|
25
25
|
std::error_code
|
|
26
26
|
query_index_get_all_deferred_request::encode_to(encoded_request_type& encoded, couchbase::core::http_context& /* context */) const
|
|
27
27
|
{
|
|
28
|
+
|
|
29
|
+
// essentially same as query_index_get_all_request::encode_to, except for the state condition. If you
|
|
30
|
+
// change this, you probably need to change that as well.
|
|
31
|
+
std::string bucket_cond = "bucket_id = $bucket_name";
|
|
32
|
+
std::string scope_cond = "(" + bucket_cond + " AND scope_id = $scope_name)";
|
|
33
|
+
std::string collection_cond = "(" + scope_cond + " AND keyspace_id = $collection_name)";
|
|
34
|
+
|
|
28
35
|
std::string where;
|
|
29
|
-
if (collection_name.empty()) {
|
|
30
|
-
where =
|
|
36
|
+
if (!collection_name.empty()) {
|
|
37
|
+
where = collection_cond;
|
|
38
|
+
} else if (!scope_name.empty()) {
|
|
39
|
+
where = scope_cond;
|
|
31
40
|
} else {
|
|
32
|
-
where =
|
|
41
|
+
where = bucket_cond;
|
|
33
42
|
}
|
|
34
43
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
} else {
|
|
39
|
-
query_context += fmt::format(".`{}`", couchbase::scope::default_name);
|
|
44
|
+
if (collection_name == "_default" || collection_name.empty()) {
|
|
45
|
+
std::string default_collection_cond = "(bucket_id IS MISSING AND keyspace_id = $bucket_name)";
|
|
46
|
+
where = "(" + where + " OR " + default_collection_cond + ")";
|
|
40
47
|
}
|
|
41
48
|
|
|
42
49
|
std::string statement = "SELECT RAW name FROM system:indexes"
|
|
@@ -48,10 +55,12 @@ query_index_get_all_deferred_request::encode_to(encoded_request_type& encoded, c
|
|
|
48
55
|
encoded.headers["content-type"] = "application/json";
|
|
49
56
|
tao::json::value body{ { "statement", statement },
|
|
50
57
|
{ "client_context_id", encoded.client_context_id },
|
|
51
|
-
{ "$bucket_name", bucket_name },
|
|
52
|
-
{ "$scope_name", scope_name },
|
|
53
|
-
{ "$collection_name", collection_name }
|
|
54
|
-
|
|
58
|
+
{ "$bucket_name", query_ctx.has_value() ? query_ctx.bucket_name() : bucket_name },
|
|
59
|
+
{ "$scope_name", query_ctx.has_value() ? query_ctx.scope_name() : scope_name },
|
|
60
|
+
{ "$collection_name", collection_name } };
|
|
61
|
+
if (query_ctx.has_value()) {
|
|
62
|
+
body["query_context"] = query_ctx.value();
|
|
63
|
+
}
|
|
55
64
|
encoded.method = "POST";
|
|
56
65
|
encoded.path = "/query/service";
|
|
57
66
|
encoded.body = utils::json::generate(body);
|
package/deps/couchbase-cxx-client/core/operations/management/query_index_get_all_deferred.hxx
CHANGED
|
@@ -20,9 +20,10 @@
|
|
|
20
20
|
#include "core/error_context/http.hxx"
|
|
21
21
|
#include "core/io/http_context.hxx"
|
|
22
22
|
#include "core/io/http_message.hxx"
|
|
23
|
-
#include "core/management/query_index.hxx"
|
|
24
23
|
#include "core/platform/uuid.h"
|
|
24
|
+
#include "core/query_context.hxx"
|
|
25
25
|
#include "core/timeout_defaults.hxx"
|
|
26
|
+
#include "couchbase/management/query_index.hxx"
|
|
26
27
|
|
|
27
28
|
namespace couchbase::core::operations::management
|
|
28
29
|
{
|
|
@@ -44,7 +45,7 @@ struct query_index_get_all_deferred_request {
|
|
|
44
45
|
std::string bucket_name;
|
|
45
46
|
std::string scope_name;
|
|
46
47
|
std::string collection_name;
|
|
47
|
-
|
|
48
|
+
query_context query_ctx;
|
|
48
49
|
std::optional<std::string> client_context_id{};
|
|
49
50
|
std::optional<std::chrono::milliseconds> timeout{};
|
|
50
51
|
|
|
@@ -31,7 +31,7 @@ struct cluster_credentials {
|
|
|
31
31
|
std::string password{};
|
|
32
32
|
std::string certificate_path{};
|
|
33
33
|
std::string key_path{};
|
|
34
|
-
std::vector<std::string
|
|
34
|
+
std::optional<std::vector<std::string>> allowed_sasl_mechanisms{};
|
|
35
35
|
|
|
36
36
|
[[nodiscard]] bool uses_certificate() const
|
|
37
37
|
{
|
|
@@ -21,12 +21,11 @@
|
|
|
21
21
|
|
|
22
22
|
#include <iomanip>
|
|
23
23
|
#include <random>
|
|
24
|
-
#include <sstream>
|
|
25
24
|
|
|
26
25
|
void
|
|
27
26
|
couchbase::core::uuid::random(couchbase::core::uuid::uuid_t& uuid)
|
|
28
27
|
{
|
|
29
|
-
static thread_local std::
|
|
28
|
+
static thread_local std::mt19937_64 gen{ std::random_device()() };
|
|
30
29
|
std::uniform_int_distribution<std::uint64_t> dis;
|
|
31
30
|
|
|
32
31
|
// The uuid is 16 bytes, which is the same as two 64-bit integers
|
|
@@ -59,7 +59,6 @@ class hello_request_body
|
|
|
59
59
|
std::vector<std::byte> key_;
|
|
60
60
|
std::vector<hello_feature> features_{
|
|
61
61
|
hello_feature::tcp_nodelay,
|
|
62
|
-
hello_feature::mutation_seqno,
|
|
63
62
|
hello_feature::xattr,
|
|
64
63
|
hello_feature::xerror,
|
|
65
64
|
hello_feature::select_bucket,
|
|
@@ -93,6 +92,11 @@ class hello_request_body
|
|
|
93
92
|
features_.emplace_back(hello_feature::snappy);
|
|
94
93
|
}
|
|
95
94
|
|
|
95
|
+
void enable_mutation_tokens()
|
|
96
|
+
{
|
|
97
|
+
features_.emplace_back(hello_feature::mutation_seqno);
|
|
98
|
+
}
|
|
99
|
+
|
|
96
100
|
[[nodiscard]] const std::vector<hello_feature>& features() const
|
|
97
101
|
{
|
|
98
102
|
return features_;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2020-2023 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
|
+
#pragma once
|
|
18
|
+
|
|
19
|
+
#include <fmt/format.h>
|
|
20
|
+
#include <optional>
|
|
21
|
+
#include <string>
|
|
22
|
+
|
|
23
|
+
namespace couchbase::core
|
|
24
|
+
{
|
|
25
|
+
|
|
26
|
+
class query_context
|
|
27
|
+
{
|
|
28
|
+
public:
|
|
29
|
+
query_context() = default;
|
|
30
|
+
query_context(std::string namespace_id, std::string bucket_name, std::string scope_name)
|
|
31
|
+
: namespace_id_(namespace_id)
|
|
32
|
+
, bucket_name_(bucket_name)
|
|
33
|
+
, scope_name_(scope_name)
|
|
34
|
+
{
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
query_context(std::string bucket_name, std::string scope_name)
|
|
38
|
+
: bucket_name_(bucket_name)
|
|
39
|
+
, scope_name_(scope_name)
|
|
40
|
+
{
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
bool has_value() const
|
|
44
|
+
{
|
|
45
|
+
return bucket_name_.has_value() && scope_name_.has_value();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
std::string value() const
|
|
49
|
+
{
|
|
50
|
+
if (has_value()) {
|
|
51
|
+
return fmt::format("{}:`{}`.`{}`", namespace_id_, bucket_name_.value(), scope_name_.value());
|
|
52
|
+
}
|
|
53
|
+
return {};
|
|
54
|
+
}
|
|
55
|
+
std::string bucket_name() const
|
|
56
|
+
{
|
|
57
|
+
if (has_value()) {
|
|
58
|
+
return bucket_name_.value();
|
|
59
|
+
}
|
|
60
|
+
return "";
|
|
61
|
+
}
|
|
62
|
+
std::string scope_name() const
|
|
63
|
+
{
|
|
64
|
+
if (has_value()) {
|
|
65
|
+
return scope_name_.value();
|
|
66
|
+
}
|
|
67
|
+
return "";
|
|
68
|
+
}
|
|
69
|
+
std::string namespace_id() const
|
|
70
|
+
{
|
|
71
|
+
return namespace_id_;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
private:
|
|
75
|
+
std::string namespace_id_{ "default" };
|
|
76
|
+
std::optional<std::string> bucket_name_;
|
|
77
|
+
std::optional<std::string> scope_name_;
|
|
78
|
+
};
|
|
79
|
+
} // namespace couchbase::core
|