@@ -31,19 +31,20 @@ go get -u github.com/ydb-platform/ydb-go-sdk/v3
3131## Example Usage <a name =" example " ></a >
3232
3333* connect to YDB
34- ``` golang
34+ ``` go
3535db , err := ydb.Open (ctx, " grpc://localhost:2136/local" )
3636if err != nil {
3737 log.Fatal (err)
3838}
3939```
40- * execute ` SELECT ` query
41- ``` golang
42- const query = ` SELECT 42 as id, "myStr" as myStr;`
43-
40+ * execute ` SELECT ` query over ` Table ` service client
41+ ``` go
4442// Do retry operation on errors with best effort
45- queryErr := db.Table ().Do (ctx, func (ctx context.Context , s table.Session ) (err error ) {
46- _ , res , err := s.Execute (ctx, table.DefaultTxControl (), query, nil )
43+ err := db.Table ().Do (ctx, func (ctx context.Context , s table.Session ) (err error ) {
44+ _ , res , err := s.Execute (ctx, table.DefaultTxControl (),
45+ ` SELECT 42 as id, "myStr" as myStr;` ,
46+ nil , // empty parameters
47+ )
4748 if err != nil {
4849 return err
4950 }
@@ -62,12 +63,61 @@ queryErr := db.Table().Do(ctx, func(ctx context.Context, s table.Session) (err e
6263 }
6364 return res.Err () // for driver retry if not nil
6465})
65- if queryErr != nil {
66- log.Fatal (queryErr)
66+ if err != nil {
67+ log.Fatal (err)
68+ }
69+ ```
70+ * execute ` SELECT ` query over ` Query ` service client
71+ ``` go
72+ // Do retry operation on errors with best effort
73+ err := db.Query ().Do ( // Do retry operation on errors with best effort
74+ ctx, // context manage exiting from Do
75+ func (ctx context .Context , s query .Session ) (err error ) { // retry operation
76+ _ , res , err := s.Execute (ctx, ` SELECT 42 as id, "myStr" as myStr;` ))
77+ if err != nil {
78+ return err // for auto-retry with driver
79+ }
80+ defer func () { _ = res.Close (ctx) }() // cleanup resources
81+ for { // iterate over result sets
82+ rs , err := res.NextResultSet (ctx)
83+ if err != nil {
84+ if errors.Is (err, io.EOF ) {
85+ break
86+ }
87+
88+ return err
89+ }
90+ for { // iterate over rows
91+ row , err := rs.NextRow (ctx)
92+ if err != nil {
93+ if errors.Is (err, io.EOF ) {
94+ break
95+ }
96+
97+ return err
98+ }
99+ type myStruct struct {
100+ id uint64 ` sql:"id"`
101+ str string ` sql:"myStr"`
102+ }
103+ var s myStruct
104+ if err = row.ScanStruct (&s); err != nil {
105+ return err // generally scan error not retryable, return it for driver check error
106+ }
107+ }
108+ }
109+
110+ return res.Err () // return finally result error for auto-retry with driver
111+ },
112+ query.WithIdempotent (),
113+ )
114+ if err != nil {
115+ log.Fatal (err)
67116}
68117```
118+
69119* usage with ` database/sql ` (see additional docs in [ SQL.md] ( SQL.md ) )
70- ``` golang
120+ ``` go
71121import (
72122 " context"
73123 " database/sql"
@@ -96,7 +146,7 @@ log.Printf("id = %d, myStr = \"%s\"", id, myStr)
96146```
97147
98148
99- More examples of usage placed in [ examples] ( https://github.com/ydb-platform/ydb-go- examples) repository .
149+ More examples of usage placed in [ examples] ( ./ examples) directory .
100150
101151## Credentials <a name =" credentials " ></a >
102152
0 commit comments