Skip to content

Commit 779d45f

Browse files
removed Do example
1 parent 5efa985 commit 779d45f

File tree

1 file changed

+14
-58
lines changed

1 file changed

+14
-58
lines changed

dev-1/lesson-2.1/go/main.go

Lines changed: 14 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,23 @@ import (
66
"time"
77

88
"github.com/ydb-platform/ydb-go-sdk/v3"
9-
"github.com/ydb-platform/ydb-go-sdk/v3/query"
109
)
1110

1211
// author: Egor Danilov
1312
func main() {
14-
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
13+
connectionCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
1514
defer cancel()
1615

1716
// Строка подключения к локальной базе данных YDB
1817
// Формат: grpc[s]://<хост>:<порт>/<путь к базе данных>
1918
dsn := "grpc://localhost:2136/local"
2019

2120
// Создаем драйвер для подключения к YDB через gRPC
22-
db, err := ydb.Open(ctx, dsn)
21+
db, err := ydb.Open(connectionCtx, dsn)
2322
if err != nil {
2423
log.Fatal(err)
2524
}
26-
defer db.Close(ctx)
25+
defer db.Close(connectionCtx)
2726

2827
type myStruct struct {
2928
Id int32 `sql:"id"`
@@ -34,13 +33,13 @@ func main() {
3433
defer txCancel()
3534

3635
// Ниже представлены примеры по обращению к клиенту для выполнения YQL запросов
37-
//
36+
//
3837
// Query(), QueryResultSet() и QueryRow() являются хелперами для неинтерактивных транзакций
3938
// (т.е. когда транзакция завершается за одно обращение к серверу)
4039
// Ретраи тут происходят внутри, а наружу возвращается уже материализированный в памяти в результат,
4140
// Таймаутом транзакции можно управлять через контекст
4241

43-
result, err := db.Query().Query(queryCtx, "SELECT 1 as id");
42+
result, err := db.Query().Query(queryCtx, "SELECT 1 as id")
4443
if err != nil {
4544
log.Fatal(err)
4645
}
@@ -50,88 +49,45 @@ func main() {
5049
log.Fatal(err)
5150
}
5251

53-
row, err := rs.NextRow(ctx)
52+
row, err := rs.NextRow(connectionCtx)
5453
if err != nil {
5554
log.Fatal(err)
5655
}
5756

58-
// Материализуем результат
57+
// Читаем результат
5958
if err = row.ScanStruct(&structId); err != nil {
6059
log.Fatal(err)
6160
}
6261
println(structId.Id)
6362

6463
// ======
65-
rs, err = db.Query().QueryResultSet(queryCtx, "SELECT 2 as id");
64+
65+
rs, err = db.Query().QueryResultSet(queryCtx, "SELECT 2 as id")
6666
if err != nil {
6767
log.Fatal(err)
6868
}
69-
70-
row, err = rs.NextRow(ctx)
69+
70+
row, err = rs.NextRow(connectionCtx)
7171
if err != nil {
7272
log.Fatal(err)
7373
}
7474

75-
// Материализуем результат
75+
// Читаем результат
7676
if err = row.ScanStruct(&structId); err != nil {
7777
log.Fatal(err)
7878
}
7979
println(structId.Id)
8080

8181
// ======
8282

83-
row, err = db.Query().QueryRow(queryCtx, "SELECT 3 as id");
83+
row, err = db.Query().QueryRow(queryCtx, "SELECT 3 as id")
8484
if err != nil {
8585
log.Fatal(err)
8686
}
8787

88-
// Материализуем результат
88+
// Читаем результат
8989
if err = row.ScanStruct(&structId); err != nil {
9090
log.Fatal(err)
9191
}
9292
println(structId.Id)
93-
94-
// ======
95-
96-
// Ниже представлен пример общего случая выполнения YQL запросов через метод Do
97-
// По типу ошибки, которую вернет лямбда op Operation, драйвер поймет, надо ретраить запрос или нет
98-
// За счет этого можно более гранулярно управлять ходом выполнения запроса и материализацией данных
99-
err = db.Query().Do(
100-
queryCtx,
101-
func(ctx context.Context, s query.Session) error {
102-
res, err := s.Query(ctx, "SELECT 4 as id;")
103-
104-
if err != nil {
105-
return err
106-
}
107-
108-
defer func() { _ = res.Close(ctx) }()
109-
110-
// Итерируемся по набору результатов
111-
for rs, err := range res.ResultSets(ctx) {
112-
if err != nil {
113-
return err
114-
}
115-
116-
// Итерируемся по строкам в каждом наборе результате
117-
for row, err := range rs.Rows(ctx) {
118-
if err != nil {
119-
return err
120-
}
121-
122-
// Материализуем результат
123-
if err = row.ScanStruct(&structId); err != nil {
124-
return err
125-
}
126-
}
127-
}
128-
return nil
129-
},
130-
query.WithIdempotent(),
131-
)
132-
if err != nil {
133-
log.Fatal(err)
134-
}
135-
136-
println(structId.Id)
13793
}

0 commit comments

Comments
 (0)