52 explicit Row(impl::ParseState& parse_state);
55 Row(
const Row&) =
delete;
56 Row(Row&&)
noexcept =
default;
57 Row& operator=(
const Row&) =
delete;
58 Row& operator=(Row&&) =
delete;
73 T
Get(std::string_view column_name);
79 T
Get(std::size_t column_index);
82 NYdb::TValueParser& GetColumn(std::size_t index);
83 NYdb::TValueParser& GetColumn(std::string_view name);
85 void ConsumedColumnsCheck(std::size_t column_index);
87 impl::ParseState& parse_state_;
88 std::vector<
bool> consumed_columns_;
91class CursorIterator
final {
93 using difference_type = std::ptrdiff_t;
94 using value_type = Row;
95 using reference = Row;
96 using iterator_category = std::input_iterator_tag;
98 CursorIterator() =
default;
100 CursorIterator(
const CursorIterator&) =
delete;
101 CursorIterator(CursorIterator&&)
noexcept =
default;
102 CursorIterator& operator=(
const CursorIterator&) =
delete;
103 CursorIterator& operator=(CursorIterator&&) =
default;
105 Row operator*()
const;
107 CursorIterator& operator++();
109 void operator++(
int);
111 bool operator==(
const std::default_sentinel_t& other)
const noexcept;
116 explicit CursorIterator(Cursor& cursor);
118 impl::ParseState* parse_state_{
nullptr};
177class ExecuteResponse
final {
180 explicit ExecuteResponse(NYdb::NQuery::TExecuteQueryResult&& query_result);
183 ExecuteResponse(
const ExecuteResponse&) =
delete;
184 ExecuteResponse(ExecuteResponse&&)
noexcept =
default;
185 ExecuteResponse& operator=(
const ExecuteResponse&) =
delete;
186 ExecuteResponse& operator=(ExecuteResponse&&) =
delete;
188 std::size_t GetCursorCount()
const;
189 Cursor GetCursor(std::size_t index)
const;
190 Cursor GetSingleCursor()
const;
193 const std::optional<NYdb::NTable::TQueryStats>&
200 void EnsureResultSetsNotEmpty()
const;
202 std::optional<NYdb::NTable::TQueryStats> query_stats_;
203 std::vector<NYdb::TResultSet> result_sets_;
206class ReadTableResults
final {
209 explicit ReadTableResults(NYdb::NTable::TTablePartIterator iterator);
212 std::optional<Cursor> GetNextResult();
214 ReadTableResults(
const ReadTableResults&) =
delete;
215 ReadTableResults(ReadTableResults&&)
noexcept =
default;
216 ReadTableResults& operator=(
const ReadTableResults&) =
delete;
217 ReadTableResults& operator=(ReadTableResults&&) =
delete;
220 NYdb::NTable::TTablePartIterator iterator_;
223class ScanQueryResults
final {
224 using TScanQueryPartIterator = NYdb::NTable::TScanQueryPartIterator;
227 using TScanQueryPart = NYdb::NTable::TScanQueryPart;
230 explicit ScanQueryResults(TScanQueryPartIterator iterator);
233 std::optional<TScanQueryPart> GetNextResult();
235 std::optional<Cursor> GetNextCursor();
237 ScanQueryResults(
const ScanQueryResults&) =
delete;
238 ScanQueryResults(ScanQueryResults&&)
noexcept =
default;
239 ScanQueryResults& operator=(
const ScanQueryResults&) =
delete;
240 ScanQueryResults& operator=(ScanQueryResults&&) =
delete;
243 TScanQueryPartIterator iterator_;
248 if (&
typeid(T) != parse_state_.row_type_id) {
249 parse_state_.cpp_to_ydb_field_mapping = impl::StructRowParser<T>::MakeCppToYdbFieldMapping(parse_state_.parser);
250 parse_state_.row_type_id = &
typeid(T);
252 return impl::StructRowParser<T>::ParseRow(parse_state_.parser, parse_state_.cpp_to_ydb_field_mapping);
256T Row::
Get(std::string_view column_name) {
258 ConsumedColumnsCheck(parse_state_.parser.ColumnIndex(impl::ToString(column_name)));
260 auto& column = GetColumn(column_name);
261 return Parse<T>(column, ParseContext{.column_name = column_name});
265T Row::
Get(std::size_t column_index) {
267 ConsumedColumnsCheck(column_index);
269 auto& column = GetColumn(column_index);
270 const auto column_name = std::to_string(column_index);
271 return Parse<T>(column, ParseContext{.column_name = column_name});