Couchbase C++ SDK 1.0.1 (rev. 58d46d7)
Loading...
Searching...
No Matches
analytics_options.hxx
Go to the documentation of this file.
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
24#include <couchbase/error.hxx>
26
27#include <chrono>
28#include <functional>
29#include <memory>
30#include <optional>
31
32namespace couchbase
33{
40struct analytics_options : public common_options<analytics_options> {
47 struct built : public common_options<analytics_options>::built {
48 std::optional<std::string> client_context_id;
49 const bool priority;
50 const bool readonly;
51 std::optional<analytics_scan_consistency> scan_consistency;
52 std::optional<std::chrono::milliseconds> scan_wait;
53 std::vector<mutation_token> mutation_state;
54 std::vector<codec::binary> positional_parameters;
55 std::map<std::string, codec::binary, std::less<>> named_parameters;
56 std::map<std::string, codec::binary, std::less<>> raw;
57 };
58
70 [[nodiscard]] auto build() const -> built
71 {
72 return {
74 client_context_id_,
75 priority_,
76 readonly_,
77 scan_consistency_,
78 scan_wait_,
79 mutation_state_,
80 positional_parameters_,
81 named_parameters_,
82 raw_,
83 };
84 }
85
96 auto priority(bool prioritized) -> analytics_options&
97 {
98 priority_ = prioritized;
99 return self();
100 }
101
119 {
120 readonly_ = readonly;
121 return self();
122 }
123
137 auto scan_wait(std::chrono::milliseconds wait) -> analytics_options&
138 {
139 if (scan_consistency_ == analytics_scan_consistency::not_bounded) {
140 scan_wait_.reset();
141 } else {
142 scan_wait_ = wait;
143 }
144 return self();
145 }
146
160 {
161 if (client_context_id.empty()) {
162 client_context_id_.reset();
163 } else {
164 client_context_id_ = std::move(client_context_id);
165 }
166 return self();
167 }
168
192 {
193 scan_consistency_ = scan_consistency;
194 mutation_state_.clear();
195 return self();
196 }
197
219 {
220 mutation_state_ = state.tokens();
221 scan_consistency_.reset();
222 return self();
223 }
224
235 template<typename Value>
236 auto raw(std::string name, const Value& value) -> analytics_options&
237 {
238 raw_[std::move(name)] = std::move(codec::tao_json_serializer::serialize(value));
239 return self();
240 }
241
252 template<typename... Parameters>
253 auto positional_parameters(const Parameters&... parameters) -> analytics_options&
254 {
255 named_parameters_.clear();
256 positional_parameters_.clear();
257 encode_positional_parameters(parameters...);
258 return self();
259 }
260
271 template<typename... Parameters>
272 auto named_parameters(const Parameters&... parameters) -> analytics_options&
273 {
274 named_parameters_.clear();
275 positional_parameters_.clear();
276 encode_named_parameters(parameters...);
277 return self();
278 }
279
294 auto encoded_raw_options(std::map<std::string, codec::binary, std::less<>> options)
296 {
297 raw_ = std::move(options);
298 return self();
299 }
300
316 auto encoded_positional_parameters(std::vector<codec::binary> parameters) -> analytics_options&
317 {
318 named_parameters_.clear();
319 positional_parameters_ = std::move(parameters);
320 return self();
321 }
322
337 auto encoded_named_parameters(std::map<std::string, codec::binary, std::less<>> parameters)
339 {
340 named_parameters_ = std::move(parameters);
341 positional_parameters_.clear();
342 return self();
343 }
344
345private:
346 template<typename Parameter, typename... Rest>
347 void encode_positional_parameters(const Parameter& parameter, Rest... args)
348 {
349 positional_parameters_.emplace_back(
350 std::move(codec::tao_json_serializer::serialize(parameter)));
351 if constexpr (sizeof...(args) > 0) {
352 encode_positional_parameters(args...);
353 }
354 }
355
356 template<typename Name, typename Parameter, typename... Rest>
357 void encode_named_parameters(const std::pair<Name, Parameter>& parameter, Rest... args)
358 {
359 named_parameters_[parameter.first] =
360 std::move(codec::tao_json_serializer::serialize(parameter.second));
361 if constexpr (sizeof...(args) > 0) {
362 encode_named_parameters(args...);
363 }
364 }
365
366 bool priority_{ true };
367 bool readonly_{ false };
368 std::optional<std::string> client_context_id_{};
369 std::optional<std::chrono::milliseconds> scan_wait_{};
370 std::optional<analytics_scan_consistency> scan_consistency_{};
371 std::vector<mutation_token> mutation_state_{};
372 std::vector<codec::binary> positional_parameters_{};
373 std::map<std::string, codec::binary, std::less<>> raw_{};
374 std::map<std::string, codec::binary, std::less<>> named_parameters_{};
375};
376
384using analytics_handler = std::function<void(error, analytics_result)>;
385} // namespace couchbase
Represents result of cluster::analytics_query() and scope::analytics_query() calls.
Definition analytics_result.hxx:38
static auto serialize(Document document) -> binary
Definition tao_json_serializer.hxx:47
Common options that used by most operations.
Definition common_options.hxx:37
auto self() -> analytics_options &
Allows to return the right options builder instance for child implementations.
Definition common_options.hxx:102
auto build_common_options() const -> built
Definition common_options.hxx:89
Definition error.hxx:30
Aggregation of one or more mutation_tokens for specifying consistency requirements of N1QL or FTS que...
Definition mutation_state.hxx:35
std::vector< std::byte > binary
Definition encoded_value.hxx:25
Represents a single item from the result of collection::scan()
Definition allow_querying_search_index_options.hxx:28
analytics_scan_consistency
Definition analytics_scan_consistency.hxx:22
@ not_bounded
The indexer will return whatever state it has to the query engine at the time of query.
std::function< void(error, analytics_result)> analytics_handler
The signature for the handler of the cluster::analytics_query() and scope::analytics_query() operatio...
Definition analytics_options.hxx:384
Immutable value object representing consistent options.
Definition analytics_options.hxx:47
std::vector< mutation_token > mutation_state
Definition analytics_options.hxx:53
std::map< std::string, codec::binary, std::less<> > named_parameters
Definition analytics_options.hxx:55
const bool priority
Definition analytics_options.hxx:49
const bool readonly
Definition analytics_options.hxx:50
std::optional< std::chrono::milliseconds > scan_wait
Definition analytics_options.hxx:52
std::map< std::string, codec::binary, std::less<> > raw
Definition analytics_options.hxx:56
std::optional< std::string > client_context_id
Definition analytics_options.hxx:48
std::optional< analytics_scan_consistency > scan_consistency
Definition analytics_options.hxx:51
std::vector< codec::binary > positional_parameters
Definition analytics_options.hxx:54
Options for cluster::analytics_query() and scope::analytics_query().
Definition analytics_options.hxx:40
auto client_context_id(std::string client_context_id) -> analytics_options &
Supports providing a custom client context ID for this query.
Definition analytics_options.hxx:159
auto raw(std::string name, const Value &value) -> analytics_options &
Definition analytics_options.hxx:236
auto scan_consistency(analytics_scan_consistency scan_consistency) -> analytics_options &
Customizes the consistency guarantees for this query.
Definition analytics_options.hxx:191
auto encoded_raw_options(std::map< std::string, codec::binary, std::less<> > options) -> analytics_options &
Set map of raw options for a query.
Definition analytics_options.hxx:294
auto named_parameters(const Parameters &... parameters) -> analytics_options &
Set list of named parameters for a query.
Definition analytics_options.hxx:272
auto encoded_positional_parameters(std::vector< codec::binary > parameters) -> analytics_options &
Set list of positional parameters for a query.
Definition analytics_options.hxx:316
auto readonly(bool readonly) -> analytics_options &
Allows explicitly marking a query as being readonly and not mutating and documents on the server side...
Definition analytics_options.hxx:118
auto scan_wait(std::chrono::milliseconds wait) -> analytics_options &
Allows customizing how long the query engine is willing to wait until the index catches up to whateve...
Definition analytics_options.hxx:137
auto priority(bool prioritized) -> analytics_options &
Allows to give certain requests higher priority than others.
Definition analytics_options.hxx:96
auto build() const -> built
Validates options and returns them as an immutable value.
Definition analytics_options.hxx:70
auto positional_parameters(const Parameters &... parameters) -> analytics_options &
Set list of positional parameters for a query.
Definition analytics_options.hxx:253
auto consistent_with(const mutation_state &state) -> analytics_options &
Sets the mutation_tokens this query should be consistent with.
Definition analytics_options.hxx:218
auto encoded_named_parameters(std::map< std::string, codec::binary, std::less<> > parameters) -> analytics_options &
Set map of named parameters for a query.
Definition analytics_options.hxx:337