Skip to content

Commit

Permalink
changed the StreamQuery example after the review
Browse files Browse the repository at this point in the history
  • Loading branch information
stanislav-shchetinin committed Sep 24, 2024
1 parent 6a6793c commit b026222
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 78 deletions.
55 changes: 29 additions & 26 deletions ydb/docs/en/core/dev/example-app/_includes/example-cpp.md
Original file line number Diff line number Diff line change
Expand Up @@ -191,9 +191,9 @@ Do not use the `StreamExecuteQuery` method without wrapping the call with `Retry

```c++
void StreamQuerySelect(TQueryClient client) {
std::vector <TResultSet> resultSets;
ThrowOnError(client.RetryQuerySync([&resultSets](TQueryClient client) -> TStatus {
resultSets.clear();
Cout << "> StreamQuery:" << Endl;

ThrowOnError(client.RetryQuerySync([](TQueryClient client) -> TStatus {
auto query = Sprintf(R"(
DECLARE $series AS List<UInt64>;

Expand All @@ -203,13 +203,19 @@ void StreamQuerySelect(TQueryClient client) {
ORDER BY season_id;
)");

auto parameters = TParamsBuilder()
.AddParam("$series")
.BeginList()
.AddListItem().Uint64(1)
.AddListItem().Uint64(10)
.EndList().Build()
.Build();
auto paramsBuilder = TParamsBuilder();
auto& listParams = paramsBuilder
.AddParam("$series")
.BeginList();
for (auto x : {1, 10}) {
listParams.AddListItem().Uint64(x);
}
auto parameters = listParams
.EndList()
.Build()
.Build();

// Executes stream query
auto resultStreamQuery = client.StreamExecuteQuery(query, TTxControl::NoTx(), parameters).GetValueSync();
Expand All @@ -232,30 +238,27 @@ void StreamQuerySelect(TQueryClient client) {
continue;
}

// It is possible to duplicate lines in the output stream due to an external retryer.
if (streamPart.HasResultSet()) {
auto rs = streamPart.ExtractResultSet();
resultSets.push_back(rs);
TResultSetParser parser(rs);
while (parser.TryNextRow()) {
Cout << "Season"
<< ", SeriesId: " << parser.ColumnParser("series_id").GetOptionalUint64()
<< ", SeasonId: " << parser.ColumnParser("season_id").GetOptionalUint64()
<< ", Title: " << parser.ColumnParser("title").GetOptionalUtf8()
<< ", Air date: " << parser.ColumnParser("first_aired").GetOptionalString()
<< Endl;
}
}
}
return TStatus(EStatus::SUCCESS, NYql::TIssues());
})); // The end of the retried lambda

Cout << "> StreamQuery:" << Endl;
for (auto rs : resultSets) {
TResultSetParser parser(rs);
while (parser.TryNextRow()) {
Cout << "Season"
<< ", SeriesId: " << parser.ColumnParser("series_id").GetOptionalUint64()
<< ", SeasonId: " << parser.ColumnParser("season_id").GetOptionalUint64()
<< ", Title: " << parser.ColumnParser("title").GetOptionalUtf8()
<< ", Air date: " << parser.ColumnParser("first_aired").GetOptionalString()
<< Endl;
}
}
}));

}
```
The given code snippet prints the following text to the console at startup:
The given code snippet prints the following text to the console at startup (there may be duplicate lines in the output stream due to an external RetryQuerySync):
```text
> StreamQuery:
Expand Down
55 changes: 29 additions & 26 deletions ydb/docs/ru/core/dev/example-app/_includes/example-cpp.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,9 +190,9 @@ Season, title: Season 3, series title: Silicon Valley

```c++
void StreamQuerySelect(TQueryClient client) {
std::vector <TResultSet> resultSets;
ThrowOnError(client.RetryQuerySync([&resultSets](TQueryClient client) -> TStatus {
resultSets.clear();
Cout << "> StreamQuery:" << Endl;

ThrowOnError(client.RetryQuerySync([](TQueryClient client) -> TStatus {
auto query = Sprintf(R"(
DECLARE $series AS List<UInt64>;

Expand All @@ -202,13 +202,19 @@ void StreamQuerySelect(TQueryClient client) {
ORDER BY season_id;
)");

auto parameters = TParamsBuilder()
.AddParam("$series")
.BeginList()
.AddListItem().Uint64(1)
.AddListItem().Uint64(10)
.EndList().Build()
.Build();
auto paramsBuilder = TParamsBuilder();
auto& listParams = paramsBuilder
.AddParam("$series")
.BeginList();
for (auto x : {1, 10}) {
listParams.AddListItem().Uint64(x);
}
auto parameters = listParams
.EndList()
.Build()
.Build();

// Executes stream query
auto resultStreamQuery = client.StreamExecuteQuery(query, TTxControl::NoTx(), parameters).GetValueSync();
Expand All @@ -231,30 +237,27 @@ void StreamQuerySelect(TQueryClient client) {
continue;
}

// It is possible to duplicate lines in the output stream due to an external retryer.
if (streamPart.HasResultSet()) {
auto rs = streamPart.ExtractResultSet();
resultSets.push_back(rs);
TResultSetParser parser(rs);
while (parser.TryNextRow()) {
Cout << "Season"
<< ", SeriesId: " << parser.ColumnParser("series_id").GetOptionalUint64()
<< ", SeasonId: " << parser.ColumnParser("season_id").GetOptionalUint64()
<< ", Title: " << parser.ColumnParser("title").GetOptionalUtf8()
<< ", Air date: " << parser.ColumnParser("first_aired").GetOptionalString()
<< Endl;
}
}
}
return TStatus(EStatus::SUCCESS, NYql::TIssues());
})); // The end of the retried lambda

Cout << "> StreamQuery:" << Endl;
for (auto rs : resultSets) {
TResultSetParser parser(rs);
while (parser.TryNextRow()) {
Cout << "Season"
<< ", SeriesId: " << parser.ColumnParser("series_id").GetOptionalUint64()
<< ", SeasonId: " << parser.ColumnParser("season_id").GetOptionalUint64()
<< ", Title: " << parser.ColumnParser("title").GetOptionalUtf8()
<< ", Air date: " << parser.ColumnParser("first_aired").GetOptionalString()
<< Endl;
}
}
}));

}
```
Приведенный фрагмент кода при запуске выводит на консоль текст:
Приведенный фрагмент кода при запуске выводит на консоль текст (возможны дубликаты строк в потоке вывода из-за внешнего RetryQuerySync):
```text
> StreamQuery:
Expand Down
53 changes: 27 additions & 26 deletions ydb/public/sdk/cpp/examples/basic_example/basic_example.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -394,9 +394,9 @@ void ExplicitTcl(TQueryClient client) {
}

void StreamQuerySelect(TQueryClient client) {
std::vector <TResultSet> resultSets;
ThrowOnError(client.RetryQuerySync([&resultSets](TQueryClient client) -> TStatus {
resultSets.clear();
Cout << "> StreamQuery:" << Endl;

ThrowOnError(client.RetryQuerySync([](TQueryClient client) -> TStatus {
auto query = Sprintf(R"(
DECLARE $series AS List<UInt64>;
Expand All @@ -406,15 +406,19 @@ void StreamQuerySelect(TQueryClient client) {
ORDER BY season_id;
)");

auto parameters = TParamsBuilder()
.AddParam("$series")
.BeginList()
.AddListItem().Uint64(1)
.AddListItem().Uint64(10)
.EndList().Build()
.Build();

auto parameters = TParamsBuilder().Build();
auto paramsBuilder = TParamsBuilder();
auto& listParams = paramsBuilder
.AddParam("$series")
.BeginList();

for (auto x : {1, 10}) {
listParams.AddListItem().Uint64(x);
}

auto parameters = listParams
.EndList()
.Build()
.Build();

// Executes stream query
auto resultStreamQuery = client.StreamExecuteQuery(query, TTxControl::NoTx(), parameters).GetValueSync();
Expand All @@ -437,26 +441,23 @@ void StreamQuerySelect(TQueryClient client) {
continue;
}

// It is possible to duplicate lines in the output stream due to an external retryer.
if (streamPart.HasResultSet()) {
auto rs = streamPart.ExtractResultSet();
resultSets.push_back(rs);
TResultSetParser parser(rs);
while (parser.TryNextRow()) {
Cout << "Season"
<< ", SeriesId: " << parser.ColumnParser("series_id").GetOptionalUint64()
<< ", SeasonId: " << parser.ColumnParser("season_id").GetOptionalUint64()
<< ", Title: " << parser.ColumnParser("title").GetOptionalUtf8()
<< ", Air date: " << parser.ColumnParser("first_aired").GetOptionalString()
<< Endl;
}
}
}
return TStatus(EStatus::SUCCESS, NYql::TIssues());
}));

Cout << "> StreamQuery:" << Endl;
for (auto rs : resultSets) {
TResultSetParser parser(rs);
while (parser.TryNextRow()) {
Cout << "Season"
<< ", SeriesId: " << parser.ColumnParser("series_id").GetOptionalUint64()
<< ", SeasonId: " << parser.ColumnParser("season_id").GetOptionalUint64()
<< ", Title: " << parser.ColumnParser("title").GetOptionalUtf8()
<< ", Air date: " << parser.ColumnParser("first_aired").GetOptionalString()
<< Endl;
}
}

}


Expand Down

0 comments on commit b026222

Please sign in to comment.