Skip to content

Commit e2f3f84

Browse files
committed
SQL_MIGRATION_v2_v3.md
1 parent e098c61 commit e2f3f84

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

SQL_MIGRATION_v2_v3.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,39 @@
44
55
> Note: the article is being updated.
66
7+
## `sql.Connector` initialization
8+
9+
Package `database/sql` provides two ways for making driver:
10+
- from connection string (see [sql.Open(driverName, connectionString)](https://pkg.go.dev/database/sql#Open))
11+
- from custom connector (see [sql.OpnDB(connector)](https://pkg.go.dev/database/sql#OpenDB))
12+
13+
Second way (making driver from connector) are different in `v2` and `v3`:
14+
- in `v2`:
15+
`ydbsql.Connector` returns single result (`sql.driver.Connector`) and init driver lazy on first request. This design causes rare errors.
16+
```go
17+
db := sql.OpenDB(ydbsql.Connector(
18+
ydbsql.WithDialer(dialer),
19+
ydbsql.WithEndpoint(params.endpoint),
20+
ydbsql.WithClient(&table.Client{
21+
Driver: driver,
22+
}),
23+
))
24+
defer db.Close()
25+
```
26+
- in `v3`:
27+
`ydb.Connector` creates `sql.driver.Connector` from native `YDB` driver, returns two results (`sql.driver..Connector` and error) and exclude some lazy driver initialization.
28+
```go
29+
nativeDriver, err := ydb.Open(context.TODO(), "grpcs://localhost:2135/local")
30+
if err != nil {
31+
// fallback on error
32+
}
33+
connector, err := ydb.Connector(nativeDriver)
34+
if err != nil {
35+
// fallback on error
36+
}
37+
db := sql.OpenDB(connector)
38+
```
39+
740
## Read-only isolation levels
841

942
In `ydb-go-sdk/v2/ydbsql` was allowed `sql.LevelReadCommitted` and `sql.LevelReadUncommitted` isolation levels for read-only interactive transactions. It implements with fake transaction with true `OnlineReadOnly` transaction control on each query inside transaction.

0 commit comments

Comments
 (0)