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(std::variant<NYdb::NQuery::TExecuteQueryResult, NYdb::NTable::TDataQueryResult>&&
184 ExecuteResponse(
const ExecuteResponse&) =
delete;
185 ExecuteResponse(ExecuteResponse&&)
noexcept =
default;
186 ExecuteResponse& operator=(
const ExecuteResponse&) =
delete;
187 ExecuteResponse& operator=(ExecuteResponse&&) =
delete;
189 std::size_t GetCursorCount()
const;
190 Cursor GetCursor(std::size_t index)
const;
191 Cursor GetSingleCursor()
const;
194 const std::optional<NYdb::NTable::TQueryStats>&
201 void EnsureResultSetsNotEmpty()
const;
203 std::optional<NYdb::NTable::TQueryStats> query_stats_;
204 std::vector<NYdb::TResultSet> result_sets_;
207class ReadTableResults
final {
210 explicit ReadTableResults(NYdb::NTable::TTablePartIterator iterator);
213 std::optional<Cursor> GetNextResult();
215 ReadTableResults(
const ReadTableResults&) =
delete;
216 ReadTableResults(ReadTableResults&&)
noexcept =
default;
217 ReadTableResults& operator=(
const ReadTableResults&) =
delete;
218 ReadTableResults& operator=(ReadTableResults&&) =
delete;
221 NYdb::NTable::TTablePartIterator iterator_;
224class ScanQueryResults
final {
225 using TScanQueryPartIterator = NYdb::NTable::TScanQueryPartIterator;
228 using TScanQueryPart = NYdb::NTable::TScanQueryPart;
231 explicit ScanQueryResults(TScanQueryPartIterator iterator);
234 std::optional<TScanQueryPart> GetNextResult();
236 std::optional<Cursor> GetNextCursor();
238 ScanQueryResults(
const ScanQueryResults&) =
delete;
239 ScanQueryResults(ScanQueryResults&&)
noexcept =
default;
240 ScanQueryResults& operator=(
const ScanQueryResults&) =
delete;
241 ScanQueryResults& operator=(ScanQueryResults&&) =
delete;
244 TScanQueryPartIterator iterator_;
249 if (&
typeid(T) != parse_state_.row_type_id) {
250 parse_state_.cpp_to_ydb_field_mapping = impl::StructRowParser<T>::MakeCppToYdbFieldMapping(parse_state_.parser);
251 parse_state_.row_type_id = &
typeid(T);
253 return impl::StructRowParser<T>::ParseRow(parse_state_.parser, parse_state_.cpp_to_ydb_field_mapping);
257T Row::
Get(std::string_view column_name) {
259 ConsumedColumnsCheck(parse_state_.parser.ColumnIndex(impl::ToString(column_name)));
261 auto& column = GetColumn(column_name);
262 return Parse<T>(column, ParseContext{.column_name = column_name});
266T Row::
Get(std::size_t column_index) {
268 ConsumedColumnsCheck(column_index);
270 auto& column = GetColumn(column_index);
271 const auto column_name = std::to_string(column_index);
272 return Parse<T>(column, ParseContext{.column_name = column_name});