couchbase 4.2.10 → 4.2.11
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/deps/couchbase-cxx-client/CMakeLists.txt +1 -0
- package/deps/couchbase-cxx-client/cmake/ThirdPartyDependencies.cmake +2 -0
- package/deps/couchbase-cxx-client/core/bucket.cxx +25 -10
- package/deps/couchbase-cxx-client/core/bucket.hxx +1 -0
- package/deps/couchbase-cxx-client/core/cluster.cxx +29 -3
- package/deps/couchbase-cxx-client/core/impl/collection.cxx +2 -2
- package/deps/couchbase-cxx-client/core/impl/query_index_manager.cxx +6 -6
- package/deps/couchbase-cxx-client/core/io/http_session_manager.hxx +7 -1
- package/deps/couchbase-cxx-client/core/io/mcbp_command.hxx +10 -0
- package/deps/couchbase-cxx-client/core/io/mcbp_session.cxx +35 -1
- package/deps/couchbase-cxx-client/core/io/mcbp_session.hxx +2 -0
- package/deps/couchbase-cxx-client/core/management/design_document.hxx +1 -1
- package/deps/couchbase-cxx-client/core/meta/features.hxx +16 -1
- package/deps/couchbase-cxx-client/core/operations/document_lookup_in_all_replicas.hxx +1 -1
- package/deps/couchbase-cxx-client/core/operations/document_lookup_in_any_replica.hxx +1 -1
- package/deps/couchbase-cxx-client/core/operations/document_query.cxx +2 -2
- package/deps/couchbase-cxx-client/core/operations/document_search.cxx +10 -10
- package/deps/couchbase-cxx-client/core/operations/document_view.cxx +3 -0
- package/deps/couchbase-cxx-client/core/operations/document_view.hxx +1 -0
- package/deps/couchbase-cxx-client/core/operations/management/query_index_create.cxx +24 -13
- package/deps/couchbase-cxx-client/core/operations/management/query_index_create.hxx +1 -1
- package/deps/couchbase-cxx-client/core/origin.cxx +14 -0
- package/deps/couchbase-cxx-client/core/origin.hxx +6 -0
- package/deps/couchbase-cxx-client/core/protocol/status.cxx +2 -0
- package/deps/couchbase-cxx-client/core/protocol/status.hxx +1 -0
- package/deps/couchbase-cxx-client/core/range_scan_load_balancer.cxx +141 -0
- package/deps/couchbase-cxx-client/core/range_scan_load_balancer.hxx +64 -0
- package/deps/couchbase-cxx-client/core/range_scan_orchestrator.cxx +224 -336
- package/deps/couchbase-cxx-client/core/range_scan_orchestrator.hxx +5 -6
- package/deps/couchbase-cxx-client/core/range_scan_orchestrator_options.hxx +6 -4
- package/deps/couchbase-cxx-client/core/scan_result.hxx +1 -11
- package/deps/couchbase-cxx-client/core/topology/capabilities.hxx +70 -1
- package/deps/couchbase-cxx-client/core/topology/capabilities_fmt.hxx +30 -2
- package/deps/couchbase-cxx-client/core/topology/configuration.hxx +1 -34
- package/deps/couchbase-cxx-client/core/topology/configuration_fmt.hxx +2 -2
- package/deps/couchbase-cxx-client/core/topology/configuration_json.hxx +43 -20
- package/deps/couchbase-cxx-client/core/transactions/internal/exceptions_internal.hxx +5 -0
- package/deps/couchbase-cxx-client/couchbase/bucket.hxx +2 -2
- package/deps/couchbase-cxx-client/couchbase/cluster.hxx +1 -1
- package/deps/couchbase-cxx-client/couchbase/collection.hxx +1 -0
- package/deps/couchbase-cxx-client/couchbase/collection_query_index_manager.hxx +80 -11
- package/deps/couchbase-cxx-client/couchbase/error_context.hxx +1 -0
- package/deps/couchbase-cxx-client/couchbase/fmt/key_value_status_code.hxx +3 -1
- package/deps/couchbase-cxx-client/couchbase/get_links_analytics_options.hxx +2 -2
- package/deps/couchbase-cxx-client/couchbase/key_value_status_code.hxx +1 -0
- package/deps/couchbase-cxx-client/couchbase/query_index_manager.hxx +6 -8
- package/deps/couchbase-cxx-client/couchbase/scope.hxx +1 -1
- package/deps/couchbase-cxx-client/couchbase/search_options.hxx +2 -2
- package/deps/couchbase-cxx-client/couchbase/search_result.hxx +1 -1
- package/deps/couchbase-cxx-client/couchbase/subdocument_error_context.hxx +1 -0
- package/deps/couchbase-cxx-client/couchbase/transactions/transaction_options.hxx +1 -1
- package/deps/couchbase-cxx-client/couchbase-sdk-cxx-black-duck-manifest.yaml +1 -0
- package/dist/binding.d.ts +24 -2
- package/dist/bindingutilities.d.ts +11 -3
- package/dist/bindingutilities.js +33 -7
- package/dist/couchbase.d.ts +1 -0
- package/dist/couchbase.js +1 -0
- package/dist/queryindexmanager.d.ts +4 -4
- package/dist/queryindexmanager.js +7 -7
- package/dist/scope.d.ts +21 -0
- package/dist/scope.js +34 -0
- package/dist/scopesearchindexmanager.d.ts +116 -0
- package/dist/scopesearchindexmanager.js +406 -0
- package/dist/sdspecs.js +10 -9
- package/dist/sdutils.d.ts +1 -0
- package/dist/sdutils.js +4 -0
- package/dist/searchexecutor.d.ts +3 -1
- package/dist/searchexecutor.js +9 -2
- package/dist/searchindexmanager.d.ts +58 -3
- package/dist/searchindexmanager.js +188 -104
- package/dist/viewexecutor.js +13 -9
- package/dist/viewindexmanager.d.ts +70 -7
- package/dist/viewindexmanager.js +236 -103
- package/dist/viewtypes.d.ts +26 -0
- package/dist/viewtypes.js +17 -1
- package/package.json +7 -7
- package/src/constants.cpp +1 -0
- package/src/jstocbpp_autogen.hpp +89 -7
- package/deps/couchbase-cxx-client/core/scan_options.hxx +0 -44
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
|
|
23
23
|
#include <tl/expected.hpp>
|
|
24
24
|
|
|
25
|
-
#include <
|
|
26
|
-
#include <
|
|
25
|
+
#include <cstdint>
|
|
26
|
+
#include <system_error>
|
|
27
27
|
|
|
28
28
|
namespace asio
|
|
29
29
|
{
|
|
@@ -39,10 +39,10 @@ class scan_stream_manager
|
|
|
39
39
|
{
|
|
40
40
|
public:
|
|
41
41
|
virtual ~scan_stream_manager() = default;
|
|
42
|
-
virtual void stream_start_failed(std::int16_t node_id, bool fatal) = 0;
|
|
43
42
|
virtual void stream_start_failed_awaiting_retry(std::int16_t node_id, std::uint16_t vbucket_id) = 0;
|
|
44
|
-
virtual void
|
|
45
|
-
virtual void
|
|
43
|
+
virtual void stream_received_item(range_scan_item item) = 0;
|
|
44
|
+
virtual void stream_failed(std::int16_t node_id, std::uint16_t vbucket_id, std::error_code ec, bool fatal) = 0;
|
|
45
|
+
virtual void stream_completed(std::int16_t node_id, std::uint16_t vbucket_id) = 0;
|
|
46
46
|
};
|
|
47
47
|
|
|
48
48
|
class range_scan_orchestrator
|
|
@@ -61,5 +61,4 @@ class range_scan_orchestrator
|
|
|
61
61
|
private:
|
|
62
62
|
std::shared_ptr<range_scan_orchestrator_impl> impl_;
|
|
63
63
|
};
|
|
64
|
-
|
|
65
64
|
} // namespace couchbase::core
|
|
@@ -15,17 +15,16 @@
|
|
|
15
15
|
|
|
16
16
|
#pragma once
|
|
17
17
|
|
|
18
|
-
#include "
|
|
18
|
+
#include "range_scan_options.hxx"
|
|
19
19
|
#include "timeout_defaults.hxx"
|
|
20
20
|
|
|
21
21
|
#include <couchbase/mutation_token.hxx>
|
|
22
22
|
#include <couchbase/retry_strategy.hxx>
|
|
23
23
|
|
|
24
|
-
#include <
|
|
24
|
+
#include <chrono>
|
|
25
|
+
#include <cstdint>
|
|
25
26
|
#include <memory>
|
|
26
27
|
#include <optional>
|
|
27
|
-
#include <system_error>
|
|
28
|
-
#include <variant>
|
|
29
28
|
#include <vector>
|
|
30
29
|
|
|
31
30
|
namespace couchbase
|
|
@@ -39,6 +38,9 @@ class request_span;
|
|
|
39
38
|
|
|
40
39
|
namespace couchbase::core
|
|
41
40
|
{
|
|
41
|
+
struct mutation_state {
|
|
42
|
+
std::vector<couchbase::mutation_token> tokens;
|
|
43
|
+
};
|
|
42
44
|
|
|
43
45
|
struct range_scan_orchestrator_options {
|
|
44
46
|
static constexpr std::uint16_t default_concurrency{ 1 };
|
|
@@ -15,26 +15,16 @@
|
|
|
15
15
|
|
|
16
16
|
#pragma once
|
|
17
17
|
|
|
18
|
-
#include "
|
|
19
|
-
|
|
18
|
+
#include "range_scan_options.hxx"
|
|
20
19
|
#include "utils/movable_function.hxx"
|
|
21
20
|
|
|
22
|
-
#include <couchbase/mutation_token.hxx>
|
|
23
|
-
#include <couchbase/retry_strategy.hxx>
|
|
24
|
-
|
|
25
21
|
#include <tl/expected.hpp>
|
|
26
22
|
|
|
27
|
-
#include <cinttypes>
|
|
28
23
|
#include <future>
|
|
29
|
-
#include <memory>
|
|
30
|
-
#include <optional>
|
|
31
24
|
#include <system_error>
|
|
32
|
-
#include <variant>
|
|
33
|
-
#include <vector>
|
|
34
25
|
|
|
35
26
|
namespace couchbase::core
|
|
36
27
|
{
|
|
37
|
-
|
|
38
28
|
class scan_result_impl;
|
|
39
29
|
|
|
40
30
|
class range_scan_item_iterator
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
|
|
18
18
|
#pragma once
|
|
19
19
|
|
|
20
|
+
#include <set>
|
|
21
|
+
|
|
20
22
|
namespace couchbase::core
|
|
21
23
|
{
|
|
22
24
|
enum class bucket_capability {
|
|
@@ -32,8 +34,15 @@ enum class bucket_capability {
|
|
|
32
34
|
durable_write,
|
|
33
35
|
tombstoned_user_xattrs,
|
|
34
36
|
range_scan,
|
|
35
|
-
replica_read,
|
|
36
37
|
non_deduped_history,
|
|
38
|
+
subdoc_replace_body_with_xattr,
|
|
39
|
+
subdoc_document_macro_support,
|
|
40
|
+
subdoc_revive_document,
|
|
41
|
+
dcp_ignore_purged_tombstones,
|
|
42
|
+
preserve_expiry,
|
|
43
|
+
query_system_collection,
|
|
44
|
+
mobile_system_collection,
|
|
45
|
+
subdoc_replica_read,
|
|
37
46
|
};
|
|
38
47
|
|
|
39
48
|
enum class cluster_capability {
|
|
@@ -43,5 +52,65 @@ enum class cluster_capability {
|
|
|
43
52
|
n1ql_inline_functions,
|
|
44
53
|
n1ql_enhanced_prepared_statements,
|
|
45
54
|
n1ql_read_from_replica,
|
|
55
|
+
search_vector_search,
|
|
56
|
+
search_scoped_search_index,
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
struct configuration_capabilities {
|
|
60
|
+
std::set<bucket_capability> bucket{};
|
|
61
|
+
std::set<cluster_capability> cluster{};
|
|
62
|
+
|
|
63
|
+
[[nodiscard]] bool has_cluster_capability(cluster_capability cap) const
|
|
64
|
+
{
|
|
65
|
+
return cluster.find(cap) != cluster.end();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
[[nodiscard]] bool has_bucket_capability(bucket_capability cap) const
|
|
69
|
+
{
|
|
70
|
+
return bucket.find(cap) != bucket.end();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
[[nodiscard]] bool supports_enhanced_prepared_statements() const
|
|
74
|
+
{
|
|
75
|
+
return has_cluster_capability(cluster_capability::n1ql_enhanced_prepared_statements);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
[[nodiscard]] bool supports_read_from_replica() const
|
|
79
|
+
{
|
|
80
|
+
return has_cluster_capability(cluster_capability::n1ql_read_from_replica);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
[[nodiscard]] bool supports_range_scan() const
|
|
84
|
+
{
|
|
85
|
+
return has_bucket_capability(bucket_capability::range_scan);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
[[nodiscard]] bool ephemeral() const
|
|
89
|
+
{
|
|
90
|
+
// Use bucket capabilities to identify if couchapi is missing (then its ephemeral). If its null then
|
|
91
|
+
// we are running an old version of couchbase which doesn't have ephemeral buckets at all.
|
|
92
|
+
return has_bucket_capability(bucket_capability::couchapi);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
[[nodiscard]] bool supports_subdoc_read_replica() const
|
|
96
|
+
{
|
|
97
|
+
return has_bucket_capability(bucket_capability::subdoc_replica_read);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
[[nodiscard]] bool supports_non_deduped_history() const
|
|
101
|
+
{
|
|
102
|
+
return has_bucket_capability(bucket_capability::non_deduped_history);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
[[nodiscard]] bool supports_scoped_search_indexes() const
|
|
106
|
+
{
|
|
107
|
+
return has_cluster_capability(cluster_capability::search_scoped_search_index);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
[[nodiscard]] bool supports_vector_search() const
|
|
111
|
+
{
|
|
112
|
+
return has_cluster_capability(cluster_capability::search_vector_search);
|
|
113
|
+
}
|
|
46
114
|
};
|
|
115
|
+
|
|
47
116
|
} // namespace couchbase::core
|
|
@@ -70,12 +70,33 @@ struct fmt::formatter<couchbase::core::bucket_capability> {
|
|
|
70
70
|
case couchbase::core::bucket_capability::range_scan:
|
|
71
71
|
name = "range_scan";
|
|
72
72
|
break;
|
|
73
|
-
case couchbase::core::bucket_capability::
|
|
74
|
-
name = "
|
|
73
|
+
case couchbase::core::bucket_capability::subdoc_replica_read:
|
|
74
|
+
name = "subdoc_replica_read";
|
|
75
75
|
break;
|
|
76
76
|
case couchbase::core::bucket_capability::non_deduped_history:
|
|
77
77
|
name = "non_deduped_history";
|
|
78
78
|
break;
|
|
79
|
+
case couchbase::core::bucket_capability::subdoc_replace_body_with_xattr:
|
|
80
|
+
name = "subdoc_replace_body_with_xattr";
|
|
81
|
+
break;
|
|
82
|
+
case couchbase::core::bucket_capability::subdoc_document_macro_support:
|
|
83
|
+
name = "subdoc_document_macro_support";
|
|
84
|
+
break;
|
|
85
|
+
case couchbase::core::bucket_capability::subdoc_revive_document:
|
|
86
|
+
name = "subdoc_revive_document";
|
|
87
|
+
break;
|
|
88
|
+
case couchbase::core::bucket_capability::dcp_ignore_purged_tombstones:
|
|
89
|
+
name = "dcp_ignore_purged_tombstones";
|
|
90
|
+
break;
|
|
91
|
+
case couchbase::core::bucket_capability::preserve_expiry:
|
|
92
|
+
name = "preserve_expiry";
|
|
93
|
+
break;
|
|
94
|
+
case couchbase::core::bucket_capability::query_system_collection:
|
|
95
|
+
name = "query_system_collection";
|
|
96
|
+
break;
|
|
97
|
+
case couchbase::core::bucket_capability::mobile_system_collection:
|
|
98
|
+
name = "mobile_system_collection";
|
|
99
|
+
break;
|
|
79
100
|
}
|
|
80
101
|
return format_to(ctx.out(), "{}", name);
|
|
81
102
|
}
|
|
@@ -111,6 +132,13 @@ struct fmt::formatter<couchbase::core::cluster_capability> {
|
|
|
111
132
|
break;
|
|
112
133
|
case couchbase::core::cluster_capability::n1ql_read_from_replica:
|
|
113
134
|
name = "n1ql_read_from_replica";
|
|
135
|
+
break;
|
|
136
|
+
case couchbase::core::cluster_capability::search_vector_search:
|
|
137
|
+
name = "search_vector_search";
|
|
138
|
+
break;
|
|
139
|
+
case couchbase::core::cluster_capability::search_scoped_search_index:
|
|
140
|
+
name = "search_scoped_search_index";
|
|
141
|
+
break;
|
|
114
142
|
}
|
|
115
143
|
return format_to(ctx.out(), "{}", name);
|
|
116
144
|
}
|
|
@@ -89,8 +89,7 @@ struct configuration {
|
|
|
89
89
|
std::optional<std::string> bucket{};
|
|
90
90
|
std::optional<vbucket_map> vbmap{};
|
|
91
91
|
std::optional<std::uint64_t> collections_manifest_uid{};
|
|
92
|
-
|
|
93
|
-
std::set<cluster_capability> cluster_capabilities{};
|
|
92
|
+
configuration_capabilities capabilities{};
|
|
94
93
|
node_locator_type node_locator{ node_locator_type::unknown };
|
|
95
94
|
bool force{ false };
|
|
96
95
|
|
|
@@ -111,38 +110,6 @@ struct configuration {
|
|
|
111
110
|
|
|
112
111
|
[[nodiscard]] std::string rev_str() const;
|
|
113
112
|
|
|
114
|
-
[[nodiscard]] bool supports_enhanced_prepared_statements() const
|
|
115
|
-
{
|
|
116
|
-
return cluster_capabilities.find(cluster_capability::n1ql_enhanced_prepared_statements) != cluster_capabilities.end();
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
[[nodiscard]] bool supports_read_from_replica() const
|
|
120
|
-
{
|
|
121
|
-
return cluster_capabilities.find(cluster_capability::n1ql_read_from_replica) != cluster_capabilities.end();
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
[[nodiscard]] bool supports_range_scan() const
|
|
125
|
-
{
|
|
126
|
-
return bucket_capabilities.find(bucket_capability::range_scan) != bucket_capabilities.end();
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
[[nodiscard]] bool ephemeral() const
|
|
130
|
-
{
|
|
131
|
-
// Use bucket capabilities to identify if couchapi is missing (then its ephemeral). If its null then
|
|
132
|
-
// we are running an old version of couchbase which doesn't have ephemeral buckets at all.
|
|
133
|
-
return bucket_capabilities.count(couchbase::core::bucket_capability::couchapi) == 0;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
[[nodiscard]] bool supports_subdoc_read_replica() const
|
|
137
|
-
{
|
|
138
|
-
return bucket_capabilities.find(bucket_capability::replica_read) != bucket_capabilities.end();
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
[[nodiscard]] bool supports_non_deduped_history() const
|
|
142
|
-
{
|
|
143
|
-
return bucket_capabilities.find(bucket_capability::non_deduped_history) != bucket_capabilities.end();
|
|
144
|
-
}
|
|
145
|
-
|
|
146
113
|
[[nodiscard]] std::size_t index_for_this_node() const;
|
|
147
114
|
[[nodiscard]] bool has_node(const std::string& network,
|
|
148
115
|
service_type type,
|
|
@@ -160,7 +160,7 @@ struct fmt::formatter<couchbase::core::topology::configuration> {
|
|
|
160
160
|
config.vbmap.has_value() ? fmt::format(", partitions={}", config.vbmap->size()) : "",
|
|
161
161
|
config.nodes.size(),
|
|
162
162
|
couchbase::core::utils::join_strings_fmt(config.nodes, ", "),
|
|
163
|
-
couchbase::core::utils::join_strings_fmt(config.
|
|
164
|
-
couchbase::core::utils::join_strings_fmt(config.
|
|
163
|
+
couchbase::core::utils::join_strings_fmt(config.capabilities.bucket, ", "),
|
|
164
|
+
couchbase::core::utils::join_strings_fmt(config.capabilities.cluster, ", "));
|
|
165
165
|
}
|
|
166
166
|
};
|
|
@@ -213,33 +213,47 @@ struct traits<couchbase::core::topology::configuration> {
|
|
|
213
213
|
for (const auto& entry : m->get_array()) {
|
|
214
214
|
const auto& name = entry.get_string();
|
|
215
215
|
if (name == "couchapi") {
|
|
216
|
-
result.
|
|
216
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::couchapi);
|
|
217
217
|
} else if (name == "collections") {
|
|
218
|
-
result.
|
|
218
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::collections);
|
|
219
219
|
} else if (name == "durableWrite") {
|
|
220
|
-
result.
|
|
220
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::durable_write);
|
|
221
221
|
} else if (name == "tombstonedUserXAttrs") {
|
|
222
|
-
result.
|
|
222
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::tombstoned_user_xattrs);
|
|
223
223
|
} else if (name == "dcp") {
|
|
224
|
-
result.
|
|
224
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::dcp);
|
|
225
225
|
} else if (name == "cbhello") {
|
|
226
|
-
result.
|
|
226
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::cbhello);
|
|
227
227
|
} else if (name == "touch") {
|
|
228
|
-
result.
|
|
228
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::touch);
|
|
229
229
|
} else if (name == "cccp") {
|
|
230
|
-
result.
|
|
230
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::cccp);
|
|
231
231
|
} else if (name == "xdcrCheckpointing") {
|
|
232
|
-
result.
|
|
232
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::xdcr_checkpointing);
|
|
233
233
|
} else if (name == "nodesExt") {
|
|
234
|
-
result.
|
|
234
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::nodes_ext);
|
|
235
235
|
} else if (name == "xattr") {
|
|
236
|
-
result.
|
|
236
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::xattr);
|
|
237
237
|
} else if (name == "rangeScan") {
|
|
238
|
-
result.
|
|
238
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::range_scan);
|
|
239
239
|
} else if (name == "subdoc.ReplicaRead") {
|
|
240
|
-
result.
|
|
240
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::subdoc_replica_read);
|
|
241
241
|
} else if (name == "nonDedupedHistory") {
|
|
242
|
-
result.
|
|
242
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::non_deduped_history);
|
|
243
|
+
} else if (name == "subdoc.ReplaceBodyWithXattr") {
|
|
244
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::subdoc_replace_body_with_xattr);
|
|
245
|
+
} else if (name == "subdoc.DocumentMacroSupport") {
|
|
246
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::subdoc_document_macro_support);
|
|
247
|
+
} else if (name == "subdoc.ReviveDocument") {
|
|
248
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::subdoc_revive_document);
|
|
249
|
+
} else if (name == "dcp.IgnorePurgedTombstones") {
|
|
250
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::dcp_ignore_purged_tombstones);
|
|
251
|
+
} else if (name == "preserve_expiry") {
|
|
252
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::preserve_expiry);
|
|
253
|
+
} else if (name == "querySystemCollection") {
|
|
254
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::query_system_collection);
|
|
255
|
+
} else if (name == "mobileSystemCollection") {
|
|
256
|
+
result.capabilities.bucket.insert(couchbase::core::bucket_capability::mobile_system_collection);
|
|
243
257
|
}
|
|
244
258
|
}
|
|
245
259
|
}
|
|
@@ -247,17 +261,26 @@ struct traits<couchbase::core::topology::configuration> {
|
|
|
247
261
|
if (const auto nc = m->find("n1ql"); nc != nullptr && nc->is_array()) {
|
|
248
262
|
for (const auto& entry : nc->get_array()) {
|
|
249
263
|
if (const auto& name = entry.get_string(); name == "costBasedOptimizer") {
|
|
250
|
-
result.
|
|
264
|
+
result.capabilities.cluster.insert(couchbase::core::cluster_capability::n1ql_cost_based_optimizer);
|
|
251
265
|
} else if (name == "indexAdvisor") {
|
|
252
|
-
result.
|
|
266
|
+
result.capabilities.cluster.insert(couchbase::core::cluster_capability::n1ql_index_advisor);
|
|
253
267
|
} else if (name == "javaScriptFunctions") {
|
|
254
|
-
result.
|
|
268
|
+
result.capabilities.cluster.insert(couchbase::core::cluster_capability::n1ql_javascript_functions);
|
|
255
269
|
} else if (name == "inlineFunctions") {
|
|
256
|
-
result.
|
|
270
|
+
result.capabilities.cluster.insert(couchbase::core::cluster_capability::n1ql_inline_functions);
|
|
257
271
|
} else if (name == "enhancedPreparedStatements") {
|
|
258
|
-
result.
|
|
272
|
+
result.capabilities.cluster.insert(couchbase::core::cluster_capability::n1ql_enhanced_prepared_statements);
|
|
259
273
|
} else if (name == "readFromReplica") {
|
|
260
|
-
result.
|
|
274
|
+
result.capabilities.cluster.insert(couchbase::core::cluster_capability::n1ql_read_from_replica);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
if (const auto sc = m->find("search"); sc != nullptr && sc->is_array()) {
|
|
279
|
+
for (const auto& entry : sc->get_array()) {
|
|
280
|
+
if (const auto& name = entry.get_string(); name == "vectorSearch") {
|
|
281
|
+
result.capabilities.cluster.insert(couchbase::core::cluster_capability::search_vector_search);
|
|
282
|
+
} else if (name == "scopedSearchIndex") {
|
|
283
|
+
result.capabilities.cluster.insert(couchbase::core::cluster_capability::search_scoped_search_index);
|
|
261
284
|
}
|
|
262
285
|
}
|
|
263
286
|
}
|
|
@@ -230,6 +230,11 @@ class transaction_operation_failed : public std::runtime_error
|
|
|
230
230
|
return cause_;
|
|
231
231
|
}
|
|
232
232
|
|
|
233
|
+
final_error to_raise() const
|
|
234
|
+
{
|
|
235
|
+
return to_raise_;
|
|
236
|
+
}
|
|
237
|
+
|
|
233
238
|
void do_throw(const transaction_context& context) const
|
|
234
239
|
{
|
|
235
240
|
if (to_raise_ == FAILED_POST_COMMIT) {
|
|
@@ -79,7 +79,7 @@ class bucket
|
|
|
79
79
|
* Performs application-level ping requests against services in the Couchbase cluster.
|
|
80
80
|
*
|
|
81
81
|
* @note This operation performs active I/O against services and endpoints to assess their health. If you do not
|
|
82
|
-
* wish to performs I/O, consider using @ref diagnostics() instead.
|
|
82
|
+
* wish to performs I/O, consider using @ref cluster::diagnostics() instead.
|
|
83
83
|
*
|
|
84
84
|
* @param options custom options to change the default behavior.
|
|
85
85
|
* @param handler the handler that implements @ref ping_handler.
|
|
@@ -93,7 +93,7 @@ class bucket
|
|
|
93
93
|
* Performs application-level ping requests against services in the Couchbase cluster.
|
|
94
94
|
*
|
|
95
95
|
* @note This operation performs active I/O against services and endpoints to assess their health. If you do not
|
|
96
|
-
* wish to performs I/O, consider using @ref diagnostics() instead.
|
|
96
|
+
* wish to performs I/O, consider using @ref cluster::diagnostics() instead.
|
|
97
97
|
*
|
|
98
98
|
* @param options custom options to change the default behavior.
|
|
99
99
|
* @return future object that carries result of the operation.
|
|
@@ -222,7 +222,7 @@ class cluster
|
|
|
222
222
|
* @since 1.0.0
|
|
223
223
|
* @volatile
|
|
224
224
|
*/
|
|
225
|
-
[[nodiscard]] auto search(std::string index_name, search_request request, const search_options& = {}) const
|
|
225
|
+
[[nodiscard]] auto search(std::string index_name, search_request request, const search_options& options = {}) const
|
|
226
226
|
-> std::future<std::pair<search_error_context, search_result>>;
|
|
227
227
|
|
|
228
228
|
/**
|
|
@@ -791,6 +791,7 @@ class collection
|
|
|
791
791
|
* @param document_id the outer document ID
|
|
792
792
|
* @param specs an object that specifies the types of lookups to perform
|
|
793
793
|
* @param options custom options to modify the lookup options
|
|
794
|
+
* @param handler callable that implements @ref lookup_in_any_replica_handler
|
|
794
795
|
*
|
|
795
796
|
* @exception errc::key_value::document_not_found the given document id is not found in the collection.
|
|
796
797
|
* @exception errc::common::ambiguous_timeout
|
|
@@ -53,8 +53,7 @@ class collection_query_index_manager
|
|
|
53
53
|
{
|
|
54
54
|
public:
|
|
55
55
|
/**
|
|
56
|
-
* Get all indexes within
|
|
57
|
-
*
|
|
56
|
+
* Get all indexes within the collection.
|
|
58
57
|
*
|
|
59
58
|
* @param options optional parameters
|
|
60
59
|
* @param handler the handler that implements @ref get_all_query_indexes_handler
|
|
@@ -64,13 +63,23 @@ class collection_query_index_manager
|
|
|
64
63
|
*/
|
|
65
64
|
void get_all_indexes(const get_all_query_indexes_options& options, get_all_query_indexes_handler&& handler) const;
|
|
66
65
|
|
|
66
|
+
/**
|
|
67
|
+
* Get all indexes within the collection.
|
|
68
|
+
*
|
|
69
|
+
* @param options optional parameters
|
|
70
|
+
* @return future object that carries result of the operation
|
|
71
|
+
*
|
|
72
|
+
* @since 1.0.0
|
|
73
|
+
* @committed
|
|
74
|
+
*/
|
|
67
75
|
[[nodiscard]] auto get_all_indexes(const get_all_query_indexes_options& options) const
|
|
68
76
|
-> std::future<std::pair<manager_error_context, std::vector<couchbase::management::query_index>>>;
|
|
77
|
+
|
|
69
78
|
/**
|
|
70
79
|
* Create an index on the collection.
|
|
71
80
|
*
|
|
72
81
|
* @param index_name name of the index
|
|
73
|
-
* @param
|
|
82
|
+
* @param keys the keys to create the index over
|
|
74
83
|
* @param options optional parameters
|
|
75
84
|
* @param handler the handler that implements @ref create_query_index_handler
|
|
76
85
|
*
|
|
@@ -78,16 +87,26 @@ class collection_query_index_manager
|
|
|
78
87
|
* @committed
|
|
79
88
|
*/
|
|
80
89
|
void create_index(std::string index_name,
|
|
81
|
-
std::vector<std::string>
|
|
90
|
+
std::vector<std::string> keys,
|
|
82
91
|
const create_query_index_options& options,
|
|
83
92
|
create_query_index_handler&& handler) const;
|
|
84
93
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
94
|
+
/**
|
|
95
|
+
* Create an index on the collection.
|
|
96
|
+
*
|
|
97
|
+
* @param index_name name of the index
|
|
98
|
+
* @param keys the keys to create the index over
|
|
99
|
+
* @param options optional parameters
|
|
100
|
+
* @return future object that carries result of the operation
|
|
101
|
+
*
|
|
102
|
+
* @since 1.0.0
|
|
103
|
+
* @committed
|
|
104
|
+
*/
|
|
105
|
+
[[nodiscard]] auto create_index(std::string index_name, std::vector<std::string> keys, const create_query_index_options& options) const
|
|
106
|
+
-> std::future<manager_error_context>;
|
|
88
107
|
|
|
89
108
|
/**
|
|
90
|
-
* Create a primary index on
|
|
109
|
+
* Create a primary index on the collection.
|
|
91
110
|
*
|
|
92
111
|
* @param options optional parameters
|
|
93
112
|
* @param handler the handler that implements @ref create_query_index_handler
|
|
@@ -97,10 +116,19 @@ class collection_query_index_manager
|
|
|
97
116
|
*/
|
|
98
117
|
void create_primary_index(const create_primary_query_index_options& options, create_query_index_handler&& handler) const;
|
|
99
118
|
|
|
119
|
+
/**
|
|
120
|
+
* Create a primary index on the collection.
|
|
121
|
+
*
|
|
122
|
+
* @param options optional parameters
|
|
123
|
+
* @return future object that carries result of the operation
|
|
124
|
+
*
|
|
125
|
+
* @since 1.0.0
|
|
126
|
+
* @committed
|
|
127
|
+
*/
|
|
100
128
|
[[nodiscard]] auto create_primary_index(const create_primary_query_index_options& options) const -> std::future<manager_error_context>;
|
|
101
129
|
|
|
102
130
|
/**
|
|
103
|
-
* Drop primary index on
|
|
131
|
+
* Drop primary index on the collection.
|
|
104
132
|
*
|
|
105
133
|
* @param options optional parameters
|
|
106
134
|
* @param handler the handler that implements @ref drop_query_index_handler
|
|
@@ -110,10 +138,19 @@ class collection_query_index_manager
|
|
|
110
138
|
*/
|
|
111
139
|
void drop_primary_index(const drop_primary_query_index_options& options, drop_query_index_handler&& handler) const;
|
|
112
140
|
|
|
141
|
+
/**
|
|
142
|
+
* Drop primary index on the collection.
|
|
143
|
+
*
|
|
144
|
+
* @param options optional parameters
|
|
145
|
+
* @return future object that carries result of the operation
|
|
146
|
+
*
|
|
147
|
+
* @since 1.0.0
|
|
148
|
+
* @committed
|
|
149
|
+
*/
|
|
113
150
|
[[nodiscard]] auto drop_primary_index(const drop_primary_query_index_options& options) const -> std::future<manager_error_context>;
|
|
114
151
|
|
|
115
152
|
/**
|
|
116
|
-
* Drop index in collection.
|
|
153
|
+
* Drop specified query index in the collection.
|
|
117
154
|
*
|
|
118
155
|
* @param index_name name of the index to drop
|
|
119
156
|
* @param options optional parameters
|
|
@@ -124,14 +161,25 @@ class collection_query_index_manager
|
|
|
124
161
|
*/
|
|
125
162
|
void drop_index(std::string index_name, const drop_query_index_options& options, drop_query_index_handler&& handler) const;
|
|
126
163
|
|
|
164
|
+
/**
|
|
165
|
+
* Drop specified query index in the collection.
|
|
166
|
+
*
|
|
167
|
+
* @param index_name name of the index to drop
|
|
168
|
+
* @param options optional parameters
|
|
169
|
+
* @return future object that carries result of the operation
|
|
170
|
+
*
|
|
171
|
+
* @since 1.0.0
|
|
172
|
+
* @committed
|
|
173
|
+
*/
|
|
127
174
|
[[nodiscard]] auto drop_index(std::string index_name, const drop_query_index_options& options) const
|
|
128
175
|
-> std::future<manager_error_context>;
|
|
176
|
+
|
|
129
177
|
/**
|
|
130
178
|
* Builds all currently deferred indexes in this collection.
|
|
131
179
|
*
|
|
132
180
|
* By default, this method will build the indexes on the collection.
|
|
133
181
|
*
|
|
134
|
-
* @param options
|
|
182
|
+
* @param options optional parameters
|
|
135
183
|
* @param handler the handler that implements @ref build_deferred_query_indexes_handler
|
|
136
184
|
*
|
|
137
185
|
* @since 1.0.0
|
|
@@ -139,6 +187,17 @@ class collection_query_index_manager
|
|
|
139
187
|
*/
|
|
140
188
|
void build_deferred_indexes(const build_query_index_options& options, build_deferred_query_indexes_handler&& handler) const;
|
|
141
189
|
|
|
190
|
+
/**
|
|
191
|
+
* Builds all currently deferred indexes in this collection.
|
|
192
|
+
*
|
|
193
|
+
* By default, this method will build the indexes on the collection.
|
|
194
|
+
*
|
|
195
|
+
* @param options optional parameters
|
|
196
|
+
* @return future object that carries result of the operation
|
|
197
|
+
*
|
|
198
|
+
* @since 1.0.0
|
|
199
|
+
* @committed
|
|
200
|
+
*/
|
|
142
201
|
[[nodiscard]] auto build_deferred_indexes(const build_query_index_options& options) const -> std::future<manager_error_context>;
|
|
143
202
|
|
|
144
203
|
/**
|
|
@@ -155,6 +214,16 @@ class collection_query_index_manager
|
|
|
155
214
|
const watch_query_indexes_options& options,
|
|
156
215
|
watch_query_indexes_handler&& handler) const;
|
|
157
216
|
|
|
217
|
+
/**
|
|
218
|
+
* Polls the state of a set of indexes, until they all are online.
|
|
219
|
+
*
|
|
220
|
+
* @param index_names names of the indexes to watch
|
|
221
|
+
* @param options optional parameters
|
|
222
|
+
* @return future object that carries result of the operation
|
|
223
|
+
*
|
|
224
|
+
* @since 1.0.0
|
|
225
|
+
* @committed
|
|
226
|
+
*/
|
|
158
227
|
[[nodiscard]] auto watch_indexes(std::vector<std::string> index_names, const watch_query_indexes_options& options) const
|
|
159
228
|
-> std::future<manager_error_context>;
|
|
160
229
|
|
|
@@ -257,7 +257,9 @@ struct fmt::formatter<couchbase::key_value_status_code> {
|
|
|
257
257
|
case key_value_status_code::range_scan_vb_uuid_not_equal:
|
|
258
258
|
name = "range_scan_vb_uuid_not_equal (0xa8)";
|
|
259
259
|
break;
|
|
260
|
-
|
|
260
|
+
case key_value_status_code::config_only:
|
|
261
|
+
name = "config_only (0x0d)";
|
|
262
|
+
break;
|
|
261
263
|
case key_value_status_code::unknown:
|
|
262
264
|
name = "unknown (0xffff)";
|
|
263
265
|
break;
|
|
@@ -50,7 +50,7 @@ class get_links_analytics_options : public common_options<get_links_analytics_op
|
|
|
50
50
|
/**
|
|
51
51
|
* The name of the link to fetch.
|
|
52
52
|
*
|
|
53
|
-
* @param
|
|
53
|
+
* @param name link name
|
|
54
54
|
* @return reference to this object, for use in chaining
|
|
55
55
|
*
|
|
56
56
|
* @since 1.0.0
|
|
@@ -65,7 +65,7 @@ class get_links_analytics_options : public common_options<get_links_analytics_op
|
|
|
65
65
|
/**
|
|
66
66
|
* The type of links to restrict returned links to.
|
|
67
67
|
*
|
|
68
|
-
* @param link_type
|
|
68
|
+
* @param link_type link type
|
|
69
69
|
* @return reference to this object, for use in chaining
|
|
70
70
|
*
|
|
71
71
|
* @since 1.0.0
|