userver
C++ Async Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
cursor_result_set.hpp
Go to the documentation of this file.
1
#
pragma
once
2
3
/// @file userver/storages/sqlite/cursor_result_set.hpp
4
5
#
include
<
userver
/
storages
/
sqlite
/
result_set
.
hpp
>
6
7
USERVER_NAMESPACE_BEGIN
8
9
namespace
storages::sqlite {
10
11
/// @brief A wrapper for read-only cursor.
12
///
13
/// You should always retrieve it from `storages::sqlite::Client` for correct
14
/// behavior.
15
template
<
typename
T>
16
class
CursorResultSet final {
17
public
:
18
explicit
CursorResultSet(
ResultSet
&& result_set, size_t batch_size);
19
~CursorResultSet();
20
21
CursorResultSet(
const
CursorResultSet& other) =
delete
;
22
CursorResultSet(CursorResultSet&& other)
noexcept
;
23
24
/// @brief Fetches all the rows from cursor and for each new row executes
25
/// row_callback.
26
///
27
/// Usable when the result set is expected to be big enough to put too
28
/// much memory pressure if fetched as a whole.
29
template
<
typename
RowCallback>
30
void
ForEach
(RowCallback&& row_callback) &&;
31
32
private
:
33
ResultSet
result_set_;
34
size_t batch_size_;
35
};
36
37
template
<
typename
T>
38
CursorResultSet<T>::CursorResultSet(
ResultSet
&& result_set, size_t batch_size)
39
: result_set_{std::move(result_set)},
40
batch_size_{batch_size}
41
{}
42
43
template
<
typename
T>
44
CursorResultSet<T>::CursorResultSet(CursorResultSet<T>&& other)
noexcept
=
default
;
45
46
template
<
typename
T>
47
CursorResultSet<T>::~CursorResultSet() =
default
;
48
49
template
<
typename
T>
50
template
<
typename
RowCallback>
51
void
CursorResultSet<T>::
ForEach
(RowCallback&& row_callback) && {
52
using
IntermediateStorage = std::vector<T>;
53
54
bool
keep_going =
true
;
55
impl::TypedExtractor<T,
RowTag
> extractor{*result_set_.pimpl_};
56
57
while
(keep_going) {
58
keep_going = result_set_.FetchResult(extractor, batch_size_);
59
60
IntermediateStorage data{extractor.ExtractData()};
61
for
(
auto
&& row : data) {
62
row_callback(std::move(row));
63
}
64
}
65
}
66
67
}
// namespace storages::sqlite
68
69
USERVER_NAMESPACE_END
userver
storages
sqlite
cursor_result_set.hpp
Generated on
for userver by
Doxygen
1.17.0