10#include <userver/storages/sqlite/exceptions.hpp>
11#include <userver/storages/sqlite/execution_result.hpp>
12#include <userver/storages/sqlite/impl/extractor.hpp>
13#include <userver/storages/sqlite/row_types.hpp>
14#include <userver/storages/sqlite/sqlite_fwd.hpp>
16USERVER_NAMESPACE_BEGIN
18namespace storages::sqlite {
26 explicit ResultSet(impl::ResultWrapperPtr pimpl);
28 ResultSet(
const ResultSet& other) =
delete;
100 template <
typename T>
107 template <
typename T>
108 friend class CursorResultSet;
110 void FetchAllResult(impl::ExtractorBase& extractor);
112 bool FetchResult(impl::ExtractorBase& extractor, size_t batch_size);
114 impl::ResultWrapperPtr pimpl_;
119 impl::TypedExtractor<T,
RowTag> extractor{*pimpl_};
120 FetchAllResult(extractor);
121 return extractor.ExtractData();
126 impl::TypedExtractor<T,
FieldTag> extractor{*pimpl_};
127 FetchAllResult(extractor);
128 return extractor.ExtractData();
133 auto optional_data = std::move(*
this).AsOptionalSingleRow<T>();
134 if (!optional_data.has_value()) {
137 return std::move(*optional_data);
142 auto optional_data = std::move(*
this).AsOptionalSingleField<T>();
143 if (!optional_data.has_value()) {
146 return std::move(*optional_data);
151 auto rows = std::move(*
this).AsVector<T>();
155 if (rows.size() > 1) {
159 return {{std::move(rows.front())}};
164 auto rows = std::move(*
this).AsVector<T>(kFieldTag);
168 if (rows.size() > 1) {
172 return {{std::move(rows.front())}};