49 explicit Row(impl::ParseState& parse_state);
52 Row(
const Row&) =
delete;
53 Row(Row&&)
noexcept =
default;
54 Row& operator=(
const Row&) =
delete;
55 Row& operator=(Row&&) =
delete;
70 T
Get(std::string_view column_name);
76 T
Get(std::size_t column_index);
79 NYdb::TValueParser& GetColumn(std::size_t index);
80 NYdb::TValueParser& GetColumn(std::string_view name);
82 void ConsumedColumnsCheck(std::size_t column_index);
84 impl::ParseState& parse_state_;
85 std::vector<
bool> consumed_columns_;
88class CursorIterator
final {
90 using difference_type = std::ptrdiff_t;
91 using value_type = Row;
92 using reference = Row;
93 using iterator_category = std::input_iterator_tag;
95 CursorIterator() =
default;
97 CursorIterator(
const CursorIterator&) =
delete;
98 CursorIterator(CursorIterator&&)
noexcept =
default;
99 CursorIterator& operator=(
const CursorIterator&) =
delete;
100 CursorIterator& operator=(CursorIterator&&) =
default;
102 Row operator*()
const;
104 CursorIterator& operator++();
106 void operator++(
int);
108 bool operator==(
const std::default_sentinel_t& other)
const noexcept;
113 explicit CursorIterator(Cursor& cursor);
115 impl::ParseState* parse_state_{
nullptr};
174class ExecuteResponse
final {
177 explicit ExecuteResponse(std::variant<NYdb::NQuery::TExecuteQueryResult, NYdb::NTable::TDataQueryResult>&&
181 ExecuteResponse(
const ExecuteResponse&) =
delete;
182 ExecuteResponse(ExecuteResponse&&)
noexcept =
default;
183 ExecuteResponse& operator=(
const ExecuteResponse&) =
delete;
184 ExecuteResponse& operator=(ExecuteResponse&&) =
delete;
186 std::size_t GetCursorCount()
const;
187 Cursor GetCursor(std::size_t index)
const;
188 Cursor GetSingleCursor()
const;
191 const std::optional<NYdb::NTable::TQueryStats>&
198 void EnsureResultSetsNotEmpty()
const;
200 std::optional<NYdb::NTable::TQueryStats> query_stats_;
201 std::vector<NYdb::TResultSet> result_sets_;
204class ReadTableResults
final {
207 explicit ReadTableResults(NYdb::NTable::TTablePartIterator iterator);
210 std::optional<Cursor> GetNextResult();
212 ReadTableResults(
const ReadTableResults&) =
delete;
213 ReadTableResults(ReadTableResults&&)
noexcept =
default;
214 ReadTableResults& operator=(
const ReadTableResults&) =
delete;
215 ReadTableResults& operator=(ReadTableResults&&) =
delete;
218 NYdb::NTable::TTablePartIterator iterator_;
221class ScanQueryResults
final {
222 using TScanQueryPartIterator = NYdb::NTable::TScanQueryPartIterator;
225 using TScanQueryPart = NYdb::NTable::TScanQueryPart;
228 explicit ScanQueryResults(TScanQueryPartIterator iterator);
231 std::optional<TScanQueryPart> GetNextResult();
233 std::optional<Cursor> GetNextCursor();
235 ScanQueryResults(
const ScanQueryResults&) =
delete;
236 ScanQueryResults(ScanQueryResults&&)
noexcept =
default;
237 ScanQueryResults& operator=(
const ScanQueryResults&) =
delete;
238 ScanQueryResults& operator=(ScanQueryResults&&) =
delete;
241 TScanQueryPartIterator iterator_;
246 if (&
typeid(T) != parse_state_.row_type_id) {
247 parse_state_.cpp_to_ydb_field_mapping = impl::StructRowParser<T>::MakeCppToYdbFieldMapping(parse_state_.parser);
248 parse_state_.row_type_id = &
typeid(T);
250 return impl::StructRowParser<T>::ParseRow(parse_state_.parser, parse_state_.cpp_to_ydb_field_mapping);
254T Row::
Get(std::string_view column_name) {
256 ConsumedColumnsCheck(parse_state_.parser.ColumnIndex(impl::ToString(column_name)));
258 auto& column = GetColumn(column_name);
259 return Parse<T>(column, ParseContext{column_name});
263T Row::
Get(std::size_t column_index) {
265 ConsumedColumnsCheck(column_index);
267 auto& column = GetColumn(column_index);
268 const auto column_name = std::to_string(column_index);
269 return Parse<T>(column, ParseContext{column_name});