couchbase 3.4.0 → 3.4.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.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/ext/couchbase/CMakeLists.txt +10 -3
- data/ext/couchbase/cmake/CompilerWarnings.cmake +12 -4
- data/ext/couchbase/cmake/Documentation.cmake +4 -3
- data/ext/couchbase/cmake/OpenSSL.cmake +52 -7
- data/ext/couchbase/cmake/ThirdPartyDependencies.cmake +4 -0
- data/ext/couchbase/cmake/VersionInfo.cmake +39 -3
- data/ext/couchbase/cmake/test_openssl.cxx +7 -0
- data/ext/couchbase/core/cluster_options.hxx +0 -1
- data/ext/couchbase/core/config_profile.cxx +23 -1
- data/ext/couchbase/core/config_profile.hxx +2 -12
- data/ext/couchbase/core/crypto/CMakeLists.txt +5 -1
- data/ext/couchbase/core/impl/analytics.cxx +236 -0
- data/ext/couchbase/core/impl/cluster.cxx +0 -1
- data/ext/couchbase/core/impl/collection_query_index_manager.cxx +3 -3
- data/ext/couchbase/core/impl/dns_srv_tracker.cxx +5 -3
- data/ext/couchbase/core/impl/get_all_query_indexes.cxx +3 -3
- data/ext/couchbase/core/impl/query.cxx +5 -5
- data/ext/couchbase/core/impl/transaction_get_result.cxx +54 -0
- data/ext/couchbase/core/io/dns_client.cxx +225 -0
- data/ext/couchbase/core/io/dns_client.hxx +19 -188
- data/ext/couchbase/core/meta/CMakeLists.txt +7 -5
- data/ext/couchbase/core/meta/version.cxx +19 -0
- data/ext/couchbase/core/operations/document_search.cxx +5 -2
- data/ext/couchbase/core/operations/document_search.hxx +0 -1
- data/ext/couchbase/core/transactions/active_transaction_record.hxx +2 -2
- data/ext/couchbase/core/transactions/atr_cleanup_entry.cxx +1 -0
- data/ext/couchbase/core/transactions/attempt_context_impl.cxx +65 -31
- data/ext/couchbase/core/transactions/attempt_context_impl.hxx +44 -23
- data/ext/couchbase/core/transactions/forward_compat.hxx +2 -2
- data/ext/couchbase/core/transactions/internal/transaction_context.hxx +13 -13
- data/ext/couchbase/core/transactions/internal/transaction_fields.hxx +1 -0
- data/ext/couchbase/core/transactions/internal/transactions_cleanup.hxx +7 -1
- data/ext/couchbase/core/transactions/staged_mutation.cxx +1 -1
- data/ext/couchbase/core/transactions/staged_mutation.hxx +12 -2
- data/ext/couchbase/core/transactions/transaction_context.cxx +9 -11
- data/ext/couchbase/core/transactions/transaction_get_result.cxx +41 -31
- data/ext/couchbase/core/transactions/transaction_get_result.hxx +7 -3
- data/ext/couchbase/core/transactions/transaction_links.hxx +13 -1
- data/ext/couchbase/core/transactions/transactions_cleanup.cxx +144 -155
- data/ext/couchbase/core/transactions/waitable_op_list.hxx +1 -0
- data/ext/couchbase/core/utils/connection_string.cxx +10 -3
- data/ext/couchbase/core/utils/connection_string.hxx +3 -3
- data/ext/couchbase/couchbase/analytics_error_context.hxx +143 -0
- data/ext/couchbase/couchbase/analytics_meta_data.hxx +155 -0
- data/ext/couchbase/couchbase/analytics_metrics.hxx +163 -0
- data/ext/couchbase/couchbase/analytics_options.hxx +359 -0
- data/ext/couchbase/couchbase/analytics_result.hxx +102 -0
- data/ext/couchbase/couchbase/analytics_scan_consistency.hxx +46 -0
- data/ext/couchbase/couchbase/analytics_status.hxx +41 -0
- data/ext/couchbase/couchbase/analytics_warning.hxx +85 -0
- data/ext/couchbase/couchbase/cluster.hxx +35 -2
- data/ext/couchbase/couchbase/cluster_options.hxx +10 -10
- data/ext/couchbase/couchbase/collection.hxx +22 -17
- data/ext/couchbase/couchbase/collection_query_index_manager.hxx +1 -1
- data/ext/couchbase/couchbase/common_options.hxx +1 -1
- data/ext/couchbase/couchbase/configuration_profile.hxx +1 -1
- data/ext/couchbase/couchbase/configuration_profiles_registry.hxx +0 -1
- data/ext/couchbase/couchbase/create_primary_query_index_options.hxx +1 -1
- data/ext/couchbase/couchbase/drop_primary_query_index_options.hxx +1 -1
- data/ext/couchbase/couchbase/drop_query_index_options.hxx +1 -1
- data/ext/couchbase/couchbase/fmt/analytics_status.hxx +76 -0
- data/ext/couchbase/couchbase/fmt/cas.hxx +12 -0
- data/ext/couchbase/couchbase/fmt/durability_level.hxx +6 -0
- data/ext/couchbase/couchbase/fmt/key_value_extended_error_info.hxx +6 -0
- data/ext/couchbase/couchbase/fmt/key_value_status_code.hxx +6 -0
- data/ext/couchbase/couchbase/fmt/mutation_token.hxx +6 -0
- data/ext/couchbase/couchbase/fmt/query_scan_consistency.hxx +6 -0
- data/ext/couchbase/couchbase/fmt/query_status.hxx +6 -0
- data/ext/couchbase/couchbase/fmt/retry_reason.hxx +6 -0
- data/ext/couchbase/couchbase/fmt/tls_verify_mode.hxx +6 -0
- data/ext/couchbase/couchbase/get_all_query_indexes_options.hxx +5 -4
- data/ext/couchbase/couchbase/query_index_manager.hxx +4 -2
- data/ext/couchbase/couchbase/query_options.hxx +0 -1
- data/ext/couchbase/couchbase/scope.hxx +34 -1
- data/ext/couchbase/couchbase/subdoc/array_add_unique.hxx +2 -0
- data/ext/couchbase/couchbase/subdoc/array_append.hxx +2 -0
- data/ext/couchbase/couchbase/subdoc/array_insert.hxx +2 -0
- data/ext/couchbase/couchbase/subdoc/array_prepend.hxx +2 -0
- data/ext/couchbase/couchbase/subdoc/count.hxx +2 -0
- data/ext/couchbase/couchbase/subdoc/counter.hxx +2 -0
- data/ext/couchbase/couchbase/subdoc/exists.hxx +2 -0
- data/ext/couchbase/couchbase/subdoc/get.hxx +2 -0
- data/ext/couchbase/couchbase/subdoc/insert.hxx +2 -0
- data/ext/couchbase/couchbase/subdoc/remove.hxx +2 -0
- data/ext/couchbase/couchbase/subdoc/replace.hxx +3 -1
- data/ext/couchbase/couchbase/subdoc/upsert.hxx +2 -0
- data/ext/couchbase/couchbase/transaction_op_error_context.hxx +4 -4
- data/ext/couchbase/couchbase/transactions/attempt_context.hxx +1 -1
- data/ext/couchbase/couchbase/transactions/transaction_get_result.hxx +36 -51
- data/ext/couchbase/couchbase/transactions/transactions_config.hxx +1 -1
- data/ext/couchbase/test/CMakeLists.txt +3 -2
- data/ext/couchbase/test/test_helper.hxx +1 -1
- data/ext/couchbase/test/test_integration_analytics.cxx +289 -13
- data/ext/couchbase/test/test_integration_crud.cxx +8 -1
- data/ext/couchbase/test/test_integration_examples.cxx +182 -0
- data/ext/couchbase/test/test_integration_management.cxx +15 -3
- data/ext/couchbase/test/test_integration_search.cxx +601 -0
- data/ext/couchbase/test/test_transaction_transaction_simple.cxx +73 -0
- data/ext/couchbase/test/test_unit_config_profiles.cxx +12 -12
- data/ext/couchbase/test/test_unit_connection_string.cxx +35 -0
- data/ext/couchbase/test/test_unit_transaction_utils.cxx +76 -19
- data/ext/couchbase/third_party/snappy/CMakeLists.txt +150 -27
- data/ext/couchbase/third_party/snappy/cmake/config.h.in +28 -24
- data/ext/couchbase/third_party/snappy/snappy-internal.h +189 -25
- data/ext/couchbase/third_party/snappy/snappy-sinksource.cc +26 -9
- data/ext/couchbase/third_party/snappy/snappy-sinksource.h +11 -11
- data/ext/couchbase/third_party/snappy/snappy-stubs-internal.cc +1 -1
- data/ext/couchbase/third_party/snappy/snappy-stubs-internal.h +227 -308
- data/ext/couchbase/third_party/snappy/snappy-stubs-public.h.in +0 -11
- data/ext/couchbase/third_party/snappy/snappy.cc +1176 -410
- data/ext/couchbase/third_party/snappy/snappy.h +19 -4
- data/ext/couchbase.cxx +506 -26
- data/ext/extconf.rb +2 -1
- data/ext/revisions.rb +3 -2
- data/lib/couchbase/binary_collection.rb +4 -4
- data/lib/couchbase/cluster.rb +13 -9
- data/lib/couchbase/cluster_registry.rb +7 -2
- data/lib/couchbase/collection.rb +5 -0
- data/lib/couchbase/configuration.rb +3 -4
- data/lib/couchbase/errors.rb +10 -0
- data/lib/couchbase/management/collection_query_index_manager.rb +183 -0
- data/lib/couchbase/management/query_index_manager.rb +35 -3
- data/lib/couchbase/management.rb +1 -0
- data/lib/couchbase/options.rb +87 -5
- data/lib/couchbase/search_options.rb +158 -240
- data/lib/couchbase/version.rb +1 -1
- metadata +21 -6
- data/ext/couchbase/core/CMakeLists.txt +0 -0
|
@@ -51,18 +51,22 @@ using opt_bucket_name = opt_must<one<'/'>, bucket_name>;
|
|
|
51
51
|
using opt_params = opt_must<one<'?'>, list_must<param, one<'&'>>>;
|
|
52
52
|
using opt_nodes = seq<list_must<node, one<',', ';'>>, opt_bucket_name>;
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
struct scheme : seq<uri::scheme, one<':'>, uri::dslash> {
|
|
55
|
+
};
|
|
56
|
+
using opt_scheme = opt<scheme>;
|
|
57
|
+
|
|
58
|
+
using grammar = must<seq<opt_scheme, opt_nodes, opt_params, tao::pegtl::eof>>;
|
|
55
59
|
|
|
56
60
|
template<typename Rule>
|
|
57
61
|
struct action {
|
|
58
62
|
};
|
|
59
63
|
|
|
60
64
|
template<>
|
|
61
|
-
struct action<
|
|
65
|
+
struct action<scheme> {
|
|
62
66
|
template<typename ActionInput>
|
|
63
67
|
static void apply(const ActionInput& in, connection_string& cs, connection_string::node& /* cur_node */)
|
|
64
68
|
{
|
|
65
|
-
cs.scheme = in.string();
|
|
69
|
+
cs.scheme = in.string().substr(0, in.string().rfind(':'));
|
|
66
70
|
if (cs.scheme == "couchbase") {
|
|
67
71
|
cs.default_port = 11210;
|
|
68
72
|
cs.default_mode = connection_string::bootstrap_mode::gcccp;
|
|
@@ -79,6 +83,9 @@ struct action<uri::scheme> {
|
|
|
79
83
|
cs.default_port = 18091;
|
|
80
84
|
cs.default_mode = connection_string::bootstrap_mode::http;
|
|
81
85
|
cs.tls = true;
|
|
86
|
+
} else {
|
|
87
|
+
cs.default_mode = connection_string::bootstrap_mode::unspecified;
|
|
88
|
+
cs.default_port = 0;
|
|
82
89
|
}
|
|
83
90
|
}
|
|
84
91
|
};
|
|
@@ -57,7 +57,7 @@ struct connection_string {
|
|
|
57
57
|
}
|
|
58
58
|
};
|
|
59
59
|
|
|
60
|
-
std::string scheme{};
|
|
60
|
+
std::string scheme{ "couchbase" };
|
|
61
61
|
bool tls{ false };
|
|
62
62
|
std::map<std::string, std::string> params{};
|
|
63
63
|
cluster_options options{};
|
|
@@ -65,8 +65,8 @@ struct connection_string {
|
|
|
65
65
|
std::vector<node> bootstrap_nodes{};
|
|
66
66
|
|
|
67
67
|
std::optional<std::string> default_bucket_name{};
|
|
68
|
-
bootstrap_mode default_mode{ bootstrap_mode::
|
|
69
|
-
std::uint16_t default_port{
|
|
68
|
+
bootstrap_mode default_mode{ connection_string::bootstrap_mode::gcccp };
|
|
69
|
+
std::uint16_t default_port{ 11210 };
|
|
70
70
|
|
|
71
71
|
std::optional<std::string> error{};
|
|
72
72
|
};
|
|
@@ -0,0 +1,143 @@
|
|
|
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/error_context.hxx>
|
|
21
|
+
|
|
22
|
+
#include <cstdint>
|
|
23
|
+
#include <optional>
|
|
24
|
+
|
|
25
|
+
namespace couchbase
|
|
26
|
+
{
|
|
27
|
+
/**
|
|
28
|
+
* The error context returned with Query operations.
|
|
29
|
+
*
|
|
30
|
+
* @since 1.0.0
|
|
31
|
+
* @committed
|
|
32
|
+
*/
|
|
33
|
+
class analytics_error_context : public error_context
|
|
34
|
+
{
|
|
35
|
+
public:
|
|
36
|
+
/**
|
|
37
|
+
* Creates empty error context
|
|
38
|
+
*
|
|
39
|
+
* @since 1.0.0
|
|
40
|
+
* @committed
|
|
41
|
+
*/
|
|
42
|
+
analytics_error_context() = default;
|
|
43
|
+
|
|
44
|
+
analytics_error_context(std::error_code ec,
|
|
45
|
+
std::optional<std::string> last_dispatched_to,
|
|
46
|
+
std::optional<std::string> last_dispatched_from,
|
|
47
|
+
std::size_t retry_attempts,
|
|
48
|
+
std::set<retry_reason> retry_reasons,
|
|
49
|
+
std::uint64_t first_error_code,
|
|
50
|
+
std::string first_error_message,
|
|
51
|
+
std::string client_context_id,
|
|
52
|
+
std::string statement,
|
|
53
|
+
std::optional<std::string> parameters,
|
|
54
|
+
std::string method,
|
|
55
|
+
std::string path,
|
|
56
|
+
std::uint32_t http_status,
|
|
57
|
+
std::string http_body,
|
|
58
|
+
std::string hostname,
|
|
59
|
+
std::uint16_t port)
|
|
60
|
+
: error_context{ ec, std::move(last_dispatched_to), std::move(last_dispatched_from), retry_attempts, std::move(retry_reasons) }
|
|
61
|
+
, first_error_code_{ first_error_code }
|
|
62
|
+
, first_error_message_{ std::move(first_error_message) }
|
|
63
|
+
, client_context_id_{ std::move(client_context_id) }
|
|
64
|
+
, statement_{ std::move(statement) }
|
|
65
|
+
, parameters_{ std::move(parameters) }
|
|
66
|
+
, method_{ std::move(method) }
|
|
67
|
+
, path_{ std::move(path) }
|
|
68
|
+
, http_status_{ http_status }
|
|
69
|
+
, http_body_{ std::move(http_body) }
|
|
70
|
+
, hostname_{ std::move(hostname) }
|
|
71
|
+
, port_{ port }
|
|
72
|
+
{
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
[[nodiscard]] auto first_error_code() const -> std::uint64_t
|
|
76
|
+
{
|
|
77
|
+
return first_error_code_;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
[[nodiscard]] auto first_error_message() const -> const std::string&
|
|
81
|
+
{
|
|
82
|
+
return first_error_message_;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
[[nodiscard]] auto client_context_id() const -> const std::string&
|
|
86
|
+
{
|
|
87
|
+
return client_context_id_;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
[[nodiscard]] auto statement() const -> const std::string&
|
|
91
|
+
{
|
|
92
|
+
return statement_;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
[[nodiscard]] auto parameters() const -> const std::optional<std::string>&
|
|
96
|
+
{
|
|
97
|
+
return parameters_;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
[[nodiscard]] auto method() const -> const std::string&
|
|
101
|
+
{
|
|
102
|
+
return method_;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
[[nodiscard]] auto path() const -> const std::string&
|
|
106
|
+
{
|
|
107
|
+
return path_;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
[[nodiscard]] auto http_status() const -> std::uint32_t
|
|
111
|
+
{
|
|
112
|
+
return http_status_;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
[[nodiscard]] auto http_body() const -> const std::string&
|
|
116
|
+
{
|
|
117
|
+
return http_body_;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
[[nodiscard]] auto hostname() const -> const std::string&
|
|
121
|
+
{
|
|
122
|
+
return hostname_;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
[[nodiscard]] auto port() const -> std::uint16_t
|
|
126
|
+
{
|
|
127
|
+
return port_;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
private:
|
|
131
|
+
std::uint64_t first_error_code_{};
|
|
132
|
+
std::string first_error_message_{};
|
|
133
|
+
std::string client_context_id_{};
|
|
134
|
+
std::string statement_{};
|
|
135
|
+
std::optional<std::string> parameters_{};
|
|
136
|
+
std::string method_{};
|
|
137
|
+
std::string path_{};
|
|
138
|
+
std::uint32_t http_status_{};
|
|
139
|
+
std::string http_body_{};
|
|
140
|
+
std::string hostname_{};
|
|
141
|
+
std::uint16_t port_{};
|
|
142
|
+
};
|
|
143
|
+
} // namespace couchbase
|
|
@@ -0,0 +1,155 @@
|
|
|
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/analytics_metrics.hxx>
|
|
21
|
+
#include <couchbase/analytics_status.hxx>
|
|
22
|
+
#include <couchbase/analytics_warning.hxx>
|
|
23
|
+
#include <couchbase/codec/json_transcoder.hxx>
|
|
24
|
+
|
|
25
|
+
#include <cinttypes>
|
|
26
|
+
#include <optional>
|
|
27
|
+
#include <vector>
|
|
28
|
+
|
|
29
|
+
namespace couchbase
|
|
30
|
+
{
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Stores any non-rows results related to the execution of a particular Analytics query.
|
|
34
|
+
*
|
|
35
|
+
* @since 1.0.0
|
|
36
|
+
* @committed
|
|
37
|
+
*/
|
|
38
|
+
class analytics_meta_data
|
|
39
|
+
{
|
|
40
|
+
public:
|
|
41
|
+
/**
|
|
42
|
+
* @since 1.0.0
|
|
43
|
+
* @internal
|
|
44
|
+
*/
|
|
45
|
+
analytics_meta_data() = default;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* @since 1.0.0
|
|
49
|
+
* @volatile
|
|
50
|
+
*/
|
|
51
|
+
analytics_meta_data(std::string request_id,
|
|
52
|
+
std::string client_context_id,
|
|
53
|
+
analytics_status status,
|
|
54
|
+
std::vector<analytics_warning> warnings,
|
|
55
|
+
analytics_metrics metrics,
|
|
56
|
+
std::optional<codec::binary> signature)
|
|
57
|
+
: request_id_{ std::move(request_id) }
|
|
58
|
+
, client_context_id_{ std::move(client_context_id) }
|
|
59
|
+
, status_{ status }
|
|
60
|
+
, warnings_{ std::move(warnings) }
|
|
61
|
+
, metrics_{ std::move(metrics) }
|
|
62
|
+
, signature_{ std::move(signature) }
|
|
63
|
+
{
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Returns the request identifier string of the query request
|
|
68
|
+
*
|
|
69
|
+
* @return The request identifier string
|
|
70
|
+
*
|
|
71
|
+
* @since 1.0.0
|
|
72
|
+
* @committed
|
|
73
|
+
*/
|
|
74
|
+
[[nodiscard]] auto request_id() const -> const std::string&
|
|
75
|
+
{
|
|
76
|
+
return request_id_;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Returns the client context identifier string set on the query request.
|
|
81
|
+
*
|
|
82
|
+
* @return client context identifier
|
|
83
|
+
*
|
|
84
|
+
* @since 1.0.0
|
|
85
|
+
* @committed
|
|
86
|
+
*/
|
|
87
|
+
[[nodiscard]] auto client_context_id() const -> const std::string&
|
|
88
|
+
{
|
|
89
|
+
return client_context_id_;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Returns the raw query execution status as returned by the query engine
|
|
94
|
+
*
|
|
95
|
+
* @return query execution status
|
|
96
|
+
*
|
|
97
|
+
* @since 1.0.0
|
|
98
|
+
* @committed
|
|
99
|
+
*/
|
|
100
|
+
[[nodiscard]] auto status() const -> analytics_status
|
|
101
|
+
{
|
|
102
|
+
return status_;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Returns any warnings returned by the analytics engine.
|
|
107
|
+
*
|
|
108
|
+
* It returns an empty vector if no warnings were returned.
|
|
109
|
+
*
|
|
110
|
+
* @return vector of the reported warnings.
|
|
111
|
+
*
|
|
112
|
+
* @since 1.0.0
|
|
113
|
+
* @committed
|
|
114
|
+
*/
|
|
115
|
+
[[nodiscard]] auto warnings() const -> const std::vector<analytics_warning>&
|
|
116
|
+
{
|
|
117
|
+
return warnings_;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Returns the {@link analytics_metrics} as returned by the analytics engine if enabled.
|
|
122
|
+
*
|
|
123
|
+
* @return metrics
|
|
124
|
+
*
|
|
125
|
+
* @since 1.0.0
|
|
126
|
+
* @committed
|
|
127
|
+
*/
|
|
128
|
+
[[nodiscard]] auto metrics() const -> const analytics_metrics&
|
|
129
|
+
{
|
|
130
|
+
return metrics_;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Returns the signature as returned by the analytics engine.
|
|
135
|
+
*
|
|
136
|
+
* @return optional byte string containing JSON encoded signature
|
|
137
|
+
*
|
|
138
|
+
* @since 1.0.0
|
|
139
|
+
* @committed
|
|
140
|
+
*/
|
|
141
|
+
[[nodiscard]] auto signature() const -> const std::optional<codec::binary>&
|
|
142
|
+
{
|
|
143
|
+
return signature_;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
private:
|
|
147
|
+
std::string request_id_{};
|
|
148
|
+
std::string client_context_id_{};
|
|
149
|
+
analytics_status status_{};
|
|
150
|
+
std::vector<analytics_warning> warnings_{};
|
|
151
|
+
analytics_metrics metrics_{};
|
|
152
|
+
std::optional<codec::binary> signature_{};
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
} // namespace couchbase
|
|
@@ -0,0 +1,163 @@
|
|
|
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 <chrono>
|
|
21
|
+
#include <cinttypes>
|
|
22
|
+
|
|
23
|
+
namespace couchbase
|
|
24
|
+
{
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Analytics Metrics contains the query result metrics containing counts and timings
|
|
28
|
+
*
|
|
29
|
+
* @since 1.0.0
|
|
30
|
+
* @committed
|
|
31
|
+
*/
|
|
32
|
+
class analytics_metrics
|
|
33
|
+
{
|
|
34
|
+
public:
|
|
35
|
+
/**
|
|
36
|
+
* @since 1.0.0
|
|
37
|
+
* @internal
|
|
38
|
+
*/
|
|
39
|
+
analytics_metrics() = default;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @since 1.0.0
|
|
43
|
+
* @volatile
|
|
44
|
+
*/
|
|
45
|
+
analytics_metrics(std::chrono::nanoseconds elapsed_time,
|
|
46
|
+
std::chrono::nanoseconds execution_time,
|
|
47
|
+
std::uint64_t result_count,
|
|
48
|
+
std::uint64_t result_size,
|
|
49
|
+
std::uint64_t processed_objects,
|
|
50
|
+
std::uint64_t error_count,
|
|
51
|
+
std::uint64_t warning_count)
|
|
52
|
+
: elapsed_time_{ elapsed_time }
|
|
53
|
+
, execution_time_{ execution_time }
|
|
54
|
+
, result_count_{ result_count }
|
|
55
|
+
, result_size_{ result_size }
|
|
56
|
+
, processed_objects_{ processed_objects }
|
|
57
|
+
, error_count_{ error_count }
|
|
58
|
+
, warning_count_{ warning_count }
|
|
59
|
+
{
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* The total time taken for the request, that is the time from when the request was received until the results were returned.
|
|
64
|
+
*
|
|
65
|
+
* @return total time duration
|
|
66
|
+
*
|
|
67
|
+
* @since 1.0.0
|
|
68
|
+
* @committed
|
|
69
|
+
*/
|
|
70
|
+
[[nodiscard]] auto elapsed_time() const -> std::chrono::nanoseconds
|
|
71
|
+
{
|
|
72
|
+
return elapsed_time_;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* The time taken for the execution of the request, that is the time from when query execution started until the results were returned.
|
|
77
|
+
*
|
|
78
|
+
* @return the execution time duration
|
|
79
|
+
*
|
|
80
|
+
* @since 1.0.0
|
|
81
|
+
* @committed
|
|
82
|
+
*/
|
|
83
|
+
[[nodiscard]] auto execution_time() const -> std::chrono::nanoseconds
|
|
84
|
+
{
|
|
85
|
+
return execution_time_;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* The total number of objects in the results.
|
|
90
|
+
*
|
|
91
|
+
* @return number of results
|
|
92
|
+
*
|
|
93
|
+
* @since 1.0.0
|
|
94
|
+
* @committed
|
|
95
|
+
*/
|
|
96
|
+
[[nodiscard]] auto result_count() const -> std::uint64_t
|
|
97
|
+
{
|
|
98
|
+
return result_count_;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* The total number of bytes in the results
|
|
103
|
+
*
|
|
104
|
+
* @return number of bytes
|
|
105
|
+
*
|
|
106
|
+
* @since 1.0.0
|
|
107
|
+
* @committed
|
|
108
|
+
*/
|
|
109
|
+
[[nodiscard]] auto result_size() const -> std::uint64_t
|
|
110
|
+
{
|
|
111
|
+
return result_size_;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* The number of processed objects for the request.
|
|
116
|
+
*
|
|
117
|
+
* @return number of objects
|
|
118
|
+
*
|
|
119
|
+
* @since 1.0.0
|
|
120
|
+
* @committed
|
|
121
|
+
*/
|
|
122
|
+
[[nodiscard]] auto processed_objects() const -> std::uint64_t
|
|
123
|
+
{
|
|
124
|
+
return processed_objects_;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* The number of errors that occurred during the request
|
|
129
|
+
*
|
|
130
|
+
* @return number of errors
|
|
131
|
+
*
|
|
132
|
+
* @since 1.0.0
|
|
133
|
+
* @committed
|
|
134
|
+
*/
|
|
135
|
+
[[nodiscard]] auto error_count() const -> std::uint64_t
|
|
136
|
+
{
|
|
137
|
+
return error_count_;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* The number of warnings that occurred during the request.
|
|
142
|
+
*
|
|
143
|
+
* @return number of warnings
|
|
144
|
+
*
|
|
145
|
+
* @since 1.0.0
|
|
146
|
+
* @committed
|
|
147
|
+
*/
|
|
148
|
+
[[nodiscard]] auto warning_count() const -> std::uint64_t
|
|
149
|
+
{
|
|
150
|
+
return warning_count_;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
private:
|
|
154
|
+
std::chrono::nanoseconds elapsed_time_{};
|
|
155
|
+
std::chrono::nanoseconds execution_time_{};
|
|
156
|
+
std::uint64_t result_count_{};
|
|
157
|
+
std::uint64_t result_size_{};
|
|
158
|
+
std::uint64_t processed_objects_{};
|
|
159
|
+
std::uint64_t error_count_{};
|
|
160
|
+
std::uint64_t warning_count_{};
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
} // namespace couchbase
|