/
githubmirror
/
ydb-go-sql
Обзор
Документация
Войти
/
githubmirror
/
ydb-go-sql
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
internal/stream/stream.go
77 строк
1 KB
asmyasnikov
split unit and integration tests + upgrade TestFullWorkflow (add scan query use-case)
19 дек 2021, 15:30
19 дек 2021, 15:30
4b38da0
Код
Авторство
О чём код?
package stream import ( "context" "database/sql/driver" "io" "github.com/ydb-platform/ydb-go-sdk/v3/table/options" "github.com/ydb-platform/ydb-go-sdk/v3/table/result" "github.com/ydb-platform/ydb-go-sql/internal/x" ) // Rows is an aggregate interface which returns from stream.Result() type Rows interface { driver.Rows driver.RowsNextResultSet } type rows struct { res result.StreamResult ctx context.Context } func (r *rows) HasNextResultSet() bool { return r.res.HasNextResultSet() } func (r *rows) NextResultSet() error { if r.res.NextResultSet(r.ctx) { return nil } return io.EOF } // Result returns Rows interface based on result.StreamResult func Result( ctx context.Context, res result.StreamResult, ) Rows { return &rows{ res: res, ctx: ctx, } } func (r *rows) Columns() []string { var i int cs := make([]string, r.res.CurrentResultSet().ColumnCount()) r.res.CurrentResultSet().Columns(func(m options.Column) { cs[i] = m.Name i++ }) return cs } func (r *rows) Next(dst []driver.Value) (err error) { if !r.res.NextRow() { return io.EOF } values := make([]interface{}, len(dst)) for i := range dst { values[i] = x.V() } if err = r.res.Scan(values...); err != nil { return err } for i := range values { s := values[i].(x.Valuer) dst[i] = s.Value() } return r.res.Err() } func (r *rows) Close() error { return r.res.Close() }