Skip to content

Commit 229d834

Browse files
committed
README.md
1 parent 9200740 commit 229d834

File tree

1 file changed

+61
-11
lines changed

1 file changed

+61
-11
lines changed

README.md

Lines changed: 61 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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
3535
db, err := ydb.Open(ctx, "grpc://localhost:2136/local")
3636
if 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
71121
import (
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

Comments
 (0)