userver
C++ Async Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
builder.hpp
Go to the documentation of this file.
1
#
pragma
once
2
3
/// @file userver/ydb/builder.hpp
4
/// @brief @copybrief ydb::PreparedArgsBuilder
5
6
#
include
<
ydb
-
cpp
-
sdk
/
client
/
params
/
params
.
h
>
7
8
#
include
<
string
>
9
#
include
<
type_traits
>
10
#
include
<
utility
>
11
12
#
include
<
userver
/
ydb
/
impl
/
cast
.
hpp
>
13
#
include
<
userver
/
ydb
/
io
/
traits
.
hpp
>
14
15
USERVER_NAMESPACE_BEGIN
16
17
namespace
ydb {
18
19
class
TableClient;
20
class
Transaction;
21
22
/// @brief Builder for prepared query parameters
23
class
PreparedArgsBuilder
final
{
24
public
:
25
PreparedArgsBuilder() =
default
;
26
27
PreparedArgsBuilder(PreparedArgsBuilder&&)
noexcept
=
default
;
28
PreparedArgsBuilder& operator=(PreparedArgsBuilder&&) =
delete
;
29
30
explicit
PreparedArgsBuilder(NYdb::TParamsBuilder&& builder)
31
: builder_(std::move(builder))
32
{}
33
34
/// Supported types and required includes are documented in:
35
/// <userver/ydb/io/supported_types.hpp>
36
template
<
typename
T>
37
void
Add
(
const
std::string& name, T&& value);
38
39
/// @cond
40
// For internal use only.
41
template
<
typename
... NamesValues>
42
void
AddParams(NamesValues&&... names_values);
43
/// @endcond
44
45
private
:
46
friend
class
Transaction;
47
friend
class
TableClient;
48
friend
class
TxActor
;
49
struct
PreparedArgsWithKey;
50
51
NYdb::TParams Build() && {
return
std::move(builder_).Build(); }
52
53
PreparedArgsWithKey operator<<(
const
std::string& key);
54
55
NYdb::TParamsBuilder builder_;
56
};
57
58
template
<
typename
T>
59
void
PreparedArgsBuilder::
Add
(
const
std::string& name, T&& value) {
60
auto
& param_builder = builder_.AddParam(impl::ToString(name));
61
Write
(
param_builder
,
std::forward<T>(value)
)
;
62
param_builder.Build();
63
}
64
65
/// @cond
66
template
<
typename
... NamesValues>
67
void
PreparedArgsBuilder::AddParams(NamesValues&&... names_values) {
68
[[maybe_unused]]
decltype
(
auto
) result = (*
this
<< ... << std::forward<NamesValues>(names_values));
69
static_assert
(std::is_same_v<
decltype
(result), PreparedArgsBuilder&>);
70
}
71
/// @endcond
72
73
struct
PreparedArgsBuilder::PreparedArgsWithKey
final
{
74
PreparedArgsBuilder& builder;
75
const
std::string& key;
76
77
template
<
typename
T>
78
PreparedArgsBuilder& operator<<(T&& value)
const
{
79
builder.Add(key, std::forward<T>(value));
80
return
builder;
81
}
82
};
83
84
inline
auto
PreparedArgsBuilder::operator<<(
const
std::string& key) -> PreparedArgsWithKey {
85
return
PreparedArgsWithKey{*
this
, key};
86
}
87
88
}
// namespace ydb
89
90
USERVER_NAMESPACE_END
userver
ydb
builder.hpp
Generated on
for userver by
Doxygen
1.17.0