couchbase 3.4.0 → 3.4.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|