Couchbase C++ SDK 1.4.0 (rev. 59aa900)
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 <map>
30#include <optional>
31
32namespace couchbase
33{
34
35namespace codec
36{
38} // namespace codec
39
46struct analytics_options : public common_options<analytics_options> {
53 struct built : public common_options<analytics_options>::built {
54 std::optional<std::string> client_context_id;
55 const bool priority;
56 const bool readonly;
57 std::optional<analytics_scan_consistency> scan_consistency;
58 std::optional<std::chrono::milliseconds> scan_wait;
59 std::vector<mutation_token> mutation_state;
60 std::vector<codec::binary> positional_parameters;
61 std::map<std::string, codec::binary, std::less<>> named_parameters;
62 std::map<std::string, codec::binary, std::less<>> raw;
63 };
64
76 [[nodiscard]] auto build() const -> built
77 {
78 return {
80 client_context_id_,
81 priority_,
82 readonly_,
83 scan_consistency_,
84 scan_wait_,
85 mutation_state_,
86 positional_parameters_,
87 named_parameters_,
88 raw_,
89 };
90 }
91
102 auto priority(bool prioritized) -> analytics_options&
103 {
104 priority_ = prioritized;
105 return self();
106 }
107
125 {
126 readonly_ = readonly;
127 return self();
128 }
129
143 auto scan_wait(std::chrono::milliseconds wait) -> analytics_options&
144 {
145 if (scan_consistency_ == analytics_scan_consistency::not_bounded) {
146 scan_wait_.reset();
147 } else {
148 scan_wait_ = wait;
149 }
150 return self();
151 }
152
166 {
167 if (client_context_id.empty()) {
168 client_context_id_.reset();
169 } else {
170 client_context_id_ = std::move(client_context_id);
171 }
172 return self();
173 }
174
199 {
200 scan_consistency_ = scan_consistency;
201 mutation_state_.clear();
202 return self();
203 }
204
226 {
227 mutation_state_ = state.tokens();
228 scan_consistency_.reset();
229 return self();
230 }
231
241 template<typename Serializer = codec::tao_json_serializer,
242 typename Value,
243 std::enable_if_t<codec::is_serializer_v<Serializer>, bool> = true>
244 auto raw(std::string name, const Value& value) -> analytics_options&
245 {
246 raw_[std::move(name)] = std::move(Serializer::template serialize<const Value&>(value));
247 return self();
248 }
249
261 template<typename Serializer = codec::tao_json_serializer,
262 typename... Parameters,
263 std::enable_if_t<codec::is_serializer_v<Serializer>, bool> = true>
264 auto positional_parameters(const Parameters&... parameters) -> analytics_options&
265 {
266 positional_parameters_.clear();
267 encode_positional_parameters<Serializer>(parameters...);
268 return self();
269 }
270
281 template<typename Serializer = codec::tao_json_serializer,
282 typename... Parameters,
283 std::enable_if_t<codec::is_serializer_v<Serializer>, bool> = true>
284 auto named_parameters(const Parameters&... parameters) -> analytics_options&
285 {
286 named_parameters_.clear();
287 encode_named_parameters<Serializer>(parameters...);
288 return self();
289 }
290
301 template<typename Serializer = codec::tao_json_serializer,
302 typename Parameter,
303 std::enable_if_t<codec::is_serializer_v<Serializer>, bool> = true>
304 auto add_positional_parameter(const Parameter& parameter) -> analytics_options&
305 {
306 encode_positional_parameters<Serializer>(parameter);
307 return self();
308 }
309
321 template<typename Serializer = codec::tao_json_serializer,
322 typename Value,
323 std::enable_if_t<codec::is_serializer_v<Serializer>, bool> = true>
324 auto add_named_parameter(const std::string& name, const Value& value) -> analytics_options&
325 {
326 encode_named_parameters<Serializer>(std::make_pair(name, value));
327 return self();
328 }
329
339 {
340 positional_parameters_.clear();
341 return self();
342 }
343
353 {
354 named_parameters_.clear();
355 return self();
356 }
357
372 auto encoded_raw_options(std::map<std::string, codec::binary, std::less<>> options)
374 {
375 raw_ = std::move(options);
376 return self();
377 }
378
394 auto encoded_positional_parameters(std::vector<codec::binary> parameters) -> analytics_options&
395 {
396 positional_parameters_ = std::move(parameters);
397 return self();
398 }
399
414 auto encoded_named_parameters(std::map<std::string, codec::binary, std::less<>> parameters)
416 {
417 named_parameters_ = std::move(parameters);
418 return self();
419 }
420
421private:
422 template<typename Serializer = codec::tao_json_serializer,
423 typename Parameter,
424 typename... Rest,
425 std::enable_if_t<codec::is_serializer_v<Serializer>, bool> = true>
426 void encode_positional_parameters(const Parameter& parameter, Rest... args)
427 {
428 positional_parameters_.emplace_back(
429 std::move(Serializer::template serialize<Parameter>(parameter)));
430 if constexpr (sizeof...(args) > 0) {
431 encode_positional_parameters<Serializer>(args...);
432 }
433 }
434
435 template<typename Serializer = codec::tao_json_serializer,
436 typename Name,
437 typename Parameter,
438 typename... Rest,
439 std::enable_if_t<codec::is_serializer_v<Serializer>, bool> = true>
440 void encode_named_parameters(const std::pair<Name, Parameter>& parameter, Rest... args)
441 {
442 named_parameters_[parameter.first] =
443 std::move(Serializer::template serialize<Parameter>(parameter.second));
444 if constexpr (sizeof...(args) > 0) {
445 encode_named_parameters<Serializer>(args...);
446 }
447 }
448
449 bool priority_{ true };
450 bool readonly_{ false };
451 std::optional<std::string> client_context_id_{};
452 std::optional<std::chrono::milliseconds> scan_wait_{};
453 std::optional<analytics_scan_consistency> scan_consistency_{};
454 std::vector<mutation_token> mutation_state_{};
455 std::vector<codec::binary> positional_parameters_{};
456 std::map<std::string, codec::binary, std::less<>> raw_{};
457 std::map<std::string, codec::binary, std::less<>> named_parameters_{};
458};
459
467using analytics_handler = std::function<void(error, analytics_result)>;
468
477} // namespace couchbase
Represents result of analytics_query() and analytics_query() calls.
Definition analytics_result.hxx:41
A streaming result handle for analytics queries.
Definition analytics_stream_result.hxx:68
Definition tao_json_serializer.hxx:42
Common options that used by most operations.
Definition common_options.hxx:38
auto self() -> analytics_options &
Definition common_options.hxx:116
auto build_common_options() const -> built
Definition common_options.hxx:103
Definition error.hxx:31
Aggregation of one or more mutation_tokens for specifying consistency requirements of N1QL or FTS que...
Definition mutation_state.hxx:35
Definition analytics_options.hxx:36
std::vector< std::byte > binary
Definition encoded_value.hxx:25
Represents a single item from the result of 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.
Definition analytics_scan_consistency.hxx:33
std::function< void(error, analytics_stream_result)> analytics_stream_handler
The signature for the handler of the analytics_query_stream() and analytics_query_stream() operations...
Definition analytics_options.hxx:476
std::function< void(error, analytics_result)> analytics_handler
The signature for the handler of the analytics_query() and analytics_query() operations.
Definition analytics_options.hxx:467
Immutable value object representing consistent options.
Definition analytics_options.hxx:53
std::vector< mutation_token > mutation_state
Definition analytics_options.hxx:59
std::map< std::string, codec::binary, std::less<> > named_parameters
Definition analytics_options.hxx:61
const bool priority
Definition analytics_options.hxx:55
const bool readonly
Definition analytics_options.hxx:56
std::optional< std::chrono::milliseconds > scan_wait
Definition analytics_options.hxx:58
std::map< std::string, codec::binary, std::less<> > raw
Definition analytics_options.hxx:62
std::optional< std::string > client_context_id
Definition analytics_options.hxx:54
std::optional< analytics_scan_consistency > scan_consistency
Definition analytics_options.hxx:57
std::vector< codec::binary > positional_parameters
Definition analytics_options.hxx:60
Options for cluster::analytics_query() and scope::analytics_query().
Definition analytics_options.hxx:46
auto raw(std::string name, const Value &value) -> analytics_options &
Definition analytics_options.hxx:244
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:165
auto positional_parameters(const Parameters &... parameters) -> analytics_options &
Set list of positional parameters for a query.
Definition analytics_options.hxx:264
auto scan_consistency(analytics_scan_consistency scan_consistency) -> analytics_options &
Customizes the consistency guarantees for this query.
Definition analytics_options.hxx:198
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:372
auto encoded_positional_parameters(std::vector< codec::binary > parameters) -> analytics_options &
Set list of positional parameters for a query.
Definition analytics_options.hxx:394
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:124
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:143
auto priority(bool prioritized) -> analytics_options &
Allows to give certain requests higher priority than others.
Definition analytics_options.hxx:102
auto build() const -> built
Validates options and returns them as an immutable value.
Definition analytics_options.hxx:76
auto clear_positional_parameters() -> analytics_options &
Clears the list of positional parameters.
Definition analytics_options.hxx:338
auto clear_named_parameters() -> analytics_options &
Clears the list of named parameters.
Definition analytics_options.hxx:352
auto consistent_with(const mutation_state &state) -> analytics_options &
Sets the mutation_tokens this query should be consistent with.
Definition analytics_options.hxx:225
auto add_named_parameter(const std::string &name, const Value &value) -> analytics_options &
Adds a named parameter to the current list of named parameters.
Definition analytics_options.hxx:324
auto add_positional_parameter(const Parameter &parameter) -> analytics_options &
Adds a positional parameter to the current list of positional parameters.
Definition analytics_options.hxx:304
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:414
auto named_parameters(const Parameters &... parameters) -> analytics_options &
Set list of named parameters for a query.
Definition analytics_options.hxx:284