Skip to content

Commit 4bc2850

Browse files
committed
added internal/xiter package as proxy package for use experimental rangefunc's
1 parent 78117d0 commit 4bc2850

File tree

12 files changed

+914
-804
lines changed

12 files changed

+914
-804
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
* Added experimental range functions to the `query.Result` and `query.ResultSet` types, available starting with Go version 1.22. These features can be enabled by setting the environment variable `GOEXPERIMENT=rangefunc`.
1+
* Added experimental range functions to the `query.Result` and `query.ResultSet` types, available as for-range loops starting with Go version 1.22. These features can be enabled by setting the environment variable `GOEXPERIMENT=rangefunc`.
22
* Added public types for `tx.Option`, `options.DoOption` and `options.DoTxOption`
33

44
## v3.73.1

internal/query/range.go

Lines changed: 0 additions & 16 deletions
This file was deleted.

internal/query/range_experiment.go

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,18 @@
1-
//go:build go1.22 && goexperiment.rangefunc
2-
31
package query
42

53
import (
64
"context"
75
"io"
8-
"iter"
96

107
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xerrors"
8+
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xiter"
119
"github.com/ydb-platform/ydb-go-sdk/v3/query"
1210
)
1311

14-
type (
15-
resultRange struct {
16-
r query.Result
17-
}
18-
resultSetRange struct {
19-
rs query.ResultSet
20-
}
21-
)
22-
23-
func (r *resultRange) Range(ctx context.Context) iter.Seq2[query.ResultSet, error] {
12+
func rangeResultSets(ctx context.Context, r query.Result) xiter.Seq2[query.ResultSet, error] {
2413
return func(yield func(query.ResultSet, error) bool) {
2514
for {
26-
rs, err := r.r.NextResultSet(ctx)
15+
rs, err := r.NextResultSet(ctx)
2716
if err != nil {
2817
if xerrors.Is(err, io.EOF) {
2918
return
@@ -37,10 +26,10 @@ func (r *resultRange) Range(ctx context.Context) iter.Seq2[query.ResultSet, erro
3726
}
3827
}
3928

40-
func (r *resultSetRange) Range(ctx context.Context) iter.Seq2[query.Row, error] {
29+
func rangeRows(ctx context.Context, rs query.ResultSet) xiter.Seq2[query.Row, error] {
4130
return func(yield func(query.Row, error) bool) {
4231
for {
43-
rs, err := r.rs.NextRow(ctx)
32+
rs, err := rs.NextRow(ctx)
4433
if err != nil {
4534
if xerrors.Is(err, io.EOF) {
4635
return

internal/query/result.go

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/ydb-platform/ydb-go-sdk/v3/internal/stack"
1212
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xcontext"
1313
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xerrors"
14+
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xiter"
1415
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xsync"
1516
"github.com/ydb-platform/ydb-go-sdk/v3/query"
1617
"github.com/ydb-platform/ydb-go-sdk/v3/trace"
@@ -23,14 +24,10 @@ var (
2324

2425
type (
2526
materializedResult struct {
26-
resultRange
27-
2827
resultSets []query.ResultSet
2928
idx int
3029
}
3130
result struct {
32-
resultRange
33-
3431
stream Ydb_Query_V1.QueryService_ExecuteQueryClient
3532
closeOnce func(ctx context.Context) error
3633
lastPart *Ydb_Query.ExecuteQueryResponsePart
@@ -41,6 +38,14 @@ type (
4138
}
4239
)
4340

41+
func (r *materializedResult) Range(ctx context.Context) xiter.Seq2[query.ResultSet, error] {
42+
return rangeResultSets(ctx, r)
43+
}
44+
45+
func (r *result) Range(ctx context.Context) xiter.Seq2[query.ResultSet, error] {
46+
return rangeResultSets(ctx, r)
47+
}
48+
4449
func (r *materializedResult) Close(ctx context.Context) error {
4550
return nil
4651
}
@@ -62,12 +67,9 @@ func (r *materializedResult) Err() error {
6267
}
6368

6469
func newMaterializedResult(resultSets []query.ResultSet) *materializedResult {
65-
r := &materializedResult{
70+
return &materializedResult{
6671
resultSets: resultSets,
6772
}
68-
r.resultRange = resultRange{r: r}
69-
70-
return r
7173
}
7274

7375
func newResult(
@@ -109,17 +111,14 @@ func newResult(
109111
})
110112
)
111113

112-
r := &result{
114+
return &result{
113115
stream: stream,
114116
resultSetIndex: -1,
115117
lastPart: part,
116118
closed: closed,
117119
closeOnce: closeOnce,
118120
trace: t,
119-
}
120-
r.resultRange = resultRange{r: r}
121-
122-
return r, part.GetTxMeta().GetId(), nil
121+
}, part.GetTxMeta().GetId(), nil
123122
}
124123
}
125124

internal/query/result_set.go

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/ydb-platform/ydb-go-sdk/v3/internal/stack"
1212
"github.com/ydb-platform/ydb-go-sdk/v3/internal/types"
1313
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xerrors"
14+
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xiter"
1415
"github.com/ydb-platform/ydb-go-sdk/v3/query"
1516
"github.com/ydb-platform/ydb-go-sdk/v3/trace"
1617
)
@@ -22,16 +23,12 @@ var (
2223

2324
type (
2425
materializedResultSet struct {
25-
resultSetRange
26-
2726
columnNames []string
2827
columnTypes []types.Type
2928
rows []query.Row
3029
idx int
3130
}
3231
resultSet struct {
33-
resultSetRange
34-
3532
index int64
3633
recv func() (*Ydb_Query.ExecuteQueryResponsePart, error)
3734
columns []*Ydb.Column
@@ -42,6 +39,14 @@ type (
4239
}
4340
)
4441

42+
func (rs *materializedResultSet) Range(ctx context.Context) xiter.Seq2[query.Row, error] {
43+
return rangeRows(ctx, rs)
44+
}
45+
46+
func (rs *resultSet) Range(ctx context.Context) xiter.Seq2[query.Row, error] {
47+
return rangeRows(ctx, rs)
48+
}
49+
4550
func (rs *materializedResultSet) Columns() (columnNames []string) {
4651
return rs.columnNames
4752
}
@@ -85,14 +90,11 @@ func NewMaterializedResultSet(
8590
columnTypes []types.Type,
8691
rows []query.Row,
8792
) *materializedResultSet {
88-
rs := &materializedResultSet{
93+
return &materializedResultSet{
8994
columnNames: columnNames,
9095
columnTypes: columnTypes,
9196
rows: rows,
9297
}
93-
rs.resultSetRange = resultSetRange{rs: rs}
94-
95-
return rs
9698
}
9799

98100
func newResultSet(
@@ -104,7 +106,7 @@ func newResultSet(
104106
t = &trace.Query{}
105107
}
106108

107-
rs := &resultSet{
109+
return &resultSet{
108110
index: part.GetResultSetIndex(),
109111
recv: recv,
110112
currentPart: part,
@@ -113,9 +115,6 @@ func newResultSet(
113115
trace: t,
114116
done: make(chan struct{}),
115117
}
116-
rs.resultSetRange = resultSetRange{rs: rs}
117-
118-
return rs
119118
}
120119

121120
func (rs *resultSet) nextRow(ctx context.Context) (*row, error) {

0 commit comments

Comments
 (0)