@@ -130,40 +130,10 @@ func (r *result) nextResultSet(ctx context.Context) (_ *resultSet, err error) {
130130 case <- ctx .Done ():
131131 return nil , xerrors .WithStackTrace (ctx .Err ())
132132 default :
133- if resultSetIndex := r .lastPart .GetResultSetIndex (); resultSetIndex >= nextResultSetIndex { //nolint:nestif
133+ if resultSetIndex := r .lastPart .GetResultSetIndex (); resultSetIndex >= nextResultSetIndex {
134134 r .resultSetIndex = resultSetIndex
135135
136- return newResultSet (func () (_ * Ydb_Query.ExecuteQueryResponsePart , err error ) {
137- defer func () {
138- if err != nil && ! xerrors .Is (err ,
139- io .EOF , context .Canceled ,
140- ) {
141- r .errs = append (r .errs , err )
142- }
143- }()
144- select {
145- case <- r .closed :
146- return nil , errClosedResult
147- default :
148- part , err := nextPart (ctx , r .stream , r .trace )
149- if err != nil {
150- if xerrors .Is (err , io .EOF ) {
151- _ = r .closeOnce (ctx )
152- }
153-
154- return nil , xerrors .WithStackTrace (err )
155- }
156- r .lastPart = part
157- if part .GetResultSetIndex () > nextResultSetIndex {
158- return nil , xerrors .WithStackTrace (fmt .Errorf (
159- "result set (index=%d) receive part (index=%d) for next result set: %w" ,
160- nextResultSetIndex , part .GetResultSetIndex (), io .EOF ,
161- ))
162- }
163-
164- return part , nil
165- }
166- }, r .lastPart , r .trace ), nil
136+ return newResultSet (r .getNextResultSetPart (ctx , nextResultSetIndex ), r .lastPart , r .trace ), nil
167137 }
168138 part , err := nextPart (ctx , r .stream , r .trace )
169139 if err != nil {
@@ -181,6 +151,43 @@ func (r *result) nextResultSet(ctx context.Context) (_ *resultSet, err error) {
181151 }
182152}
183153
154+ func (r * result ) getNextResultSetPart (
155+ ctx context.Context ,
156+ nextResultSetIndex int64 ,
157+ ) func () (_ * Ydb_Query.ExecuteQueryResponsePart , err error ) {
158+ return func () (_ * Ydb_Query.ExecuteQueryResponsePart , err error ) {
159+ defer func () {
160+ if err != nil && ! xerrors .Is (err ,
161+ io .EOF , context .Canceled ,
162+ ) {
163+ r .errs = append (r .errs , err )
164+ }
165+ }()
166+ select {
167+ case <- r .closed :
168+ return nil , errClosedResult
169+ default :
170+ part , err := nextPart (ctx , r .stream , r .trace )
171+ if err != nil {
172+ if xerrors .Is (err , io .EOF ) {
173+ _ = r .closeOnce (ctx )
174+ }
175+
176+ return nil , xerrors .WithStackTrace (err )
177+ }
178+ r .lastPart = part
179+ if part .GetResultSetIndex () > nextResultSetIndex {
180+ return nil , xerrors .WithStackTrace (fmt .Errorf (
181+ "result set (index=%d) receive part (index=%d) for next result set: %w" ,
182+ nextResultSetIndex , part .GetResultSetIndex (), io .EOF ,
183+ ))
184+ }
185+
186+ return part , nil
187+ }
188+ }
189+ }
190+
184191func (r * result ) NextResultSet (ctx context.Context ) (_ query.ResultSet , err error ) {
185192 onDone := trace .QueryOnResultNextResultSet (r .trace , & ctx ,
186193 stack .FunctionID ("github.com/ydb-platform/ydb-go-sdk/3/internal/query.(*result).NextResultSet" ),
0 commit comments