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
|
@@ -57,7 +57,6 @@ struct query_options : public common_options<query_options> {
|
|
|
57
57
|
std::optional<std::chrono::milliseconds> scan_wait;
|
|
58
58
|
std::optional<std::uint64_t> pipeline_batch;
|
|
59
59
|
std::optional<std::uint64_t> pipeline_cap;
|
|
60
|
-
std::optional<std::string> scope_qualifier;
|
|
61
60
|
std::optional<std::string> client_context_id;
|
|
62
61
|
std::optional<query_scan_consistency> scan_consistency;
|
|
63
62
|
std::vector<mutation_token> mutation_state;
|
|
@@ -91,7 +90,6 @@ struct query_options : public common_options<query_options> {
|
|
|
91
90
|
scan_wait_,
|
|
92
91
|
pipeline_batch_,
|
|
93
92
|
pipeline_cap_,
|
|
94
|
-
scope_qualifier_,
|
|
95
93
|
client_context_id_,
|
|
96
94
|
scan_consistency_,
|
|
97
95
|
mutation_state_,
|
|
@@ -342,19 +340,6 @@ struct query_options : public common_options<query_options> {
|
|
|
342
340
|
return self();
|
|
343
341
|
}
|
|
344
342
|
|
|
345
|
-
/**
|
|
346
|
-
* @param scope_qualifier
|
|
347
|
-
* @return this options builder for chaining purposes.
|
|
348
|
-
*
|
|
349
|
-
* @since 1.0.0
|
|
350
|
-
* @volatile
|
|
351
|
-
*/
|
|
352
|
-
auto scope_qualifier(std::string scope_qualifier) -> query_options&
|
|
353
|
-
{
|
|
354
|
-
scope_qualifier_ = std::move(scope_qualifier);
|
|
355
|
-
return self();
|
|
356
|
-
}
|
|
357
|
-
|
|
358
343
|
/**
|
|
359
344
|
* Customizes the consistency guarantees for this query.
|
|
360
345
|
*
|
|
@@ -549,7 +534,6 @@ struct query_options : public common_options<query_options> {
|
|
|
549
534
|
std::optional<std::uint64_t> scan_cap_{};
|
|
550
535
|
std::optional<std::uint64_t> pipeline_batch_{};
|
|
551
536
|
std::optional<std::uint64_t> pipeline_cap_{};
|
|
552
|
-
std::optional<std::string> scope_qualifier_{};
|
|
553
537
|
std::optional<std::string> client_context_id_{};
|
|
554
538
|
std::optional<std::chrono::milliseconds> scan_wait_{};
|
|
555
539
|
std::optional<query_scan_consistency> scan_consistency_{};
|
|
@@ -582,8 +566,7 @@ namespace impl
|
|
|
582
566
|
void
|
|
583
567
|
initiate_query_operation(std::shared_ptr<couchbase::core::cluster> core,
|
|
584
568
|
std::string statement,
|
|
585
|
-
std::optional<std::string>
|
|
586
|
-
std::optional<std::string> scope_name,
|
|
569
|
+
std::optional<std::string> query_context,
|
|
587
570
|
query_options::built options,
|
|
588
571
|
query_handler&& handler);
|
|
589
572
|
#endif
|
|
@@ -104,8 +104,11 @@ class scope
|
|
|
104
104
|
template<typename Handler>
|
|
105
105
|
void query(std::string statement, const query_options& options, Handler&& handler) const
|
|
106
106
|
{
|
|
107
|
-
return core::impl::initiate_query_operation(
|
|
108
|
-
|
|
107
|
+
return core::impl::initiate_query_operation(core_,
|
|
108
|
+
std::move(statement),
|
|
109
|
+
fmt::format("default:`{}`.`{}`", bucket_name_, name_),
|
|
110
|
+
options.build(),
|
|
111
|
+
std::forward<Handler>(handler));
|
|
109
112
|
}
|
|
110
113
|
|
|
111
114
|
/**
|
|
@@ -72,6 +72,22 @@ class request_tracer
|
|
|
72
72
|
request_tracer& operator=(request_tracer&& other) = default;
|
|
73
73
|
virtual ~request_tracer() = default;
|
|
74
74
|
|
|
75
|
+
/**
|
|
76
|
+
* SDK invokes this method when cluster is ready to trace. Override it as NO-OP if no action is necessary.
|
|
77
|
+
*/
|
|
78
|
+
virtual void start()
|
|
79
|
+
{
|
|
80
|
+
/* do nothing */
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* SDK invokes this method when cluster is closed. Override it as NO-OP if no action is necessary.
|
|
85
|
+
*/
|
|
86
|
+
virtual void stop()
|
|
87
|
+
{
|
|
88
|
+
/* do nothing */
|
|
89
|
+
}
|
|
90
|
+
|
|
75
91
|
virtual std::shared_ptr<request_span> start_span(std::string name, std::shared_ptr<request_span> parent = {}) = 0;
|
|
76
92
|
};
|
|
77
93
|
|
|
@@ -53,19 +53,26 @@ class async_attempt_context
|
|
|
53
53
|
|
|
54
54
|
void query(const scope& scope, std::string statement, transaction_query_options opts, async_query_handler&& handler)
|
|
55
55
|
{
|
|
56
|
-
opts
|
|
57
|
-
return query(std::move(statement), std::move(opts), std::move(handler));
|
|
56
|
+
return query(std::move(statement), std::move(opts), fmt::format("{}.{}", scope.bucket_name(), scope.name()), std::move(handler));
|
|
58
57
|
}
|
|
59
58
|
|
|
60
|
-
|
|
59
|
+
void query(std::string statement, transaction_query_options opts, async_query_handler&& handler)
|
|
60
|
+
{
|
|
61
|
+
return query(statement, opts, {}, std::move(handler));
|
|
62
|
+
};
|
|
63
|
+
|
|
61
64
|
void query(std::string statement, async_query_handler&& handler)
|
|
62
65
|
{
|
|
63
|
-
return query(statement, {}, std::move(handler));
|
|
66
|
+
return query(statement, {}, {}, std::move(handler));
|
|
64
67
|
}
|
|
65
68
|
virtual ~async_attempt_context() = default;
|
|
66
69
|
|
|
67
70
|
protected:
|
|
68
71
|
virtual void insert_raw(const collection& coll, std::string id, std::vector<std::byte> content, async_result_handler&& handler) = 0;
|
|
69
72
|
virtual void replace_raw(transaction_get_result_ptr doc, std::vector<std::byte> content, async_result_handler&& handler) = 0;
|
|
73
|
+
virtual void query(std::string statement,
|
|
74
|
+
transaction_query_options opts,
|
|
75
|
+
std::optional<std::string> query_context,
|
|
76
|
+
async_query_handler&&) = 0;
|
|
70
77
|
};
|
|
71
78
|
} // namespace couchbase::transactions
|
|
@@ -50,13 +50,13 @@ class attempt_context
|
|
|
50
50
|
|
|
51
51
|
transaction_query_result_ptr query(const std::string& statement, const transaction_query_options& options = {})
|
|
52
52
|
{
|
|
53
|
-
return do_public_query(statement, options);
|
|
53
|
+
return do_public_query(statement, options, {});
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
transaction_query_result_ptr query(const scope& scope, std::string& statement, const transaction_query_options& opts = {})
|
|
57
57
|
{
|
|
58
58
|
auto new_opts = opts;
|
|
59
|
-
return
|
|
59
|
+
return do_public_query(statement, opts, fmt::format("{}.{}", scope.bucket_name(), scope.name()));
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
virtual ~attempt_context() = default;
|
|
@@ -66,6 +66,8 @@ class attempt_context
|
|
|
66
66
|
virtual transaction_get_result_ptr insert_raw(const couchbase::collection& coll,
|
|
67
67
|
const std::string& id,
|
|
68
68
|
std::vector<std::byte> content) = 0;
|
|
69
|
-
virtual transaction_query_result_ptr do_public_query(const std::string& statement,
|
|
69
|
+
virtual transaction_query_result_ptr do_public_query(const std::string& statement,
|
|
70
|
+
const transaction_query_options& options,
|
|
71
|
+
std::optional<std::string> query_context) = 0;
|
|
70
72
|
};
|
|
71
73
|
} // namespace couchbase::transactions
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
#include "couchbase/collection.hxx"
|
|
19
19
|
#include "couchbase/scope.hxx"
|
|
20
20
|
|
|
21
|
+
#include <fmt/format.h>
|
|
21
22
|
#include <string>
|
|
22
23
|
#include <utility>
|
|
23
24
|
|
|
@@ -83,3 +84,18 @@ struct transaction_keyspace {
|
|
|
83
84
|
}
|
|
84
85
|
};
|
|
85
86
|
} // namespace couchbase::transactions
|
|
87
|
+
template<>
|
|
88
|
+
struct fmt::formatter<couchbase::transactions::transaction_keyspace> {
|
|
89
|
+
public:
|
|
90
|
+
template<typename ParseContext>
|
|
91
|
+
constexpr auto parse(ParseContext& ctx)
|
|
92
|
+
{
|
|
93
|
+
return ctx.begin();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
template<typename FormatContext>
|
|
97
|
+
auto format(const couchbase::transactions::transaction_keyspace& k, FormatContext& ctx) const
|
|
98
|
+
{
|
|
99
|
+
return format_to(ctx.out(), "transaction_keyspace:{{ bucket: {}, scope: {}, collection: {} }}", k.bucket, k.scope, k.collection);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
@@ -114,12 +114,6 @@ class transaction_query_options
|
|
|
114
114
|
return *this;
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
transaction_query_options& scope_qualifier(const std::string& scope)
|
|
118
|
-
{
|
|
119
|
-
opts_.scope_qualifier(scope);
|
|
120
|
-
return *this;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
117
|
transaction_query_options& metrics(bool metrics)
|
|
124
118
|
{
|
|
125
119
|
opts_.metrics(metrics);
|
|
@@ -0,0 +1,115 @@
|
|
|
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 <couchbase/common_options.hxx>
|
|
21
|
+
#include <couchbase/error_codes.hxx>
|
|
22
|
+
#include <couchbase/manager_error_context.hxx>
|
|
23
|
+
|
|
24
|
+
#include <optional>
|
|
25
|
+
#include <string>
|
|
26
|
+
|
|
27
|
+
namespace couchbase
|
|
28
|
+
{
|
|
29
|
+
class watch_query_indexes_options : public common_options<watch_query_indexes_options>
|
|
30
|
+
{
|
|
31
|
+
public:
|
|
32
|
+
auto watch_primary(bool watch_primary) -> watch_query_indexes_options&
|
|
33
|
+
{
|
|
34
|
+
watch_primary_ = watch_primary;
|
|
35
|
+
return self();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
template<typename T>
|
|
39
|
+
auto polling_interval(T duration)
|
|
40
|
+
{
|
|
41
|
+
polling_interval_ = std::chrono::duration_cast<std::chrono::milliseconds>(duration);
|
|
42
|
+
return self();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Immutable value object representing consistent options.
|
|
47
|
+
*
|
|
48
|
+
* @since 1.0.0
|
|
49
|
+
* @internal
|
|
50
|
+
*/
|
|
51
|
+
struct built : public common_options<watch_query_indexes_options>::built {
|
|
52
|
+
bool watch_primary{};
|
|
53
|
+
std::chrono::milliseconds polling_interval;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Validates options and returns them as an immutable value.
|
|
58
|
+
*
|
|
59
|
+
* @return consistent options as an immutable value
|
|
60
|
+
*
|
|
61
|
+
* @exception std::system_error with code errc::common::invalid_argument if the options are not valid
|
|
62
|
+
*
|
|
63
|
+
* @since 1.0.0
|
|
64
|
+
* @internal
|
|
65
|
+
*/
|
|
66
|
+
[[nodiscard]] auto build() const -> built
|
|
67
|
+
{
|
|
68
|
+
return { build_common_options(), watch_primary_, polling_interval_ };
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
private:
|
|
72
|
+
bool watch_primary_{ false };
|
|
73
|
+
std::chrono::milliseconds polling_interval_{ 1000 };
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The signature for the handler of the @ref query_index_manager#get_all_indexes() operation
|
|
78
|
+
*
|
|
79
|
+
* @since 1.0.0
|
|
80
|
+
* @uncommitted
|
|
81
|
+
*/
|
|
82
|
+
|
|
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
|
+
} // namespace couchbase
|
|
@@ -44,7 +44,9 @@ main()
|
|
|
44
44
|
auto options = couchbase::cluster_options(username, password);
|
|
45
45
|
options.apply_profile("wan_development");
|
|
46
46
|
auto [cluster, ec] = couchbase::cluster::connect(io, connection_string, options).get();
|
|
47
|
-
{
|
|
47
|
+
if (ec) {
|
|
48
|
+
std::cout << "Unable to connect to the cluster. ec: " << ec.message() << "\n";
|
|
49
|
+
} else {
|
|
48
50
|
auto collection = cluster.bucket(bucket_name).scope(scope_name).collection(collection_name);
|
|
49
51
|
|
|
50
52
|
const std::string document_id{ "minimal_example" };
|
|
@@ -29,6 +29,32 @@ static const tao::json::value basic_doc = {
|
|
|
29
29
|
};
|
|
30
30
|
static const std::vector<std::byte> basic_doc_json = couchbase::core::utils::json::generate_binary(basic_doc);
|
|
31
31
|
|
|
32
|
+
TEST_CASE("integration: switching off mutation token", "[integration]")
|
|
33
|
+
{
|
|
34
|
+
couchbase::core::cluster_options opts{};
|
|
35
|
+
opts.enable_mutation_tokens = false;
|
|
36
|
+
test::utils::integration_test_guard integration(opts);
|
|
37
|
+
|
|
38
|
+
test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
|
|
39
|
+
couchbase::core::document_id id{ integration.ctx.bucket, "_default", "_default", test::utils::uniq_id("foo") };
|
|
40
|
+
|
|
41
|
+
{
|
|
42
|
+
couchbase::core::operations::insert_request req{ id, basic_doc_json };
|
|
43
|
+
auto resp = test::utils::execute(integration.cluster, req);
|
|
44
|
+
REQUIRE_SUCCESS(resp.ctx.ec());
|
|
45
|
+
REQUIRE(!resp.cas.empty());
|
|
46
|
+
REQUIRE(resp.token.sequence_number() == 0);
|
|
47
|
+
REQUIRE(resp.token.partition_uuid() == 0);
|
|
48
|
+
REQUIRE_FALSE(resp.token.partition_id() == 0);
|
|
49
|
+
REQUIRE_FALSE(resp.token.bucket_name().empty());
|
|
50
|
+
}
|
|
51
|
+
{
|
|
52
|
+
couchbase::core::operations::get_request req{ id };
|
|
53
|
+
auto resp = test::utils::execute(integration.cluster, req);
|
|
54
|
+
REQUIRE(resp.value == basic_doc_json);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
32
58
|
TEST_CASE("integration: crud on default collection", "[integration]")
|
|
33
59
|
{
|
|
34
60
|
test::utils::integration_test_guard integration;
|
|
@@ -868,3 +894,49 @@ TEST_CASE("integration: exists with public API", "[integration]")
|
|
|
868
894
|
REQUIRE_FALSE(resp.exists());
|
|
869
895
|
}
|
|
870
896
|
}
|
|
897
|
+
|
|
898
|
+
TEST_CASE("integration: get with expiry with public API", "[integration]")
|
|
899
|
+
{
|
|
900
|
+
test::utils::integration_test_guard integration;
|
|
901
|
+
test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
|
|
902
|
+
|
|
903
|
+
auto collection = couchbase::cluster(integration.cluster)
|
|
904
|
+
.bucket(integration.ctx.bucket)
|
|
905
|
+
.scope(couchbase::scope::default_name)
|
|
906
|
+
.collection(couchbase::collection::default_name);
|
|
907
|
+
|
|
908
|
+
auto id = test::utils::uniq_id("get_expiry");
|
|
909
|
+
|
|
910
|
+
auto get_options = couchbase::get_options{}.with_expiry(true);
|
|
911
|
+
|
|
912
|
+
SECTION("no expiry set on the document")
|
|
913
|
+
{
|
|
914
|
+
{
|
|
915
|
+
auto [ctx, resp] = collection.insert(id, basic_doc, {}).get();
|
|
916
|
+
REQUIRE_SUCCESS(ctx.ec());
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
{
|
|
920
|
+
auto [ctx, resp] = collection.get(id, get_options).get();
|
|
921
|
+
REQUIRE_SUCCESS(ctx.ec());
|
|
922
|
+
REQUIRE_FALSE(resp.expiry_time().has_value());
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
SECTION("some expiry is set on the document")
|
|
927
|
+
{
|
|
928
|
+
auto the_expiry = std::chrono::system_clock::from_time_t(1878422400);
|
|
929
|
+
auto insert_options = couchbase::insert_options{}.expiry(the_expiry);
|
|
930
|
+
{
|
|
931
|
+
auto [ctx, resp] = collection.insert(id, basic_doc, insert_options).get();
|
|
932
|
+
REQUIRE_SUCCESS(ctx.ec());
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
{
|
|
936
|
+
auto [ctx, resp] = collection.get(id, get_options).get();
|
|
937
|
+
REQUIRE_SUCCESS(ctx.ec());
|
|
938
|
+
REQUIRE(resp.expiry_time().has_value());
|
|
939
|
+
REQUIRE(resp.expiry_time().value() == the_expiry);
|
|
940
|
+
}
|
|
941
|
+
}
|
|
942
|
+
}
|