@@ -3,6 +3,7 @@ package ydb_test
33import (
44 "context"
55 "database/sql"
6+ "errors"
67 "fmt"
78 "io"
89 "log"
@@ -14,13 +15,77 @@ import (
1415 "github.com/ydb-platform/ydb-go-sdk/v3"
1516 "github.com/ydb-platform/ydb-go-sdk/v3/balancers"
1617 "github.com/ydb-platform/ydb-go-sdk/v3/config"
18+ "github.com/ydb-platform/ydb-go-sdk/v3/query"
1719 "github.com/ydb-platform/ydb-go-sdk/v3/retry"
1820 "github.com/ydb-platform/ydb-go-sdk/v3/table"
1921 "github.com/ydb-platform/ydb-go-sdk/v3/table/result/named"
2022 "github.com/ydb-platform/ydb-go-sdk/v3/table/types"
2123 "github.com/ydb-platform/ydb-go-sdk/v3/topic/topicoptions"
2224)
2325
26+ //nolint:testableexamples, nonamedreturns
27+ func Example_query () {
28+ ctx := context .TODO ()
29+ db , err := ydb .Open (ctx , "grpc://localhost:2136/local" )
30+ if err != nil {
31+ log .Fatal (err )
32+ }
33+ defer db .Close (ctx ) // cleanup resources
34+
35+ err = db .Query ().Do ( // Do retry operation on errors with best effort
36+ ctx , // context manage exiting from Do
37+ func (ctx context.Context , s query.Session ) (err error ) { // retry operation
38+ _ , res , err := s .Execute (ctx ,
39+ `SELECT $id as myId, $str as myStr` ,
40+ query .WithParameters (
41+ ydb .ParamsBuilder ().
42+ Param ("$id" ).Uint64 (42 ).
43+ Param ("$str" ).Text ("my string" ).
44+ Build (),
45+ ),
46+ )
47+ if err != nil {
48+ return err // for auto-retry with driver
49+ }
50+ defer func () { _ = res .Close (ctx ) }() // cleanup resources
51+ for { // iterate over result sets
52+ rs , err := res .NextResultSet (ctx )
53+ if err != nil {
54+ if errors .Is (err , io .EOF ) {
55+ break
56+ }
57+
58+ return err
59+ }
60+ for { // iterate over rows
61+ row , err := rs .NextRow (ctx )
62+ if err != nil {
63+ if errors .Is (err , io .EOF ) {
64+ break
65+ }
66+
67+ return err
68+ }
69+ type myStruct struct {
70+ id uint64 `sql:"id"`
71+ str string `sql:"myStr"`
72+ }
73+ var s myStruct
74+ if err = row .ScanStruct (& s ); err != nil {
75+ return err // generally scan error not retryable, return it for driver check error
76+ }
77+ }
78+ }
79+
80+ return res .Err () // return finally result error for auto-retry with driver
81+ },
82+ query .WithIdempotent (),
83+ )
84+ if err != nil {
85+ log .Printf ("unexpected error: %v" , err )
86+ }
87+ }
88+
2489//nolint:testableexamples, nonamedreturns
2590func Example_table () {
2691 ctx := context .TODO ()
0 commit comments