5#include <userver/storages/sqlite/result_set.hpp>
9namespace storages::sqlite {
16class CursorResultSet final {
18 explicit CursorResultSet(
ResultSet&& result_set, size_t batch_size);
21 CursorResultSet(
const CursorResultSet& other) =
delete;
22 CursorResultSet(CursorResultSet&& other)
noexcept;
29 template <
typename RowCallback>
30 void ForEach(RowCallback&& row_callback) &&;
38CursorResultSet<T>::CursorResultSet(
ResultSet&& result_set, size_t batch_size)
39 : result_set_{std::move(result_set)},
40 batch_size_{batch_size}
44CursorResultSet<T>::CursorResultSet(CursorResultSet<T>&& other)
noexcept =
default;
47CursorResultSet<T>::~CursorResultSet() =
default;
50template <
typename RowCallback>
51void CursorResultSet<T>::
ForEach(RowCallback&& row_callback) && {
52 using IntermediateStorage = std::vector<T>;
54 bool keep_going =
true;
55 impl::TypedExtractor<T,
RowTag> extractor{*result_set_.pimpl_};
58 keep_going = result_set_.FetchResult(extractor, batch_size_);
60 IntermediateStorage data{extractor.ExtractData()};
61 for (
auto&& row : data) {
62 row_callback(std::move(row));